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

        Build fixes.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        (WebKit::NetscapePluginHostManager::didCreateWindow):
        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (NetscapePluginHostProxy):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::didEnterFullscreen):
        (WebKit::NetscapePluginHostProxy::didExitFullscreen):
        (WebKit::NetscapePluginHostProxy::applicationDidBecomeActive):
        (WebKit::NetscapePluginHostProxy::endModal):
        (WebKit):
        (WebKit::NetscapePluginHostProxy::makeCurrentProcessFrontProcess):
        (WebKit::NetscapePluginHostProxy::makePluginHostProcessFrontProcess):
        (WebKit::NetscapePluginHostProxy::isPluginHostProcessFrontProcess):

2012-10-01  Brady Eidson  <beidson@apple.com>

        Remove the Safari 2 -> Safari 3 icon database import code.
        https://bugs.webkit.org/show_bug.cgi?id=98113

        Reviewed by Maciej Stachowiak.

        Nuke the performImport() IconDatabaseClient method, as well as the supporting methods.

        * Misc/WebIconDatabase.mm:
        * Misc/WebIconDatabaseInternal.h:
        * Misc/WebIconDatabasePrivate.h:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebIconDatabaseClient.mm:
        * WebKit.exp:

2012-09-28  Anders Carlsson  <andersca@apple.com>

        Remove support for method overloading from bridge code
        https://bugs.webkit.org/show_bug.cgi?id=97959

        Reviewed by Dan Bernstein.

        Update for WebCore changes; MethodList has been replaced with a single Method* everywhere.

        * Plugins/Hosted/ProxyInstance.h:
        (ProxyInstance):
        * Plugins/Hosted/ProxyInstance.mm:
        (ProxyClass):
        (WebKit::ProxyClass::methodNamed):
        (WebKit::ProxyRuntimeMethod::create):
        (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):
        (WebKit::ProxyInstance::getMethod):
        (WebKit::ProxyInstance::invokeMethod):
        (WebKit::ProxyInstance::methodNamed):

2012-09-28  Anders Carlsson  <andersca@apple.com>

        Remove Java bridge
        https://bugs.webkit.org/show_bug.cgi?id=97954

        Reviewed by Sam Weinig.

        The Java bridge is not used by any port; Mac now has a NPAPI Java plug-in.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        Make sure that we try to load the NPAPI Java plug-in.

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

        Get rid of more unused WK1 plug-in code
        https://bugs.webkit.org/show_bug.cgi?id=97835

        Reviewed by Mark Rowe.

        * Plugins/WebBasePluginPackage.mm:
        Remove JavaCFMPluginFilename #define.

        (-[WebBasePluginPackage initWithPath:]):
        #ifndef __ppc__ is always true now.

        (-[WebBasePluginPackage isJavaPlugIn]):
        Remove JavaCFMPluginFilename.

        * Plugins/WebNetscapeDeprecatedFunctions.c: Removed.
        * Plugins/WebNetscapeDeprecatedFunctions.h: Removed.
        Remove functions that nobody calls anymore.

        * Plugins/WebNetscapePluginPackage.mm:
        Remove +initialize call, the earliest version of Shockwave we now support doesn't
        require us to have a valid CurApRefNum file anymore.

        (-[WebNetscapePluginPackage _tryLoad]):
        Remove more unused code.

        * Plugins/WebPluginDatabase.h:
        Remove CFM from a comment.

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

        Fix 32-bit build.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _initWithPath:]):
        Add back the architecture check that i accidentally.

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

        Remove support for CFM plug-ins in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=97822

        Reviewed by Mark Rowe.

        I'm pretty sure that CFM style plug-ins haven't been used for the last ten years or so,
        so it's safe to remove them (especially since they're PPC only).

        * Plugins/WebNetscapePluginPackage.h:
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage openResourceFile]):
        (-[WebNetscapePluginPackage closeResourceFile:]):
        (-[WebNetscapePluginPackage _initWithPath:]):
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebPluginDatabase.mm:
        (PluginPackageCandidates::PluginPackageCandidates):
        (PluginPackageCandidates::update):
        (PluginPackageCandidates::bestCandidate):
        (PluginPackageCandidates):

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

        Stop using kCFURLHFSPathStyle
        https://bugs.webkit.org/show_bug.cgi?id=97731
        <rdar://problem/12378980>

        Reviewed by Tim Horton.

        Stop passing Carbon style paths to the plug-in. Both WebKitPluginHost, WebKit2 and Firefox
        pass POSIX style paths which makes more sense.

        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::destroyStream):

2012-09-25  Dan Bernstein  <mitz@apple.com>

        WebKit/mac part of <rdar://problem/11455228> [mac] Stop using screen fonts
        https://bugs.webkit.org/show_bug.cgi?id=97620

        Reviewed by John Sullivan.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Changed the default value of the screenFontSubstitutionEnabled
        preference to NO.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):  Changed to enable screen font substitution also if
        the value of the NSFontDefaultScreenFontSubstitutionEnabled user defaults key is YES.

2012-09-21  Jeffrey Pfau  <jpfau@apple.com>

        Add WebKit1 SPI for storage blocking preference
        https://bugs.webkit.org/show_bug.cgi?id=97356

        Reviewed by Brady Eidson.

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

2012-09-24  Simon Fraser  <simon.fraser@apple.com>

        <rdar://problem/12351906> Have DumpRenderTree and WebKitTestRunner crash logs show which test crashed

        Reviewed by Mark Rowe.

        Use a new WebKitSytemInterface function to add data to crash logs about which 
        test was running when the crash happened.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Hook up the function pointer for [wk|WK]SetCrashReportApplicationSpecificInformation.

2012-09-25  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=95397
        Need to merge didFirstVisuallyNonEmptyLayout and 
        didNewFirstVisuallyNonEmptyLayout
        -and corresponding-
        <rdar://problem/10791680>

        Reviewed by Sam Weinig.

        The new API has two parts. First, the client has to opt into which 
        layout milestones they are interested in hearing about using 
        [WebView _layoutMilestones]. Then, WebKit will call 
        the WebFrameLoader delegate's didLayout(WebLayoutMilestones) 
        callback when the specified layout milestones have fired. 
        didLayout takes the WebLayoutMilestones bit mask, which will 
        indicate which milestones have fired since it is possible for two 
        to fire at the same time.

        Remove dispatchDidFirstLayout, 
        dispatchDidFirstVisuallyNonEmptyLayout, and 
        dispatchDidNewFirstVisuallyNonEmptyLayout. They are now replaced 
        by dispatchDidLayout(LayoutMilestones)
        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidLayout):

        Add new function to the delegate for didLayout.
        * WebView/WebDelegateImplementationCaching.h:
        (WebFrameLoadDelegateImplementationCache):

        We need a delegate template that takes an NSUInteger.
        * WebView/WebDelegateImplementationCaching.mm:
        (CallDelegate):
        (CallFrameLoadDelegate):

        Convert between WebCore and WebKit versions of the bit mask.
        * WebView/WebView.mm:
        (coreLayoutMilestones):
        (kitLayoutMilestones):

        Add new delegate, and set the appropriate layout milestones in 
        WebCore based on old delegates having implementations.
        (-[WebView _cacheFrameLoadDelegateImplementations]):

        Call into WebCore.
        (-[WebView _listenForLayoutMilestones:]):
        (-[WebView _layoutMilestones]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

2012-09-24  Benjamin Poulain  <bpoulain@apple.com>

        Fix Geolocation error reporting in the test support
        https://bugs.webkit.org/show_bug.cgi?id=97386

        Reviewed by Sam Weinig.

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

2012-09-24  Ryosuke Niwa  <rniwa@webkit.org>

        suspend/resumeWidgetHierarchyUpdates should be a RAII object
        https://bugs.webkit.org/show_bug.cgi?id=96706

        Reviewed by Simon Fraser.

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

2012-09-21  Chris Rogers  <crogers@google.com>

        Add Web Audio support for deprecated/legacy APIs
        https://bugs.webkit.org/show_bug.cgi?id=97050

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2012-09-19  Dan Bernstein  <mitz@apple.com>

        WebKit/mac part of adding a setting and API for disabling screen font substitution
        https://bugs.webkit.org/show_bug.cgi?id=97168

        Reviewed by Tim Horton.

        * WebView/WebPreferenceKeysPrivate.h: Defined WebKitScreenFontSubstitutionEnabledKey.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Added a default value of YES for the new preference key.
        (-[WebPreferences setScreenFontSubstitutionEnabled:]): Added this setter.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Added a call to Settings::setScreenFontSubstitutionEnabled
        to push the preference down to Settings.

2012-09-17  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12316935> [mac WebKit1]: -[WebView _setPaginationBehavesLikeColumns:] is a no-op
        https://bugs.webkit.org/show_bug.cgi?id=96971

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (-[WebView _setPaginationBehavesLikeColumns:]): Added a call to setPagination().

2012-09-14  Adam Barth  <abarth@webkit.org>

        Remove webkitPostMessage
        https://bugs.webkit.org/show_bug.cgi?id=96577

        Reviewed by Ojan Vafai.

        Add ENABLE_LEGACY_VENDOR_PREFIXES flag.

        * Configurations/FeatureDefines.xcconfig:

2012-09-14  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=96688
        Put position:fixed elements in their own layers and allow them to 
        create a stacking context
        -and corresponding-
        <rdar://problem/11467961>

        Reviewed by Simon Fraser.

        Enable these settings in WK1 too for consistency. 
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2012-09-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128552.
        http://trac.webkit.org/changeset/128552
        https://bugs.webkit.org/show_bug.cgi?id=96729

        Still breaks the test on chromium linux debug. It's quite
        annoying. (Requested by rniwa on #webkit).

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

2012-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        suspend/resumeWidgetHierarchyUpdates should be a RAII object
        https://bugs.webkit.org/show_bug.cgi?id=96706

        Reviewed by Simon Fraser.

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

2012-09-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r128531.
        http://trac.webkit.org/changeset/128531
        https://bugs.webkit.org/show_bug.cgi?id=96719

        plugins/document-open.html crash on Chromium-Linux (Requested
        by tkent1 on #webkit).

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

2012-09-13  Benjamin Poulain  <bpoulain@apple.com>

        Improve the SourceProvider hierarchy
        https://bugs.webkit.org/show_bug.cgi?id=95635

        Reviewed by Geoffrey Garen.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm: Fix a #include abuse.
        * WebView/WebScriptDebugger.mm:
        (toNSString): We can now use the (faster) implicit conversion
        from String to NSString.

2012-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        suspend/resumeWidgetHierarchyUpdates should be a RAII object
        https://bugs.webkit.org/show_bug.cgi?id=96706

        Reviewed by Simon Fraser.

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

2012-09-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r127876.
        http://trac.webkit.org/changeset/127876
        https://bugs.webkit.org/show_bug.cgi?id=96600

        mouse click doesn't work for spin button if spin button in
        iframe (Requested by yosin on #webkit).

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::actionDictionary):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView elementAtPoint:allowShadowContent:]):

2012-09-11  Geoffrey Garen  <ggaren@apple.com>

        Mac build fix: Commit a file I forgot.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame functionName]):

2012-09-11  Michael Saboff  <msaboff@apple.com>

        Build fixed for http://trac.webkit.org/changeset/128243

        Rubber stamped by Stephanie Lewis.

        Added missing include file needed by 96422.

        * icu/unicode/unorm2.h: Added.

2012-09-11  Michael Saboff  <msaboff@apple.com>

        Build fixed for http://trac.webkit.org/changeset/128243

        Rubber stamped by Stephanie Lewis.

        Added missing include file needed by 96422.

        * icu/unicode/ptypes.h: Added.

2012-09-11  Michael Saboff  <msaboff@apple.com>

        Update ICU header files to more recent version
        https://bugs.webkit.org/show_bug.cgi?id=96422

        Reviewed by Geoff Garen.

        Updated ICU header files to 4.6.1.  Modifications made as part of the merge are:
        platform.h - Changed ifndef / define / endif for U_HAVE_UINT8_T, U_HAVE_UINT16_T, U_HAVE_UINT32_T,
            U_HAVE_UINT64_T, U_IS_BIG_ENDIAN and U_ENABLE_TRACING to match the existing platform.h
        putil.h (line 132) - Changes defined(U_WINDOWS) to defined(WIN32) || defined(OS2) to match existing putil.h
        ustring.h (line 945) - Wrapped macro argument cs with { (const UChar *)cs } to match existing ustring.h
        utypes.h (line 545) - Changed defined(U_WINDOWS) to defined(WIN32) to match existing utypes.h

        * icu/unicode/localpointer.h: Added.
        * icu/unicode/parseerr.h:
        * icu/unicode/platform.h:
        * icu/unicode/putil.h:
        * icu/unicode/uchar.h:
        * icu/unicode/uconfig.h:
        * icu/unicode/uidna.h:
        * icu/unicode/uiter.h:
        * icu/unicode/umachine.h:
        * icu/unicode/unorm.h:
        * icu/unicode/urename.h:
        * icu/unicode/uscript.h:
        * icu/unicode/ustring.h:
        * icu/unicode/utf.h:
        * icu/unicode/utf16.h:
        * icu/unicode/utf8.h:
        * icu/unicode/utypes.h:
        * icu/unicode/uvernum.h: Added.
        * icu/unicode/uversion.h:

2012-09-11  Matt Lilek  <mrl@apple.com>

        OS X port should compile with newer versions of clang
        https://bugs.webkit.org/show_bug.cgi?id=96434

        m_isTerminated is unused in the Hosted flavor of NetscapePluginStream.

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/HostedNetscapePluginStream.h:
        (HostedNetscapePluginStream):
        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):

2012-09-10  Jer Noble  <jer.noble@apple.com>

        Unreviewed; rolling out r128081.
        http://trac.webkit.org/changeset/128081
        https://bugs.webkit.org/show_bug.cgi?id=96134

        New test http/tests/media/video-donottrack.html fails to run on Apple test bots.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebDelegateImplementationCaching.h:
        (WebFrameLoadDelegateImplementationCache):
        * WebView/WebDelegateImplementationCaching.mm:
        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]):

2012-09-07  Jon Lee  <jonlee@apple.com>

        Update notifications to latest spec
        https://bugs.webkit.org/show_bug.cgi?id=91726
        <rdar://problem/11910451>

        Reviewed by Alexey Proskuryakov.

        Expose lang and dir.

        * WebView/WebNotification.h:
        * WebView/WebNotification.mm:
        (-[WebNotification lang]):
        (-[WebNotification dir]):

2012-09-10  Jer Noble  <jer.noble@apple.com>

        NSInvalidArgumentException in WebFrameLoaderClient::shouldSendDoNotTrackHTTPHeader()
        https://bugs.webkit.org/show_bug.cgi?id=96320

        Reviewed by Geoffrey Garen.

        Client was being cached as the FrameLoaderClient, but requests were sent to the ResourceLoadClient.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::shouldSendDoNotTrackHTTPHeader): Send the request to the FrameLoadDelegate.
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm:
        (CallFrameLoadDelegateReturningBoolean): Added.

2012-09-07  Jer Noble  <jer.noble@apple.com>

        <audio> and <video> should send Do Not Track when appropriate
        https://bugs.webkit.org/show_bug.cgi?id=96134

        Reviewed by Eric Carlson.

        Add support for the shouldSendDoNotTrackHTTPHeader by passing the request
        on to the WebFrameLoadDelegate.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::shouldSendDoNotTrackHeader):
            Pass the question on to the WebFrameLoadDelegate.
        * WebView/WebDelegateImplementationCaching.h:
        (WebFrameLoadDelegateImplementationCache):
            Add an entry for the delegate's webViewShouldSendDoNotTrackHeader method.
        * WebView/WebDelegateImplementationCaching.mm:
        (CallResourceLoadDelegateReturningBoolean): Added a 0-parameter overloaded function.
        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]): initialize the 
            cached value for shouldSendDoNotTrackHeaderFunc.

2012-09-07  Benjamin Poulain  <bpoulain@apple.com>

        Rename the ustring() accessor to string()
        https://bugs.webkit.org/show_bug.cgi?id=95919

        Reviewed by Geoffrey Garen.

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

2012-09-07  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

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

        Reviewed by Antonio Gomes.

        Update calls to new API.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::actionDictionary):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView elementAtPoint:allowShadowContent:]):

2012-09-05  Sam Weinig  <sam@webkit.org>

        Part 2 of removing PlatformString.h, remove PlatformString.h
        https://bugs.webkit.org/show_bug.cgi?id=95931

        Reviewed by Adam Barth.

        Remove PlatformString.h

        * History/WebHistoryItem.mm:
        * Misc/WebStringTruncator.mm:
        * Plugins/Hosted/NetscapePluginHostManager.h:
        (NetscapePluginHostManager):
        * Plugins/WebPluginController.mm:
        * Storage/WebStorageTrackerClient.mm:
        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebEditorClient.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebCoreSupport/WebIconDatabaseClient.mm:
        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient):
        (WebInspectorFrontendClient):
        * WebView/WebRenderLayer.mm:
        * WebView/WebViewData.h:

2012-09-05  Benjamin Poulain  <bpoulain@apple.com>

        More fixes for String::operator+=() on Mac
        https://bugs.webkit.org/show_bug.cgi?id=95880

        Reviewed by Adam Barth.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]): Use StringBuilder to concatenate the class names
        efficiently.
        * WebView/WebView.mm:
        (+[WebView _decodeData:]): This is a legitimate use of String::append(), there
        is no other concatenation done on that string.

2012-09-01  Mark Lam  <mark.lam@apple.com>

        Added #include <JavaScriptCore/Identifier.h>.
        https://bugs.webkit.org/show_bug.cgi?id=95641.

        Reviewed by Dan Bernstein.

        The code references JSC::Indentifier but was previously depending on
        someone else to #include it. This results in build problems when
        building for the llint C loop configuration.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:

2012-08-31  Tony Chang  <tony@chromium.org>

        Remove ENABLE_CSS3_FLEXBOX compile time flag
        https://bugs.webkit.org/show_bug.cgi?id=95382

        Reviewed by Ojan Vafai.

        Everyone is already enabling this by default and the spec has stablized.

        * Configurations/FeatureDefines.xcconfig:

2012-08-31  Pratik Solanki  <psolanki@apple.com>

        objc_msgSend and IMP should be cast appropriately before using
        https://bugs.webkit.org/show_bug.cgi?id=95242

        Reviewed by Benjamin Poulain.

        Fix for older compilers. Pass id as the return type to the template
        instead of relying on default type.

        * WebView/WebDelegateImplementationCaching.mm:
        (CallDelegate):
        (CallFormDelegate):
        * WebView/WebHTMLView.mm:
        (setCursor):
        (setNeedsDisplayInRect):

2012-08-30  Geoffrey Garen  <ggaren@apple.com>

        Use one object instead of two for closures, eliminating ScopeChainNode
        https://bugs.webkit.org/show_bug.cgi?id=95501

        Reviewed by Filip Pizlo.

        Mechanical change to update for JSC interface change.

2012-08-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r127171.
        http://trac.webkit.org/changeset/127171
        https://bugs.webkit.org/show_bug.cgi?id=95505

        testRunner does not need dumpWebNotificationCallbacks().
        (Requested by jonlee on #webkit).

        * WebKit.exp:

2012-08-30  Pratik Solanki  <psolanki@apple.com>

        objc_msgSend and IMP should be cast appropriately before using
        https://bugs.webkit.org/show_bug.cgi?id=95242

        Reviewed by Benjamin Poulain.

        Use wtfObjcMsgSend and wtfCallIMP templates which do appropriate casts
        to a function pointer with right types when calling objc_msgSend and an
        IMP method directly.

        * WebCoreSupport/WebCachedFramePlatformData.h:
        (WebCachedFramePlatformData::clear):
        * WebCoreSupport/WebDeviceOrientationClient.mm:
        (WebDeviceOrientationClient::getProvider):
        * WebView/WebDelegateImplementationCaching.mm:
        (CallDelegate):
        (CallDelegateReturningBoolean):
        (CallResourceLoadDelegateReturningBoolean):
        (CallFormDelegate):
        (CallFormDelegateReturningBoolean):
        * WebView/WebHTMLView.mm:
        (setCursor):
        (setNeedsDisplayInRect):

2012-08-30  Benjamin Poulain  <bpoulain@apple.com>

        Replace JSC::UString by WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=95271

        Reviewed by Geoffrey Garen.

        Get rid of UString, replace it by String, and simplify the code when possible.

        On x86_64, this reduces the binary size by 7kb.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (identifierFromIdentifierRep):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::create):
        (WebKit::ProxyRuntimeMethod::finishCreation):
        (WebKit::ProxyInstance::getPropertyNames):
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame functionName]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebScriptDebugger.h:
        (WTF):
        (JSC):
        (WebScriptDebugger):
        * WebView/WebScriptDebugger.mm:
        (toNSURL):
        (WebScriptDebugger::sourceParsed):
        * WebView/WebView.mm:
        (aeDescFromJSValue):

2012-08-30  Jon Lee  <jonlee@apple.com>

        [Mac] Add testRunner.dumpWebNotificationCallbacks() to DRT
        https://bugs.webkit.org/show_bug.cgi?id=95232
        <rdar://problem/12190776>

        Reviewed by Alexey Proskuryakov.

        * WebKit.exp: Export WebNotification class.

2012-08-30  Jon Lee  <jonlee@apple.com>

        [Mac] Registering web views for notifications is unbalanced
        https://bugs.webkit.org/show_bug.cgi?id=95465
        <rdar://problem/12206765>

        Reviewed by Darin Adler.

        Setting the notification provider for a WK1 WebView registers that web view to the
        provider. When the WebView is closed, WebCore is essentially responsible for
        unregistering the web view. This leads to an imbalance on Lion since notifications are
        not supported, and the NotificationController responsible for making the unregistration
        call doesn't exist.

        Instead, the unregisterWebView method should be called when the web view is closed.

        * WebView/WebViewPrivate.h: Remove _notificationControllerDestroyed, since it is
        unneeded.

        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::notificationControllerDestroyed):
        * WebView/WebView.mm:
        (-[WebView _close]): Unregister the web view from the assigned provider here.
        (-[WebView _setNotificationProvider:]): Only allow setting the provider once, to avoid
        registering the web view to multiple providers.

2012-08-29  Jon Lee  <jonlee@apple.com>

        [Mac] Add iconURL to WebNotification
        https://bugs.webkit.org/show_bug.cgi?id=95249
        <rdar://problem/12192060>

        Reviewed by Jessie Berlin.

        * WebView/WebNotification.h: Expose iconURL.
        * WebView/WebNotification.mm: Remove unnecessary ASSERTs.
        (-[WebNotification title]):
        (-[WebNotification body]):
        (-[WebNotification tag]):
        (-[WebNotification iconURL]): Added.
        (-[WebNotification origin]):
        (-[WebNotification notificationID]):
        (-[WebNotification dispatchShowEvent]):
        (-[WebNotification dispatchCloseEvent]):
        (-[WebNotification dispatchClickEvent]):
        (-[WebNotification dispatchErrorEvent]):

2012-08-28  Geoffrey Garen  <ggaren@apple.com>

        Added JSScope::objectInScope(), and refactored callers to use it
        https://bugs.webkit.org/show_bug.cgi?id=95281

        Reviewed by Gavin Barraclough.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2012-08-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126914.
        http://trac.webkit.org/changeset/126914
        https://bugs.webkit.org/show_bug.cgi?id=95239

        it breaks everything and fixes nothing (Requested by pizlo on
        #webkit).

        * 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::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView stopTimers]):
        (-[WebNetscapePluginView startTimers]):
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::show):
        (WebNotificationClient::clearNotifications):
        (WebNotificationClient::notificationObjectDestroyed):
        * WebView/WebHTMLView.mm:
        (commandNameForSelector):

2012-08-28  Jon Lee  <jonlee@apple.com>

        Second build fix to r126909.

        Added needed #else clause.

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

2012-08-28  Jon Lee  <jonlee@apple.com>

        Build fix to r126909.

        Needed ENABLE(NOTIFICATIONS) guards.

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

2012-08-28  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::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView stopTimers]):
        (-[WebNetscapePluginView startTimers]):
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::show):
        (WebNotificationClient::clearNotifications):
        (WebNotificationClient::notificationObjectDestroyed):
        * WebView/WebHTMLView.mm:
        (commandNameForSelector):

2012-08-28  Jon Lee  <jonlee@apple.com>

        [Mac] Add SPI to WK1 to retrieve internal IDs for web notifications
        https://bugs.webkit.org/show_bug.cgi?id=95099
        <rdar://problem/12180186>

        Reviewed by Jessie Berlin.

        This is work toward providing Mac support for web notifications in DRT and WTR (77969).

        Add function to retrieve the internal ID for a notification. This is needed by layout tests to support simulating
        a user click on a notification.

        * WebCoreSupport/WebNotificationClient.h:
        (WebNotificationClient):
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::notificationIDForTesting): Converts the JS notification to a WebCore notification, and passes
        that to [WebView _notificationIDForTesting:].
        * WebView/WebView.mm:
        (-[WebView _notificationIDForTesting:]): Retrieves the notification ID based on the WebCore notification instance.
        * WebView/WebViewPrivate.h:

2012-08-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r126836.
        http://trac.webkit.org/changeset/126836
        https://bugs.webkit.org/show_bug.cgi?id=95163

        Broke all Apple ports, EFL, and Qt. (Requested by tkent on
        #webkit).

        * 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::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView stopTimers]):
        (-[WebNetscapePluginView startTimers]):
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::show):
        (WebNotificationClient::clearNotifications):
        (WebNotificationClient::notificationObjectDestroyed):
        * WebView/WebHTMLView.mm:
        (commandNameForSelector):

2012-08-27  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::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView stopTimers]):
        (-[WebNetscapePluginView startTimers]):
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::show):
        (WebNotificationClient::clearNotifications):
        (WebNotificationClient::notificationObjectDestroyed):
        * WebView/WebHTMLView.mm:
        (commandNameForSelector):

2012-08-27  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Rename RegisterProtocolHandler API to NavigatorContentUtils
        https://bugs.webkit.org/show_bug.cgi?id=94920

        Reviewed by Adam Barth.

        ENABLE_REGISTER_PROTOCOL_HANDLER is renamed to ENABLE_NAVIGATOR_CONTENT_UTILS.

        * Configurations/FeatureDefines.xcconfig:

2012-08-24  Pratik Solanki  <psolanki@apple.com>

        Don't create a new ResourceRequest if delegate returns the same NSURLRequest we passed it
        https://bugs.webkit.org/show_bug.cgi?id=94962

        Reviewed by Geoffrey Garen.

        If the NSURLRequest returned from the delegate callback is the same as the one we passed to
        it, then avoid creating a new ResourceRequest object. This reduces the number of calls to
        ResourceRequest::doUpdateResourceRequest().

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

2012-08-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Change behavior of MasqueradesAsUndefined to better accommodate DFG changes
        https://bugs.webkit.org/show_bug.cgi?id=93884

        Reviewed by Filip Pizlo.

        With some upcoming changes to the DFG to remove uses of ClassInfo, we will be changing the behavior of  
        MasqueradesAsUndefined. In order to make this change consistent across all of our execution engines,  
        we will make this change to MasqueradesAsUndefined as a separate patch. After this patch, MasqueradesAsUndefined  
        objects will only masquerade as undefined in their original context (i.e. their original JSGlobalObject).  
        For example, if an object that masquerades as undefined in frame A is passed to frame B, it will not  
        masquerade as undefined within frame B, but it will continue to masquerade in frame A. 

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray): Passing ExecState to toBoolean call.

2012-08-22  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=94401
        Add support for making a web site become paginated using overflow: 
        paged-x | paged-y
        -and corresponding-
        <rdar://problem/11831783> 

        Reviewed by Dave Hyatt.

        WebCore::Page::Pagination is now just WebCore::Pagination.
        * WebView/WebView.mm:
        (-[WebView _setPaginationMode:]):
        (-[WebView _paginationMode]):
        (-[WebView _setPaginationBehavesLikeColumns:]):
        (-[WebView _setPageLength:]):
        (-[WebView _setGapBetweenPages:]):

2012-08-15  Bruno de Oliveira Abinader  <bruno.abinader@basyskom.com>

        [css3-text] Add CSS3 Text decoration compile flag
        https://bugs.webkit.org/show_bug.cgi?id=93863

        Reviewed by Julien Chaffraix.

        This patch handles the compile flag implementation, which will come disabled by
        default, thus not exposing the CSS3 text decoration features to the web, unless
        when explicitly enabling it with "--css3-text-decoration" build parameter.

        * Configurations/FeatureDefines.xcconfig:

2012-08-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r125687.
        http://trac.webkit.org/changeset/125687
        https://bugs.webkit.org/show_bug.cgi?id=94147

        It broke the whole world (Requested by Ossy_night on #webkit).

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

2012-08-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Change behavior of MasqueradesAsUndefined to better accommodate DFG changes
        https://bugs.webkit.org/show_bug.cgi?id=93884

        Reviewed by Geoffrey Garen.

        With some upcoming changes to the DFG to remove uses of ClassInfo, we will be changing the behavior of 
        MasqueradesAsUndefined. In order to make this change consistent across all of our execution engines, 
        we will make this change to MasqueradesAsUndefined as a separate patch. After this patch, MasqueradesAsUndefined 
        objects will only masquerade as undefined in their original context (i.e. their original JSGlobalObject). 
        For example, if an object that masquerades as undefined in frame A is passed to frame B, it will not 
        masquerade as undefined within frame B, but it will continue to masquerade in frame A.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray): Passing ExecState to toBoolean call.

2012-08-14  Adam Barth  <abarth@webkit.org>

        Delete Frame::domWindow() and Frame::existingDOMWindow()
        https://bugs.webkit.org/show_bug.cgi?id=93990

        Reviewed by Eric Seidel.

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

2012-08-14  Tom Sepez  <tsepez@chromium.org>

        REGRESSION r125500: 7 tests crashing on Mac bots
        https://bugs.webkit.org/show_bug.cgi?id=93970

        Reviewed by Eric Seidel.

        Make WebFrameLoaderClient::redirectDataToPlugin expect the now real possibility
        of a NULL pluginWidget argument.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::redirectDataToPlugin)
        
2012-08-09  Kinuko Yasuda  <kinuko@chromium.org>

        http/tests/security/mixedContent/blob-url-in-iframe.html fails on Mac
        https://bugs.webkit.org/show_bug.cgi?id=88736

        Reviewed by Alexey Proskuryakov.

        WebView::_canHandleRequest should return true for "blob:" URL so that it can be shown in iframe.

        * WebView/WebView.mm:
        (+[WebView _canHandleRequest:forMainFrame:]):

2012-08-08  Shane Stephens  <shanestephens@google.com>

        Compile flag for CSS Hierarchies
        https://bugs.webkit.org/show_bug.cgi?id=92433

        Reviewed by Tony Chang.

        * Configurations/FeatureDefines.xcconfig:

2012-08-05  Peter Wang  <peter.wang@torchmobile.com.cn>

        Web Inspector: [JSC] implement setting breakpoints by line:column
        https://bugs.webkit.org/show_bug.cgi?id=53003

        Unreviewed, just changed the interface according the changes of base class JSC::Debugger.

        No JSC can provide the column info of current JS statement, mac porting can use it to support
        "Pretty Print" debug mode.

        * WebView/WebScriptDebugger.h:
        (WebScriptDebugger):
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::callEvent):
        (WebScriptDebugger::atStatement):
        (WebScriptDebugger::returnEvent):
        (WebScriptDebugger::exception):
        (WebScriptDebugger::willExecuteProgram):
        (WebScriptDebugger::didExecuteProgram):
        (WebScriptDebugger::didReachBreakpoint):

2012-08-01  Jian Li  <jianli@chromium.org>

        Add new CSS property "-webkit-widget-region" to expose dashboard region support for other port
        https://bugs.webkit.org/show_bug.cgi?id=90298

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_WIDGET_REGION define.

2012-08-01  Antti Koivisto  <antti@apple.com>

        Assertion failure in inspector/profiler/heap-snapshot-containment-show-all.html on Lion bot
        https://bugs.webkit.org/show_bug.cgi?id=92888

        Reviewed by Andreas Kling.

        Protect the WebInspectorWindowController so it doesn't get destroyed during [WebView close] and cause
        unsafe [WebView dealloc].

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

2012-07-29  Rik Cabanier  <cabanier@adobe.com>

        Add ENABLE_CSS_COMPOSITING flag
        https://bugs.webkit.org/show_bug.cgi?id=92553

        Reviewed by Dirk Schulze.

        Adds compiler flag CSS_COMPOSITING to build systems to enable CSS blending and compositing. See spec https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html

        * Configurations/FeatureDefines.xcconfig:

2012-07-27  Anders Carlsson  <andersca@apple.com>

        Show the unavailable plug-in indicator for Java applets as well
        https://bugs.webkit.org/show_bug.cgi?id=92521

        Reviewed by Sam Weinig.

        Check if the Java plug-in is blocked before trying to instantiate it.

        * WebCoreSupport/WebFrameLoaderClient.mm:

2012-07-25  Jer Noble  <jer.noble@apple.com>

        Add setting to enable and disable diagnostic logging.
        https://bugs.webkit.org/show_bug.cgi?id=92337

        Reviewed by Anders Carlsson.

        Add a WebKit WebPreferences API to set set the WebCore diagnosticLoggingEnabled setting.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Register the default value to false.
        (-[WebPreferences diagnosticLoggingEnabled]): Simple userDefaults accessor.
        (-[WebPreferences setDiagnosticLoggingEnabled:]): Ditto.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Ensure this preference is propagated to Settings
            whenever the preferences change.

2012-07-25  Pratik Solanki  <psolanki@apple.com>

        Remove catchesDelegateExceptions from WebViewData and related accessor methods
        https://bugs.webkit.org/show_bug.cgi?id=90898

        Reviewed by Darin Adler.

        Remove catchesDelegateException ivar from WebViewData and all its accesor methods from
        WebView. All uses of this flag in WebKit set it to YES and no one calls
        _setCatchesDelegateExceptions with NO.

        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::startDrag):
        * WebView/WebDelegateImplementationCaching.mm:
        (CallDelegate):
        (CallDelegateReturningFloat):
        (CallDelegateReturningBoolean):
        (CallResourceLoadDelegateReturningBoolean):
        (CallFormDelegate):
        (CallFormDelegateReturningBoolean):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _policyDelegateForwarder]):
        (-[WebView _UIDelegateForwarder]):
        (-[WebView _editingDelegateForwarder]):
        (-[_WebSafeForwarder initWithTarget:defaultTarget:]):
        (-[_WebSafeForwarder forwardInvocation:]):
        * WebView/WebViewData.h:
        * WebView/WebViewPrivate.h:

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

        Part 2 of: Implement sticky positioning
        https://bugs.webkit.org/show_bug.cgi?id=90046

        Reviewed by Ojan Vafai.

        Turn on ENABLE_CSS_STICKY_POSITION.

        * Configurations/FeatureDefines.xcconfig:

2012-07-23  Pierre Rossi  <pierre.rossi@gmail.com>

        Unify numTouchEventHandlersChanged and needTouchEvents in the chrome client
        https://bugs.webkit.org/show_bug.cgi?id=91006

        Reviewed by Ryosuke Niwa.

        Remove numTouchEventHandlersChanged stub.

        * WebCoreSupport/WebChromeClient.h:

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

        Part 1 of: Implement sticky positioning
        https://bugs.webkit.org/show_bug.cgi?id=90046

        Reviewed by Ojan Vafai.

        Add ENABLE_CSS_STICKY_POSITION, defaulting to off initially.
        
        Sort the ENABLE_CSS lines in the file. Make sure all the flags
        are in FEATURE_DEFINES.

        * Configurations/FeatureDefines.xcconfig:

2012-07-23  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_METER_TAG and ENABLE_PROGRESS_TAG to ENABLE_METER_ELEMENT and ENABLE_PROGRESS_ELEMENT respectively
        https://bugs.webkit.org/show_bug.cgi?id=91941

        Reviewed by Kentaro Hara.

        A flag name for an elmement should be ENABLE_*_ELEMENT.

        * Configurations/FeatureDefines.xcconfig:

2012-07-22  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_DETAILS to ENABLE_DETAILS_ELEMENT
        https://bugs.webkit.org/show_bug.cgi?id=91928

        Reviewed by Kentaro Hara.

        A flag name for an elmement should be ENABLE_*_ELEMENT.

        * Configurations/FeatureDefines.xcconfig:

2012-07-20  Kent Tamura  <tkent@chromium.org>

        Rename ENABLE_DATALIST to ENABLE_DATALIST_ELEMENT
        https://bugs.webkit.org/show_bug.cgi?id=91846

        Reviewed by Kentaro Hara.

        A flag name for an elmement should be ENABLE_*_ELEMENT.

        * Configurations/FeatureDefines.xcconfig:

2012-07-18  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Make WebDataSourcePrivate lighter
        https://bugs.webkit.org/show_bug.cgi?id=91511

        Reviewed by Anders Carlsson.

        Make WebDataSourcePrivate a simple C++ class and use smart pointers for memory management.

        Since the "loader" attribute is only set on initialization, all the assertions spread in
        various function are removed in favor of assertions on initialization.

        * WebView/WebDataSource.h:
        * WebView/WebDataSource.mm:
        (WebDataSourcePrivate):
        (WebDataSourcePrivate::WebDataSourcePrivate):
        (WebDataSourcePrivate::~WebDataSourcePrivate):
        Use a class instead of a Objective-C object for WebDataSourcePrivate.
        Use smart pointers instead of ref counting manually.

        (-[WebDataSource _setRepresentation:]):
        (-[WebDataSource _addSubframeArchives:]):
        (-[WebDataSource _transferApplicationCache:]):
        (-[WebDataSource _setDeferMainResourceDataLoad:]):
        (-[WebDataSource _documentFragmentWithArchive:]):
        (-[WebDataSource _initWithDocumentLoader:]):

        (+[WebDataSource initialize]):
        (-[WebDataSource dealloc]):
        (-[WebDataSource finalize]):
        WebDataSource takes the special initialization and destruction that was done in WebDataSourcePrivate.

        (-[WebDataSource representation]):

2012-07-17  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: refactor InspectorController::connectFrontend() to accept InspectorFrontendChannel.
        https://bugs.webkit.org/show_bug.cgi?id=91196

        Reviewed by Pavel Feldman.

        Refactoring InspectorClients. InspectorClient::openInspectorFrontend
        now returning the InspectorFrontendChannel.

        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient):
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend):

2012-07-17  David Barr  <davidbarr@chromium.org>

        Introduce ENABLE_CSS_IMAGE_ORIENTATION compile flag
        https://bugs.webkit.org/show_bug.cgi?id=89055

        Reviewed by Kent Tamura.

        The css3-images module is at candidate recommendation.
        http://www.w3.org/TR/2012/CR-css3-images-20120417/#the-image-orientation

        Add a configuration option for CSS image-orientation support, disabling it by default.

        * Configurations/FeatureDefines.xcconfig:

2012-07-15  Joseph Pecoraro  <pecoraro@apple.com>

        Fix case sensitive build issue.

        Unreviewed build fix.

        * WebView/WebPreferences.mm:

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

        Make WebPreferencesPrivate a simple struct
        https://bugs.webkit.org/show_bug.cgi?id=91330

        Reviewed by Filip Pizlo.

        To avoid taking time creating a new Objective-C object for WebPreferencesPrivate, we can just make
        it a simple struct.

        * WebView/WebPreferences.h:
        * WebView/WebPreferences.mm:
        (WebPreferencesPrivate):
        (WebPreferencesPrivate::WebPreferencesPrivate):
        Replace the Objective-C WebPreferencesPrivate by a struct.
        Remove IBCreatorID from the object as it is unused.
        Use RetainPtr for the Objective-C attribute to avoid tracking their memory manually.

        (-[WebPreferences initWithIdentifier:]):
        Change the order of the initialization to avoid allocating anyting if a WebPreferences exists
        for the identifier.
        Both [NSObject init] and WebPreferencesPrivate allocation are moved after the fast path.

        (-[WebPreferences initWithCoder:]):
        (-[WebPreferences encodeWithCoder:]):
        (-[WebPreferences dealloc]):
        (-[WebPreferences identifier]):
        (-[WebPreferences _valueForKey:]):
        (-[WebPreferences _setStringValue:forKey:]):
        (-[WebPreferences _setIntegerValue:forKey:]):
        (-[WebPreferences _setFloatValue:forKey:]):
        (-[WebPreferences _setBoolValue:forKey:]):
        (-[WebPreferences _setLongLongValue:forKey:]):
        (-[WebPreferences _setUnsignedLongLongValue:forKey:]):

2012-07-14  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Do not try to update the cache model for every WebPreferences change
        https://bugs.webkit.org/show_bug.cgi?id=91302

        Reviewed by Joseph Pecoraro.

        WebView was listening to any change on any WebPreferences in order to update the cache model. This is unneeded in most cases,
        we can just listen to updates of the CacheModel property.

        * WebView/WebPreferences.mm:
        (-[WebPreferences initWithIdentifier:]):
        (-[WebPreferences _postCacheModelChangedNotification]):
        (-[WebPreferences setCacheModel:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (+[WebView initialize]):
        (+[WebView _cacheModelChangedNotification:]):

2012-07-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122665.
        http://trac.webkit.org/changeset/122665
        https://bugs.webkit.org/show_bug.cgi?id=91321

        Broke Mac builds (Requested by rniwa on #webkit).

        * WebView/WebPreferences.mm:
        (-[WebPreferences initWithIdentifier:]):
        (-[WebPreferences setCacheModel:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (+[WebView initialize]):
        (+[WebView _preferencesChangedNotification:]):

2012-07-13  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Do not try to update the cache model for every WebPreferences change
        https://bugs.webkit.org/show_bug.cgi?id=91302

        Reviewed by Joseph Pecoraro.

        WebView was listening to any change on any WebPreferences in order to update the cache model. This is unneeded in most cases,
        we can just listen to updates of the CacheModel property.

        * WebView/WebPreferences.mm:
        (-[WebPreferences initWithIdentifier:]):
        (-[WebPreferences _postCacheModelChangedNotification]):
        (-[WebPreferences setCacheModel:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (+[WebView initialize]):
        (+[WebView _cacheModelChangedNotification:]):

2012-07-11  Mark Rowe  <mrowe@apple.com>

        Fix a logic error in the #if so that the correct code is compiled on Snow Leopard.

        I introduced this in r122403 when I inverted the sense of the #if.

        * WebView/WebFullScreenController.mm:

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91024> Build against the latest SDK when targeting older OS X versions.

        Reviewed by Dan Bernstein.

        The deployment target is already set to the version that we're targeting, and it's that setting
        which determines which functionality from the SDK is available to us.

        * Configurations/Base.xcconfig:

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91022> WebFullScreenController and WKFullScreenWindowController shouldn't add unprefixed methods to AppKit classes

        Reviewed by Dan Bernstein.

        * WebView/WebFullScreenController.mm:
        (convertRectToScreen): Add a static helper method that calls through to -[NSWindow convertRectToScreen:] on OS versions where it exists
        but otherwise provides a compatibility implementation of it.
        (-[WebFullScreenController enterFullScreen:]): Call our new helper.

2012-07-11  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/91015> Remove BUILDING_ON / TARGETING macros in favor of system availability macros

        This removal was handled by a script that translates the relevant macros in to the equivalent checks
        using the system availability macros.

        Reviewed by Filip Pizlo.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        * Misc/WebKitErrors.m:
        * Misc/WebNSControlExtras.m:
        * Misc/WebNSFileManagerExtras.mm:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebNetscapePluginView.mm:
        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebEditorClient.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebCoreSupport/WebSystemInterface.mm:
        * WebView/WebClipView.mm:
        * WebView/WebDynamicScrollBarsView.mm:
        * WebView/WebFrameView.mm:
        * WebView/WebFullScreenController.mm:
        * WebView/WebHTMLView.mm:
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebPDFDocumentExtras.mm:
        * WebView/WebPreferences.mm:
        * WebView/WebResourceInternal.h:
        * WebView/WebScriptDebugDelegate.h:
        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

2012-07-11  Anders Carlsson  <andersca@apple.com>

        Add -Wtautological-compare and -Wsign-compare warning flags
        https://bugs.webkit.org/show_bug.cgi?id=90994

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig:

2012-07-11  Mark Rowe  <mrowe@apple.com>

        Add a Mountain Lion version of libWebKitSystemInterface.a.

        Reviewed by John Sullivan.

        * Configurations/DebugRelease.xcconfig: Look for the library under its expected name.

2012-07-10  Adam Barth  <abarth@webkit.org>

        WebCore::Settings for Hixie76 WebSocket protocol doesn't do anything and should be removed
        https://bugs.webkit.org/show_bug.cgi?id=90910

        Reviewed by Eric Seidel.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setHixie76WebSocketProtocolEnabled:]):
        (-[WebPreferences isHixie76WebSocketProtocolEnabled]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2012-07-09  Matt Falkenhagen  <falken@chromium.org>

        Add ENABLE_DIALOG_ELEMENT and skeleton files
        https://bugs.webkit.org/show_bug.cgi?id=90521

        Reviewed by Kent Tamura.

        * Configurations/FeatureDefines.xcconfig:

2012-07-09  Yongjun Zhang  <yongjun_zhang@apple.com>

        Consider closing unused localStorage database after a timeout.
        https://bugs.webkit.org/show_bug.cgi?id=90713

        For a localStorage, if there is no active document referencing to it for certain amount of time (300 seconds),
        we can close the underlying sqlite database.

        Reviewed by Brady Eidson.

        * Storage/WebStorageManager.mm:
        (+[WebStorageManager setStorageDatabaseIdleInterval:]): add a new method for DumpRenderTree to set the timeout
            that we will wait before closing database.
        (initializeLocalStoragePath):
        * Storage/WebStorageManagerPrivate.h:

2012-07-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r122107.
        http://trac.webkit.org/changeset/122107
        https://bugs.webkit.org/show_bug.cgi?id=90794

        Build failure on Mac debug bots (Requested by falken_ on
        #webkit).

        * Configurations/FeatureDefines.xcconfig:

2012-07-09  Matt Falkenhagen  <falken@chromium.org>

        Add ENABLE_DIALOG_ELEMENT and skeleton files
        https://bugs.webkit.org/show_bug.cgi?id=90521

        Reviewed by Kent Tamura.

        * Configurations/FeatureDefines.xcconfig:

2012-07-04  John Mellor  <johnme@chromium.org>

        Text Autosizing: Add compile flag and runtime setting
        https://bugs.webkit.org/show_bug.cgi?id=87394

        This patch renames Font Boosting to Text Autosizing.

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:

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

        Do not do any logging initialization when logging is disabled
        https://bugs.webkit.org/show_bug.cgi?id=90228

        Reviewed by Simon Fraser.

        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase _scaleIcon:toSize:]):
        * Misc/WebKitLogging.h:
        * Misc/WebKitLogging.m:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _attributeStringFromDOMRange:]):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2012-07-01  Timothy Hatcher  <timothy@apple.com>

        Make the "Inspect Element" context menu item appear in nightly builds again.

        rdar://problem/11702613
        https://webkit.org/b/89323

        Reviewed by Dan Bernstein.

        * WebView/WebUIDelegatePrivate.h:
        Add missing enums that were added in ContextMenuItem.h but left out here.

2012-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121529.
        http://trac.webkit.org/changeset/121529
        https://bugs.webkit.org/show_bug.cgi?id=90260

        Failed to compile on Chromium WebKitMacBuilder (Requested by
        keishi on #webkit).

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        (-[WebDefaultUIDelegate menuItemWithTag:target:representedObject:]):
        * Misc/WebNSControlExtras.m:
        (-[NSControl sizeToFitAndAdjustWindowHeight]):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldEraseMarkersAfterChangeSelection):
        (WebEditorClient::getGuessesForWord):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebFrameLoaderClient::provisionalLoadStarted):
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]):
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController finishedEnterFullScreenAnimation:]):
        (-[WebFullScreenController exitFullScreen]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]):
        * WebView/WebView.mm:
        (+[WebView initialize]):
        (-[WebView _deviceScaleFactor]):

2012-06-29  Eric Seidel  <eric@webkit.org>

        Remove more BUILDING_ON_LEOPARD branches now that no port builds on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=90252

        Reviewed by Ryosuke Niwa.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        (-[WebDefaultUIDelegate menuItemWithTag:target:representedObject:]):
        * Misc/WebNSControlExtras.m:
        (-[NSControl sizeToFitAndAdjustWindowHeight]):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldEraseMarkersAfterChangeSelection):
        (WebEditorClient::getGuessesForWord):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebFrameLoaderClient::provisionalLoadStarted):
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]):
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController finishedEnterFullScreenAnimation:]):
        (-[WebFullScreenController exitFullScreen]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pasteWithPasteboard:allowPlainText:]):
        * WebView/WebView.mm:
        (+[WebView initialize]):
        (-[WebView _deviceScaleFactor]):

2012-06-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSLock should be per-JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=89123

        Reviewed by Geoffrey Garen.

        Changed all sites that used JSLock to instead use the new JSLockHolder
        and pass in the correct JS context that the code is about to interact with that 
        needs protection. Also added a couple JSLocks to places that didn't already 
        have it that needed it.

        * DOM/WebDOMOperations.mm:
        (JSC):
        * 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/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::getProperty):
        (WebKit::NetscapePluginInstanceProxy::setProperty):
        (WebKit::NetscapePluginInstanceProxy::removeProperty):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):
        (WebKit::NetscapePluginInstanceProxy::enumerate):
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * 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:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (+[WebView _reportException:inContext:]):
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):
        (-[WebView _computedStyleIncludingVisitedInfo:forElement:]):

2012-06-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r121058.
        http://trac.webkit.org/changeset/121058
        https://bugs.webkit.org/show_bug.cgi?id=89809

        Patch causes plugins tests to crash in GTK debug builds
        (Requested by zdobersek on #webkit).

        * DOM/WebDOMOperations.mm:
        (JSC):
        * 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/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::getProperty):
        (WebKit::NetscapePluginInstanceProxy::setProperty):
        (WebKit::NetscapePluginInstanceProxy::removeProperty):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):
        (WebKit::NetscapePluginInstanceProxy::enumerate):
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * 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:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (+[WebView _reportException:inContext:]):
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):
        (-[WebView _computedStyleIncludingVisitedInfo:forElement:]):

2012-06-22  Alexandru Chiculita  <achicu@adobe.com>

        [CSS Shaders] Re-enable the CSS Shaders compile time flag on Safari Mac
        https://bugs.webkit.org/show_bug.cgi?id=89781

        Reviewed by Dean Jackson.

        Added ENABLE_CSS_SHADERS flag as enabled by default on Safari for Mac.

        * Configurations/FeatureDefines.xcconfig:

2012-06-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSLock should be per-JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=89123

        Reviewed by Gavin Barraclough.

        Changed all sites that used JSLock to instead use the new JSLockHolder
        and pass in the correct JS context that the code is about to interact with that 
        needs protection.

        * DOM/WebDOMOperations.mm:
        (JSC):
        * 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/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::getProperty):
        (WebKit::NetscapePluginInstanceProxy::setProperty):
        (WebKit::NetscapePluginInstanceProxy::removeProperty):
        (WebKit::NetscapePluginInstanceProxy::hasMethod):
        (WebKit::NetscapePluginInstanceProxy::enumerate):
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * 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:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebView.mm:
        (+[WebView _reportException:inContext:]):
        (-[WebView aeDescByEvaluatingJavaScriptFromString:]):
        (-[WebView _computedStyleIncludingVisitedInfo:forElement:]):

2012-06-22  Amy Ousterhout  <aousterh@chromium.org>

        Renamed DeviceOrientation to DeviceOrientationData
        https://bugs.webkit.org/show_bug.cgi?id=88663

        Reviewed by Steve Block.

        Updated files to use the renamed DeviceOrientationData instead of DeviceOrientation.
        This change makes DeviceOrientationData consistent with DeviceMotionData.
        * WebCoreSupport/WebDeviceOrientationClient.h:
        (WebDeviceOrientationClient):
        * WebCoreSupport/WebDeviceOrientationClient.mm:
        (WebDeviceOrientationClient::lastOrientation):
        * WebView/WebDeviceOrientation.mm:
        * WebView/WebDeviceOrientationInternal.h:

2012-06-20  Garret Kelly  <gdk@chromium.org>

        Moving cookieEnabled/setCookieEnabled from Page to Settings.
        https://bugs.webkit.org/show_bug.cgi?id=89545

        Reviewed by Adam Barth.

        * WebView/WebView.mm:
        (-[WebView _cookieEnabled]):
        (-[WebView _setCookieEnabled:]):

2012-06-19  Dan Bernstein  <mitz@apple.com>

        WebKit/mac part of: Paginated display API doesn’t allow setting the page progression direction
        https://bugs.webkit.org/show_bug.cgi?id=89394

        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (-[WebView _setPaginationMode:]): Changed to map new WebPaginationMode values to new
        Pagination::Mode values.
        (-[WebView _paginationMode]): Similarly, in the opposite direction.
        * WebView/WebViewPrivate.h: Replaced WebPaginationMode values with ones that specify an
        axis and a direction along that axis.

2012-06-18  Andy Estes  <aestes@apple.com>

        [Mac] -[WebPDFView _menuItemsFromPDFKitForEvent:] leaks NSMenuItems
        https://bugs.webkit.org/show_bug.cgi?id=89434

        Reviewed by Darin Adler.

        * WebView/WebPDFView.mm:
        (-[WebPDFView _menuItemsFromPDFKitForEvent:]): Release copied
        NSMenuItems once they're stored in copiedItems.

2012-06-19  Mike West  <mkwst@chromium.org>

        Introduce ENABLE_CSP_NEXT configuration flag.
        https://bugs.webkit.org/show_bug.cgi?id=89300

        Reviewed by Adam Barth.

        The 1.0 draft of the Content Security Policy spec is just about to
        move to Last Call. We'll hide work on the upcoming 1.1 spec behind
        this ENABLE flag, disabled by default.

        Spec: https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html

        * Configurations/FeatureDefines.xcconfig:

2012-06-14  Jia Pu  <jpu@apple.com>

        Mark text with text alternative with blue underline.
        https://bugs.webkit.org/show_bug.cgi?id=83047

        Reviewed by Enrica Casucci.

        Changes in WebKit include implementation of new functions declared in AlternativeTextClient,
        and logic for calling Editor::insertDictatedText() instead of Editor::insertText() when there's
        alternatives attached to the input string.

        * WebCoreSupport/CorrectionPanel.mm:
        (correctionIndicatorType):
        (CorrectionPanel::handleAcceptedReplacement):
        * WebCoreSupport/WebAlternativeTextClient.h:
        (WebAlternativeTextClient):
        * WebCoreSupport/WebAlternativeTextClient.mm:
        (WebAlternativeTextClient::showCorrectionAlternative):
        (WebAlternativeTextClient::dismissAlternative):
        (WebAlternativeTextClient::dismissAlternativeSoon):
        (WebAlternativeTextClient::recordAutocorrectionResponse):
        (WebAlternativeTextClient::removeDictationAlternatives):
        (WebAlternativeTextClient::showDictationAlternativeUI):
        (WebAlternativeTextClient::dismissDictationAlternativeUI):
        (WebAlternativeTextClient::dictationAlternatives):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validAttributesForMarkedText]):
        (-[WebHTMLView insertText:]):
        * WebView/WebView.mm:
        (-[WebView handleAcceptedAlternativeText:]):
        (-[WebView _getWebCoreDictationAlternatives:fromTextAlternatives:]):
        (-[WebView _showDictationAlternativeUI:WebCore::forDictationContext:]):
        (-[WebView _dismissDictationAlternativeUI]):
        (-[WebView _removeDictationAlternatives:]):
        (-[WebView _dictationAlternatives:]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

2012-06-11  Alexis Menard  <alexis.menard@openbossa.org>

        [CSS3 Backgrounds and Borders] Protect box-decoration-break behind a feature flag.
        https://bugs.webkit.org/show_bug.cgi?id=88804

        Reviewed by Tony Chang.

        Protect box-decoration-break behind a feature flag enabled by default.

        * Configurations/FeatureDefines.xcconfig:

2012-06-11  Sam Weinig  <sam@webkit.org>

        Remove support for disconnected/excluded from search frames, they are not used by Safari anymore
        https://bugs.webkit.org/show_bug.cgi?id=88723

        Reviewed by Dan Bernstein.

        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:
        Remove -[WebFrame _setIsDisconnected:] and -[WebFrame _setExcludeFromTextSearch:]

2012-06-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r119955.
        http://trac.webkit.org/changeset/119955
        https://bugs.webkit.org/show_bug.cgi?id=88758

        Breaks Chromium compile - Chromium depends on removed API
        (Requested by dominicc on #webkit).

        * WebView/WebFrame.mm:
        (-[WebFrame _setIsDisconnected:]):
        (-[WebFrame _setExcludeFromTextSearch:]):
        * WebView/WebFramePrivate.h:

2012-06-10  Sam Weinig  <sam@webkit.org>

        Remove support for disconnected/excluded from search frames, they are not used by Safari anymore
        https://bugs.webkit.org/show_bug.cgi?id=88723

        Reviewed by Dan Bernstein.

        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:
        Remove -[WebFrame _setIsDisconnected:] and -[WebFrame _setExcludeFromTextSearch:]

2012-06-09  Sukolsak Sakshuwong  <sukolsak@google.com>

        Add UNDO_MANAGER flag
        https://bugs.webkit.org/show_bug.cgi?id=87908

        Reviewed by Tony Chang.

        * Configurations/FeatureDefines.xcconfig:

2012-06-07  Kentaro Hara  <haraken@chromium.org>

        Reduce Node object size from 72 byte to 64 byte
        https://bugs.webkit.org/show_bug.cgi?id=88528

        Reviewed by Ryosuke Niwa.

        Added a symbol for callRemovedLastRef().

        * WebKit.order:

2012-06-06  Andy Estes  <aestes@apple.com>

        Wrap uppercaseWord, lowercaseWord, and capitalizeWord with USE(APPKIT)
        https://bugs.webkit.org/show_bug.cgi?id=88504

        Reviewed by Dan Bernstein.

        uppercaseWord, lowercaseWord, and capitalizeWord are methods declared
        by NSResponder that subclasses are expected to implement. WebKit should
        only support these implementations on platforms that use AppKit.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:

2012-06-05  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):
        The error constant has been renamed.

2012-06-05  Anders Carlsson  <andersca@apple.com>

        Rename a plug-in loading error constant
        https://bugs.webkit.org/show_bug.cgi?id=88381
        <rdar://problem/11602601>

        Reviewed by Sam Weinig.

        * Misc/WebKitErrors.h:

2012-06-05  Dongwoo Im  <dw.im@samsung.com>

        Add 'isProtocolHandlerRegistered' and 'unregisterProtocolHandler'.
        https://bugs.webkit.org/show_bug.cgi?id=73176

        Reviewed by Adam Barth.

        Two more APIs are added in Custom Scheme Handler specification.
        http://dev.w3.org/html5/spec/Overview.html#custom-handlers
        One is 'isProtocolHandlerRegistered' to query whether the specific URL
        is registered or not.
        The other is 'unregisterProtocolHandler' to remove the registered URL.

        * Configurations/FeatureDefines.xcconfig: Add a macro 'ENABLE_CUSTOM_SCHEME_HANDLER'.

2012-06-04  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: FeatureDefines.xcconfig should match across projects

        * Configurations/FeatureDefines.xcconfig:
        - Fix sort order of ENABLE_CSS3_FLEXBOX.
        - Fix typo in ENABLE_FONT_BOOSTING.
        - Add missing ENABLE_LEGACY_CSS_VENDOR_PREFIXES.

2012-06-02  Yongjun Zhang  <yongjun_zhang@apple.com>

        loadRequest should check for empty URLs.
        https://bugs.webkit.org/show_bug.cgi?id=88154

        In [WebFrame loadRequest], if the url is invalid and not nil, we transform it to file: url.
        However, WebKit client could send down an empty URL that makes us transform it to file: url
        as well.  We should skip that as we did for nil URLs.

        Reviewed by Brady Eidson.

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

2012-06-01  Michael Saboff  <msaboff@apple.com>

        WebFrame::_stringByEvaluatingJavaScriptFromString methods don't handle nil string
        https://bugs.webkit.org/show_bug.cgi?id=88109

        Reviewed by Geoffrey Garen.

        Added short circuit return when the NSString to evaluate is nil.

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

2012-05-31  Hajime Morrita  <morrita@chromium.org>

        REGRESSION(r117572): editing/spelling/spellcheck-async-remove-frame.html crashes on Mac
        https://bugs.webkit.org/show_bug.cgi?id=86859

        Reviewed by Ryosuke Niwa.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (-[WebEditorSpellCheckResponder initWithClient:sequence:results:]):
        (-[WebEditorSpellCheckResponder perform]):
        (WebEditorClient::didCheckSucceeded):
        (WebEditorClient::requestCheckingOfString):

2012-05-31  Andy Estes  <aestes@apple.com>

        Disentangle code that relies on USE(AUTOMATIC_TEXT_REPLACEMENT) from that which merely relies on PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=87933

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:

2012-05-29  David Barr  <davidbarr@chromium.org>

        Introduce ENABLE_CSS_IMAGE_RESOLUTION compile flag
        https://bugs.webkit.org/show_bug.cgi?id=87685

        Reviewed by Eric Seidel.

        Add a configuration option for CSS image-resolution support, disabling it by default.

        * Configurations/FeatureDefines.xcconfig:

2012-05-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        SVGViewSpec DOM bindings aka SVGSVGElement.currentView is unimplemented
        https://bugs.webkit.org/show_bug.cgi?id=15495

        Reviewed by Rob Buis.

        * MigrateHeaders.make: Copy DOMSVGViewSpec*.h headers.

2012-05-25  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        WebKitTestRunner needs to support layoutTestController.setJavaScriptProfilingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=42328

        Reviewed by Eric Seidel.

        * WebInspector/WebInspector.mm:
        (-[WebInspector setJavaScriptProfilingEnabled:]):

2012-05-24  Tim Horton  <timothy_horton@apple.com>

        Add feature defines for web-facing parts of CSS Regions and Exclusions
        https://bugs.webkit.org/show_bug.cgi?id=87442
        <rdar://problem/10887709>

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2012-05-24  John Mellor  <johnme@chromium.org>

        Font Boosting: Add compile flag and runtime setting
        https://bugs.webkit.org/show_bug.cgi?id=87394

        Reviewed by Adam Barth.

        Add ENABLE_FONT_BOOSTING.

        * Configurations/FeatureDefines.xcconfig:

2012-05-23  Ojan Vafai  <ojan@chromium.org>

        add back the ability to disable flexbox
        https://bugs.webkit.org/show_bug.cgi?id=87147

        Reviewed by Tony Chang.

        * Configurations/FeatureDefines.xcconfig:

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

        Add a quirk for applications that depend on the relative ordering of progressCompleted/didFinishLoad
        https://bugs.webkit.org/show_bug.cgi?id=87178
        <rdar://problem/11468434>

        Reviewed by Maciej Stachowiak.

        Add plumbing for the quirk to flip the relative ordering of progressCompleted/didFinishLoad back
        to the behavior before http://trac.webkit.org/changeset/94105. Make it apply to any Mail.app linked
        against WebKit before that revision.

        * Misc/WebKitVersionChecks.h:
        * WebView/WebView.mm:
        (-[WebView _needsDidFinishLoadOrderQuirk]):
        (-[WebView _preferencesChanged:]):

2012-05-21  Gavin Barraclough  <barraclough@apple.com>

        Disable private names by default in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=87088

        Reviewed by Geoff Garen.

        r117859 introduced a preliminary implementation of ES6-like private name objects to JSC.
        These are probably not yet ready to be web-facing, so disabling by default in WebCore.
        Opting-in for JSC & DumpRenderTree so that we can still run the fast/js/names.html test.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setJavaScriptExperimentsEnabled:]):
        (-[WebPreferences javaScriptExperimentsEnabled]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
            - Added JavaScriptExperimentsEnabled to WebPreferences.

2012-05-15  Gavin Barraclough  <barraclough@apple.com>

        Add support for private names
        https://bugs.webkit.org/show_bug.cgi?id=86509

        Reviewed by Oliver Hunt.

        The spec isn't final, but we can start adding support to allow property maps
        to contain keys that aren't identifiers.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyClass::methodsNamed):
        (WebKit::ProxyClass::fieldNamed):
        (WebKit::ProxyInstance::getMethod):
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):
            - Removed PropertyName::impl(), call publicName() to get the string associated with a name.

2012-05-21  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Move setEditingBehavior() from layoutTestController to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=42689

        Reviewed by Hajime Morita and Kenneth Rohde Christiansen.

        Remove Mac private API to get/set the editing behavior, since it was only there
        for the DRT.

        * WebKit.order:
        * WebView/WebFrame.mm:
        * WebView/WebFrameInternal.h:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2012-05-20  Ryosuke Niwa  <rniwa@webkit.org>

        Using createContextualFragment to insert a <script> does not cause the script to execute
        https://bugs.webkit.org/show_bug.cgi?id=12234

        Reviewed by Adam Barth.

        Renamed FragmentScriptingNotAllowed to DisallowScriptingContent.

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

2012-05-19  Andy Estes  <aestes@apple.com>

        Fix build errors found when disabling ENABLE_DRAG_SUPPORT
        https://bugs.webkit.org/show_bug.cgi?id=86947

        Reviewed by Jon Honeycutt.

        * WebCoreSupport/WebDragClient.h:
        * WebCoreSupport/WebDragClient.mm:
        * WebView/WebFrame.mm:
        * WebView/WebFrameInternal.h:
        * WebView/WebFrameView.mm:
        (-[WebFrameView _setDocumentView:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView acceptsFirstMouse:]):
        (-[WebHTMLView shouldDelayWindowOrderingForEvent:]):
        (matchesExtensionOrEquivalent):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView moveDragCaretToPoint:]):
        (-[WebView removeDragCaret]):

2012-04-27  Filip Pizlo  <fpizlo@apple.com>

        DFG should have control flow graph simplification
        https://bugs.webkit.org/show_bug.cgi?id=84553

        Reviewed by Oliver Hunt.
        
        Merged r115512 from dfgopt.

        JSValue::toBoolean(ExecState*) -> JSValue::toBoolean()
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):

2012-05-18  Tony Chang  <tony@chromium.org>

        remove the CSS_GRID_LAYOUT compiler define, but default grid layout to off
        https://bugs.webkit.org/show_bug.cgi?id=86767

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences cssGridLayoutEnabled]):
        (-[WebPreferences setCSSGridLayoutEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2012-05-18  MORITA Hajime <morrita@google.com>

        Another unreviewed attempt to fix build breakage on r117572.

        * WebCoreSupport/WebEditorClient.h:

2012-05-18  MORITA Hajime  <morrita@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=85515
        Stale frame in WebCore::SpellChecker::didCheckSucceeded

        Reviewed by Ryosuke Niwa.

        * WebCoreSupport/WebEditorClient.h:

2012-05-17  Andy Estes  <aestes@apple.com>

        Don't let -[CALayer renderInContext:] try to render WebView's root layer
        https://bugs.webkit.org/show_bug.cgi?id=86773
        <rdar://problem/10950075>

        Reviewed by Dan Bernstein.

        -[CALayer renderInContext:] doesn't correctly render our layer tree, so
        don't let it try. Calling drawRect: with a bitmap context will already
        do the right thing for WebViews.

        * WebView/WebHTMLView.mm: Create a subclass of CALayer called WebLayerHostingLayer.
        (-[WebLayerHostingLayer renderInContext:]): override renderInContext: to be a NOOP.
        (-[WebHTMLView attachRootLayer:]): Create a WebLayerHostingLayer rather than a CALayer.

2012-05-17  Hironori Bono  <hbono@chromium.org>

        [Refactoring] Move platform-specific code in Editor::respondToChangedSelection to the WebKit layer
        https://bugs.webkit.org/show_bug.cgi?id=86591

        Reviewed by Ryosuke Niwa.

        This change adds a TextCheckerClient::shouldEraseMarkersAfterChangeSelection
        function to remove platform-specific code from Editor::respondToChangedSelection
        function.

        No new tests, no change in behavior.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldEraseMarkersAfterChangeSelection):

2012-05-17  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r117428): WebKit API/SPI was removed
        https://bugs.webkit.org/show_bug.cgi?id=86748

        Reverted r117428.

        * WebKit.order:
        * WebView/WebView.mm:
        (+[WebView _setDomainRelaxationForbidden:forURLScheme:]):
        * WebView/WebViewPrivate.h:

2012-05-17  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert setDomainRelaxationForbiddenForURLScheme to use InternalSettings interface
        https://bugs.webkit.org/show_bug.cgi?id=86704

        Reviewed by Eric Seidel.

        Remove setDomainRelaxationForbiddenForURLScheme functions, because it is able to work in the
        cross-port way through the InternalSettings interface.

        * WebKit.order:
        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

2012-05-15  Anders Carlsson  <andersca@apple.com>

        Use unaccelerated scrolling deltas when rubber-banding
        https://bugs.webkit.org/show_bug.cgi?id=86503
        <rdar://problem/11378742>

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Init new WKSI functions.

2012-05-14  Luke Macpherson  <macpherson@chromium.org>

        Introduce ENABLE_CSS_VARIABLES compile flag.
        https://bugs.webkit.org/show_bug.cgi?id=86338

        Reviewed by Dimitri Glazkov.

        Add a configuration option for CSS Variables support, disabling it by default.

        * Configurations/FeatureDefines.xcconfig:

2012-05-14  Michael Saboff  <msaboff@apple.com>

        Enh: Add the Ability to Disable / Enable JavaScript GC Timer
        https://bugs.webkit.org/show_bug.cgi?id=86382

        Reviewed by Darin Adler.

        Plumbing to set / clear JS GC activity timer enable flag.

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics setJavaScriptGarbageCollectorTimerEnabled:]):

2012-05-11  Gavin Barraclough  <barraclough@apple.com>

        Introduce PropertyName class
        https://bugs.webkit.org/show_bug.cgi?id=86241

        Reviewed by Geoff Garen.

        Replace 'const Identifier&' arguments to functions accessing object properties with a new 'PropertyName' type.
        This change paves the way to allow for properties keyed by values that are not Identifiers.

        This change is largely a mechanical find & replace.
        It also changes JSFunction's constructor to take a UString& instead of an Identifier&
        (since in some cases we can no longer guarantee that we'lll have an Identifier), and
        unifies Identifier's methods to obtain array indices onto PropertyName.

        The new PropertyName class retains the ability to support .impl() and .ustring(), but
        in a future patch we may need to rework this, since not all PropertyNames should be
        equal based on their string representation.

        * Plugins/Hosted/ProxyInstance.h:
        (ProxyInstance):
        * Plugins/Hosted/ProxyInstance.mm:
        (ProxyClass):
        (WebKit::ProxyClass::methodsNamed):
        (WebKit::ProxyClass::fieldNamed):
        (WebKit::ProxyRuntimeMethod::create):
        (WebKit::ProxyRuntimeMethod::finishCreation):
        (WebKit::ProxyInstance::getMethod):
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):

2012-05-11  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11361907> and https://bugs.webkit.org/show_bug.cgi?id=86265
        REGRESSION(r104885): Images missing from printed YummySoup! recipes

        We thought clients were passing paths as URLs.
        It turns out it was more likely they were passing file: URLs with the file: scheme removed.
        And that jives perfectly with the behavior change caused by r104885.
        
        Reviewed by Alexey Proskuryakov.

        Rename _webkit_URLFromURLOrPath to _webkit_URLFromURLOrSchemelessFileURL, and change it
        to create the new URL simply by appending "file:":
        * Misc/WebNSURLExtras.h:
        * Misc/WebNSURLExtras.mm:
        (-[NSURL _webkit_URLFromURLOrSchemelessFileURL]):

        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]): Create the fixed url simply by appending "file:" to the
          existing URL string.
        (-[WebFrame loadData:MIMEType:textEncodingName:baseURL:]):
        (-[WebFrame loadHTMLString:baseURL:]):
        (-[WebFrame loadAlternateHTMLString:baseURL:forUnreachableURL:]):

2012-05-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move resumeAnimations to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=86063

        Reviewed by Alexey Proskuryakov.

        Remove resumeAnimations functions, because it is able to work in the 
        cross-port way through the Internals interface.

        * WebKit.order:
        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

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

        WebKit1: Add a way to blacklist specific plug-ins/plug-in versions
        https://bugs.webkit.org/show_bug.cgi?id=86150
        <rdar://problem/9551196>

        Reviewed by Sam Weinig.

        * Misc/WebKitErrors.h:
        Add WebKitErrorInsecurePlugInVersion enum.

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage bundleIdentifier]):
        (-[WebBasePluginPackage bundleVersion]):
        Add bundleIdentifier and bundleVersion getters.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):
        Check if the plug-in is blocked. If it is, set the unavailability reason and the error code.

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

        Rename the missing plug-in indicator to the unavailable plug-in indicator
        https://bugs.webkit.org/show_bug.cgi?id=86136

        Reviewed by Sam Weinig.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginHostDied]):
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldUnavailablePluginMessageBeButton):
        (WebChromeClient::unavailablePluginButtonClicked):

2012-05-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Move suspendAnimations to use Internals interface.
        https://bugs.webkit.org/show_bug.cgi?id=85986

        Reviewed by Ryosuke Niwa.

        Remove suspendAnimations functions, because it is able to work in the 
        cross-port way through the Internals interface.

        * WebKit.order:
        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2012-05-08  Kent Tamura  <tkent@chromium.org>

        Fixe Chromium build, and add a FIXME comment about a layering violation.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-05-08  Jon Lee  <jonlee@apple.com>

        Safari warns that it needs to resend the form in an iFrame when going back
        https://bugs.webkit.org/show_bug.cgi?id=82658
        <rdar://problem/11292558>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Add wkCFURLRequestAllowAllPostCaching.

2012-05-08  Timothy Hatcher  <timothy@apple.com>

        Fix the SOFT_LINK_STAGED_FRAMEWORK_OPTIONAL macro so it passes the full path to dlopen.

        <rdar://problem/11406517>

        Reviewed by Mark Rowe.

        * WebCoreSupport/WebInspectorClient.mm: Pass A to SOFT_LINK_STAGED_FRAMEWORK_OPTIONAL for the version.

2012-05-07  Andy Estes  <aestes@apple.com>

        ENABLE_IFRAME_SEAMLESS should be part of FEATURE_DEFINES.

        * Configurations/FeatureDefines.xcconfig:

2012-05-07  Eric Seidel  <eric@webkit.org>

        Add ENABLE_IFRAME_SEAMLESS so Apple can turn off SEAMLESS if needed
        https://bugs.webkit.org/show_bug.cgi?id=85822

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:

2012-05-05  Dean Jackson  <dino@apple.com>

        Add new Setting/Preference to disable requestAnimationFrame
        https://bugs.webkit.org/show_bug.cgi?id=85693

        Reviewed by Simon Fraser.

        Exposes a new WebPreference: WebKitRequestAnimationFrameEnabled.
        The default value is true. The majority of applications will leave
        it this way.

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

2012-05-04  Jer Noble  <jer.noble@apple.com>

        REGRESSION (r116127-r116165): 6 tests failing on Lion Debug (Tests)
        https://bugs.webkit.org/show_bug.cgi?id=85674

        Reviewed by Oliver Hunt.

        Null check the results of core([frame DOMDocument]).

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

2012-05-02  Jer Noble  <jer.noble@apple.com>

        Taking a visibility:hidden element full screen causes full screen window to disappear.
        https://bugs.webkit.org/show_bug.cgi?id=85432

        Reviewed by Maciej Stachowiak.

        When given an initial or final frame with a zero width or height, return a rect representing
        the entire screen, rather than a rect with a zero or infinite size. Doing otherwise will
        confuse the window server when it's instructed to scale the full screen window to that size.

        * WebView/WebFullScreenController.mm:
        (windowFrameFromApparentFrames):

2012-05-04  Jer Noble  <jer.noble@apple.com>

        Full screen will exit during a provisional load of a non-ancestor iframe.
        https://bugs.webkit.org/show_bug.cgi?id=85230

        Reviewed by Maciej Stachowiak .

        Only exit full screen mode if the frame being loaded contains the full 
        screen element.

        * WebView/WebView.mm:
        (-[WebView _didStartProvisionalLoadForFrame:]): Give the UIDelegate a first crack at handling the
        request to close the full screen window when a provisional load occurs.

2012-05-04  Jer Noble  <jer.noble@apple.com>

        Move WebKitFullScreenListener into its own file.
        https://bugs.webkit.org/show_bug.cgi?id=85640

        Reviewed by Maciej Stachowiak.

        Move WebKitFullScreenListener into its own file, so it can be used by multiple classes.

        * WebCoreSupport/WebKitFullScreenListener.h: Added.
        * WebCoreSupport/WebKitFullScreenListener.mm: Added.
        (-[WebKitFullScreenListener webkitWillEnterFullScreen]):
        (-[WebKitFullScreenListener webkitDidEnterFullScreen]):
        (-[WebKitFullScreenListener webkitWillExitFullScreen]):
        (-[WebKitFullScreenListener webkitDidExitFullScreen]):
        * WebCoreSupport/WebChromeClient.mm:

2012-05-04  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11312853> and https://bugs.webkit.org/show_bug.cgi?id=85635 
        Exception in [WebFrame loadRequest:] breaks some WebKit apps

        Reviewed by Alexey Proskuryakov.

        Some API clients pass in nil requests or requests with nil URLs.
        In r112571 we started rewriting these URLs resulting in an exception.
        Since we've supported nil requests until now, we should not try to rewrite these URLs.

        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]): Don't try to rewrite invalid URLs if they are also null.

2012-05-04  Nate Chapin  <japhet@chromium.org>

        Don't require FrameLoaderClient to manufacture a commitData() call for empty documents.
        https://bugs.webkit.org/show_bug.cgi?id=85533

        Reviewed by Alexey Proskuryakov.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]): Calling commitData when finishing is no longer necessary,
            as WebCore will take care of simulating the receipt of data and ensuring the requisite work gets done in the blank document case.

2012-05-03  Anders Carlsson  <andersca@apple.com>

        useWebKitWebInspector should be more robust against missing files
        https://bugs.webkit.org/show_bug.cgi?id=85563
        <rdar://problem/11373948>

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebInspectorClient.mm:
        (useWebKitWebInspector):

2012-05-03  Tobias Netzel  <tobias.netzel@googlemail.com>

        Bugs in WebFullScreenController
        https://bugs.webkit.org/show_bug.cgi?id=85388

        Reviewed by Alexey Proskuryakov.

        Leopard specific fixes:
        NSWindow doesn't respond to isOnActiveSpace so find out first.
        Values passed to SetSystemUIMode were swapped.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController exitFullScreen]):
        (-[WebFullScreenController _updateMenuAndDockForFullScreen]):

2012-05-02  Jon Lee  <jonlee@apple.com>

        Migrate permission functions to Notification from NotificationCenter
        https://bugs.webkit.org/show_bug.cgi?id=80485
        <rdar://problem/10965458>

        Reviewed by Jian Li.

        * WebCoreSupport/WebNotificationClient.h: *
        WebCoreSupport/WebNotificationClient.mm: Add a separate callback
        variable depending on the notifications API enabled.
        (WebNotificationClient::requestPermission): Add
        NotificationPermissionCallback version of the same
        function. And refactor common code into private function.
        (-[WebNotificationPolicyListener initWithCallback:]): Refactor to
        take the NotificationPermissionCallback as a parameter.
        (-[WebNotificationPolicyListener initWithVoidCallback:]): Add new
        init method to handle legacy API.
        (-[WebNotificationPolicyListener allow]): Invoke the callback for
        both variables. If only one of the APIs is enabled, we are
        guaranteed that the relevant callback variable exists. If both
        APIs are supported, it is possible that _voidCallback will be nil
        if the callback is NotificationPermissionCallback, so we need the
        extra pointer check.
        (-[WebNotificationPolicyListener deny]): Ditto.

2012-05-02  Eric Seidel  <eric@webkit.org>

        Sort ENABLE_ defines in FeatureDefines.xcconfig files to make them easier to compare with one another (and easier to autogenerate)
        https://bugs.webkit.org/show_bug.cgi?id=85433

        Reviewed by Adam Barth.

        I have a script which can autogenerate these xcconfig files as well as the
        vsprops files (and soon the Chromium, cmake, gnumake and qmake) feature lists
        from a central feature list file.
        In preparation for posting such a tool, I'm re-sorting these xcconfig files to be
        alphabetically ordered (currently they're close, but not quite).
        There is also at least one inconsistency between these files (CSS_LEGACY_PREFIXES) which
        I will fix in a second pass.  I will also sort the FEATURE_DEFINES = line in a follow-up patch.

        * Configurations/FeatureDefines.xcconfig:

2012-04-18  Jon Honeycutt  <jhoneycutt@apple.com>

        FrameLoaderClient::dispatchWillSendSubmitEvent() should be given more
        information about the form being submitted
        https://bugs.webkit.org/show_bug.cgi?id=84297

        Reviewed by Andy Estes.

        * WebCoreSupport/WebFrameLoaderClient.h:
        Updated method declaration.

2012-05-01  Jon Honeycutt  <jhoneycutt@apple.com>

        Make Page::setDefersLoading() have a call count so that each time
        loading is deferred, it must be balanced with a call to resume.
        https://bugs.webkit.org/show_bug.cgi?id=84522

        Reviewed by Andy Estes.

        * WebView/WebPreferenceKeysPrivate.h:
        Declare a new key for this preference.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        Initialize new preference to NO.
        (-[WebPreferences setWantsBalancedSetDefersLoadingBehavior:]):
        Setter.
        (-[WebPreferences wantsBalancedSetDefersLoadingBehavior]):
        Getter.

        * WebView/WebPreferencesPrivate.h:
        Declare setter and getter.

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        Set the setting from the WebPreferences object's value.

2012-05-01  Jeffrey Pfau  <jpfau@apple.com>

        <rdar://problem/10422318> Support for web content filter delegate for filtering https content
        https://bugs.webkit.org/show_bug.cgi?id=85300

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        *Command.h files shouldn't be exported to WebKit layer
        https://bugs.webkit.org/show_bug.cgi?id=74778

        Reviewed by Eric Seidel.

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

2012-04-28  Geoffrey Garen  <ggaren@apple.com>

        Clarified JSGlobalData (JavaScript VM) lifetime
        https://bugs.webkit.org/show_bug.cgi?id=85142

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):

2012-04-27  Gavin Peters  <gavinp@chromium.org>

        Add new ENABLE_LINK_PRERENDER define to control the Prerendering API
        https://bugs.webkit.org/show_bug.cgi?id=84871

        Reviewed by Adam Barth.

        Prerendering is currently covered by the ENABLE_LINK_PREFETCH macro, but the new Prerendering
        API separates it from prefetching.  Having separate include guards lets ports enable prefetching,
        a relatively easy change, without needing to build the infrastructure for prerendering, which
        is considerably more complicated.

2012-04-26  Jon Lee  <jonlee@apple.com>

        [WK2] AlternativeTextClient leaks when the page is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=84307
        <rdar://problem/11328431>

        Reviewed by Enrica Casucci.

        * WebCoreSupport/WebAlternativeTextClient.h: Implement pageDestroyed(), as in EditorClient.
        (WebAlternativeTextClient):
        * WebCoreSupport/WebAlternativeTextClient.mm:
        (WebAlternativeTextClient::pageDestroyed): Deletes itself.

2012-04-26  Jer Noble  <jer.noble@apple.com>

        Full Screen mode does not preserve CALayer ordering after exiting.
        https://bugs.webkit.org/show_bug.cgi?id=83931

        Reviewed by Eric Carlson.

        Further corrections to r114567. When swapping view for otherView, give the correct
        relative view to -[NSView addSubview:positioned:relativeTo:].

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController _swapView:with:]):

2012-04-25  Jer Noble  <jer.noble@apple.com>

        Placeholder view is immediately removed from hosting window upon entering full screen.
        https://bugs.webkit.org/show_bug.cgi?id=84916

        Reviewed by Darin Adler.

        Correct a mistake added in r114567.  When swapping view for otherView, add otherView and 
        remove view (rather than adding otherView and removing otherView).

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController _swapView:with:]):

2012-04-25  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=84913
        WebKit 1: Initialize deviceScaleFactor on creation of the WebView
        -and corresponding-
        <rdar://problem/11322716>

        Reviewed by Darin Adler.

        Before this patch, we weren't setting the deviceScaleFactor until 
        viewDidMoveToWindow which is quite late for background tabs. setHostWindow will 
        happen early on though. For applications that don't use host windows, also set it 
        from _initWithFrame.
        * WebView/WebView.mm:
        (-[WebView _initWithFrame:frameName:groupName:usesDocumentViews:]):
        (-[WebView setHostWindow:]):
        (-[WebView _deviceScaleFactor]):

2012-04-24  Alexis Menard  <alexis.menard@openbossa.org>

        Replace occurences of style selector from variables and methods names by style resolver.
        https://bugs.webkit.org/show_bug.cgi?id=84765

        Reviewed by Andreas Kling.

        Rename methods and variables to follow the new name StyleResolver. It requires to update the
        local variables, methods parameters, and function names to match the new name and to remove
        the concept of "selector" to avoid clashing with the CSS concept. The next and last patch
        will be to rename CSSStyleSelector file and update the includes.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView reapplyStyles]):
        (-[WebHTMLView _setPrinting:minimumPageLogicalWidth:logicalHeight:originalPageWidth:originalPageHeight:maximumShrinkRatio:adjustViewSize:paginateScreenContent:]):

2012-04-23  Andy Estes  <aestes@apple.com>

        Incremental rendering should be unsuppressed after the load event or a configurable timeout, whichever occurs first.
        https://bugs.webkit.org/show_bug.cgi?id=84583

        Add a private WebPreference for setting the incremental rendering suppression timeout.

        Reviewed by Anders Carlsson.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences setIncrementalRenderingSuppressionTimeoutInSeconds:]):
        (-[WebPreferences incrementalRenderingSuppressionTimeoutInSeconds]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2012-04-23  Julien Chaffraix  <jchaffraix@webkit.org>

        Cut dependency on RenderLayer::scrollRectToVisible outside rendering
        https://bugs.webkit.org/show_bug.cgi?id=84607

        Reviewed by Simon Fraser.

        * WebView/WebFrame.mm:
        (-[WebFrame _scrollDOMRangeToVisible:]):
        Updated to use RenderObject::scrollRectToVisible and not depend on RenderLayer.

2012-04-22  Jon Lee  <jonlee@apple.com>

        Remove notifications support on Mac Lion.
        https://bugs.webkit.org/show_bug.cgi?id=84554
        <rdar://problem/11297128>

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2012-04-20  Jon Lee  <jonlee@apple.com>

        Add Notification constructor
        https://bugs.webkit.org/show_bug.cgi?id=80477
        <rdar://problem/10912431>

        Reviewed by Jian Li.

        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::clearNotifications): When clearing notifications, finalize
        them so that they can be cleaned up by the GC.

2012-04-20  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector be the first responder when opening docked.

        <rdar://problem/11294217>

        Reviewed by Brian Weinstein.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]): Call makeFirstResponder: on
        the window and pass the Inspector's WebView.

2012-04-18  Hironori Bono  <hbono@chromium.org>

        Split SpellChecker::didCheck() to SpellChecker::didCheckSucceeded() and SpellChecker::didCheckCanceled()
        https://bugs.webkit.org/show_bug.cgi?id=83748

        Reviewed by Ryosuke Niwa.

        This change replaces a call for SpellChecker::didCheck() with one for
        SpellChecker::didCheckSucceeded() because didCheck has been split into
        didCheckSucceeded(0 and didCheckCanceled().

        * WebCoreSupport/WebEditorClient.mm:
        (-[WebEditorSpellCheckResponder perform]): Replaced didCheck with didCheckSucceeded.

2012-04-18  Jer Noble  <jer.noble@apple.com>

        Full Screen mode does not preserve CALayer ordering after exiting.
        https://bugs.webkit.org/show_bug.cgi?id=83931

        Reviewed by Eric Carlson.

        When swapping the placeholder and web views, use -[NSView addSubview:positioned:relativeTo:]
        instead of -[NSView replaceSubview:with:], as the latter does not preserve the relative order
        of the view's backing CALayers.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController _swapView:with:]):

2012-04-18  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Sandbox violations prevent attaching files to gmail messages
        https://bugs.webkit.org/show_bug.cgi?id=84263
        <rdar://problem/11248260>

        Reviewed by Oliver Hunt.

        * WebCoreSupport/WebDragClient.mm: (WebDragClient::willPerformDragDestinationAction):
        DragDestinationActionUpload no longer exists, so we don't need a special case for it.

2012-04-17  Jer Noble  <jer.noble@apple.com>

        Exiting full screen video brings the wrong Safari window to the foreground
        https://bugs.webkit.org/show_bug.cgi?id=83936

        Reviewed by Adele Peterson.

        Tell the original webView's window to makeKeyAndOrderFront once the exit
        animation completes.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController finishedExitFullScreenAnimation:]):

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

        Use a MIG call when creating a plug-in property list file
        https://bugs.webkit.org/show_bug.cgi?id=84084
        <rdar://problem/11197341>

        Reviewed by Sam Weinig.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::createPropertyListFile):
        Get a plug-in host and call _WKPHCreatePluginMIMETypesPreferences instead.

        * Plugins/Hosted/WebKitPluginHost.defs:
        Add PHCreatePluginMIMETypesPreferences.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage createPropertyListFile]):
        NetscapePluginHostManager::createPropertyListFile is no longer a static member function.

2012-04-12  Andy Estes  <aestes@apple.com>

        REGRESSION (r102262): iAd Producer relies on CSSStyleDeclaration property setters respecting '!important'
        https://bugs.webkit.org/show_bug.cgi?id=83832

        Reviewed by Alexey Proskuryakov.

        * Misc/WebKitVersionChecks.h: Indicate that 535.13.0 was the first
        version of WebKit.framework to ignore '!important' in
        CSSStyleDeclaration property setters.
        * WebView/WebView.mm:
        (shouldRespectPriorityInCSSAttributeSetters):
        (-[WebView _commonInitializationWithFrameName:groupName:]): Enable a
        quirk to restore pre-r102262 behavior if the application is iAd Producer
        and was linked against a version of WebKit.framework that had the old behavior.

2012-04-12  Andy Estes  <aestes@apple.com>

        Remove unused WebKit1 SPI for suppressing incremental rendering.
        https://bugs.webkit.org/show_bug.cgi?id=83801

        Reviewed by Simon Fraser.

        This SPI is unused and has been replaced by API ([setS|s]uppressesIncrementalRendering).

        * WebView/WebPreferences.mm:
        * WebView/WebPreferencesPrivate.h:

2012-04-08  Dan Bernstein  <mitz@apple.com>

        [mac] REGRESSION (r113467): Some canvas tests are failing in WebKit1 when run after compositing/tiled-layers-hidpi.html
        https://bugs.webkit.org/show_bug.cgi?id=83453

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (-[WebView _setCustomBackingScaleFactor:]): When the scale factor parameter was 0, meaning
        no custom scale factor, this method was setting the Page scale factor to 0, and that value
        was used by canvas. Changed it to correctly set the Page scale factor back to the device
        scale factor.

2012-04-06  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Adopt a different method of telling AppKit when inline input isn't supported
        https://bugs.webkit.org/show_bug.cgi?id=83408
        <rdar://problem/9205734>

        Reviewed by Adele Peterson.

        * Plugins/Hosted/WebTextInputWindowController.m:
        (-[WebTextInputView validAttributesForMarkedText]):
        (-[WebTextInputPanel init]):
        (-[WebTextInputPanel _interpretKeyEvent:string:]): Added a comment about old approach.

2012-04-06  Enrica Casucci  <enrica@apple.com>

        Provide Obj-C private API to simplify markup.
        https://bugs.webkit.org/show_bug.cgi?id=83334
        <rdar://problem/11033861>

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (-[WebView _simplifyMarkup:endNode:]): Added.
        * WebView/WebViewPrivate.h:

2012-04-06  Tim Horton  <timothy_horton@apple.com>

        Add autodetection of image orientation from EXIF information
        https://bugs.webkit.org/show_bug.cgi?id=19688
        <rdar://problem/4126979> and <rdar://problem/11091578>

        Original patch by David Carson and Eric Seidel.

        Reviewed by Simon Fraser.

        Add a preference, ShouldRespectImageOrientation, which will cause WebCore to respect EXIF orientation in all images.

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

2012-04-06  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10912476> HiDPI: Have canvas use a hidpi backing store, but downsample upon access

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_HIGH_DPI_CANVAS.

2012-04-05  Jia Pu  <jpu@apple.com>

        Move correction panel related functions from EditorClient into separated AlternativeTextClient class.
        https://bugs.webkit.org/show_bug.cgi?id=82970

        Reviewed by Enrica Casucci.

        Move correction panel related functions from WebEditorClient to the new WebAlternativeTextClient.
        See WebCore/ChangeLog for details.

        * WebCoreSupport/CorrectionPanel.h:
        * WebCoreSupport/CorrectionPanel.mm:
        * WebCoreSupport/WebAlternativeTextClient.h: Added.
        (WebAlternativeTextClient):
        * WebCoreSupport/WebAlternativeTextClient.mm: Added.
        (WebAlternativeTextClient::WebAlternativeTextClient):
        (WebAlternativeTextClient::~WebAlternativeTextClient):
        (WebAlternativeTextClient::showCorrectionAlternative):
        (WebAlternativeTextClient::dismissAlternative):
        (WebAlternativeTextClient::dismissAlternativeSoon):
        (WebAlternativeTextClient::recordAutocorrectionResponse):
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::~WebEditorClient):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2012-03-15  Jer Noble  <jer.noble@apple.com>

        Full Screen mode should cancel before navigation.
        https://bugs.webkit.org/show_bug.cgi?id=81295

        Reviewed by Anders Carlsson.

        When a provisional load is started, if the page is currently in full screen mode, instruct
        the full screen controller to close the full screen window immediately.

        * WebView/WebFullScreenController.h:
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController isFullScreen]): Added.
        * WebView/WebView.mm:
        (-[WebView _didStartProvisionalLoadForFrame:]): Close the full screen window controller, if
            present and in full screen mode.

2012-04-03  Keishi Hattori  <keishi@webkit.org>

        Disable ENABLE_DATALIST for now
        https://bugs.webkit.org/show_bug.cgi?id=82871

        Reviewed by Kent Tamura.

        * Configurations/FeatureDefines.xcconfig: Disabled ENABLE_DATALIST.

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

        Add audit token to PHCheckInWithPluginHost
        https://bugs.webkit.org/show_bug.cgi?id=83102

        Reviewed by Sam Weinig.

        * Plugins/Hosted/WebKitPluginHost.defs:

2012-04-02  Jia Pu  <jpu@apple.com>

        Rename SpellingCorrectionController to AlternativeTextController.
        https://bugs.webkit.org/show_bug.cgi?id=82942

        Reviewed by Enrica Casucci.

        These changes are simply adopting new class names.

        * WebCoreSupport/CorrectionPanel.h:
        (CorrectionPanel):
        * WebCoreSupport/CorrectionPanel.mm:
        (correctionIndicatorType):
        (CorrectionPanel::CorrectionPanel):
        (CorrectionPanel::~CorrectionPanel):
        (CorrectionPanel::show):
        (CorrectionPanel::dismiss):
        (CorrectionPanel::dismissInternal):
        (CorrectionPanel::handleAcceptedReplacement):
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::~WebEditorClient):
        (WebEditorClient::showCorrectionPanel):
        (WebEditorClient::dismissCorrectionPanel):
        (WebEditorClient::dismissCorrectionPanelSoon):
        * WebView/WebView.mm:
        (-[WebView handleCorrectionPanelResult:]):

2012-04-03  Jer Noble  <jer.noble@apple.com>

        ESC key in full screen does not result in webkitFullScreenChange event.
        https://bugs.webkit.org/show_bug.cgi?id=82755
        <rdar://problem/11093513>

        Reviewed by Eric Carlson.

        Instead of exiting full screen directly, ask the document to initiate exiting full screen. This ensures
        that the entire full screen element stack is cleared and that webkitFullScreenChange events are sent
        out correctly.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController cancelOperation:]):
        (-[WebFullScreenController requestExitFullScreen]):

2012-04-01  Jon Lee  <jonlee@apple.com>

        Rename notification properties and functions
        https://bugs.webkit.org/show_bug.cgi?id=80482
        <rdar://problem/10912432>

        Reviewed by Kentaro Hara.

        * WebView/WebNotification.h: Rename replaceID to tag.
        * WebView/WebNotification.mm:
        (-[WebNotification tag]):

2012-03-31  Timothy Hatcher  <timothy@apple.com>

        Prevent opening external URLs in the Web Inspector's WebView.

        All URLs not handled by the Inspector's JavaScript are now opened in the inspected WebView.

        https://webkit.org/b/82812
        rdar://problem/9488558

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]): Factored the URL code out of here into inspectorPagePath.
        (-[WebInspectorWindowController inspectorPagePath]): Added.
        (-[WebInspectorWindowController webView:decidePolicyForNavigationAction:request:frame:decisionListener:]): Added.
        Only allow non-main frame and the inspector page. All other URLs will be opened in the inspected page.

2012-03-30  Emil A Eklund  <eae@chromium.org>

        Change WebKit/WebKit2 platform code to use pixel snapped values
        https://bugs.webkit.org/show_bug.cgi?id=82549

        Change WebKit and WebKit2 platform code to use rounded locations and
        pixel snapped rects and sizes. This largely avoids having to expose the
        fractional layout types to the platform code.

        Reviewed by Eric Seidel.

        * DOM/WebDOMOperations.mm:
        (-[DOMNode _renderRect:]):

2012-03-30  Mark Pilgrim  <pilgrim@chromium.org>

        GEOLOCATION should be implemented as Page Supplement
        https://bugs.webkit.org/show_bug.cgi?id=82228

        Reviewed by Adam Barth.

        Geolocation is now a Supplement in Page so the interface
        has changed for setting up the page's geolocation client
        initially and accessing the controller later.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _geolocationDidChangePosition:]):
        (-[WebView _geolocationDidFailWithError:]):

2012-03-30  Keishi Hattori  <keishi@webkit.org>

        Change ENABLE_INPUT_COLOR to ENABLE_INPUT_TYPE_COLOR and enable it for chromium
        https://bugs.webkit.org/show_bug.cgi?id=80972

        Reviewed by Kent Tamura.

        * Configurations/FeatureDefines.xcconfig:

2012-03-28  Alexey Proskuryakov  <ap@apple.com>

        [Mac] REGRESSION: Removing translation of local paths in KURL constructor broke some applications
        https://bugs.webkit.org/show_bug.cgi?id=82548
        <rdar://problem/11125355>
        <rdar://problem/11142152>

        Reviewed by Brady Eidson.

        * WebView/WebFrame.mm:
        (-[WebFrame loadRequest:]): Fixed this bug.
        (-[WebFrame loadHTMLString:baseURL:]): Also added translation to another API, so that I don't
        have to come back again.
        (-[WebFrame loadAlternateHTMLString:baseURL:forUnreachableURL:]): Ditto.

        * WebView/WebView.mm: (-[WebView setMainFrameURL:]): Changed another place where clients used
        to pass file paths instead of URLs.

2012-03-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r112553.
        http://trac.webkit.org/changeset/112553
        https://bugs.webkit.org/show_bug.cgi?id=82638

        It made all tests crash on Qt WK2 (Requested by Ossy_away on
        #webkit).

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _geolocationDidChangePosition:]):
        (-[WebView _geolocationDidFailWithError:]):

2012-03-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        HashMap<>::add should return a more descriptive object
        https://bugs.webkit.org/show_bug.cgi?id=71063

        Reviewed by Ryosuke Niwa.

        Update code to use AddResult instead of a pair.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPlugin):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::show):

2012-03-29  Mark Pilgrim  <pilgrim@chromium.org>

        GEOLOCATION should be implemented as Page Supplement
        https://bugs.webkit.org/show_bug.cgi?id=82228

        Reviewed by Adam Barth.

        Geolocation is now a Supplement in Page so the interface
        has changed for setting up the page's geolocation client
        initially and accessing the controller later.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _geolocationDidChangePosition:]):
        (-[WebView _geolocationDidFailWithError:]):

2012-03-28  Nate Chapin  <japhet@chromium.org>

        Remove dispatchDidLoadMainResource callback, since no
        port implements it.
        https://bugs.webkit.org/show_bug.cgi?id=82539

        Reviewed by Alexey Proskuryakov.

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

2012-03-28  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/82419> Web Inspector: Create -[DOMNode inspect] from IDL

        Reviewed by Timothy Hatcher.

        * MigrateHeaders.make: Copy DOMNodePrivate.h to PrivateHeaders.

2012-03-27  Timothy Hatcher  <timothy@apple.com>

        Make WebKit properly load a staged framework when soft linking.

        https://webkit.org/b/82371
        rdar://problem/11125989

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebInspectorClient.mm: Use SOFT_LINK_STAGED_FRAMEWORK_OPTIONAL to properly
        load the WebInspector framework.

2012-03-26  Adam Barth  <abarth@webkit.org>

        FrameLoader::shouldAllowNavigation uses Frame for context rather than Document
        https://bugs.webkit.org/show_bug.cgi?id=81020

        Reviewed by Eric Seidel.

        Update call site to new function name.

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

2012-03-23  Alexey Proskuryakov  <ap@apple.com>

        [Mac] No need for platform-specific ENABLE_BLOB values
        https://bugs.webkit.org/show_bug.cgi?id=82102

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

2012-03-23  Dean Jackson  <dino@apple.com>

        Disable CSS_SHADERS in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=81996

        Reviewed by Simon Fraser.

        Remove ENABLE_CSS_SHADERS from FeatureDefines. It's now in Platform.h.

        * Configurations/FeatureDefines.xcconfig:

2012-03-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert hasGrammarMarker to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=82004

        Reviewed by Ryosuke Niwa.

        Remove hasGrammarMarker support, since it can support in the cross-port way
        through the Internals interface.

        * WebKit.order:
        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2012-03-22  Benjamin Poulain  <bpoulain@apple.com>

        Build fix for WebHistory is busted after changing time zone
        https://bugs.webkit.org/show_bug.cgi?id=81849

        Unreviewed build fix.

        When generating warning for undefined message signature, rebuildHistoryByDayIfNeeded
        fail to compile due to addItemToDateCaches: being undefined.

        Move the definition to the right place in the file to use the private method. 

        * History/WebHistory.mm:
        (-[WebHistoryPrivate rebuildHistoryByDayIfNeeded:]):

2012-03-22  Benjamin Poulain  <bpoulain@apple.com>

        WebHistory is busted after changing time zone
        https://bugs.webkit.org/show_bug.cgi?id=81849

        Reviewed by Brady Eidson.

        The date used for choosing the bucket of a new entry is computed
        with the system TimeZone.

        When the Time Zone change, or the daylight saving time change, all the dates
        in _entriesByDate are offset from the new entries.

        This patch solves the issue by re-distributing the WebHistoryItems if the time zone
        changes.
        The clients of WebHistory are notified of this change through the regular Notifications.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate rebuildHistoryByDayIfNeeded:]):
        (-[WebHistoryPrivate init]):
        (-[WebHistory timeZoneChanged:]):
        (-[WebHistory init]):
        (-[WebHistory dealloc]):
        (-[WebHistory finalize]):

2012-03-21  Tim Horton  <timothy_horton@apple.com>

        Make use of CG rounded-rect primitives
        https://bugs.webkit.org/show_bug.cgi?id=79932
        <rdar://problem/9274953>

        Reviewed by Simon Fraser.
        
        Portions of patch by Nikolas Zimmermann and Mustafizur Rahaman.

        Add wkCGPathAddRoundedRect.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-03-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Convert hasSpellingMarker to use Internals interface.
        https://bugs.webkit.org/show_bug.cgi?id=81300

        Reviewed by Ryosuke Niwa.

        Remove hasSpellingMarker support, since it can support in the cross-port way
        through the Internals interface.

        * WebKit.order:
        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2012-03-19  Adam Barth  <abarth@webkit.org>

        Remove support for "magic" iframe
        https://bugs.webkit.org/show_bug.cgi?id=81590

        Reviewed by Eric Seidel.

        Remove FrameLoaderClient methods that no longer exist.

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

2012-03-19  Enrica Casucci  <enrica@apple.com>

        WebKit2: create sandbox extensions for files that are dropped in an input control.
        https://bugs.webkit.org/show_bug.cgi?id=81153
        <rdar://problem/11031207>

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::willPerformDragDestinationAction): Avoid calling the delegate with the new drag action.
        We want to avoid any unwanted side effects for the WebKit clients.

2012-03-19  Emil A Eklund  <eae@chromium.org>

        [mac/chromium] Change platform code to use pixelSnappedRect methods
        https://bugs.webkit.org/show_bug.cgi?id=81016

        Reviewed by Eric Seidel.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView actualVisibleRectInWindow]):
        * WebView/WebFrame.mm:
        (-[WebFrame _getVisibleRect:]):
        (-[WebFrame _computePageRectsWithPrintScaleFactor:pageSize:]):
        * WebView/WebView.mm:
        (-[WebView _dashboardRegions]):
        (-[WebView trackedRepaintRects]):

2012-03-16  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11027997> and https://bugs.webkit.org/show_bug.cgi?id=81412
        REGRESSION (r107435) Copy a link and paste to Mail: Nothing is pasted

        Reviewed by Geoff Garen.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::setInsertionPasteboard):
        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::url):

2012-03-08  Jer Noble  <jer.noble@apple.com>

        Support W3C Full Screen API proposal
        https://bugs.webkit.org/show_bug.cgi?id=80660

        Reviewed by Alexey Proskuryakov.

        Allow full screen elements to access the keyboard.

        * WebView/WebView.mm:
        (-[WebView _supportsFullScreenForElement:WebCore::withKeyboard:]):

2012-03-07  Jon Lee  <jonlee@apple.com>

        Move NotificationContents into Notification
        https://bugs.webkit.org/show_bug.cgi?id=80487
        <rdar://problem/10965519>

        Reviewed by Jian Li.

        * WebView/WebNotification.mm: Refactor to use accessor methods on Notification.
        (-[WebNotification title]):
        (-[WebNotification body]):

2012-03-15  David Hyatt  <hyatt@apple.com>

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

        Add a preference for enabling the new multi-column layout code that will be based on regions.

        Reviewed by Beth Dakin.

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

2012-03-15  Brady Eidson  <beidson@apple.com>

        <rdar://problem/11036900> and https://bugs.webkit.org/show_bug.cgi?id=81079
        REGRESSION(r107844): Clipboard API only remembers most recent data set on clipboard

        Reviewed by Sam Weinig.

        Add the non-destructive "addTypes" to supplement the destructive "setTypes"
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::addTypes):

2012-03-14  Anders Carlsson  <andersca@apple.com>

        java/java-and-plugins.html test failing
        https://bugs.webkit.org/show_bug.cgi?id=81188
        <rdar://problem/11048657>

        Reviewed by Sam Weinig.

        When we're marshaling JSObjects that wrap plug-in objects, make sure to check that the
        current plug-in instance is the same as the plug-in instance the object came from and don't
        pass the unwrapped object ID if that is the case.
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::getObjectID):
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::marshalValues):
        * Plugins/Hosted/ProxyInstance.h:
        (ProxyInstance):
        (WebKit::ProxyInstance::instanceProxy):

2012-03-14  Michael Saboff  <msaboff@apple.com>

        REGRESSION(r110383): ASSERTION failures in JSCell::finishCreation causing multiple tests to "crash" on the Lion Intel Debug Bots
        https://bugs.webkit.org/show_bug.cgi?id=80993

        Reviewed by Mark Rowe.

        Moved $(BUILT_PRODUCTS_DIR)/usr/local/include to the front of HEADER_SEARCH_PATH
        to fix builds given the wtf move.

        * Configurations/WebKit.xcconfig:

2012-03-13  Jon Lee  <jonlee@apple.com>

        Separate NOTIFICATIONS and LEGACY_NOTIFICATIONS
        https://bugs.webkit.org/show_bug.cgi?id=80922
        <rdar://problem/11035082>

        Reviewed by Jian Li.

        You can include either NOTIFICATIONS or LEGACY_NOTIFICATIONS and have a complete API.
        LEGACY_NOTIFICATIONS should cover all of the previous functionality, and NOTIFICATIONS will cover the
        new API. Therefore, APIs that are common between the two will have:
        #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)

        This patch initially sets both to be exactly the same. As other bugs with patches begin to migrate to
        the new API, the defines will begin to split. This allows ports to decide which set of APIs to include.

        Update everything to be #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
        * WebCoreSupport/WebNotificationClient.h:
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::show):
        (WebNotificationClient::cancel):
        (WebNotificationClient::clearNotifications):
        (WebNotificationClient::notificationObjectDestroyed):
        (WebNotificationClient::notificationControllerDestroyed):
        (WebNotificationClient::requestPermission):
        (WebNotificationClient::checkPermission):
        * WebView/WebNotification.mm:
        (-[WebNotification title]):
        (-[WebNotification body]):
        (-[WebNotification replaceID]):
        (-[WebNotification origin]):
        (-[WebNotification notificationID]):
        (-[WebNotification dispatchShowEvent]):
        (-[WebNotification dispatchCloseEvent]):
        (-[WebNotification dispatchClickEvent]):
        (-[WebNotification dispatchErrorEvent]):
        * WebView/WebNotificationInternal.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2012-03-13  Adam Barth  <abarth@webkit.org> && Benjamin Poulain  <bpoulain@apple.com>

        Always enable ENABLE(CLIENT_BASED_GEOLOCATION)
        https://bugs.webkit.org/show_bug.cgi?id=78853

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebCoreSupport/WebGeolocationClient.mm:
        (WebGeolocationClient::lastPosition):
        * WebView/WebGeolocationPosition.mm:
        (-[WebGeolocationPositionInternal initWithCoreGeolocationPosition:]):
        (core):
        (-[WebGeolocationPosition initWithTimestamp:latitude:longitude:accuracy:]):
        * WebView/WebGeolocationPositionInternal.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (-[WebView _geolocationDidChangePosition:]):
        (-[WebView _geolocationDidFailWithError:]):

2012-03-12  Antonio Gomes  <agomes@rim.com>

        Convert nodesFromRect tests to use Internals interface
        https://bugs.webkit.org/show_bug.cgi?id=80886

        Reviewed by Ryosuke Niwa.

        Removed mac specific support for nodesFromRect for testing purposes only,
        since it can work in a cross-port way through the Internals interface.

        * WebKit.order:
        * WebView/WebView.mm:
        * WebView/WebViewPrivate.h:

2012-03-13  Anders Carlsson  <andersca@apple.com>

        Remove a nonexistent WebUIDelegate method from WebUIDelegatePrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=81014

        Reviewed by Sam Weinig.

        Remove a plug-in halter related WebUIDelegate method.

        * WebView/WebUIDelegatePrivate.h:

2012-03-13  Shinya Kawanaka  <shinyak@chromium.org>

        REGRESSION: Spellcheck tests hit assertions on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=80883

        Reviewed by Ryosuke Niwa.

        The bug was caused by the closure object created in requestCheckingOfString accessing
        request's member variables even though the request object is not an NSObject or allocated
        in stack. This resulted in the closure not being able to access those variables when invoked.

        Fixed the bug by making local copies of those member variables.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::requestCheckingOfString):

2012-03-11  Timothy Hatcher  <timothy@apple.com>

        Update how the Web Inspector resources are loaded.

        https://bugs.webkit.org/show_bug.cgi?id=80798
        rdar://problem/10359959

        Reviewed by Brian Weinstein.

        * WebCoreSupport/WebInspectorClient.mm:
        (useWebKitWebInspector): Return if we are using the WebCore resources for compatibility
        with local and nightly builds.
        (WebInspectorFrontendClient::localizedStringsURL): Decide what path to use.
        (-[WebInspectorWindowController init]): Ditto.
        (-[WebInspectorWindowController window]): Decide if the window is textured or not.

2012-03-09  Jon Lee  <jonlee@apple.com>

        Rename NotificationPresenter to NotificationClient
        https://bugs.webkit.org/show_bug.cgi?id=80488
        <rdar://problem/10965558>

        Reviewed by Kentaro Hara.

        Refactor to use renamed WebCore::NotificationClient.
        * WebCoreSupport/WebNotificationClient.h:
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::checkPermission):
        * WebView/WebViewPrivate.h:

2012-03-09  Enrica Casucci  <enrica@apple.com>

        Move WebNSURLExtras code down to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=80611

        Reviewed by Alexey Proskuryakov.

        Changed the implementation to use newly moved WebCore functions.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _webkit_hasCaseInsensitivePrefix:]):
        * Misc/WebNSURLExtras.mm:
        (+[NSURL _web_URLWithUserTypedString:]):
        (+[NSURL _web_URLWithDataAsString:relativeToURL:]):
        (+[NSURL _web_URLWithData:]):
        (+[NSURL _web_URLWithData:relativeToURL:]):
        (-[NSURL _web_originalData]):
        (-[NSURL _web_originalDataAsString]):
        (-[NSURL _web_userVisibleString]):
        (-[NSURL _web_isEmpty]):
        (-[NSURL _web_URLCString]):
        (-[NSURL _web_URLByTruncatingOneCharacterBeforeComponent:]):
        (-[NSURL _webkit_URLByRemovingFragment]):
        (-[NSURL _webkit_URLByRemovingResourceSpecifier]):
        (-[NSURL _web_URLByRemovingUserInfo]):
        (-[NSURL _web_dataForURLComponentType:]):
        (-[NSURL _web_schemeData]):
        (-[NSURL _web_hostData]):
        (-[NSString _web_isUserVisibleURL]):
        (-[NSString _web_hostNameNeedsDecodingWithRange:]):
        (-[NSString _web_hostNameNeedsEncodingWithRange:]):
        (-[NSString _web_decodeHostNameWithRange:]):
        (-[NSString _web_encodeHostNameWithRange:]):
        (-[NSString _web_decodeHostName]):
        (-[NSString _web_encodeHostName]):
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-03-09  Emil A Eklund  <eae@chromium.org>

        Add roundedPoint to HitTestResult and change platform code to use it
        https://bugs.webkit.org/show_bug.cgi?id=80715

        Reviewed by James Robinson.

        Change ports to use roundedPoint to avoid exposing subpixel types to
        platform code.

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

2012-03-09  Jon Lee  <jonlee@apple.com>

        Add support for ENABLE(LEGACY_NOTIFICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=80497

        Reviewed by Adam Barth.

        Prep for b80472: Update API for Web Notifications
        * Configurations/FeatureDefines.xcconfig:

2012-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix for micro data API.

        * Configurations/FeatureDefines.xcconfig:

2012-03-08  Jer Noble  <jer.noble@apple.com>

        Unreviewed Snow Leopard build fix.

        On Leopard and Snow Leopard, provide an implementation for -[NSWindow convertRectToScreen:].

        * WebView/WebFullScreenController.mm:
        (-[NSWindow convertRectToScreen:]):

2012-02-20  Jer Noble  <jer.noble@apple.com>

        Full Screen Refactor Part 4: Animate into Full Screen mode using new animation classes, WebKit edition.
        https://bugs.webkit.org/show_bug.cgi?id=78930

        Reviewed by Anders Carlsson.

        Revise WebFullScreenController to have the same general functionality and code path as WKFullScreenWindowController
        in WebKit2.  As such, the following functions are copies of their equivalents in WKFullScreenWindowController:
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController init]):
        (-[WebFullScreenController dealloc]):
        (-[WebFullScreenController windowDidLoad]):
        (-[WebFullScreenController cancelOperation:]):
        (-[WebFullScreenController applicationDidResignActive:]):
        (-[WebFullScreenController applicationDidChangeScreenParameters:]):
        (-[WebFullScreenController finishedEnterFullScreenAnimation:]):
        (-[WebFullScreenController finishedExitFullScreenAnimation:]):
        (-[WebFullScreenController close]):
        (-[WebFullScreenController animationDidEnd:]):
        (-[WebFullScreenController _updateMenuAndDockForFullScreen]):
        (-[WebFullScreenController _swapView:with:]):
        (createBackgroundFullscreenWindow):
        (windowFrameFromApparentFrames):
        (-[WebFullScreenController _startEnterFullScreenAnimationWithDuration:]):
        (-[WebFullScreenController _startExitFullScreenAnimationWithDuration:]):

        The following is a copy of the equivalent function in WebFullScreenManager:
        * WebView/WebFullScreenController.mm:
        (screenRectOfContents):        

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::fullScreenRendererChanged): No longer tell the WebView the renderer changed (as it doesn't care.)
        * WebView/WebFullScreenController.h:
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController setElement:]): No need to add event listeners to the media element.
        (-[WebFullScreenController enterFullScreen:]): Same as WKFullScreenWindowController, but not asynchronous.
        (-[WebFullScreenController exitFullScreen]): Ditto.
        * WebView/WebView.mm:
        (-[WebView _enterFullScreenForElement:WebCore::]): Fullscreen -> FullScreen.
        (-[WebView _exitFullScreenForElement:WebCore::]): Ditto.

2012-03-08  Matt Lilek  <mrl@apple.com>

        Don't enable VIDEO_TRACK on all OS X platforms
        https://bugs.webkit.org/show_bug.cgi?id=80635

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2012-03-07  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/80510> Web Inspector crash (iCab)

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::didResizeMainFrame):

2012-03-06  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] Update the configuration files for iOS
        https://bugs.webkit.org/show_bug.cgi?id=80435

        Reviewed by David Kilzer.

        * Configurations/WebKit.xcconfig:

2012-03-06  Eric Seidel  <eric@webkit.org>

        Make WTF public headers use fully-qualified include paths and remove ForwardingHeaders/wtf
        https://bugs.webkit.org/show_bug.cgi?id=80363

        Reviewed by Mark Rowe.

        ForwardingHeaders/wtf is no longer necessary (or functional) now that JavaScriptCore
        no longer includes the WTF headers as private headers.

        * ForwardingHeaders/wtf/ASCIICType.h: Removed.
        * ForwardingHeaders/wtf/AlwaysInline.h: Removed.
        * ForwardingHeaders/wtf/Assertions.h: Removed.
        * ForwardingHeaders/wtf/Deque.h: Removed.
        * ForwardingHeaders/wtf/DisallowCType.h: Removed.
        * ForwardingHeaders/wtf/FastMalloc.h: Removed.
        * ForwardingHeaders/wtf/Forward.h: Removed.
        * ForwardingHeaders/wtf/GetPtr.h: Removed.
        * ForwardingHeaders/wtf/HashCountedSet.h: Removed.
        * ForwardingHeaders/wtf/HashMap.h: Removed.
        * ForwardingHeaders/wtf/HashSet.h: Removed.
        * ForwardingHeaders/wtf/HashTraits.h: Removed.
        * ForwardingHeaders/wtf/ListHashSet.h: Removed.
        * ForwardingHeaders/wtf/ListRefPtr.h: Removed.
        * ForwardingHeaders/wtf/Locker.h: Removed.
        * ForwardingHeaders/wtf/MathExtras.h: Removed.
        * ForwardingHeaders/wtf/Noncopyable.h: Removed.
        * ForwardingHeaders/wtf/OwnArrayPtr.h: Removed.
        * ForwardingHeaders/wtf/OwnPtr.h: Removed.
        * ForwardingHeaders/wtf/OwnPtrCommon.h: Removed.
        * ForwardingHeaders/wtf/PassOwnPtr.h: Removed.
        * ForwardingHeaders/wtf/PassRefPtr.h: Removed.
        * ForwardingHeaders/wtf/Platform.h: Removed.
        * ForwardingHeaders/wtf/RefCounted.h: Removed.
        * ForwardingHeaders/wtf/RefCountedLeakCounter.h: Removed.
        * ForwardingHeaders/wtf/RefPtr.h: Removed.
        * ForwardingHeaders/wtf/RetainPtr.h: Removed.
        * ForwardingHeaders/wtf/StdLibExtras.h: Removed.
        * ForwardingHeaders/wtf/TemporaryChange.h: Removed.
        * ForwardingHeaders/wtf/Threading.h: Removed.
        * ForwardingHeaders/wtf/UnusedParam.h: Removed.
        * ForwardingHeaders/wtf/VMTags.h: Removed.
        * ForwardingHeaders/wtf/ValueCheck.h: Removed.
        * ForwardingHeaders/wtf/Vector.h: Removed.
        * ForwardingHeaders/wtf/VectorTraits.h: Removed.
        * ForwardingHeaders/wtf/unicode/Unicode.h: Removed.
        * ForwardingHeaders/wtf/unicode/icu/UnicodeIcu.h: Removed.

2012-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Hide dock button when not allowed to dock
        https://bugs.webkit.org/show_bug.cgi?id=78575

        Reviewed by Pavel Feldman.

        * WebCoreSupport/WebInspectorClient.h:
        (WebCore):
        (WebInspectorClient):
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::didResizeMainFrame):

2012-03-05  Gavin Barraclough  <barraclough@apple.com>

        putByIndex should throw in strict mode
        https://bugs.webkit.org/show_bug.cgi?id=80335

        Reviewed by Filip Pizlo.

        Make the MethodTable PutByIndex trap take a boolean 'shouldThrow' parameter.

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

2012-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed rollout of r109858 for restructuring.

2012-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/78575> Web Inspector: Hide dock button when not allowed to dock

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient):
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::updateDockingAvailability):

2012-03-02  Jon Lee  <jonlee@apple.com>

        Add support for notification replaceId in Mac WebKit and WK2
        https://bugs.webkit.org/show_bug.cgi?id=80206
        <rdar://problem/10965574>

        Reviewed by Sam Weinig.

        * WebView/WebNotification.h: Add replaceID method.
        * WebView/WebNotification.mm:
        (-[WebNotification replaceID]):

2012-03-05  Adam Barth  <abarth@webkit.org>

        Geolocation should use a ScriptExecutionContext as its context object
        https://bugs.webkit.org/show_bug.cgi?id=80248

        Reviewed by Kentaro Hara.

        * WebView/WebFrame.mm:
        (-[WebFrame _cacheabilityDictionary]):
            - We no longer special-case Geolocation.

2012-03-03  Benjamin Poulain  <benjamin@webkit.org>

        Remove the redundant method KURL::protocolInHTTPFamily()
        https://bugs.webkit.org/show_bug.cgi?id=80216

        Reviewed by Anders Carlsson.

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

2012-03-03  Hans Wennborg  <hans@chromium.org>

        Implement Speech JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=80019

        Reviewed by Adam Barth.

        Add ENABLE_SCRIPTED_SPEECH.

        * Configurations/FeatureDefines.xcconfig:

2012-03-03  Anders Carlsson  <andersca@apple.com>

        Fix build with newer versions of clang.

        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):
        Use %ld and cast to long.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getVariable:value:]):
        Cast the switch parameter to unsigned to prevent warnings about case values not being part of the enum type.

2012-03-01  Nikolas Zimmermann  <nzimmermann@rim.com>

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

        Breaks rounded rects with dashed strokes in SVG

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-02-29  Adam Barth  <abarth@webkit.org>

        ScriptExecutionContext has too many ifdef ENABLE(SQL_DATABASE)
        https://bugs.webkit.org/show_bug.cgi?id=79633

        Reviewed by Eric Seidel.

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

2012-02-29  Tim Horton  <timothy_horton@apple.com>

        Make use of CG rounded-rect primitives
        https://bugs.webkit.org/show_bug.cgi?id=79932
        <rdar://problem/9274953>

        Reviewed by Simon Fraser.

        Add wkCGPathAddRoundedRect.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-02-29  Enrica Casucci  <enrica@apple.com>

        Crash at -[WebFrame(WebInternal) _setTypingStyle:withUndoAction:]
        https://bugs.webkit.org/show_bug.cgi?id=79937
        <rdar://problem/10942936>

        Reviewed by Dan Bernstein.

        * WebView/WebFrame.mm:
        (-[WebFrame _setTypingStyle:withUndoAction:]): Adding a null check.

2012-02-28  Simon Fraser  <simon.fraser@apple.com>

        Update WebKitSystemInterface.

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2012-02-28  Enrica Casucci  <enrica@apple.com>

        More Pasteboard code cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=79816

        Removing the last references to NSPasteboard.

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::setInsertionPasteboard):

2012-02-26  Hajime Morrita  <morrita@chromium.org>

        Move ChromeClient::showContextMenu() to ContextMenuClient
        https://bugs.webkit.org/show_bug.cgi?id=79427

        Reviewed by Adam Barth.

        * WebCoreSupport/WebContextMenuClient.h:
        (WebContextMenuClient):
        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::showContextMenu): Moved from WebChromeClient
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

2012-02-25  Sam Weinig  <sam@webkit.org>

        QuickLook events don't make it to WebKit plugins.
        <rdar://problem/10931721>

        Reviewed by Anders Carlsson.

        * WebView/WebHTMLView.mm:
        (isQuickLookEvent):
        (-[WebHTMLView hitTest:]):
        Allow QuickLook events to hit test down to subviews.

2012-02-24  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10805709> and https://bugs.webkit.org/show_bug.cgi?id=79421
        Need a WK1 Mac API to filter which subframes go into WebArchives as they are created

        Reviewed by Sam Weinig (with additional comments by Adam Roben)

        Add webArchiveByFilteringSubframes: which takes a callback block:
        * DOM/WebDOMOperationsPrivate.h:

        Add FrameFilter that adapts the block, and use it to implement the new SPI:
        * DOM/WebDOMOperations.mm:
        (WebFrameFilter):
        (WebFrameFilter::WebFrameFilter):
        (WebFrameFilter::~WebFrameFilter):
        (WebFrameFilter::shouldIncludeSubframe):
        (-[DOMNode webArchiveByFilteringSubframes:]):

2012-02-24  Shinya Kawanaka  <shinyak@chromium.org>

        SpellCheckRequest needs to know the context where the spellcheck happened.
        https://bugs.webkit.org/show_bug.cgi?id=79320

        Reviewed by Hajime Morita.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::requestCheckingOfString):

2012-02-23  Andy Estes  <aestes@apple.com>

        Rename [setS|s]uppressIncrementalRendering to [setS|s]uppressesIncrementalRendering and make it WebPreferences API.
        https://bugs.webkit.org/show_bug.cgi?id=79433

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setSuppressesIncrementalRendering:]):
        (-[WebPreferences suppressesIncrementalRendering]):
        (-[WebPreferences setSuppressIncrementalRendering:]):
        (-[WebPreferences suppressIncrementalRendering]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2012-02-22  Hajime Morrita  <morrita@chromium.org>

        NOTIFICATIONS should be implemented as PageSupplement
        https://bugs.webkit.org/show_bug.cgi?id=79052

        Reviewed by Adam Barth.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2012-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the remaining uses of CSSStyleDeclaration in Editor
        https://bugs.webkit.org/show_bug.cgi?id=78939

        Reviewed by Enrica Casucci.

        * WebCoreSupport/WebEditorClient.h:
        (WebEditorClient):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldApplyStyle):
        * WebView/WebFrame.mm:
        (-[WebFrame _setTypingStyle:withUndoAction:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _applyStyleToSelection:withUndoAction:]):
        (-[WebHTMLView _changeCSSColorUsingSelector:inRange:]):
        * WebView/WebView.mm:
        (-[WebView applyStyle:]):

2012-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the remaining uses of CSSStyleDeclaration in Editor
        https://bugs.webkit.org/show_bug.cgi?id=78939

        Reviewed by Enrica Casucci.

        * WebCoreSupport/WebEditorClient.h:
        (WebEditorClient):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::shouldApplyStyle):
        * WebView/WebFrame.mm:
        (-[WebFrame _setTypingStyle:withUndoAction:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _applyStyleToSelection:withUndoAction:]):
        (-[WebHTMLView _changeCSSColorUsingSelector:inRange:]):
        * WebView/WebView.mm:
        (-[WebView applyStyle:]):

2012-02-22  Jon Lee  <jonlee@apple.com>

        Part of r108409 was incorrect, and incorporated an older version of a sub-patch.
        This is the actual sub-patch that should have been submitted.

        * WebCoreSupport/WebNotificationClient.h:
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::show):
        (WebNotificationClient::cancel):
        (WebNotificationClient::clearNotifications):
        (WebNotificationClient::notificationObjectDestroyed):
        (WebNotificationClient::notificationControllerDestroyed):

2012-02-21  Jon Lee  <jonlee@apple.com>

        Build fix. Push ENABLE_NOTIFICATIONS into .mm file.

        * WebCoreSupport/WebNotificationClient.h:
        * WebView/WebNotification.h:
        * WebView/WebNotification.mm:
        (-[WebNotification title]):
        (-[WebNotification body]):
        (-[WebNotification origin]):
        (-[WebNotification notificationID]):
        (-[WebNotification dispatchShowEvent]):
        (-[WebNotification dispatchCloseEvent]):
        (-[WebNotification dispatchClickEvent]):
        (-[WebNotification dispatchErrorEvent]):

2012-02-21  John Sullivan  <sullivan@apple.com>

        Build fix.

        * WebView/WebUIDelegatePrivate.h:
        Added @class declarations for DOMNode and DOMElement.

2012-02-21  Jon Lee  <jonlee@apple.com>

        Build fix for r108409.

        * WebCoreSupport/WebNotificationClient.h:
        (WebCore):
        * WebCoreSupport/WebNotificationClient.mm:
        * WebView/WebNotification.h:
        (WebSecurityOrigin):
        * WebView/WebNotification.mm:
        (core):
        (-[WebNotification initWithCoreNotification:notificationID:]):

2012-02-21  Jon Lee  <jonlee@apple.com>

        Bring notifications support to WK1 mac: permission requests
        https://bugs.webkit.org/show_bug.cgi?id=78783
        <rdar://problem/10610578>

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebNotificationClient.h:
        * WebCoreSupport/WebNotificationClient.mm: Create policy listener, which conforms to the
        WebAllowDenyPolicyListener protocol, similar to geolocation.
        (WebNotificationClient::requestPermission):
        (WebNotificationClient::checkPermission):
        (-[WebNotificationPolicyListener initWithCallback:]):
        (-[WebNotificationPolicyListener allow]): Call the callback.
        (-[WebNotificationPolicyListener deny]): Call the callback.
        * WebView/WebUIDelegatePrivate.h: Define new UI delegate method to ask the user to decide a
        policy for navigations.

        ====
        Bring notifications support to WK1 mac: showing, canceling, removing notifications

        Create a WebKit wrapper object for WebCore::Notification, which also keeps track of an assigned
        ID.
        * WebView/WebNotification.h: Added.
        (WebSecurityOrigin):
        * WebView/WebNotification.mm: Added.
        (core):
        (-[WebNotification initWithCoreNotification:notificationID:]):
        (-[WebNotification init]):
        (-[WebNotification dealloc]):
        (-[WebNotification title]):
        (-[WebNotification body]):
        (-[WebNotification origin]):
        (-[WebNotification notificationID]):
        (-[WebNotification dispatchShowEvent]):
        (-[WebNotification dispatchCloseEvent]):
        (-[WebNotification dispatchClickEvent]):
        (-[WebNotification dispatchErrorEvent]):
        * WebView/WebNotificationInternal.h: Added.
        (WebCore): Internal category to allow creating instances with WebCore objects.

        Extend WebView to include a WebNotificationProvider, which clients implement.
        * WebView/WebViewData.h: Add a private member for the provider.
        * WebView/WebViewPrivate.h:
            * Define an enum WebNotificationPermission that mirrors WebCore::NotificationPresenter::Permission
            that client which implement the provider can use to return policy decisions.
            * Define WebNotificationProvider.
            * Category WebViewNotification extends WebView with methods that set and manager the
            notification provider, and handle events from the platform notifications.
        * WebView/WebView.mm:
        (-[WebView _setNotificationProvider:]): Sets the provider when initializing the WebView.
        (-[WebView _notificationControllerDestroyed]):
        (-[WebView _notificationProvider]):
        (-[WebView _notificationDidShow:]):
        (-[WebView _notificationDidClick:]):
        (-[WebView _notificationsDidClose:]):

        * WebCoreSupport/WebNotificationClient.h: Add variables that map between WebCore::Notification
        instances, their assigned IDs, their contexts, and corresponding WebKit wrapper objects.
        * WebCoreSupport/WebNotificationClient.mm:
        (generateNotificationID): Created unique IDs for each shown notification.
        (WebNotificationClient::show): Create wrapper object for notification, assign ID, cache the
        mappings between the objects, and forward it to the provider.
        (WebNotificationClient::cancel):
        (WebNotificationClient::clearNotifications): Clear all notifications associated with the
        provided context.
        (WebNotificationClient::notificationObjectDestroyed): Remove the notification from the maps.
        (WebNotificationClient::notificationControllerDestroyed): If the controller is destroyed, tell
        the provider to clear of the notifications related to this web view.

        ====
        (Prep work for) Bring notifications support to WK1 mac

        Rename WebGeolocationPolicyListener. The interface is generic enough to be reused for
        notification requests. To avoid having to create a new listener type, instead rename it
        to WebAllowDenyPolicyListener.
        * WebView/WebUIDelegatePrivate.h: Rename the protocol.
        * WebCoreSupport/WebGeolocationClient.mm: Refactor geolocation request listener to use
        new name.

        Add preference to keep track of whether notifications are enabled in general.
        * WebView/WebPreferenceKeysPrivate.h: Add WebNotificationsEnabledKey for storing the
        preference.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): By default have them enabled.
        (-[WebPreferences setNotificationsEnabled:]):
        (-[WebPreferences notificationsEnabled]):
        * WebView/WebPreferencesPrivate.h:

        Add a stringValue method that exposes WebCore::SecurityOrigin::toString() for storing the
        notification policy for a given origin.
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin stringValue]):
        * WebCoreSupport/WebSecurityOriginPrivate.h:

2012-02-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Snow Leopard build.

        * Configurations/Base.xcconfig:

2012-02-21  Sam Weinig  <sam@webkit.org>

        Use libc++ when building with Clang on Mac
        https://bugs.webkit.org/show_bug.cgi?id=78981

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2012-02-17  Mihnea Ovidenie  <mihnea@adobe.com>

        CSS regions enabled by default
        https://bugs.webkit.org/show_bug.cgi?id=78525

        Reviewed by David Hyatt.

        Add a runtime preference to enable/disable regions functionality at runtime(WebKitCSSRegionsEnabled).
        CSSRegions are still enabled by default.
        In DRT, use layoutTestController.overridePreference("WebKitCSSRegionsEnabled", "0") to disable the css regions functionality.

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

2012-02-17  Enrica Casucci  <enrica@apple.com>

        Refactor DragData class to use PlatformStrategies in the Mac implementation.
        https://bugs.webkit.org/show_bug.cgi?id=78768

        Reviewed by Darin Adler.

        * WebCoreSupport/WebPlatformStrategies.h: Added color() method.
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::color):

2012-02-16  Brady Eidson  <beidson@apple.com>

        <rdar://problem/10616280> and https://bugs.webkit.org/show_bug.cgi?id=78767
        REGRESSION (r90471) - iAd Producer 2.0.1 produces blank pages

        Reviewed by Sam Weinig.

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

2012-02-15  Enrica Casucci  <enrica@apple.com>

        Refactor ClipboardMac class to use PlatformStrategies.
        https://bugs.webkit.org/show_bug.cgi?id=78554

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebDragClient.h: Changed methods signature to use name based pasteboard.
        * WebCoreSupport/WebDragClient.mm: Ditto.
        (WebDragClient::willPerformDragSourceAction):
        (WebDragClient::startDrag):
        (WebDragClient::declareAndWriteDragImage):
        * WebCoreSupport/WebPlatformStrategies.h: Added new methods.
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::changeCount):
        (WebPlatformStrategies::uniqueName):

2012-02-15  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Notify ChromeClient when touch-event handlers are installed/removed.
        https://bugs.webkit.org/show_bug.cgi?id=77440

        Reviewed by Darin Fisher and Ryosuke Niwa.

        * WebCoreSupport/WebChromeClient.h:

2012-02-14  Matt Lilek  <mrl@apple.com>

        Don't ENABLE_DASHBOARD_SUPPORT unconditionally on all Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=78629

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

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

        [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=78541
        <rdar://problem/10036695>

        Reviewed by Kent Tamura.

        * WebView/WebPreferences.mm: (+[WebPreferences initialize]): Changed default value of the
        preference.

2012-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Convert svg/animations to use SMIL methods for driving the timeline
        https://bugs.webkit.org/show_bug.cgi?id=78422

        Reviewed by Dirk Schulze.

        Remove SVG animation sampling functionality provided for DRT, which no longer uses it.
        Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime.

        * WebKit.order:
        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2012-02-13  Enrica Casucci  <enrica@apple.com>

         Refactor Mac platform implementation of the Pasteboard class to use Platform Strategies.
         https://bugs.webkit.org/show_bug.cgi?id=78282
 
         This patch removes any accesss to the NSPasteboard object from the Pasteboard class which
         now makes use of a new pasteboardStrategy object that is implemented both in WebKit and
         WebKit2. The actual access to NSPasteboard is now performed inside the PlatformPasteboard
         class. Currently both WebKit and WebKit2 use the same implementation of the PasteboardStrategy
         interface but this one more step in the direction of removing access to NSPasteboard from
         the WebProcess.
         As part of the refactoring the I've reduced to a minimum the use of OBJ-C classes.
         
         Reviewed by Anders Carlsson.
 
         * WebCoreSupport/WebPlatformStrategies.h: Added PasteboardStrategy.
         * WebCoreSupport/WebPlatformStrategies.mm: Added implementation of PasteboardStrategy interface.
         (WebPlatformStrategies::createPasteboardStrategy):
         (WebPlatformStrategies::getTypes):
         (WebPlatformStrategies::bufferForType):
         (WebPlatformStrategies::getPathnamesForType):
         (WebPlatformStrategies::stringForType):
         (WebPlatformStrategies::copy):
         (WebPlatformStrategies::setTypes):
         (WebPlatformStrategies::setBufferForType):
         (WebPlatformStrategies::setPathnamesForType):
         (WebPlatformStrategies::setStringForType):

2012-02-12  Hajime Morrita  <morrita@chromium.org>

        Page should have less intrusive way to associate API implementation objects.
        https://bugs.webkit.org/show_bug.cgi?id=78085

        Reviewed by Adam Barth.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2012-02-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r107435.
        http://trac.webkit.org/changeset/107435
        https://bugs.webkit.org/show_bug.cgi?id=78410

        It broke the Qt build (Requested by Ossy on #webkit).

        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::addVisitedLink):

2012-02-10  Adam Klein  <adamk@chromium.org>

        Enable MUTATION_OBSERVERS by default on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=78196

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:

2012-02-10  Enrica Casucci  <enrica@apple.com>

        Refactor Mac platform implementation of the Pasteboard class to use Platform Strategies.
        https://bugs.webkit.org/show_bug.cgi?id=78282

        This patch removes any accesss to the NSPasteboard object from the Pasteboard class which
        now makes use of a new pasteboardStrategy object that is implemented both in WebKit and
        WebKit2. The actual access to NSPasteboard is now performed inside the PlatformPasteboard
        class. Currently both WebKit and WebKit2 use the same implementation of the PasteboardStrategy
        interface but this one more step in the direction of removing access to NSPasteboard from
        the WebProcess.
        As part of the refactoring the I've reduced to a minimum the use of OBJ-C classes.
        
        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebPlatformStrategies.h: Added PasteboardStrategy.
        * WebCoreSupport/WebPlatformStrategies.mm: Added implementation of PasteboardStrategy interface.
        (WebPlatformStrategies::createPasteboardStrategy):
        (WebPlatformStrategies::getTypes):
        (WebPlatformStrategies::bufferForType):
        (WebPlatformStrategies::getPathnamesForType):
        (WebPlatformStrategies::stringForType):
        (WebPlatformStrategies::copy):
        (WebPlatformStrategies::setTypes):
        (WebPlatformStrategies::setBufferForType):
        (WebPlatformStrategies::setPathnamesForType):
        (WebPlatformStrategies::setStringForType):

2012-02-10  Benjamin Poulain  <bpoulain@apple.com>

        [Mac] DYLIB_INSTALL_NAME_BASE should not be prefixed by the SDKROOT
        https://bugs.webkit.org/show_bug.cgi?id=78320

        Reviewed by Joseph Pecoraro.

        <rdar://problem/10839750>

        * Configurations/WebKit.xcconfig:

2012-02-09  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r104885): Articles not displayed in Vienna RSS reader
        https://bugs.webkit.org/show_bug.cgi?id=78280
        <rdar://problem/10762545>

        Reviewed by Oliver Hunt.

        * Misc/WebNSURLExtras.h:
        * Misc/WebNSURLExtras.mm: (-[NSURL _webkit_URLFromURLOrPath]):
        Added a method to create a URL from a path, similarly to what KURL used to do.

        * WebView/WebFrame.mm: (-[WebFrame loadData:MIMEType:textEncodingName:baseURL:]):
        Use it in an API where a known regression occurred.

2012-02-07  Antti Koivisto  <antti@apple.com>

        REGRESSION (r106681): Null check missing in [WebFrame(WebInternal) _typingStyle]
        https://bugs.webkit.org/show_bug.cgi?id=78080

        Reviewed by Reviewed by Andreas Kling, Darin Adler and Dan Bernstein.

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

2012-02-07  Tony Chang  <tony@chromium.org>

        merge DashboardSupportCSSPropertyNames.in into CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=78036

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_DASHBOARD_SUPPORT to FEATURE_DEFINES.

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

        Overlay scrollbars flash when window is simply activated
        https://bugs.webkit.org/show_bug.cgi?id=77911
        <rdar://problem/10211995>

        Reviewed by Kenneth Russell.

        * WebView/WebView.mm:
        (-[WebView _windowWillOrderOnScreen:]):
        (-[WebView _windowWillOrderOffScreen:]):
        Call FocusController::setContainingWindowIsVisible.


2012-02-06  Matthew Delaney  <mdelaney@apple.com>

        toDataURL() uses stale data after putImageData()
        https://bugs.webkit.org/show_bug.cgi?id=65767

        Reviewed by Chris Marrin.

        * WebCoreSupport/WebSystemInterface.mm: 

2012-02-03  Antti Koivisto  <antti@apple.com>

        Rename CSSMutableStyleDeclaration.h/.cpp to StylePropertySet.h/.cpp 
        https://bugs.webkit.org/show_bug.cgi?id=77779

        Reviewed by Darin Adler.

        * WebView/WebHTMLView.mm:

2012-02-03  Antti Koivisto  <antti@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77740
        Split CSSMutableStyleDeclaration into separate internal and CSSOM types 

        Reviewed by Andreas Kling and Darin Adler.

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

2012-02-03  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77691
        Fix PlatformScreen layering violation and PlatformScreenMac's incorrect use 
        of device scale

        Reviewed by Andy Estes.

        toUserSpace() and toDeviceSpace() don't need to take device scale. Also 
        restore a comment that I needlessly removed.
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setWindowRect):
        (WebChromeClient::windowRect):

2012-02-01  Dan Bernstein  <mitz@apple.com>

        WebKit/mac part of <rdar://problem/10442663> Paginated display does not respect page-break-{before,after}
        https://bugs.webkit.org/show_bug.cgi?id=77505

        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (-[WebView _setPaginationBehavesLikeColumns:]): Added this setter.
        (-[WebView _paginationBehavesLikeColumns]): Added this getter.
        * WebView/WebViewPrivate.h:

2012-01-25  Eric Seidel  <eric@webkit.org>

        HTMLIsIndexElement should not expose HTMLInputElement properties
        https://bugs.webkit.org/show_bug.cgi?id=76095

        Reviewed by Adam Barth.

        * MigrateHeaders.make:

2012-01-31  Pablo Flouret  <pablof@motorola.com>

        Fix compilation errors on build-webkit --debug --no-workers on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75869

        Reviewed by Adam Barth.

        * Workers/WebWorkersPrivate.mm:
        (+[WebWorkersPrivate workerThreadCount]):

2012-01-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77263
        PlatformScreenMac should not rely on NSWindow for important bits of data

        Reviewed by Geoff Garen.

        toUserSpace() and toDeviceSpace() now take a parameter for the 
        deviceScaleFactor.
        * WebCoreSupport/WebChromeClient.mm:
        (windowScaleFactor):
        (WebChromeClient::setWindowRect):
        (WebChromeClient::windowRect):

2012-01-25  Mark Rowe  <mrowe@apple.com>

        Build in to an alternate location when USE_STAGING_INSTALL_PATH is set.

        <rdar://problem/10609417> Adopt USE_STAGING_INSTALL_PATH

        Reviewed by David Kilzer.

        * Configurations/WebKit.xcconfig: Define NORMAL_WEBKIT_FRAMEWORKS_DIR, which contains
        the path where WebKit is normally installed. Update WEBKIT_FRAMEWORKS_DIR to point to
        the staged frameworks directory when USE_STAGING_INSTALL_PATH is set. Define
        NORMAL_PRODUCTION_FRAMEWORKS_DIR, which contains the path where our public frameworks
        are normally installed. Update PRODUCTION_FRAMEWORKS_DIR to point to the staged frameworks
        directory when USE_STAGING_INSTALL_PATH is set. Always set the framework's install name
        based on the normal framework location. This prevents an incorrect install name from being
        used when installing in to the staged frameworks directory. Look for our other frameworks
        in the staged frameworks directory when USE_STAGING_INSTALL_PATH is set. Update
        WEBCORE_PRIVATE_HEADERS_DIR to find WebCore at the top level of the staged frameworks
        directory when USE_STAGING_INSTALL_PATH is set, rather than finding it embedded inside of
        WebKit.framework.

2012-01-25  Eric Seidel  <eric@webkit.org>

        HTMLIsIndexElement should not expose HTMLInputElement properties
        https://bugs.webkit.org/show_bug.cgi?id=76095

        Reviewed by Adam Barth.

        * MigrateHeaders.make:

2012-01-25  Hajime Morita  <morrita@google.com>

        ENABLE_SHADOW_DOM should be available via build-webkit --shadow-dom
        https://bugs.webkit.org/show_bug.cgi?id=76863

        Reviewed by Dimitri Glazkov.

        Added a feature flag.

        * Configurations/FeatureDefines.xcconfig:

2012-01-25  Enrica Casucci  <enrica@apple.com>

        WebView should implement typingAttributes methods to work correctly with the Inspector bar in Mail.
        https://bugs.webkit.org/show_bug.cgi?id=76951
        <rdar://problem/9325158>

        Reviewed by Alexey Proskuryakov.

        * WebView/WebHTMLView.mm: Removed typingAttributes implementation.
        * WebView/WebView.mm:
        (-[WebView typingAttributes]): Added.

2012-01-24  Enrica Casucci  <enrica@apple.com>

        WebHTMLView should implement typingAttributes methods to work correctly with the Inspector bar in Mail.
        https://bugs.webkit.org/show_bug.cgi?id=76951
        <rdar://problem/9325158>

        The Inspector bar calls the typingAttributes methods on the clients that support it
        to retrieve the set of attributes representing the style at the selection and uses
        this information to update the state of the B, I and U buttons.
        If this method is not supported, it defaults to the attributes of the previous
        character position, reporting an incorrect state.
        This occurs only when we have a caret selection.
        
        Reviewed by Alexey Proskuryakov.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _styleForAttributeChange:]): Removed dead code.
        (-[WebHTMLView _updateFontPanel]): Removed comment that doesn't apply anymore.
        (-[WebHTMLView typingAttributes]): Added.

2012-01-24  Benjamin Poulain  <bpoulain@apple.com>

        pageCacheSupportsPlugins should default to true on WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=76891

        Reviewed by Joseph Pecoraro.

        The default was left out of r102619 by accident.

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

2012-01-23  Geoffrey Garen  <ggaren@apple.com>

        JSValue::toString() should return a JSString* instead of a UString
        https://bugs.webkit.org/show_bug.cgi?id=76861

        Reviewed by Gavin Barraclough.

        Mechanical changes to call value() after calling toString(), to
        convert from "JS string" (JSString*) to "C++ string" (UString), since
        toString() no longer returns a "C++ string".

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):

2012-01-20  Sam Weinig  <sam@webkit.org>

        Make WebCore RunLoop work for WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=76739

        Reviewed by Anders Carlsson.

        * Carbon/CarbonWindowAdapter.mm:
        (+[CarbonWindowAdapter initialize]):
        * History/WebBackForwardList.mm:
        (+[WebBackForwardList initialize]):
        * History/WebHistoryItem.mm:
        (+[WebHistoryItem 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:
        (+[WebDataSourcePrivate initialize]):
        * WebView/WebHTMLView.mm:
        (+[WebHTMLViewPrivate initialize]):
        (+[WebHTMLView initialize]):
        * WebView/WebResource.mm:
        (+[WebResourcePrivate initialize]):
        * WebView/WebTextIterator.mm:
        (+[WebTextIteratorPrivate initialize]):
        * WebView/WebView.mm:
        (+[WebView initialize]):
        * WebView/WebViewData.mm:
        (+[WebViewPrivate initialize]):
        Initialized the main run loop in addition to other initialization.

2012-01-20  Simon Fraser  <simon.fraser@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=76444
        
        #if ENABLE(CSS_SHADERS) cannot appear in framework headers.
        This breaks builds.

        * WebView/WebPreferences.mm:
        * WebView/WebPreferencesPrivate.h:

2012-01-20  Alexandru Chiculita  <achicu@adobe.com>

        CSS Shaders: Add a Settings flag to enable/disable CSS Shaders at runtime
        https://bugs.webkit.org/show_bug.cgi?id=76444

        Added private WebPreference property called "WebKitCSSCustomFilterEnabled".
        
        Reviewed by Nikolas Zimmermann.

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

2012-01-17  Enrica Casucci  <enrica@apple.com>

        Missing NSForegroundColorAttributeName should be treated as black instead of transparent.
        https://bugs.webkit.org/show_bug.cgi?id=76490
        <rdar://problem/9460733>
        
        Starting with Lion, there is no more NSForegroundColor attribute in the dictionary
        if the color matches the default (solid black).
        The fix consists in treating the lack of color as solid black instead of transparent as
        we did before.

        Added a TestWebKitAPI test.
        
        Reviewed by Darin Adler and Dan Bernstein.

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

2012-01-17  Matthew Delaney  <mdelaney@apple.com>

        On post-Lion releases, preserve the Lion behavior where WebKit explicitly calls -setGeometryFlipped on the hosting layer for applications that were linked on Lion or earlier.
        <rdar://problem/10692025>

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebSystemInterface.mm: Init newly added function.
        * WebView/WebHTMLView.mm: Added case for post-Lion builds that calls -setGeometryFlipped if the app is linked on or before Lion.

2012-01-17  Enrica Casucci  <enrica@apple.com>

        REGRESSION (r101413): Correction panel overlaps misspelled text.
        https://bugs.webkit.org/show_bug.cgi?id=74589
        <rdar://problem/10585115>

        When converting the rectangle from the root view, we need
        to take into account the height of the rectangle.
        
        Reviewed by Anders Carlsson.

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

2012-01-16  Simon Fraser  <simon.fraser@apple.com>

        <rdar://problem/10703228> ASSERTION FAILED: Uncaught exception - Cannot lock focus on image <NSImage 0x1206572a0 Size={0, 0} Reps=( )>, because it is size zero loading techcrunch.com

        Reviewed by Anders Carlsson.
        
        Avoid trying to create image snapshots for zero-sized plugins, because
        it causes -[NSView lockFocus] to throw an exception.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView cacheSnapshot]):

2012-01-16  Alexey Proskuryakov  <ap@apple.com>

        A follow-up fix for:
        A warning is logged to console when typing a bare "/" in Safari address bar
        https://bugs.webkit.org/show_bug.cgi?id=76236

        <rdar://problem/10702986>        

        Reviewed by John Sullivan.

        * Misc/WebNSURLExtras.mm: (+[NSURL _web_URLWithData:relativeToURL:]): It's OK to have a
        path when there is a base URL.

2012-01-16  Jon Lee  <jonlee@apple.com>

        Build fix for r105086.

        * Configurations/FeatureDefines.xcconfig:

2012-01-12  Alexey Proskuryakov  <ap@apple.com>

        A warning is logged to console when typing a bare "/" in Safari address bar
        https://bugs.webkit.org/show_bug.cgi?id=76236

        Reviewed by John Sullivan.

        * Misc/WebNSURLExtras.mm: (+[NSURL _web_URLWithData:relativeToURL:]): Bail out early for paths.

2012-01-16  Pablo Flouret  <pablof@motorola.com>

        Fix compilation errors on build-webkit --debug --no-svg --no-svg-fonts --no-svg-dom-objc-bindings on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75865

        Reviewed by Hajime Morita.

        * WebView/WebFrame.mm:
        (-[WebFrame _pauseSVGAnimation:onSMILNode:atTime:]):

2012-01-15  Pablo Flouret  <pablof@motorola.com>

        Fix compilation errors on build-webkit --debug --no-video on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75867

        Reviewed by Philippe Normand.

        - WebChromeClient::fullScreenRendererChanged() declaration wrongly guarded
          by VIDEO feature instead of FULLSCREEN_API.
        - _isAnyMoviePlaying implementation depends on VIDEO.

        * WebCoreSupport/WebChromeClient.h:
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController _isAnyMoviePlaying]):

2012-01-11  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=75904
        WebKit 1: Scrollbar uiStateTransitionProgress requires tracking the mouse all 
        the time
        -and corresponding-
        <rdar://problem/10498816>

        Reviewed by Darin Adler.

        New ivar trackingAreaForNonKeyWindow stores our NSTrackingArea whenever we 
        have one.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate dealloc]):
        (-[WebHTMLViewPrivate clear]):

        When we know that mouse movements won't affect anything other than 
        scrollbars, call our new function passMouseMovedEventToScrollbars(), 
        otherwise we'll call the old mouseMoved().
        (mouseEventIsPartOfClickOrDrag):
        (-[WebHTMLView _updateMouseoverWithEvent:]):

        Make sure not to remove the mouse observer when there are legacy scrollbars.
        (-[WebHTMLView removeMouseMovedObserver]):

        Set up a tracking area when the window is not key to ensure that the WebView 
        gets the relevant events. Remove it when the window is key again so that we 
        rely on the existing mechanism.
        (-[WebHTMLView windowDidBecomeKey:]):
        (-[WebHTMLView windowDidResignKey:]):

2012-01-10  Dan Bernstein  <mitz@apple.com>

        Made -[WebHistoryItem copyWithZone:] allocate an object of the same class as the receiver.

        Reviewed by Mark Rowe.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem copyWithZone:]):

2012-01-10  Chris Marrin  <cmarrin@apple.com>

        Wrapped allowedCompositingTriggers in ACCELERATED_COMPOSITING ifdef to make non-accelerated builds work

        Unreviewed.

        * WebCoreSupport/WebChromeClient.h:

2012-01-10  Chris Marrin  <cmarrin@apple.com>

        Turn off the FilterTrigger in WebKit and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=75914

        Reviewed by Simon Fraser.

        Implement allowedCompositingTriggers to turn on all compositing triggers except FilterTrigger.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::allowedCompositingTriggers):

2012-01-10  Dan Bernstein  <mitz@apple.com>

        Change -[WebHistoryItem copyWithZone:] to not use NSCopyObject()
        https://bugs.webkit.org/show_bug.cgi?id=75980

        Reviewed by Mark Rowe.

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem copyWithZone:]): Replaced NSCopyObject() with
        -alloc, -initWithWebCoreHistoryItem:.

2012-01-06  Simon Fraser  <simon.fraser@apple.com>

        Mitigate scrollbar differences when running pixel tests
        https://bugs.webkit.org/show_bug.cgi?id=67217

        Reviewed by Dan Bernstein.
        
        Make it possible to register a custom NSScroller class, which
        the WebDynamicScrollBarsView will use when mock scrollbars are enabled.
        
        Also ensure that the WebPreferences mock scrollbars preference is
        migrated into Settings.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (+[WebDynamicScrollBarsView _horizontalScrollerClass]):
        (+[WebDynamicScrollBarsView _verticalScrollerClass]):
        (+[WebDynamicScrollBarsView setCustomScrollerClass:]):
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2012-01-05  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10633760> Update copyright strings

        Reviewed by Mark Rowe.

        * Info.plist:

2012-01-05  Pratik Solanki  <psolanki@apple.com>

        WebFrameLoaderClient::userAgent does unnecessary NSString/NSURL conversions
        https://bugs.webkit.org/show_bug.cgi?id=75586

        Reviewed by Alexey Proskuryakov.

        We do unnecessary KURL->NSURL* and String<->NSString* when calling [WebView
        userAgentForURL:] from WebFrameLoaderClient::userAgent. Instead we add a separate function,
        _userAgentString that returns a WTF::String to make this call faster.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::userAgent):
        * WebView/WebView.mm:
        (-[WebView _userAgentString]):
        (-[WebView userAgentForURL:]):
        * WebView/WebViewInternal.h:

2012-01-04  Anders Carlsson  <andersca@apple.com>

        Ambiguous if-then-else in Source/WebKit/mac/Misc/WebNSPasteboardExtras.mm
        https://bugs.webkit.org/show_bug.cgi?id=75447

        Reviewed by Brian Weinstein.

        Resolve the ambiguity.

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_writeImage:element:URL:title:archive:types:source:]):

2012-01-04  Mihnea Ovidenie  <mihnea@adobe.com>

        [Mac]Fix build after changeset 103997
        https://bugs.webkit.org/show_bug.cgi?id=75530

        Reviewed by Andreas Kling.

        * WebView/WebFrame.mm:
        * WebView/WebHTMLView.mm:
        * WebView/WebPDFView.mm:
        * WebView/WebView.mm:

2012-01-03  Jon Lee  <jonlee@apple.com>

        Leak of WebNotificationClient when page is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=74980
        <rdar://problem/10611231>

        Reviewed by Mark Rowe.

        * WebCoreSupport/WebNotificationClient.h:
        * WebCoreSupport/WebNotificationClient.mm:
        (WebNotificationClient::notificationControllerDestroyed): Remove the instance.

2012-01-02  Dan Bernstein  <mitz@apple.com>

        [mac] Remove -[WebView setHoverFeedbackSuspended:]
        https://bugs.webkit.org/show_bug.cgi?id=75406

        Reviewed by Tim Hatcher.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateMouseoverWithEvent:]): Removed check for suspended hover updates.
        * WebView/WebHTMLViewInternal.h: Removed -_hoverFeedbackSuspendedChanged.
        * WebView/WebView.mm:
        (-[WebView setHoverFeedbackSuspended:]): Left empty implementation to support versions of
        Safari that call this.
        (-[WebView isHoverFeedbackSuspended]): Left implementation that always returns NO to support
        versions of Safari that call this.
        * WebView/WebViewData.h: Removed hoverFeedbackSuspended ivar.
        * WebView/WebViewPrivate.h: Removed method definitions.

2011-12-31  Dan Bernstein  <mitz@apple.com>

        WebKit/mac changes for: REGRESSION (WebKit2): Cursor, hover states not updated when page scrolls under stationary mouse pointer
        https://bugs.webkit.org/show_bug.cgi?id=75405

        Reviewed by Anders Carlsson.

        Removed the WebKit/mac mechanism for dispatching fake mouse moved events
        when an HTML frame scrolls, since FrameView now does this.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLViewPrivate dealloc]): Removed an assertion about a removed ivar.
        (-[WebHTMLView _updateMouseoverWithFakeEvent]): Removed call to
        -_cancelUpdateMouseoverTimer.
        (-[WebHTMLView _frameOrBoundsChanged]): Removed code to schedule a timer
        for dispatching a mouse moved event on scroll.
        (-[WebHTMLView close]): Removed call to _cancelUpdateMouseoverTimer.
        (-[WebHTMLView viewWillMoveToWindow:]): Ditto.
        (-[WebHTMLView mouseDown:]): Ditto.

2011-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Chromium Mac build fix.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-12-21  Sam Weinig  <sam@webkit.org>

        Start extracting platform specific bits out of PlatformEvents
        https://bugs.webkit.org/show_bug.cgi?id=75063

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebView/WebFrame.mm:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView menuForEvent:]):
        (-[WebHTMLView acceptsFirstMouse:]):
        (-[WebHTMLView shouldDelayWindowOrderingForEvent:]):
        (currentKeyboardEvent):
        (-[WebHTMLView flagsChanged:]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):
        * WebView/WebView.mm:

2011-12-21  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: suppress incremental rendering and use application chrome mode

        https://webkit.org/b/75026

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]): Sort the preferences, remove the Leopard font family setting,
        set suppress incremental rendering and use application chrome mode.

2011-12-20  Pavel Feldman  <pavel.feldman@gmail.com>

        Web Inspector: reproducible crash after closing web inspector and browser window  (iCab)
        https://bugs.webkit.org/show_bug.cgi?id=74255

        Reviewed by Yury Semikhatsky.

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

2011-12-19  Eric Carlson  <eric.carlson@apple.com>

        Enable <track> for Mac build
        https://bugs.webkit.org/show_bug.cgi?id=74838

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig:

2011-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Rename registerCommandFor(Undo|Redo) to register(Undo|Redo)Step
        https://bugs.webkit.org/show_bug.cgi?id=74748

        Reviewed by Eric Seidel.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::registerUndoOrRedoStep):
        (WebEditorClient::registerUndoStep):
        (WebEditorClient::registerRedoStep):

2011-12-16  Sam Weinig  <sam@webkit.org>

        Give PlatformEvents a base class
        https://bugs.webkit.org/show_bug.cgi?id=74685

        Reviewed by Anders Carlsson.

        Add a base class for PlatformMouseEvent, PlatformKeyboardEvent, PlatformWheelEvent
        and PlatformGestureEvent and move Type enumeration and modifiers down to it.

        * WebView/WebFrame.mm:
        (-[WebFrame _dragSourceEndedAt:operation:]):
        * WebView/WebHTMLView.mm:
        (currentKeyboardEvent):
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

2011-12-16  Simon Fraser  <simon.fraser@apple.com>

        Fix a #elsif fumble in my earlier commit.

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

2011-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Only EditCommandComposition should implement unapply and reapply
        https://bugs.webkit.org/show_bug.cgi?id=74490

        Reviewed by Eric Seidel.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (-[WebUndoStep initWithUndoStep:]):
        (-[WebUndoStep dealloc]):
        (+[WebUndoStep stepWithUndoStep:]):
        (-[WebUndoStep step]):
        (-[WebEditorUndoTarget undoEditing:]):
        (-[WebEditorUndoTarget redoEditing:]):
        (WebEditorClient::registerCommandForUndoOrRedo):
        (WebEditorClient::registerCommandForUndo):
        (WebEditorClient::registerCommandForRedo):

2011-12-16  Simon Fraser  <simon.fraser@apple.com>

        <rdar://problem/10589427> Avoid calling -setGeometryFlipped ourselves on the layer hosting view's layer

        Reviewed by Sam Weinig.
        
        Now that we're using a flipped view to host the compositing layers,
        we should not set geometryFlipped on the root layer ourselves.

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

2011-12-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize destructors
        https://bugs.webkit.org/show_bug.cgi?id=74331

        Reviewed by Geoffrey Garen.

        * Plugins/Hosted/ProxyRuntimeObject.h: Remove empty virtual destructor.
        * Plugins/Hosted/ProxyRuntimeObject.mm:

2011-12-14  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix after r102874.

        * WebCoreSupport/WebChromeClient.mm:

2011-12-14  Jing Zhao  <jingzhao@chromium.org>

        Opening two popup menus by dispatchEvent() makes problems.
        https://bugs.webkit.org/show_bug.cgi?id=73304

        Reviewed by Kent Tamura.

        * WebCoreSupport/WebChromeClient.h: Overrides hasOpenedPopup().
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::hasOpenedPopup): Not implemented.

2011-12-14  Michael Saboff  <msaboff@apple.com>

        Mac WebScriptDebugger crashes beneath sourceParsed()
        https://bugs.webkit.org/show_bug.cgi?id=74564

        Reviewed by Gavin Barraclough.

        * WebView/WebScriptDebugger.mm:
        (toNSString): Change to use ->characters() method to
        actually get characters for string conversion.

2011-12-14  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        Reviewed by Kevin Ollivier.

        Removed macro definitions which is now provided by Platform.h

        * WebKitPrefix.h:

2011-12-13  Jon Lee  <jonlee@apple.com>

        Enable notifications on Mac.

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2011-12-12  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit code shouldn't be calling applyCommand directly
        https://bugs.webkit.org/show_bug.cgi?id=74337

        Reviewed by Darin Adler.

        * WebView/WebFrame.mm:
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):

2011-12-12  Brady Eidson  <beidson@apple.com>

        Page cache should support pages with plugins.
        <rdar://problem/5190122> and https://bugs.webkit.org/show_bug.cgi?id=13634

        Expose a WebKit preference for the page cache supporting plugins (on by default).

        Reviewed by Anders Carlsson.

        * WebView/WebPreferenceKeysPrivate.h:

        * WebView/WebPreferences.mm:
        (-[WebPreferences pageCacheSupportsPlugins]):
        (-[WebPreferences setPageCacheSupportsPlugins:]):
        * WebView/WebPreferencesPrivate.h:

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

2011-12-12  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10328474> Text highlight changes to gray selection color when menu extra is shown

        Reviewed by John Sullivan.

        * WebView/WebView.mm:
        (-[WebView _updateActiveState]): Changed to use -[NSWindow _hasKeyAppearance] instead
        of -isKeyWindow. The former also returns YES when a menu extra is open.
        (-[WebView addWindowObserversForWindow:]): Removed code to observe
        NSWindowDidBecomeKeyNotification and NSWindowDidResignKeyNotification.
        (-[WebView removeWindowObservers]): Removed code to stop observing the above.
        (-[WebView _windowChangedKeyState]): Overridden this to call _updateActiveState.
        This is called when the result of -_hasKeyAppearance changes.
        (-[WebView _windowWillOrderOnScreen:]): Removed call to _updateActiveState,
        previously needed for popovers, because _windowChangedKeyState is invoked
        at the right time for them.
        (-[WebView _windowWillOrderOffScreen:]): Ditto.

2011-12-07  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        Ignore some warnings that only occur in 32-bit.

        * Plugins/WebNetscapePluginPackage.mm:

2011-12-07  Mary Wu  <mary.wu@torchmobile.com.cn>

        Change function name InitializeLoggingChannelsIfNecessary to follow coding style guideline
        https://bugs.webkit.org/show_bug.cgi?id=73986

        Reviewed by Kenneth Rohde Christiansen.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2011-12-06  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (WebKit2): Kill ring is not cleared when selection changes
        https://bugs.webkit.org/show_bug.cgi?id=73888
        <rdar://problem/10532310>

        Reviewed by Mark Rowe.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView becomeFirstResponder]): Added a FIXME comment.
        (-[WebHTMLView _selectionChanged]): Moved the code to clear kill ring to WebCore. The rest
        of kill ring implementation is there, so it makes no sense to have this call in WebKits.

2011-12-05  Anders Carlsson  <andersca@apple.com>

        Make LayerFlushSchedulerClient::flushLayers indicate whether the flush was successful or not
        https://bugs.webkit.org/show_bug.cgi?id=73862

        Reviewed by Andy Estes.

        Remove the call to LayerFlushScheduler::invalidate and return true instead. Return false for the cases
        where we don't want the layer flush scheduler to be invalidated.

        * WebView/WebView.mm:
        (LayerFlushController::flushLayers):
        * WebView/WebViewData.h:

2011-12-05  Eric Carlson  <eric.carlson@apple.com>

        Add WebKit preferences for text track settings
        https://bugs.webkit.org/show_bug.cgi?id=73721

        Reviewed by John Sullivan.

        * WebView/WebPreferenceKeysPrivate.h: Added #define for shouldDisplaySubtitles, shouldDisplayCaptions, 
        and shouldDisplayTextDescriptions properties.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Initialize new preferences to NO.
        (-[WebPreferences setShouldDisplaySubtitles:]): Added.
        (-[WebPreferences shouldDisplaySubtitles]): Ditto.
        (-[WebPreferences setShouldDisplayCaptions:]): Ditto.
        (-[WebPreferences shouldDisplayCaptions]): Ditto.
        (-[WebPreferences setShouldDisplayTextDescriptions:]): Ditto.
        (-[WebPreferences shouldDisplayTextDescriptions]): Ditto.
        * WebView/WebPreferencesPrivate.h:

        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Updates WebCore settings from WebKit prefs.

2011-12-03  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10523721> Crash at WebCore::SubresourceLoader::releaseResources
        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (-[WebView _removeObjectForIdentifier:]): Changed the CFRelease(self) into
        a WebCFAutorelease(self). This prevents re-entry into this method due to
        the WebView closing and canceling all subresource loads, including the
        one we have just removed.

2011-12-02  David Levin  <levin@chromium.org>

        Rename WTF class from TemporarilyChange to TemporaryChange.
        https://bugs.webkit.org/show_bug.cgi?id=73479

        Reviewed by Eric Seidel.

        * ForwardingHeaders/wtf/TemporarilyChange.h: Removed.
        * ForwardingHeaders/wtf/TemporaryChange.h: Added.

2011-12-02  Simon Fraser  <simon.fraser@apple.com>

        <rdar://problem/10423627> Layers are flipped in WebKit1 views

        Reviewed by Sam Weinig.
        
        Host the compositing layers in an NSView which is flipped, which helps AppKit
        get the geometry right in some situations.

        * WebView/WebHTMLView.mm:
        (-[WebLayerHostingFlippedView isFlipped]):
        (-[WebHTMLView attachRootLayer:]):

2011-12-02  Hajime Morrita  <morrita@chromium.org>

        Unreviewed, rolling out r101751 and r101775.
        http://trac.webkit.org/changeset/101751
        http://trac.webkit.org/changeset/101775
        https://bugs.webkit.org/show_bug.cgi?id=73191

        breaks Windows build

        * WebKitPrefix.h:

2011-12-01  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        Reviewed by Kevin Ollivier.

        Removed macro definitions which is now provided by Platform.h

        * WebKitPrefix.h:

2011-11-30  Alexey Proskuryakov  <ap@apple.com>

        Remove an unneeded argument from FrameLoaderClient::download
        https://bugs.webkit.org/show_bug.cgi?id=73486

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::download):
        Updated for the change.

2011-11-30  Dan Bernstein  <mitz@apple.com>

        WebKit/mac part of: Allow the length of a page along the pagination axis to differ from the length of the view
        https://bugs.webkit.org/show_bug.cgi?id=73476

        Reviewed by Anders Carlsson.

        * WebView/WebView.mm:
        (-[WebView _setPageLength:]): Added this accessor.
        (-[WebView _pageLength]): Ditto.
        * WebView/WebViewPrivate.h:

2011-11-30  Alexey Proskuryakov  <ap@apple.com>

        Download page URL should be set by WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73358

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.h: Removed setOriginalURLForDownload, which is now
        in WebCore.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::download): There is no need to set original URL post factum any more.
        (WebFrameLoaderClient::startDownload): Ditto.

2011-11-29  David Levin  <levin@chromium.org>

        Add a way to revert a variable to its previous value after leaving a scope.
        https://bugs.webkit.org/show_bug.cgi?id=73371

        Reviewed by Adam Barth.

        * ForwardingHeaders/wtf/TemporarilyChange.h: Added.

2011-11-29  Jessie Berlin  <jberlin@apple.com>

        WKKeyValueStorageManagerGetKeyValueStorageOrigins may not report the correct list of origins
        the first time it is called.
        https://bugs.webkit.org/show_bug.cgi?id=73374 (<rdar://problem/10196057>)

        Reviewed by Brady Eidson.

        * Storage/WebStorageTrackerClient.h:
        * Storage/WebStorageTrackerClient.mm:
        (WebStorageTrackerClient::didFinishLoadingOrigins):

2011-11-15  Anders Carlsson  <andersca@apple.com>

        DragClient::dragSourceActionMaskForPoint should use root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=72409

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::dragSourceActionMaskForPoint):
        Use -[WebView _convertPointFromRootView:] to convert the point to the web view coordinate system.

2011-11-15  Anders Carlsson  <andersca@apple.com>

        EditorClient::showCorrectionPanel should pass the string bounding box in root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=72408

        Reviewed by Sam Weinig.

        * WebCoreSupport/CorrectionPanel.mm:
        (CorrectionPanel::show):
        Convert the bounding rect to web view coordinates.

        * WebView/WebView.mm:
        (-[WebView _convertPointFromRootView:]):
        (-[WebView _convertRectFromRootView:]):
        * WebView/WebViewInternal.h:
        Add helper methods for converting from root view coordinates to web view coordinates.

2011-11-29  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: add ENABLE(STYLE_SCOPED) flag to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=72848

        Reviewed by Dimitri Glazkov.

        * Configurations/FeatureDefines.xcconfig:

2011-11-28  Jon Lee  <jonlee@apple.com>

        Create skeleton framework for notifications support in WK2
        https://bugs.webkit.org/show_bug.cgi?id=73253
        <rdar://problem/10356943>

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Split out ENABLE_NOTIFICATIONS based on platform.

        * WebCoreSupport/WebNotificationClient.h: Added.
        (WebNotificationClient::webView):
        * WebCoreSupport/WebNotificationClient.mm: Added. Implemented as stubs for now.
        (WebNotificationClient::WebNotificationClient):
        (WebNotificationClient::show):
        (WebNotificationClient::cancel):
        (WebNotificationClient::notificationObjectDestroyed):
        (WebNotificationClient::requestPermission):
        (WebNotificationClient::cancelRequestsForPermission):
        (WebNotificationClient::checkPermission):
        * WebView/WebView.mm: Set PageClient's notification client to an instance of this stubbed class.

2011-11-28  Adam Roben  <aroben@apple.com>

        Properly retain the OS X version string

        Fixes <http://webkit.org/b/73214> REGRESSION (r101215): Crash on launch beneath +[WebView
        _standardUserAgentWithApplicationName:]

        Reviewed by Antti Koivisto.

        * WebView/WebView.mm:
        (createMacOSXVersionString): Retain the string we're returning, since this function is
        supposed to return an owning reference to the caller.

2011-11-28  Hayato Ito  <hayato@chromium.org>

        Fix chromium canary build after r101215.
        Unreviewed. Build fix.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-11-27  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/72665> Switch to a more modern approach to retrieving the OS marketing version

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Set up wkGetMacOSXVersionString.
        * WebView/WebView.mm:
        (createMacOSXVersionString): Use WKGetMacOSXVersionString.

2011-11-26  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove disconnectFromBackend from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=73127

        Reviewed by Yury Semikhatsky.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::inspectorDestroyed):
        (WebInspectorClient::closeInspectorFrontend):

2011-11-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101193.
        http://trac.webkit.org/changeset/101193
        https://bugs.webkit.org/show_bug.cgi?id=73158

        Breaks Windows and Qt minimal. (Requested by pfeldman on
        #webkit).

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::inspectorDestroyed):

2011-11-26  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove disconnectFromBackend from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=73127

        Reviewed by Yury Semikhatsky.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::inspectorDestroyed):
        (WebInspectorClient::closeInspectorFrontend):

2011-11-22  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove Inspector::bringToFront from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=72937

        Reviewed by Yury Semikhatsky.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorClient::bringFrontendToFront):

2011-11-21  Mark Rowe  <mrowe@apple.com>

        Fix the SnowLeopard build.

        * Misc/WebNSFileManagerExtras.mm: Forward-declare DADiskCreateFromVolumePath on SnowLeopard as it was
        not yet declared in a public header.

2011-11-20  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/72661> Switch to a more modern approach to retrieving the startup volume name

        Use the DiskArbitration framework to retrieve the name of the startup volume rather than using Carbon
        File Manager APIs.

        Reviewed by Dan Bernstein.

        * Misc/WebNSFileManagerExtras.mm:
        (-[NSFileManager _webkit_startupVolumeName]): Retrieve a DADiskRef for the startup volume and copy
        the volume name from its description dictionary.

2011-06-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce InspectorFrontendAPI for actions initiated from the application menu.
        https://bugs.webkit.org/show_bug.cgi?id=62985

        Both: inspector protocol and WebCore/InspectorController have a number of unnecessary
        methods for plumbing the menu action handlers through the WebKit and WebCore.
        I intend to remove this menu support from the protocol and WebCore/InspectorController API.
        I am starting with exposing the new front-end API in the WebCore and using it in the WebKit/mac port.
        WebKit/win and WebKit2 to follow.

        Reviewed by Yury Semikhatsky.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController destroyInspectorView:]):
        * WebInspector/WebInspector.mm:
        (-[WebInspector showWindow]):
        (-[WebInspector show:]):
        (-[WebInspector showConsole:]):
        (-[WebInspector isDebuggingJavaScript]):
        (-[WebInspector toggleDebuggingJavaScript:]):
        (-[WebInspector startDebuggingJavaScript:]):
        (-[WebInspector stopDebuggingJavaScript:]):
        (-[WebInspector isProfilingJavaScript]):
        (-[WebInspector toggleProfilingJavaScript:]):
        (-[WebInspector startProfilingJavaScript:]):
        (-[WebInspector stopProfilingJavaScript:]):
        (-[WebInspector isJavaScriptProfilingEnabled]):
        (-[WebInspector setJavaScriptProfilingEnabled:]):
        (-[WebInspector isTimelineProfilingEnabled]):
        (-[WebInspector setTimelineProfilingEnabled:]):
        (-[WebInspector setFrontend:]):
        (-[WebInspector releaseFrontend]):
        (-[WebInspector showWindow:]):
        * WebInspector/WebInspectorFrontend.h:
        * WebInspector/WebInspectorFrontend.mm:
        (-[WebInspectorFrontend isDebuggingEnabled]):
        (-[WebInspectorFrontend setDebuggingEnabled:]):
        (-[WebInspectorFrontend isProfilingJavaScript]):
        (-[WebInspectorFrontend startProfilingJavaScript]):
        (-[WebInspectorFrontend stopProfilingJavaScript]):
        (-[WebInspectorFrontend isJavaScriptProfilingEnabled]):
        (-[WebInspectorFrontend setJavaScriptProfilingEnabled:]):
        (-[WebInspectorFrontend isTimelineProfilingEnabled]):
        (-[WebInspectorFrontend setTimelineProfilingEnabled:]):
        * WebInspector/WebInspectorPrivate.h:

2011-11-21  Jochen Eisinger  <jochen@chromium.org>

        Implement Meta referrer
        https://bugs.webkit.org/show_bug.cgi?id=72674

        Reviewed by Adam Barth.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):

2011-10-17  Antonio Gomes  <agomes@rim.com>

        Pass a Frame* parameter in EditorClient::respondToChangedSelection
        https://bugs.webkit.org/show_bug.cgi?id=70248

        Reviewed by Ryosuke Niwa.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm: Make use of the newly added Frame* parameter.
        (WebEditorClient::respondToChangedSelection):

2011-11-17  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/72646> Disable deprecation warnings around code where we cannot easily
        switch away from the deprecated APIs.

        Reviewed by Sam Weinig.

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

2011-11-18  Anton D'Auria  <adauria@apple.com>

        bool WebChromeClient::shouldInterruptJavaScript casts pointer to bool and always returns true
        https://bugs.webkit.org/show_bug.cgi?id=72568

        Reviewed by David Kilzer.

        WebChromeClient::shouldInterruptJavaScript called CallUIDelegate, which used an id
        as the return value, which was then cast to a bool and always returned true. This
        patch uses CallUIDelegateReturningBoolean instead of CallUIDelegate, with the default
        return value of NO.

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

2011-11-16  Dan Bernstein  <mitz@apple.com>

        WebKit/mac part of <rdar://problem/10262242> Add API for paginated display
        https://bugs.webkit.org/show_bug.cgi?id=72537

        Reviewed by Anders Carlsson.

        * WebView/WebView.mm:
        (-[WebView _setPaginationMode:]): Added this accessor.
        (-[WebView _paginationMode]): Ditto.
        (-[WebView _setGapBetweenPages:]): Ditto.
        (-[WebView _gapBetweenPages]): Ditto.
        (-[WebView _pageCount]): Ditto.
        * WebView/WebViewPrivate.h: Defined WebPaginationMode enum and values.

2011-11-15  Andy Estes  <aestes@apple.com>

        Consolidate the logic that creates run loop observers for flushing layer tree changes to CoreAnimation
        https://bugs.webkit.org/show_bug.cgi?id=72106

        Reviewed by Anders Carlsson.

        Remove code that schedules layer flushes and use LayerFlushScheduler instead.

        * WebView/WebView.mm:
        (-[WebView _close]): Invalidate the run loop observer and destroy the
        LayerFlushController.
        (LayerFlushController::flushLayers): Perform the work that
        layerSyncRunLoopObserverCallBack used to do.
        (-[WebView _scheduleCompositingLayerSync]): If layerFlushController has
        yet to be created, create it, then schedule a layer flush.
        * WebView/WebViewData.h:
        (LayerFlushController::create): Create a LayerFlushController that
        implements the LayerFlushSchedulerClient interface and contains a
        LayerFlushScheduler with itself as the client.
        * WebView/WebViewData.mm:
        (LayerFlushController::scheduleLayerFlush):
        (LayerFlushController::invalidateObserver):
        (LayerFlushController::LayerFlushController):

2011-11-15  Jochen Eisinger  <jochen@chromium.org>

        Rename ReferrerPolicy to clarify its meaning
        https://bugs.webkit.org/show_bug.cgi?id=72420

        Reviewed by Nate Chapin.

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]):

2011-11-15  Anders Carlsson  <andersca@apple.com>

        HostWindow screenToWindow/windowToScreen should be screenToRootView/rootViewToScreen
        https://bugs.webkit.org/show_bug.cgi?id=72397

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::screenToRootView):
        (WebChromeClient::rootViewToScreen):

2011-11-14  Anders Carlsson  <andersca@apple.com>

        HostWindow invalidation functions should use root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=72338

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::invalidateRootView):
        (WebChromeClient::invalidateContentsAndRootView):
        (WebChromeClient::invalidateContentsForSlowScroll):

2011-11-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Add --css-grid-layout to build-webkit and the build systems
        https://bugs.webkit.org/show_bug.cgi?id=72320

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:

2011-11-14  Tony Chang  <tony@chromium.org>

        Remove the CSS3_FLEXBOX compile time flag and enable on all ports
        https://bugs.webkit.org/show_bug.cgi?id=72196

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:

2011-11-07  Adam Barth  <abarth@webkit.org>

        Move static "policy" state from SecurityOrigin.cpp to SecurityPolicy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=71755

        Reviewed by Eric Seidel.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::HostedNetscapePluginStream):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        (+[WebView _addOriginAccessWhitelistEntryWithSourceOrigin:destinationProtocol:destinationHost:allowDestinationSubdomains:]):
        (+[WebView _removeOriginAccessWhitelistEntryWithSourceOrigin:destinationProtocol:destinationHost:allowDestinationSubdomains:]):
        (+[WebView _resetOriginAccessWhitelists]):

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

        Move NSRange / DOMRange functions back to WebFrameInternal
        https://bugs.webkit.org/show_bug.cgi?id=71844

        Reviewed by Alexey Proskuryakov.

        * WebView/WebFrame.mm:
        (-[WebFrame _convertNSRangeToDOMRange:]):
        (-[WebFrame _convertDOMRangeToNSRange:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebFramePrivate.h:

2011-11-08  Michael Saboff  <msaboff@apple.com>

        Towards 8 Bit Strings: Templatize JSC::Parser class by Lexer type
        https://bugs.webkit.org/show_bug.cgi?id=71761

        Changed WKPCEvaluate() to use emptyString() when the source is
        zero length.

        Reviewed by Gavin Barraclough.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate):

2011-11-08  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71856
        WebKit should use new NSWindowDidChangeBackingPropertiesNotification instead of 
        old NSWindowDidChangeResolutionNotification
        -and corresponding-
        <rdar://problem/10317253>

        Reviewed by Tim Hatcher.

        * WebView/WebView.mm:
        (-[WebView addWindowObserversForWindow:]):
        (-[WebView removeWindowObservers]):

        We have to check that the backing scale factor actually changed since this 
        notification can also be used to signify other changes. 
        (-[WebView _windowDidChangeBackingProperties:]):

2011-11-07  Adam Barth  <abarth@webkit.org>

        Move DomainRelaxationForbidden scheme registry to SchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=71750

        Reviewed by Eric Seidel.

        * WebView/WebView.mm:
        (+[WebView _setDomainRelaxationForbidden:forURLScheme:]):

2011-11-07  Jessie Berlin  <jberlin@apple.com>

        Need a way to allow a scheme access to Local Storage and Databases while Private Browsing is
        enabled.
        https://bugs.webkit.org/show_bug.cgi?id=71631

        Reviewed by Jon Honeycutt.

        Add WebKit1 API to register a scheme as ignoring Private Browsing for Local Storage and
        Databases.

        * WebView/WebView.mm:
        (+[WebView _registerURLSchemeAsAllowingLocalStorageAccessInPrivateBrowsing:]):
        Call through to the SchemeRegistry function.
        (+[WebView _registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing:]):
        Ditto.
        * WebView/WebViewPrivate.h:

2011-11-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=71306

        Reviewed by Darin Adler.

        Added getPropertyNames to the MethodTable, changed all the virtual 
        implementations of getPropertyNames to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

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

2011-11-02  Darin Adler  <darin@apple.com>

        Change remaining callers of releaseRef to call leakRef
        https://bugs.webkit.org/show_bug.cgi?id=71422

        Reviewed by Darin Fisher.

        * History/WebBackForwardList.mm:
        (-[WebBackForwardList initWithBackForwardList:]):
        * History/WebHistoryItem.mm:
        (-[WebHistoryItem copyWithZone:]):
        (-[WebHistoryItem initWithWebCoreHistoryItem:]):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):
        * WebCoreSupport/WebOpenPanelResultListener.mm:
        * WebView/WebDataSource.mm:
        (-[WebDataSource _initWithDocumentLoader:]):
        * WebView/WebResource.mm:
        (-[WebResourcePrivate initWithCoreResource:]):
        Use leakRef.

2011-11-02  Joseph Pecoraro  <pecoraro@apple.com>

        Move NSRange / DOMRange conversion functions to WebFramePrivate
        https://bugs.webkit.org/show_bug.cgi?id=71435

        Reviewed by Sam Weinig.

        Move conversion functions to WebFramePrivate,
        and remove the no longer used versions.

        * WebView/WebFrame.mm:
        (-[WebFrame _convertNSRangeToDOMRange:]):
        (-[WebFrame _convertDOMRangeToNSRange:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebFramePrivate.h:

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

        Add ENABLE_CSS_SHADERS flag
        https://bugs.webkit.org/show_bug.cgi?id=71394

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2011-11-02  Jon Lee  <jonlee@apple.com>

        Expand DragController to provide more information about the dragging session
        https://bugs.webkit.org/show_bug.cgi?id=71324
        <rdar://problem/10379175>

        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (-[WebView draggingEntered:]): DragOperation is now inside the DragSession struct.
        (-[WebView draggingUpdated:]):

2011-11-02  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor is silent
        https://bugs.webkit.org/show_bug.cgi?id=70973

        Reviewed by Adam Barth.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didRunInsecureContent):
        (WebFrameLoaderClient::didDetectXSS):
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebFrameLoadDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebView _cacheFrameLoadDelegateImplementations]):

2011-11-01  Darin Adler  <darin@apple.com>

        Crash in PDF code when script has illegal UTF-8 or UTF-16 sequences
        https://bugs.webkit.org/show_bug.cgi?id=71289

        Reviewed by Dan Bernstein.

        Just adding a null check. I don't have access to an actual PDF with
        this problem but crashes from the field indicate they exist.

        * WebView/WebPDFDocumentExtras.mm:
        (allScriptsInPDFDocument): Skip the code to add the script text
        to an array when the script is null.

2011-10-28  John Sullivan  <sullivan@apple.com>

        WebKit part of:
        https://bugs.webkit.org/show_bug.cgi?id=71142
        Whether backspace goes Back should be configurable

        Reviewed by Sam Weinig.

        * WebView/WebFrameView.mm:
        (-[WebFrameView keyDown:]):
        Honor the new preference.

        * WebView/WebPreferenceKeysPrivate.h:
        Added #define for WebKitBackspaceKeyNavigationEnabledKey
        
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        Initialize new pref to YES, to match current behavior.
        (-[WebPreferences setBackspaceKeyNavigationEnabled:]):
        New method, standard prefs setter.
        (-[WebPreferences backspaceKeyNavigationEnabled]):
        New method, standard prefs getter.

        * WebView/WebPreferencesPrivate.h:
        Declared new methods.
        
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        Updates WebCore settings from WebKit prefs.

2011-10-28  Jochen Eisinger  <jochen@chromium.org>

        Rename a number of methods mentioning JavaScript to just Script instead
        https://bugs.webkit.org/show_bug.cgi?id=71105

        Reviewed by Adam Barth.

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

2011-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Reviewed by David Kilzer.

        Make FeatureDefines Identical Across OS X Projects
        https://bugs.webkit.org/show_bug.cgi?id=71051

        * Configurations/FeatureDefines.xcconfig:

2011-10-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSCell::toThisObject
        https://bugs.webkit.org/show_bug.cgi?id=70958

        Reviewed by Geoffrey Garen.

        Converted all instances of toThisObject to static functions, 
        added toThisObject to the MethodTable, and replaced all call sites
        with a corresponding lookup in the MethodTable.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove deletePropertyVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70738

        Reviewed by Geoffrey Garen.

        Removed all declarations and definitions of deletePropertyVirtual.
        Also replaced all call sites to deletePropertyVirtual with a 
        corresponding lookup in the MethodTable.

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

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove putVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70740

        Reviewed by Geoffrey Garen.

        Removed all declarations and definitions of putVirtual.
        Also replaced all call sites to putVirtual with a 
        corresponding lookup in the MethodTable.

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

2011-10-24  Geoffrey Garen  <ggaren@apple.com>

        Removed SharedUChar and tightened language around its previous uses
        https://bugs.webkit.org/show_bug.cgi?id=70698

        Reviewed by David Levin.

        - Renamed "threadSafeCopy" and "crossThreadCopy" to "isolatedCopy" because
        the former names gave the dangerous misimpression that the resulting object
        was thread-safe, which is not true.

        * Storage/WebDatabaseTrackerClient.mm:
        (DidModifyOriginData::dispatchToMainThread):

2011-10-24  Michael Saboff  <msaboff@apple.com>

        WebKit doesn't build with recent changes to libdispatch
        https://bugs.webkit.org/show_bug.cgi?id=70737

        Added initialization for new WebKitSystemInterface function 
        CreateVMPressureDispatchOnMainQueue.

        Reviewed by Geoffrey Garen.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-10-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getConstructDataVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70638

        Reviewed by Darin Adler.

        Removed all declarations and definitions of getConstructDataVirtual.
        Also replaced all call sites to getConstructDataVirtual with a 
        corresponding lookup in the MethodTable.

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

2011-10-20  Ian Henderson  <ianh@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70541
        There are two WebFrameLoadDelegatePrivate categories on NSObject

        Reviewed by David Kilzer.

        * WebView/WebViewPrivate.h: Rename the private delegate categories in
        WebViewPrivate.h with a "WebView" prefix to avoid collision.

2011-10-20  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r96823): Contextual menu closes immediately when control-clicking in Flash plug-in
        https://bugs.webkit.org/show_bug.cgi?id=70534
        <rdar://problem/10308827>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.mm: (NetscapePluginWidget::handleEvent): Return true
        for contextmenu event, so that plug-ins won't get a default WebKit context menu. We can't
        know if the plug-in is handling mousedown (or even mouseup) by displaying a menu.

2011-10-19  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70396
        Focus rings are too thin in HiDPI in WebKit2
        -and corresponding-
        <rdar://problem/10086876>

        Reviewed by Dan Bernstein.

        Rename wkSetPatternBaseCTM to wkSetBaseCTM
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

        To create a HiDPI context in DRT, we have to set the base CTM, which currently 
        requires CG SPI, so we have to do it through WebKitSystemInterface.
        * WebView/WebView.mm:
        (-[WebView _setBaseCTM:forContext:]):
        * WebView/WebViewPrivate.h:

2011-10-18  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(XPATH)
        https://bugs.webkit.org/show_bug.cgi?id=70217

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2011-10-14  Chris Marrin  <cmarrin@apple.com>

        Throttle rate of requestAnimationFrame when page is not visible
        https://bugs.webkit.org/show_bug.cgi?id=67873

        Reviewed by Anders Carlsson.

        Plumb through notification when the window is hidden/shown or
        minimized/unminimized

        * WebView/WebView.mm:
        (-[WebView _windowWillOrderOnScreen:]):
        (-[WebView _windowWillOrderOffScreen:]):

2011-10-16  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(DOM_STORAGE)
        https://bugs.webkit.org/show_bug.cgi?id=70189

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:
        * Storage/WebStorageManager.mm:
        * Storage/WebStorageManagerInternal.h:
        * Storage/WebStorageTrackerClient.h:
        * Storage/WebStorageTrackerClient.mm:
        (WebStorageTrackerClient::dispatchDidModifyOrigin):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):

2011-10-14  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/70158> Fix clang compiler warnings

        Reviewed by Darin Adler.

        The following two methods in WebDelegateImplementationCaching.h
        are ambiguous in WebChromeClient::runJavaScriptPrompt() because
        the compiler can't decide how to convert the WTF::String
        defaultText argument:

            id CallUIDelegate(WebView *, SEL, id, id);
            id CallUIDelegate(WebView *, SEL, id, BOOL);

        The fix is to perform the conversion explicitly.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::runJavaScriptPrompt): Extract a defaultString
        variable to convert the WTF::String to an NSString*, then
        use defaultString in place of defaultText.

2011-10-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename virtual put to putVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69851

        Reviewed by Darin Adler.

        Renamed virtual versions of put to putVirtual in prepration for 
        adding the static put to the MethodTable in ClassInfo since the 
        compiler gets mad if the virtual and static versions have the same 
        name.

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

2011-10-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename virtual deleteProperty to deletePropertyVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69884

        Reviewed by Darin Adler.

        Renamed virtual versions of deleteProperty to deletePropertyVirtual in prepration for 
        adding the static deleteProperty to the MethodTable in ClassInfo since the 
        compiler gets mad if the virtual and static versions have the same name.

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

2011-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        Make the interface of locationAndLengthFromRange and rangeFromLocationAndLength consistent
        https://bugs.webkit.org/show_bug.cgi?id=69964

        Reviewed by Enrica Casucci.

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

2011-10-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename virtual getConstructData to getConstructDataVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69872

        Reviewed by Geoffrey Garen.

        Renamed virtual getConstructData functions to getConstructDataVirtual to 
        avoid conflicts when we add static getConstructData to the MethodTable.

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

2011-10-13  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70050
        DRT and WRT should have HiDPI testing capabilities

        Reviewed by Darin Adler.

        New method _backingScaleFactor matches SPI of a similar name that I added 
        recently to WKPage in WebKit2. Equivalent functionality is needed for 
        DumpRenderTree's HiDPI support.
        * WebView/WebView.mm:
        (-[WebView _backingScaleFactor]):
        * WebView/WebViewPrivate.h:

2011-10-12  Chris Marrin  <cmarrin@apple.com>

        Sync requestAnimationFrame callback to CVDisplayLink on Mac
        https://bugs.webkit.org/show_bug.cgi?id=68911

        Reviewed by Simon Fraser.

        Add windowDidChangeScreen function which listens for the window changing
        screens and passes the new displayID along to WebCore::Page. It also sends
        one on windowWillOrderOnScreen, so the Page has a fresh displayID after it's
        created.

        * WebView/WebView.mm:
        (-[WebView addWindowObserversForWindow:]):
        (-[WebView removeWindowObservers]):
        (-[WebView _windowDidChangeScreen:]):
        (-[WebView _windowWillOrderOnScreen:]):

2011-10-12  Adam Barth  <abarth@webkit.org>

        Remove ENABLE(XHTMLMP) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=69729

        Reviewed by David Levin.

        * Configurations/FeatureDefines.xcconfig:

2011-10-10  Nate Chapin  <japhet@chromium.org>

        Use a CachedImageClient instead of CachedResourceClient
        in WebHTMLView.
        https://bugs.webkit.org/show_bug.cgi?id=69790

        Reviewed by Adam Barth.

        * WebView/WebHTMLView.mm:
        (promisedDataClient):

2011-10-10  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getCallDataVirtual methods
        https://bugs.webkit.org/show_bug.cgi?id=69186

        Reviewed by Geoffrey Garen.

        Removed all getCallDataVirtual methods and replaced their call sites 
        with an explicit lookup in the MethodTable.

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

2011-10-10  Joseph Pecoraro  <joepeck@webkit.org>

        Extract WebOpenPanelResultListener out into its own file
        https://bugs.webkit.org/show_bug.cgi?id=69575

        Reviewed by David Kilzer.

        Extract the WebOpenPanelResultListener class out into
        its own file. No functional change.

        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebOpenPanelResultListener.h: Added.
        * WebCoreSupport/WebOpenPanelResultListener.mm: Added.
        (-[WebOpenPanelResultListener dealloc]):
        (-[WebOpenPanelResultListener finalize]):
        (-[WebOpenPanelResultListener cancel]):
        (-[WebOpenPanelResultListener chooseFilename:]):
        (-[WebOpenPanelResultListener chooseFilenames:]):
        * WebView/WebUIDelegate.h:

2011-10-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r96996.
        http://trac.webkit.org/changeset/96996
        https://bugs.webkit.org/show_bug.cgi?id=69697

        It broke all tests on the Qt bot (Requested by Ossy_night on
        #webkit).

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

2011-10-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getCallDataVirtual methods
        https://bugs.webkit.org/show_bug.cgi?id=69186

        Reviewed by Geoffrey Garen.

        Removed all getCallDataVirtual methods and replaced their call sites 
        with an explicit lookup in the MethodTable.

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

2011-10-06  Anders Carlsson  <andersca@apple.com>

        When building with clang, enable -Wglobal-constructors and -Wexit-time-destructors
        https://bugs.webkit.org/show_bug.cgi?id=69586

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        Add -Wglobal-constructors and -Wexit-time-destructors when building with clang.

2011-10-06  Anders Carlsson  <andersca@apple.com>

        Add DEFINE_DEBUG_ONLY_GLOBAL for globals that should be defined in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=69584

        Reviewed by Darin Adler.

        Adopt the DEFINE_DEBUG_ONLY_GLOBAL macro.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:

2011-10-03  Andy Estes  <aestes@apple.com>

        Add an option to suppress rendering until the document's load event fires.
        https://bugs.webkit.org/show_bug.cgi?id=69298

        Reviewed by Simon Fraser.
        
        Add a new private WebPreference.

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

2011-10-05  Jer Noble  <jer.noble@apple.com>

        Enable WEB_AUDIO by default in the WebKit/mac port.
        https://bugs.webkit.org/show_bug.cgi?id=68587

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2011-10-05  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/69386> REGRESSION: Curious Location of StorageTracker.db

        Reviewed by Alexey Proskuryakov.

        * Storage/WebStorageManager.mm:
        (+[WebStorageManager _storageDirectoryPath]): Restore call to
        -[NSString stringByStandardizingPath].  Also fix over-release of
        sLocalStoragePath if the initial -objectForKey: call returned an
        NSString object.  Use pthread_once to be thread-safe.

2011-10-04  Kent Tamura  <tkent@chromium.org>

        Introduce feature flags for incomplete input types
        https://bugs.webkit.org/show_bug.cgi?id=68971

        Reviewed by Hajime Morita.

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE_INPUT_TYPE_* flags. They are enabled only for iOS.

2011-10-03  Geoffrey Garen  <ggaren@apple.com>

        Some JSValue cleanup
        https://bugs.webkit.org/show_bug.cgi?id=69320

        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (aeDescFromJSValue): Updated for JSC changes.

2011-10-04  Scott Graham  <scottmg@chromium.org>

        Add GAMEPAD feature flag
        https://bugs.webkit.org/show_bug.cgi?id=66859

        Reviewed by Darin Fisher.

        * Configurations/FeatureDefines.xcconfig:

2011-10-03  Jer Noble  <jer.noble@apple.com>

        Unreviewed, rolling out r96526.
        http://trac.webkit.org/changeset/96526
        https://bugs.webkit.org/show_bug.cgi?id=68587

        WEB_AUDIO has numerous 64->32 bit casting warnings, causing
        build breakages where -Wall is enabled.

        * Configurations/FeatureDefines.xcconfig:

2011-10-03  Jer Noble  <jer.noble@apple.com>

        Enable WEB_AUDIO by default in the WebKit/mac port.
        https://bugs.webkit.org/show_bug.cgi?id=68587

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

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

        Strength reduce Mac only Frame::searchForLabelsBeforeElement and Frame::matchLabelsAgainstElement into callers
        https://bugs.webkit.org/show_bug.cgi?id=69230

        Reviewed by Anders Carlsson.

        * WebView/WebHTMLRepresentation.mm:
        (regExpForLabels):
        (searchForLabelsBeforeElement):
        (matchLabelsAgainstString):
        (matchLabelsAgainstElement):
        (-[WebHTMLRepresentation searchForLabels:beforeElement:resultDistance:resultIsInCellAbove:]):
        (-[WebHTMLRepresentation matchLabels:againstElement:]):

2011-10-02  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r95474): Unable to type anywhere in nightly builds in WebKit1 mode
        https://bugs.webkit.org/show_bug.cgi?id=68542

        Reviewed by Mark Rowe.

        * WebView/WebView.mm: (-[WebView _usesDocumentViews]): Re-add this method for now.

2011-10-01  Geoffrey Garen  <ggaren@apple.com>

        Leopard build fix: Updated for Strong<T> changes.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        * WebView/WebScriptDebugger.mm:

2011-09-28  Joseph Pecoraro  <joepeck@webkit.org>

        ASSERT if WebView's UIDelegate does not implement webView:runOpenPanel
        https://bugs.webkit.org/show_bug.cgi?id=69037

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::runOpenPanel):
        If no delegate is implemented, dismiss the listener
        with a cancel. It expects some action.

2011-09-28  Anton D'Auria  <adauria@apple.com>

        Expose +[WebStorageManager _storageDirectoryPath] as SPI
        https://bugs.webkit.org/show_bug.cgi?id=68951

        Reviewed by Brady Eidson.

        This patch exposes +[WebStorageManager _storageDirectoryPath], which
        pulls the path from NSUserDefaults if the preference is set. Otherwise,
        it falls back on the default path.

        * Storage/WebStorageManager.mm:
        (+[WebStorageManager _storageDirectoryPath]): Adding static variable
        so that we don't reread user defaults repeatedly.
        (WebKitInitializeStorageIfNecessary):
        * Storage/WebStorageManagerPrivate.h:

2011-09-27  Andy Estes  <aestes@apple.com>

        WebKitLinkedOnOrAfter() check is ineffective for Solar Walk app-specific hack.
        https://bugs.webkit.org/show_bug.cgi?id=68863

        Reviewed by Darin Adler.

        The SolarWalk binary does not link against WebKit.framework directly,
        so calling NSVersionOfLinkTimeLibrary() will not return the version of
        WebKit against which SolarWalk was linked. Since Solar Walk has
        released an update that addresses the issue for which this app-specific
        hack was originally added, we should just remove the hack.

        * Misc/SolarWalkQuirksUserScript.js: Removed.
        * WebView/WebView.mm: Removed needsSolarWalkQuirksScript(),
        leakSolarWalkQuirksUserScriptContents(), and
        -[WebView _injectSolarWalkQuirksScript].
        (-[WebView _commonInitializationWithFrameName:groupName:]): Do not
        inject the Solar Walk quirks script.

2011-09-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::getCallData
        https://bugs.webkit.org/show_bug.cgi?id=68741

        Reviewed by Darin Adler.

        In this patch we just extract the bodies of the virtual getCallData methods
        throughout the JSCell inheritance hierarchy out into static methods, which are 
        now called from the virtual methods.  This is an intermediate step in trying to 
        move the virtual-ness of getCallData into our own method table stored in 
        ClassInfo.  We need to convert the methods to static methods because static methods 
        can be represented as function pointers rather than pointers to member functions, and
        function pointers are smaller and faster to call than pointers to member functions.

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

2011-09-23  Simon Fraser  <simon.fraser@apple.com>

        Repaint tests don't work in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=68453

        Reviewed by Sam Weinig.

        Have FrameView keep track of repaint rects when asked to, and
        expose this set of repaint rects via private WebKit API for later
        use by DumpRenderTree.

        * WebView/WebView.mm:
        (-[WebView setTracksRepaints:]):
        (-[WebView isTrackingRepaints]):
        (-[WebView resetTrackedRepaints]):
        (-[WebView trackedRepaintRects]):
        * WebView/WebViewPrivate.h:

2011-09-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add custom vtable struct to ClassInfo struct
        https://bugs.webkit.org/show_bug.cgi?id=68567

        Reviewed by Oliver Hunt.

        Added CREATE_METHOD_TABLE macro to generate the custom vtable for the 
        specified class in its ClassInfo.  Also added to it the first function to use 
        this macro, visitChildren.  This is part of the process of getting rid of all 
        C++ virtual methods in JSCell.  Eventually all virtual functions in JSCell 
        that can't easily be converted to non-virtual functions will be put into 
        this custom vtable structure.

        * Plugins/Hosted/ProxyInstance.mm:
        * Plugins/Hosted/ProxyRuntimeObject.mm:

2011-09-24  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(OFFLINE_WEB_APPLICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=68767

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:
        * Misc/WebCache.mm:
        (+[WebCache empty]):
        * WebCoreSupport/WebApplicationCache.mm:
        * WebCoreSupport/WebApplicationCacheQuotaManager.mm:
        (-[WebApplicationCacheQuotaManager usage]):
        (-[WebApplicationCacheQuotaManager quota]):
        (-[WebApplicationCacheQuotaManager setQuota:]):
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebView/WebDataSource.mm:
        (-[WebDataSource _transferApplicationCache:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _cacheabilityDictionary]):
        * WebView/WebView.mm:
        (WebKitInitializeApplicationCachePathIfNecessary):

2011-09-23  Adam Klein  <adamk@chromium.org>

        Add ENABLE_MUTATION_OBSERVERS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=68732

        Reviewed by Ojan Vafai.

        This flag will guard an implementation of the "Mutation Observers" proposed in
        http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html

        * Configurations/FeatureDefines.xcconfig:

2011-09-23  Anders Carlsson  <andersca@apple.com>

        Axe WebImageRendererFactory
        https://bugs.webkit.org/show_bug.cgi?id=68715

        Reviewed by Darin Adler.

        Remove WebImageRendererFactory, it was used by Safari 3, many a moon ago.

        * WebCoreSupport/WebImageRendererFactory.m: Removed.

2011-09-23  Anders Carlsson  <andersca@apple.com>

        Add OVERRIDE to a bunch of virtual member functions on clients
        https://bugs.webkit.org/show_bug.cgi?id=68712

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig:
        * 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/WebPlatformStrategies.h:

2011-09-22  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_FILTERS
        https://bugs.webkit.org/show_bug.cgi?id=68652

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2011-09-22  Anders Carlsson  <andersca@apple.com>

        Get rid of Widget::setBoundsSize
        https://bugs.webkit.org/show_bug.cgi?id=68491

        Reviewed by Sam Weinig.

        This basically reverts http://trac.webkit.org/changeset/79167 and http://trac.webkit.org/changeset/75897
        which were added to make zoom gestures work with WebKit1, but since we don't support zoom gestures in WebKit1
        anymore, it's better for code cleanliness to get rid of Widget::setBoundsSize and the associated code. While this
        will unfortunately break transformed iframes in WebKit1, but Simon says that it's an acceptable tradeoff.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        * WebView/WebFrameView.mm:

2011-09-19  Jer Noble  <jer.noble@apple.com>

        Add settings to control the availability of the Web Audio API to WebKit and WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=68382

        Reviewed by Darin Adler.

        Initialize the webAudioEnabled preference to NO by default.

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

2011-09-21  Anders Carlsson  <andersca@apple.com>

        Remove checks for Leopard-only Objective-C APIs
        https://bugs.webkit.org/show_bug.cgi?id=68579

        Reviewed by Sam Weinig.

        We can always assume that OBJC_API_VERSION is at least 2, it's been 2 since Leopard.

        * Misc/WebNSObjectExtras.h:

2011-09-21  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Remove Qt specific code from css/SelectorChecker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=67702

        Reviewed by Csaba Osztrogonác.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::isLinkVisited):

2011-09-20  Anders Carlsson  <andersca@apple.com>

        Remove ScrollView::platformContentsSize
        https://bugs.webkit.org/show_bug.cgi?id=68188

        Reviewed by Darin Adler.

        When creating the document view, make sure it's zero sized which matches the initial size
        of the ScrollView. This is fine to do early since DocumentWriter::begin sets the contents
        size to a zero size anyway.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _makeDocumentViewForDataSource:]):

2011-09-19  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: streamline Console's MessageType and MessageSource semantics.
        https://bugs.webkit.org/show_bug.cgi?id=68342

        This change fixes semantics of the MessageSource and MessageType:
        MessageSource is now the source of the message (be it Network, HTML
        parser or Console API). MessageType is only defined for the Console API
        messages and contains the name of the API call (log, dir, dirxml, etc.). 
        Subsequent https://bugs.webkit.org/show_bug.cgi?id=66371 will make MessageType
        private to the inspector.

        Reviewed by Tony Gentilcore.

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

2011-09-19  Timothy Hatcher  <timothy@apple.com>

        Make WebViews in NSPopovers render as they would in active windows.

        The NSWindowDid{Become,Resign}KeyNotifications are not fired when NSPopovers
        are shown or hidden since they share key with the parent window. So WebView
        and WebHTMLView need to also observe the will order on/off screen notifications.

        https://webkit.org/b/68402
        rdar://problem/9754099

        Reviewed by John Sullivan.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _removeWindowObservers]): Remove order on/off screen notification obversers.
        (-[WebHTMLView addWindowObservers]): Add order on/off screen notification obversers.
        (-[WebHTMLView windowWillOrderOnScreen:]): Check if the window is already a key window,
        which can be the case for NSPopovers.
        (-[WebHTMLView windowWillOrderOffScreen:]): Remove the mouse moved observer.
        * WebView/WebView.mm:
        (-[WebView addWindowObserversForWindow:]): Add order off screen notification obverser.
        (-[WebView removeWindowObservers]): Remove order off screen notification obverser.
        (-[WebView _windowWillOrderOnScreen:]): Call _updateActiveState.
        (-[WebView _windowWillOrderOffScreen:]): Ditto.

2011-09-19  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/68421> Stop calling UpdateSystemActivity in places where we hold power assertions that achieve the same effect

        On SnowLeopard and newer it's not necessary to call UpdateSystemActivity to prevent the screensaver from kicking
        in as the NoDisplaySleep assertion now has that effect. It's also not necessary to hold both a NoDisplaySleep and
        a NoIdleSleep assertion as the latter is implied by the former.

        Adopt the DisplaySleepDisabler class that was added to WebCore and remove all of duplicated logic from WebFullScreenController.

        Reviewed by Dan Bernstein.

        * WebView/WebFullScreenController.h:
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController dealloc]):
        (-[WebFullScreenController _updatePowerAssertions]): Create a DisplaySleepDisabler instance when transitioning from permitting
        display sleep to disabling display sleep. Clear out our reference when sleep should be permitted, destroying any
        disabler that we own.

2011-09-19  Adam Barth  <abarth@webkit.org>

        Always enable ENABLE(EVENTSOURCE)
        https://bugs.webkit.org/show_bug.cgi?id=68414

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2011-09-19  Anders Carlsson  <andersca@apple.com>

        Fix crashes when running WebKit1 tests.

        -[WebView _mustDrawUnionedRect:singleRects:count:] was removed, so just put back the
        equivalent code directly into -[WebHTMLView drawRect:].

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawRect:]):
        * WebView/WebViewInternal.h:

2011-09-19  Anders Carlsson  <andersca@apple.com>

        Remove the last remains of viewless WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=68388

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::forceLayoutForNonHTML):
        Remove null check.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:]):
        Remove usesDocumentViews parameter and checks.

        (-[WebView _initWithFrame:frameName:groupName:usesDocumentViews:]):
        Add an assertion that usesDocumentViews is always true.

        (-[WebView _isUsingAcceleratedCompositing]):
        Remove usesDocumentViews check.

        (-[WebView _isSoftwareRenderable]):
        Remove usesDocumentViews check.

        (-[WebView initWithFrame:frameName:groupName:]):
        Remove usesDocumentViews parameter and always pass YES to the _initWithFrame method.
        
        (-[WebView initWithCoder:]):
        Remove usesDocumentViews parameter.

        (-[WebView _frameViewAtWindowPoint:]):
        Remove usesDocumentViews check.

        * WebView/WebViewData.h:
        Remove usesDocumentViews ivar.

        * WebView/WebViewPrivate.h:
        Remove usesDocumentViews parameters.

2011-09-19  Anders Carlsson  <andersca@apple.com>

        Remove WebViewEventHandling.mm
        https://bugs.webkit.org/show_bug.cgi?id=68387

        Reviewed by Adam Roben.

        WebViewEventHandling.mm was all about event handling in viewless WebKit, so rip it out since
        we're getting rid of viewless WebKit1.

        * WebView/WebView.mm:
        (-[WebView _close]):
        * WebView/WebViewData.h:
        * WebView/WebViewEventHandling.mm: Removed.
        * WebView/WebViewInternal.h:

2011-09-19  Anders Carlsson  <andersca@apple.com>

        Remove -[WebView _selectionChanged] and -[WebView _setTooltip:]
        https://bugs.webkit.org/show_bug.cgi?id=68385

        Reviewed by Adam Roben.

        Move these functions back into the respective clients and remove usesDocumentViews checks.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setToolTip):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::respondToChangedSelection):
        * WebView/WebView.mm:
        * WebView/WebViewEventHandling.mm:
        * WebView/WebViewInternal.h:

2011-09-19  Anders Carlsson  <andersca@apple.com>

        Begin removing -[WebView _usesDocumentCalls] from WebView.mm
        https://bugs.webkit.org/show_bug.cgi?id=68383

        Reviewed by Adam Roben.

        Remove checks and begin assuming that -[WebView _usesDocumentViews] always 
        returns true, since viewless WebKit1 has been abandoned.

        * WebView/WebView.mm:
        (-[WebView selectedFrame]):
        (-[WebView setHostWindow:]):
        (-[WebView acceptsFirstResponder]):
        (-[WebView becomeFirstResponder]):
        (-[WebView _webcore_effectiveFirstResponder]):
        (-[WebView setNextKeyView:]):
        (-[WebView setHoverFeedbackSuspended:]):

2011-09-19  Anders Carlsson  <andersca@apple.com>

        Remove calls to -[WebView _usesDocumentViews] from WebFrameLoaderClient.mm
        https://bugs.webkit.org/show_bug.cgi?id=68379

        Reviewed by Adam Roben.

        Remove checks and begin assuming that -[WebView _usesDocumentViews] always 
        returns true, since viewless WebKit1 has been abandoned.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::hasHTMLView):
        (WebFrameLoaderClient::dispatchDidCommitLoad):
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        (WebFrameLoaderClient::createFrame):
        * WebView/WebFrame.mm:
        (-[WebFrame _updateBackgroundAndUpdatesWhileOffscreen]):
        (-[WebFrame _hasSelection]):
        (-[WebFrame _clearSelection]):
        (-[WebFrame _shouldFlattenCompositingLayers:]):
        (-[WebFrame _dragSourceEndedAt:operation:]):
        (-[WebFrame frameView]):

2011-09-19  Anders Carlsson  <andersca@apple.com>

        Remove calls to -[WebView _usesDocumentViews]
        https://bugs.webkit.org/show_bug.cgi?id=68377

        Reviewed by Adam Roben.

        Remove checks and begin assuming that -[WebView _usesDocumentViews] always 
        returns true, since viewless WebKit1 has been abandoned.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::windowResizerRect):
        (WebChromeClient::invalidateContentsAndWindow):
        (WebChromeClient::screenToWindow):
        (WebChromeClient::windowToScreen):
        (WebChromeClient::platformPageClient):
        (WebChromeClient::scrollRectIntoView):
        (WebChromeClient::print):
        * WebView/WebDataSource.mm:
        (-[WebDataSource _receivedData:]):

2011-09-19  Dan Bernstein  <mitz@apple.com>

        WebKit part of [mac] WebKit contains Objective-C classes that are not prefixed with its standard prefixes
        https://bugs.webkit.org/show_bug.cgi?id=68323

        Reviewed by Sam Weinig.

        Renamed NonBlockingPanel to WebNonBlockingPanel.
        Renamed ThreadEnabler to WebCocoaThreadingEnabler.
        Renamed PDFPrefUpdatingProxy to WebPDFPrefUpdatingProxy.

        * Misc/WebIconDatabase.mm:
        (+[WebCocoaThreadingEnabler enableThreading]):
        (importToWebCoreFormat):
        * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib:
        * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:
        * Panels/WebAuthenticationPanel.h:
        * Panels/WebAuthenticationPanel.m: Renamed NonBlockingPanel to
        WebNonBlockingPanel. Because Safari 5.1 uses NonBlockingPanel, this will
        cause nightly builds to log an error message when showing the Safari
        HTTP authentication sheet and disable the Quit command while the sheet
        is disaplyed.
        * WebView/WebPDFView.mm:
        (-[WebPDFView initWithFrame:]):
        (-[WebPDFView _updatePreferencesSoon]):

2011-09-17  Mihai Parparita  <mihaip@chromium.org>

        FrameLoaderClient BackForwardList-related methods are unsued
        https://bugs.webkit.org/show_bug.cgi?id=68293

        Reviewed by Darin Adler.

        Remove FrameLoaderClient methods that were added by r51629, since only        
        the old (since-deleted) Android port needed them.

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

2011-09-16  Simon Fraser  <simon.fraser@apple.com>

        Make custom scrollbar theme for use in DRT, to reduce pixel diffs between platforms
        https://bugs.webkit.org/show_bug.cgi?id=68134

        Reviewed by Sam Weinig.
        
        Hook up a private preference that enables the mock scrollbar theme.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences mockScrollbarsEnabled]):
        (-[WebPreferences setMockScrollbarsEnabled:]):
        * WebView/WebPreferencesPrivate.h:

2011-09-15  Adam Barth  <abarth@webkit.org>

        Rename ENABLE(DATABASE) to ENABLE(SQL_DATABASE)
        https://bugs.webkit.org/show_bug.cgi?id=68205

        Reviewed by Eric Seidel.

        * Storage/WebDatabaseManager.mm:
        * Storage/WebDatabaseManagerInternal.h:
        * Storage/WebDatabaseManagerPrivate.h:
        * Storage/WebDatabaseQuotaManager.mm:
        (-[WebDatabaseQuotaManager usage]):
        (-[WebDatabaseQuotaManager quota]):
        (-[WebDatabaseQuotaManager setQuota:]):
        * Storage/WebDatabaseTrackerClient.h:
        * Storage/WebDatabaseTrackerClient.mm:
        * 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:usesDocumentViews:]):
        (-[WebView _preferencesChanged:]):

2011-09-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (7/7)
        https://bugs.webkit.org/show_bug.cgi?id=68122

        Reviewed by Geoffrey Garen.

        Completed the seventh and final level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::create):
        (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::create):
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):

2011-09-15  Kentaro Hara  <haraken@google.com>

        A single line must not be split into two pages.
        https://bugs.webkit.org/show_bug.cgi?id=65005

        Reviewed by David Hyatt.

        When the document width of a page is overflowed, the last line of the page can be
        split into the next page. This is the regression caused by r88737. r88737 tried to
        fix rounding errors in rendering calculations by expanding and shrinking a page
        using one common method, resizePageRectsKeepingRatio(), but overlooked the case where
        a document width gets overflowed.

        Test: printing/single-line-must-not-be-split-into-two-pages.html

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_setPrintingModeRecursive]): Passes an original page size to setPrinting().
        (-[WebHTMLView _web_clearPrintingModeRecursive]): Ditto.
        (-[WebHTMLView _web_setPrintingModeRecursiveAndAdjustViewSize]): Ditto.
        (-[WebHTMLView _beginPrintModeWithMinimumPageWidth:height:maximumPageWidth:]): Ditto.
        (-[WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]): Ditto.
        (-[WebHTMLView _endPrintMode]): Ditto.
        (-[WebHTMLView _beginScreenPaginationModeWithPageSize:shrinkToFit:]): Ditto.
        (-[WebHTMLView _endScreenPaginationMode]): Ditto.
        (-[WebHTMLView layoutToMinimumPageWidth:height:originalPageWidth:originalPageHeight:maximumShrinkRatio:adjustingViewSize:]): Ditto.
        (-[WebHTMLView layout]): Ditto.
        (-[WebHTMLView _setPrinting:minimumPageLogicalWidth:logicalHeight:originalPageWidth:originalPageHeight:maximumShrinkRatio:adjustViewSize:paginateScreenContent:]): Ditto.
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]): Ditto.
        (-[WebHTMLView setPageWidthForPrinting:]): Ditto.

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE(SVG_AS_IMAGE) since all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68182

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_ANIMATION as all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68022

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2011-09-14  Anders Carlsson  <andersca@apple.com>

        Get rid of WebCoreViewFactory and its WebViewFactory subclass
        https://bugs.webkit.org/show_bug.cgi?id=68124

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebContextMenuClient.mm:
        * WebCoreSupport/WebViewFactory.h: Removed.
        * WebCoreSupport/WebViewFactory.mm: Removed.
        * WebView/WebFrameView.mm:
        (-[WebFrameView initWithFrame:]):

2011-09-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (6/7)
        https://bugs.webkit.org/show_bug.cgi?id=67692

        Reviewed by Geoffrey Garen.

        Completed the sixth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the fifth level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):
        (WebKit::ProxyRuntimeMethod::finishCreation):

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_USE as <use> is required by HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68019

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

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

        Disable C++ exceptions when building with clang
        https://bugs.webkit.org/show_bug.cgi?id=68031
        <rdar://problem/9556880>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig:

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_FOREIGN_OBJECT as it is a required part of HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68018

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2011-09-09  Oliver Hunt  <oliver@apple.com>

        Remove support for anonymous storage from jsobjects
        https://bugs.webkit.org/show_bug.cgi?id=67881

        Reviewed by Sam Weinig.

        Remove the use of AnonymousSlotCount

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::createStructure):

2011-09-09  Chris Marrin  <cmarrin@apple.com>

        requestAnimationFrame doesn't throttle on Mac
        https://bugs.webkit.org/show_bug.cgi?id=67171

        Reviewed by Simon Fraser.

        Removed runLoopObserver for requestAnimationFrame. It's now
        done by a Timer in ScriptedAnimationController in WebCore.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebView/WebView.mm:
        (-[WebView _close]):
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

2011-09-09  Fady Samuel  <fsamuel@chromium.org>

        Move pageScaleFactor code from Frame.{h|cpp} to Page.{h|cpp}
        https://bugs.webkit.org/show_bug.cgi?id=67250

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (-[WebView _scaleWebView:atOrigin:]):
        (-[WebView _viewScaleFactor]):

2011-09-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (5/7)
        https://bugs.webkit.org/show_bug.cgi?id=67420

        Reviewed by Geoffrey Garen.

        Completed the fifth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the second level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

        * Plugins/Hosted/ProxyRuntimeObject.h:
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):
        (WebKit::ProxyRuntimeObject::finishCreation):

2011-09-08  Sam Weinig  <sam@webkit.org>

        Remove the Completion object from JSC, I have never liked it
        https://bugs.webkit.org/show_bug.cgi?id=67755

        Reviewed by Gavin Barraclough.

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

2011-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94627 and r94632.
        http://trac.webkit.org/changeset/94627
        http://trac.webkit.org/changeset/94632
        https://bugs.webkit.org/show_bug.cgi?id=67698

        It broke tests on GTK and Qt (Requested by Ossy on #webkit).

        * Plugins/Hosted/ProxyRuntimeObject.h:
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):

2011-09-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (5/7)
        https://bugs.webkit.org/show_bug.cgi?id=67420

        Reviewed by Geoffrey Garen.

        Completed the fifth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the second level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

        * Plugins/Hosted/ProxyRuntimeObject.h:
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):
        (WebKit::ProxyRuntimeObject::finishCreation):

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

        Rename confirmCompositionWithoutDisturbingSelection to cancelComposition
        https://bugs.webkit.org/show_bug.cgi?id=67569

        Reviewed by Antonio Gomes.

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

2011-09-05  Oliver Hunt  <oliver@apple.com>

        An object's structure should reference the global object responsible for its creation
        https://bugs.webkit.org/show_bug.cgi?id=67624

        Reviewed by Gavin Barraclough.

        Update for new Structure::create() globalObject parameter.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::createStructure):

2011-09-01  Mark Rowe  <mrowe@apple.com>

        Fix the build by adding some more missing return types.

        * WebView/WebDashboardRegion.h:
        * WebView/WebDashboardRegion.mm:
        (-[WebDashboardRegion initWithRect:clip:type:]):

2011-09-01  Tim Horton  <timothy_horton@apple.com>

        REGRESSION: Rendering artifacts on a rotated, pattern filled shape
        https://bugs.webkit.org/show_bug.cgi?id=53055
        <rdar://problem/8910917>

        Reviewed by Simon Fraser.

        Introduce wkCGPatternCreateWithImageAndTransform.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-08-31  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=67322
        Re-name overrideBackingScaleFactor

        Reviewed by John Sullivan.

        _setOverrideBackingScaleFactor is now _setCustomBackingScaleFactor
        * WebView/WebView.mm:
        (-[WebView _setCustomBackingScaleFactor:]):
        (-[WebView _deviceScaleFactor]):
        * WebView/WebViewData.h:
        * WebView/WebViewPrivate.h:

2011-08-30  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/9281695> Add text search API for getting the DOM range of a text match
        https://bugs.webkit.org/show_bug.cgi?id=67230

        Reviewed by Darin Adler.

        * WebView/WebHTMLView.mm:
        * WebView/WebView.mm:
        (coreOptions): Moved this function from WebHTMLView.mm to here and made
        it accessible from both this file and WebHTMLView.mm.
        (-[WebView DOMRangeOfString:relativeTo:options:]): Added this new API.
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

2011-08-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=67150
        Would like API to use a custom device scale factor for a particular WebView/WKView
        -and corresponding-
        <rdar://problem/10041016>

        Reviewed by Darin Adler.

        New API is _setOverrideBackingScaleFactor:(CGFloat)
        * WebView/WebView.mm:
        (-[WebView _setOverrideBackingScaleFactor:]):
        (-[WebView _deviceScaleFactor]):
        * WebView/WebViewData.h:
        * WebView/WebViewPrivate.h:

2011-08-30  Aaron Colwell  <acolwell@chromium.org>

        Add MediaSource API to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=64731

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2011-08-29  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (+[WebPreferences _switchNetworkLoaderToNewTestingSession]):
        (+[WebPreferences _setCurrentNetworkLoaderSessionCookieAcceptPolicy:]):
        * WebView/WebPreferencesPrivate.h:
        Exposed an SPI to use a private default session. It's separate from private browsing,
        because some tests enable the latter, and we don't want to mix them up.
        Also exposed an SPI to set cookie accept policy regardless of what session we are currently
        using.

        * WebView/WebView.mm: (-[WebView _cachedResponseForURL:]): Updated to use currentStorageSession()
        instead of privateBrowsingStorageSession().

2011-08-30  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        The unused ScrollView* argument can and should be removed from
        scrollRectIntoView.
        https://bugs.webkit.org/show_bug.cgi?id=67117

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scrollRectIntoView):

2011-08-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r93987, r93992, r93995, r93998, and
        r93999.
        http://trac.webkit.org/changeset/93987
        http://trac.webkit.org/changeset/93992
        http://trac.webkit.org/changeset/93995
        http://trac.webkit.org/changeset/93998
        http://trac.webkit.org/changeset/93999
        https://bugs.webkit.org/show_bug.cgi?id=67147

        Many failing tests (Requested by ap on #webkit).

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

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

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (+[WebPreferences _usePrivateSessionForNetworkLoading]):
        * WebView/WebPreferencesPrivate.h:
        Exposed an SPI to use a private default session. It's separate from private browsing,
        because some tests enable the latter, and we don't want to mix them up.

2011-08-23  Chris Marrin  <cmarrin@apple.com>

        [mac] requestAnimationFrame support for mac port
        https://bugs.webkit.org/show_bug.cgi?id=59146

        Reviewed by Simon Fraser.

        Implement requestAnimationFrame for WebKit. Add a
        CFRunLoopObserver to WebView, which runs just before
        the syncCompositingState RLO and calls into the 
        ScriptedAnimationController if scheduleAnimation() has
        been called.

        * Configurations/FeatureDefines.xcconfig:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scheduleAnimation):
        * WebView/WebView.mm:
        (-[WebView _close]):
        (-[WebView _unscheduleAnimation]):
        (-[WebView _scheduleCompositingLayerSync]):
        (requestAnimationFrameRunLoopObserverCallback):
        (-[WebView _scheduleAnimation]):
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

2011-08-24  Alexey Proskuryakov  <ap@apple.com>

        Plug-in tests are flaky on Mac
        https://bugs.webkit.org/show_bug.cgi?id=66822

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluateJavaScript):
        Protect objects that can be removed by a script.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]): Ditto.
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]): Ditto.
        Also fixed some nonsense code.

2011-08-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add checks to ensure allocation does not take place during initialization of GC-managed objects
        https://bugs.webkit.org/show_bug.cgi?id=65288

        Reviewed by Darin Adler.

        Adding the new validation functionality.  In its current state, it will performs checks, 
        but they don't fail unless you do allocation in the arguments to the parent constructor in the 
        initialization list of a class.  The allocateCell() method turns on the global flag disallowing any new 
        allocations, and the constructorBody() method in JSCell turns it off.  This way, allocation is still 
        allowed in constructor bodies while other refactoring efforts continue.

        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::create):
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):

2011-08-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=66495
        Lion-specific scroller SPIs can use forward declaration instead of 
        WebKitSystemInterface

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-08-18  Anders Carlsson  <andersca@apple.com>

        More C++0x libc++ build fixes
        https://bugs.webkit.org/show_bug.cgi?id=66476

        Reviewed by Adam Roben.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCSetException):
        Use a WTF String here instead of an STL string.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        std::make_pair now takes rvalue references, so get rid of the template arguments and let
        the compiler deduce them instead.

2011-08-18  Adam Roben  <aroben@apple.com>

        Update the device scale factor when the WebView's window changes

        Fixes <http://webkit.org/b/66412> <rdar://problem/9971958> WebKit doesn't react when a
        WebView is moved between windows with different backing scale factors

        Reviewed by Anders Carlsson.

        * WebView/WebView.mm:
        (-[WebView viewDidMoveToWindow]): Call setDeviceScaleFactor because our new window (or no
        window at all) might have a different backing scale factor than the previous one.
        (-[WebView _deviceScaleFactor]): Moved to the WebFileInternal category.

2011-08-17  Adam Roben  <aroben@apple.com>

        Make WebCore keep track of the current device scale factor

        Fixes <http://webkit.org/b/66413> WebCore requires every WebKit port to keep track of the
        device scale factor

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        Moved code to calculate the device scale factor from here...

        * WebView/WebView.mm:
        (-[WebView _deviceScaleFactor]):
        ...to here.

        (-[WebView _windowDidChangeResolution:]): Now calls Page::setDeviceScaleFactor.

2011-08-17  Dan Bernstein  <mitz@apple.com>

        Removed some code that is not needed when building for Leopard or later.

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebContextMenuClient.mm:
        (fixMenusToSendToOldClients): Removed check for Tiger Mail.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::objectContentType):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _preferencesChanged:]):

2011-08-17  Dan Bernstein  <mitz@apple.com>

        Eliminate the WebCGFloat compatibility definition that was needed for Tiger.

        Rubber-stamped by Anders Carlsson.

        * WebView/WebHTMLViewPrivate.h:

2011-08-17  Dan Bernstein  <mitz@apple.com>

        Eliminate the WebNSInteger and WebNSUInteger compatibility definitions that were
        needed for Tiger.

        Reviewed by Darin Adler.

        * History/WebBackForwardList.h:
        * WebView/WebDocumentInternal.h:
        * WebView/WebHTMLRepresentation.h:
        * WebView/WebPreferences.h:
        * WebView/WebResourceLoadDelegate.h:
        * WebView/WebResourceLoadDelegatePrivate.h:
        * WebView/WebScriptDebugDelegate.h:
        * WebView/WebTextIterator.h:
        * WebView/WebUIDelegate.h:
        * WebView/WebView.h:
        * WebView/WebViewPrivate.h:

2011-08-15  Dmitry Titov  <dimich@chromium.org>

        FrameLoaderClient::transferLoadingResourceFromPage does not have enough parameters
        https://bugs.webkit.org/show_bug.cgi?id=66165

        Reviewed by Darin Fisher.

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

2011-08-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        Refactor JS objects to allocate in static create methods rather than constructors
        https://bugs.webkit.org/show_bug.cgi?id=65347

        Reviewed by Geoffrey Garen.

        Removed all calls to deprecatedGetDOMObject from initialization lists as part of a 
        larger refactoring to get rid of all allocation during initialization.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::create):
        (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):

2011-08-15  Adam Roben  <aroben@apple.com>

        Update pages' style and content scale when the window's backing scale factor changes

        Unfortunately, I couldn't think of a way to test this in an automated fashion.

        Fixes <http://webkit.org/b/66229> <rdar://problem/9906269> WebKit doesn't react to device
        scale factor changes

        Reviewed by Simon Fraser.

        * WebView/WebView.mm:
        (-[WebView addWindowObserversForWindow:]):
        (-[WebView removeWindowObservers]):
        Listen for the notification that tells us the window's backing scale has changed.

        (-[WebView _windowDidChangeResolution:]): Tell the page about the change to the device scale
        factor so that, e.g., scale-factor-dependent media queries will be reevaluated.

2011-08-10  Adam Roben  <aroben@apple.com>

        Clear up scale factor terminology

        WebKit by and large deals with two scale factors: one intrinsic to the device on which the
        software is running, and one that is per-Page and can be controlled via API calls. This
        patch names the former "deviceScaleFactor" and the latter "pageScaleFactor", and makes the
        code use those names. It should introduce no behavior changes.

        Fixes <http://webkit.org/b/55787> WebKit uses multiple conflicting names to refer to the
        device scale factor

        Reviewed by Simon Fraser.

        * Misc/WebNSControlExtras.m:
        (-[NSControl sizeToFitAndAdjustWindowHeight]): Updated this function to use more modern
        AppKit scale factor terminology. (This is unrelated to the rest of the patch.)

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

2011-08-13  Dan Bernstein  <mitz@apple.com>

        Changed the value of WebKitShowsToolTipOverTruncatedTextPreferenceKey to match the naming everywhere else.

        Reviewed by Joseph Pecoraro.

        * WebView/WebPreferenceKeysPrivate.h:

2011-08-13  Sam Weinig  <sam@webkit.org>

        Remove unused variables from WebView/WebFullScreenController.h
        https://bugs.webkit.org/show_bug.cgi?id=66194

        Reviewed by Dan Bernstein.

        * WebView/WebFullScreenController.h:
        Remove a few variables which were not used.

2011-08-12  Dan Bernstein  <mitz@apple.com>

        Add an option to automatically show tooltips (with the full text) over truncated text
        https://bugs.webkit.org/show_bug.cgi?id=66178

        Reviewed by Simon Fraser.

        * WebView/WebPreferenceKeysPrivate.h: Defined a preference key.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Added a default value of NO for the
        ShowsToolTipOverTruncatedText preference.
        (-[WebPreferences showsToolTipOverTruncatedText]): Added this getter.
        (-[WebPreferences setShowsToolTipOverTruncatedText:]): Added this setter.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Added call to Settings::setShowsToolTipOverTruncatedText().

2011-08-12  Sam Weinig  <sam@webkit.org>

        Use __builtin_trap() for CRASH when building with clang
        https://bugs.webkit.org/show_bug.cgi?id=66152

        Reviewed by Anders Carlsson.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView setAttributeKeys:andValues:]):
        (-[WebBaseNetscapePluginView handleMouseMoved:]):
        (-[WebBaseNetscapePluginView handleMouseEntered:]):
        (-[WebBaseNetscapePluginView handleMouseExited:]):
        (-[WebBaseNetscapePluginView focusChanged]):
        (-[WebBaseNetscapePluginView windowFocusChanged:]):
        (-[WebBaseNetscapePluginView createPlugin]):
        (-[WebBaseNetscapePluginView loadStream]):
        (-[WebBaseNetscapePluginView shouldStop]):
        (-[WebBaseNetscapePluginView destroyPlugin]):
        (-[WebBaseNetscapePluginView updateAndSetWindow]):
        (-[WebBaseNetscapePluginView sendModifierEventWithKeyCode:character:]):
        (-[WebBaseNetscapePluginView pluginLayer]):
        (-[WebBaseNetscapePluginView getFormValue:]):
        Remove the ASSERT_NOT_REACHED from the base class methods. They were not
        adding much value and were getting in the way of making the static analyzer
        work. A better way to do this would be to use a formal protocol.

2011-08-12  Mark Rowe  <mrowe@apple.com>

        Be more forward-looking in the choice of compiler.

        Rubber-stamped by Jon Honeycutt.

        * Configurations/CompilerVersion.xcconfig:

2011-08-10  David Hyatt  <hyatt@apple.com>

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

        Removing the CSS Regions and Exclusions ifdefs.

        Reviewed by Adam Roben.

        * Configurations/FeatureDefines.xcconfig:

2011-08-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add ParentClass typedef in all JSC classes
        https://bugs.webkit.org/show_bug.cgi?id=65731

        Reviewed by Oliver Hunt.

        Just added the Base typedefs in all the classes that are a subclass of JSCell 
        to point at their parent classes.  This is a change to support future changes to the way
        constructors and destructors are implemented in JS objects, among other things.

        * Plugins/Hosted/ProxyInstance.mm:
        * Plugins/Hosted/ProxyRuntimeObject.h:

2011-08-08  Chris Marrin  <cmarrin@apple.com>

        Logic to compute visible display rect in GraphicsLayerCA::syncCompositingState
        https://bugs.webkit.org/show_bug.cgi?id=65708

        Supply initial display rects for the full-screen case

        Reviewed by Simon Fraser.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController enterFullscreen:]):
        (-[WebFullScreenController exitFullscreen]):

2011-08-06  Joseph Pecoraro  <joepeck@webkit.org>

        Potential Leaks - RetainPtr<> over retaining Create'd objects
        https://bugs.webkit.org/show_bug.cgi?id=65806

        Reviewed by Darin Adler.

        Fix a possible leak by adopting an allocation instead of retaining it.

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

2011-08-05  Anders Carlsson  <andersca@apple.com>

        Remove PluginHalter
        https://bugs.webkit.org/show_bug.cgi?id=65729

        Reviewed by Darin Adler.

        Remove plug-in halter and associated classes.

        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        (-[WebBaseNetscapePluginView start]):
        (-[WebBaseNetscapePluginView stop]):
        * WebCoreSupport/WebPluginHalterClient.h: Removed.
        * WebCoreSupport/WebPluginHalterClient.mm: Removed.
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _preferencesChanged:]):
        * WebView/WebViewPrivate.h:

2011-08-04  Mark Rowe  <mrowe@apple.com>

        Future-proof Xcode configuration settings.

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

2011-08-03  Kent Tamura  <tkent@chromium.org>

        Fix incorrect checks for HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=65590

        Reviewed by Dimitri Glazkov.

        <video> and <audio> can be an HTMLElement instance instead of
        HTMLMediaElement if MediaPlayer::isAvailable() returns false or
        the media feature is disabled at runtime.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController _isAnyMoviePlaying]):

2011-08-03  Mark Rowe  <mrowe@apple.com>

        Bring some order to FeatureDefines.xcconfig to make it easier to follow.

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2011-08-03  Mark Rowe  <mrowe@apple.com>

        Clean up FeatureDefines.xcconfig to remove some unnecessary conditional settings

        Reviewed by Dave Kilzer.

        * Configurations/FeatureDefines.xcconfig:

2011-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Web Inspector: Remove InspectorFrontendHost load/saveSessionSetting
        https://bugs.webkit.org/show_bug.cgi?id=65582

        Reviewed by Pavel Feldman.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:

2011-08-03  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: [Timeline] Hover on paint events and see rect outline around that area.
        https://bugs.webkit.org/show_bug.cgi?id=65510

        Reviewed by Yury Semikhatsky.

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

2011-08-03  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove Node parameter from the InspectorClient::highlight
        https://bugs.webkit.org/show_bug.cgi?id=65549

        Reviewed by Yury Semikhatsky.

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::highlight):
        * WebInspector/WebNodeHighlighter.h:
        * WebInspector/WebNodeHighlighter.mm:
        (-[WebNodeHighlighter highlight]):

2011-07-30  Patrick Gansterer  <paroga@webkit.org>

        Remove inclusion of MainThread.h from Threading.h
        https://bugs.webkit.org/show_bug.cgi?id=65081

        Reviewed by Darin Adler.

        Add missing include statements for MainThread.

        * Carbon/CarbonWindowAdapter.mm:
        * History/WebBackForwardList.mm:
        * History/WebHistoryItem.mm:
        * Misc/WebElementDictionary.mm:
        * Misc/WebIconDatabase.mm:
        * Misc/WebLocalizableStrings.mm:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebBasePluginPackage.mm:
        * Plugins/WebNetscapePluginView.mm:
        * WebCoreSupport/WebEditorClient.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebView/WebArchive.mm:
        * WebView/WebDataSource.mm:
        * WebView/WebHTMLView.mm:
        * WebView/WebResource.mm:
        * WebView/WebTextIterator.mm:
        * WebView/WebView.mm:
        * WebView/WebViewData.mm:

2011-07-28  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/9589433> Displaying Japanese dictionary contents in vertical orientation takes a couple of seconds

        Reviewed by Darin Adler.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize wkGetVerticalGlyphsForCharacters.

2011-07-28  Brady Eidson  <beidson@apple.com>

        <rdar://problem/9714337> and https://bugs.webkit.org/show_bug.cgi?id=65306
        WebKitInitializeStorageIfNecessary() can take awhile performing i/o, isn't necessary for every WebView

        Reviewed by Maciej Stachowiak.

        * Storage/WebStorageManager.mm:
        (WebKitInitializeStorageIfNecessary): Pass the client along in initializeTracker().

2011-07-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove operator new from JSCell
        https://bugs.webkit.org/show_bug.cgi?id=64999

        Reviewed by Oliver Hunt.

        Removed the implementation of operator new in JSCell, so any further uses
        will not successfully link.  Also removed any remaining uses of operator new.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::newRuntimeObject):
        (WebKit::ProxyRuntimeMethod::create):
        (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):
        (WebKit::ProxyInstance::getMethod):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::create):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2011-07-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/9842889> Add a generic pictograph font family
        https://bugs.webkit.org/show_bug.cgi?id=65197

        Reviewed by Anders Carlsson.

        * WebView/WebPreferenceKeysPrivate.h: Added WebKitPictographFontPreferenceKey.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set the default pictograph font family to
        "Apple Color Emoji".
        (-[WebPreferences pictographFontFamily]): Added this getter.
        (-[WebPreferences setPictographFontFamily:]): Added this setter.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Pass the preference through to WebCore.

2011-07-25  Ian Henderson  <ianh@apple.com>

        WebFrame should have a method to determine its visual emptiness
        https://bugs.webkit.org/show_bug.cgi?id=64223

        Reviewed by Dan Bernstein.

        * WebView/WebFrame.mm:
        (-[WebFrame _isVisuallyNonEmpty]): Pipe the isVisuallyNonEmpty method
        through WebKit.
        * WebView/WebFramePrivate.h:

2011-07-19  Leo Yang  <leoyang.webkit@gmail.com>

        SVG: Missing implementation of <altGlyphDef>, <altGlyphItem> and <glyphRef>
        https://bugs.webkit.org/show_bug.cgi?id=60850

        Reviewed by Nikolas Zimmermann.

        SVG spec: http://www.w3.org/TR/SVG/text.html#AlternateGlyphDefinitions.
        This patch is to implement SVG <altGlyphDef>, <altGlyphItem> and <glyphRef>
        elements for alternative glyph features.

        * MigrateHeaders.make:

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

        Solar Walk app-specific hack accidentally strips stylesheets from the document.
        https://bugs.webkit.org/show_bug.cgi?id=64777

        Reviewed by Adam Barth.
        
        Solar Walk uses a self-closed title tag in its documents ("<title />").
        The HTML5 parser does not recognize this as a valid self-closing tag,
        so it treats the remainder of the document as title text.
        
        We work around this in WebKit by injecting a script that calls
        document.write() on the contents of document.title, thereby restoring
        the contents of the document. Unfortunately this overwrote several
        <style> tags that existed before the <title>, thereby causing the
        document to not have the intended styling.
        
        Fix this by having the injected script concatenate document.title to
        the document instead of overwriting it during document.write(). We can
        also take the opportunity to remove document.title since it does not
        contain useful information.

        * Misc/SolarWalkQuirksUserScript.js:

2011-07-18  Dean Jackson  <dino@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64742
        Expose WebPreferences for media playback requiring user gestures and inline playback

        Reviewed by Simon Fraser.

        Two new WebPreferences: MediaPlaybackRequiresUserGesture and
        MediaPlaybackAllowsInline.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences mediaPlaybackRequiresUserGesture]):
        (-[WebPreferences setMediaPlaybackRequiresUserGesture:]):
        (-[WebPreferences mediaPlaybackAllowsInline]):
        (-[WebPreferences setMediaPlaybackAllowsInline:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):

2011-07-18  Pratik Solanki  <psolanki@apple.com>

        Part of https://bugs.webkit.org/show_bug.cgi?id=63674
        Get webkit to compile with USE(CFNETWORK) enabled on Mac

        Reviewed by David Kilzer.

        Create an NSURLDownload from the CF objects that we have.

        * Misc/WebDownload.mm:
        (-[WebDownload _initWithLoadingCFURLConnection:request:response:delegate:proxy:]):
        * Misc/WebDownloadInternal.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::download):

2011-07-15  Pratik Solanki  <psolanki@apple.com>

        Part of https://bugs.webkit.org/show_bug.cgi?id=63674
        Get webkit to compile with USE(CFNETWORK) enabled on Mac

        Reviewed by David Kilzer.

        New WebKitSystemInterface functions for CFNetwork-based loader.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-07-15  Tim Horton  <timothy_horton@apple.com>

        Overlay scrollbars in overflow areas no longer pulse when revealed
        https://bugs.webkit.org/show_bug.cgi?id=64606
        <rdar://problem/9390674>

        Reviewed by Simon Fraser.

        Ensure that the state of the scrollbar implementation is kept in sync
        with WebCore's internal representation. Previously, we synchronized them
        at paint time, causing pulsing to be skipped due to the scrollbars being
        disabled.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-07-15  Andy Estes  <aestes@apple.com>

        Rename applicationIsSolarWalk() to applicationIsSolarWalkMac().
        https://bugs.webkit.org/show_bug.cgi?id=64641

        Reviewed by Brian Weinstein.

        * WebView/WebView.mm:
        (needsSolarWalkQuirksScript): Call applicationIsSolarWalkMac().

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

        REGRESSION: Mouse cursor doesn’t hide when full screen video HUD hides
        https://bugs.webkit.org/show_bug.cgi?id=64615

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setCursorHiddenUntilMouseMoves): Added. Calls
        +[NSCursor setHiddenUntilMouseMoves:].

2011-07-14  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64250
        Global strict mode function leaking global object as "this".

        Reviewed by Oliver Hunt.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
            - Change call to pass DOM Window shell, instead of the global varaible object.

2011-07-13  Joseph Pecoraro  <joepeck@webkit.org>

        Improve names of some ApplicationCacheStorage accessor methods
        https://bugs.webkit.org/show_bug.cgi?id=64433

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebApplicationCacheQuotaManager.mm:
        (-[WebApplicationCacheQuotaManager usage]):
        (-[WebApplicationCacheQuotaManager quota]):
        Renamed methods.

2011-07-12  Joseph Pecoraro  <joepeck@webkit.org>

        ApplicationCache update should not immediately fail when reaching per-origin quota
        https://bugs.webkit.org/show_bug.cgi?id=64177

        Reviewed by Alexey Proskuryakov.

        * WebView/WebUIDelegatePrivate.h:
        * DefaultDelegates/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:exceededApplicationCacheOriginQuotaForSecurityOrigin:spaceNeeded:]):
        Update the delegate to include a space needed parameter.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::reachedApplicationCacheOriginQuota):
        Call the delegate with the new space needed information.

2011-07-12  Adam Roben  <aroben@apple.com>

        Delete some redundant code in WebHTMLView

        This code had no user-visible effect, as we were just duplicating work that AppKit would do
        for us at a slightly different time.

        Fixes <http://webkit.org/b/64390> WebHTMLView sets its root layer's transform unnecessarily

        Reviewed by Simon Fraser.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView viewDidMoveToWindow]):
        (-[WebHTMLView attachRootLayer:]):
        Don't bother setting the root layer's transform to account for the scale factor. AppKit
        takes care of this for us nowadays.

2011-07-10  Kenichi Ishibashi  <bashi@chromium.org>

        Let plugins participate in form submission
        https://bugs.webkit.org/show_bug.cgi?id=13061

        Adds methods to get form value from NPAPI plugins.

        Reviewed by Anders Carlsson.

        * Plugins/Hosted/WebHostedNetscapePluginView.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView getFormValue:]): Added.
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView getFormValue:]): Added.
        * Plugins/WebNetscapePluginPackage.h:
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage browserFuncs]): Added.
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getFormValue:]): Added.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (NetscapePluginWidget::getFormValue): Added.

2011-07-04  Dan Bernstein  <mitz@apple.com>

        Moved handling of frame size changes into its own method.

        Reviewed by Oliver Hunt.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _frameSizeChanged]): Added. Moved code here...
        (-[WebFrameView setFrameSize:]): ...from here.
        * WebView/WebFrameViewInternal.h:

2011-07-01  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        WebKit part of fix for https://bugs.webkit.org/show_bug.cgi?id=63851
        <rdar://problem/8981062> Crash when loading a document in an editable WebView that has a subframe with an unstyled body

        * WebView/WebHTMLRepresentation.mm: (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):
        Only call applyEditingStyleToBodyElement for the main frame.  There's no need to apply break-word, 
        space, and after-white-space properties to subframes in the editable document.

2011-07-01  Andy Estes  <aestes@apple.com>

        Reviewed by Mark Rowe.

        Simplify MailQuirksUserScript.js
        https://bugs.webkit.org/show_bug.cgi?id=63800
        
        MailQuirksUserScript.js is injected into WebViews in Mail.app on
        Leopard to resolve an incompatibility between it and the HTML5 parser.
        It did so by taking all nodes in the document between <html> and <body>
        and moving them to be children of <body>. This maintains Mail.app's
        assumption that document.firstChild.firstChild == document.body.
        
        While this script fixed a specific issue with the Signature panel in
        Mail.app, it caused regressions in other WebViews. Since the issue with
        the Signature panel is with the empty <head> node implicitly created by
        the parser, we can simplify this script by removing this implicit
        <head> in the case it has no attributes and no children. This fixes the
        Signature panel without affecting other WebViews that have non-trivial
        <head> nodes.

        * Misc/MailQuirksUserScript.js: If <head> exists but has no attributes
        and no children, remove it.

2011-06-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        Add +[WebView _allowsRoundingHacks]
        https://bugs.webkit.org/show_bug.cgi?id=63734

        * WebView/WebView.mm:
        (+[WebView _allowsRoundingHacks]): Added this accessor.
        * WebView/WebViewPrivate.h:

2011-06-29  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        [Mac] Use system cursors instead of custom bitmaps where possible
        https://bugs.webkit.org/show_bug.cgi?id=63679

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added WKCursor.

2011-06-28  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Adam Barth.

        form.autocomplete="off" does not work
        https://bugs.webkit.org/show_bug.cgi?id=35823

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementDoesAutoComplete:]): Update callsite.

2011-06-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        Use a separate file name for Lion's WebKitSystemInterface.

        * Configurations/DebugRelease.xcconfig:

2011-06-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Add an option to enable legacy rounding hacks
        https://bugs.webkit.org/show_bug.cgi?id=63363

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        Disabled rounding hacks.
        (-[NSString _web_widthWithFont:]): Ditto.
        * WebView/WebView.mm:
        (+[WebView _setAllowsRoundingHacks:]): Added this setter.
        * WebView/WebViewPrivate.h:

2011-06-24  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Convert shadow DOM-related tests to use window.internals
        https://bugs.webkit.org/show_bug.cgi?id=61671

        Remove shadow DOM-related methods from Mac API. These are not
        required any more.

        * DOM/WebDOMOperations.mm:
        * DOM/WebDOMOperationsPrivate.h:

2011-06-24  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Adam Barth.

        WebSocket: Add run-time flag for new HyBi protocol
        https://bugs.webkit.org/show_bug.cgi?id=60348

        Make a new flag (Setting::m_useHixie76WebSocketProtocol)
        switchable from WebView and WebPreferences.

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

2011-06-22  Sam Weinig  <sam@webkit.org>

        Roll out r89469 (Add preference for setting the html parser depth limit)

        The preference is not needed at this time, so there is no reason to expose it.

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

2011-06-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Add preference for setting the html parser depth limit
        https://bugs.webkit.org/show_bug.cgi?id=63163

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setMaximumHTMLParserDOMTreeDepth:]):
        (-[WebPreferences maximumHTMLParserDOMTreeDepth]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]):
        Add private preference for setting the parser depth limit.

2011-06-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Make instantiation of legacy editing position more explicit
        https://bugs.webkit.org/show_bug.cgi?id=63037

        Create new positions since we can't create a legacy editing position outside of WebCore anymore.

        * WebView/WebFrame.mm:
        (-[WebFrame _smartDeleteRangeForProposedRange:]): Calls createLegacyEditingPosition.
        (-[WebFrame _smartInsertForString:replacingRange:beforeString:afterString:]): Ditto.

2011-06-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        FileChooser should be only created when we need to choose files.
        https://bugs.webkit.org/show_bug.cgi?id=63039

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::runOpenPanel): Changed to use settings.

2011-06-21  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r89401 and r89403.
        http://trac.webkit.org/changeset/89401
        http://trac.webkit.org/changeset/89403
        https://bugs.webkit.org/show_bug.cgi?id=62970

        Breaks mac build and mistakenly enables the spellcheck API

        * Configurations/FeatureDefines.xcconfig:

2011-06-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Spellcheck API should be build-able.
        https://bugs.webkit.org/show_bug.cgi?id=62970

        No new tests, changing only build related files

        * Configurations/FeatureDefines.xcconfig:

2011-06-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89354.
        http://trac.webkit.org/changeset/89354
        https://bugs.webkit.org/show_bug.cgi?id=63099

        Broke tests on Mac (Requested by rniwa on #webkit).

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController destroyInspectorView:]):
        * WebInspector/WebInspector.mm:
        (-[WebInspector show:]):
        (-[WebInspector showConsole:]):
        (-[WebInspector isDebuggingJavaScript]):
        (-[WebInspector toggleDebuggingJavaScript:]):
        (-[WebInspector startDebuggingJavaScript:]):
        (-[WebInspector stopDebuggingJavaScript:]):
        (-[WebInspector isProfilingJavaScript]):
        (-[WebInspector toggleProfilingJavaScript:]):
        (-[WebInspector startProfilingJavaScript:]):
        (-[WebInspector stopProfilingJavaScript:]):
        (-[WebInspector isJavaScriptProfilingEnabled]):
        (-[WebInspector setJavaScriptProfilingEnabled:]):
        (-[WebInspector isTimelineProfilingEnabled]):
        (-[WebInspector setTimelineProfilingEnabled:]):
        (-[WebInspector setFrontend:]):
        (-[WebInspector showWindow:]):
        * WebInspector/WebInspectorFrontend.h:
        * WebInspector/WebInspectorFrontend.mm:
        * WebInspector/WebInspectorPrivate.h:

2011-06-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: introduce InspectorFrontendAPI for actions initiated from the application menu.
        https://bugs.webkit.org/show_bug.cgi?id=62985

        Both: inspector protocol and WebCore/InspectorController have a number of unnecessary
        methods for plumbing the menu action handlers through the WebKit and WebCore.
        I intend to remove this menu support from the protocol and WebCore/InspectorController API.
        I am starting with exposing the new front-end API in the WebCore and using it in the WebKit/mac port.
        WebKit/win and WebKit2 to follow.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController destroyInspectorView:]):
        * WebInspector/WebInspector.mm:
        (-[WebInspector showWindow]):
        (-[WebInspector show:]):
        (-[WebInspector showConsole:]):
        (-[WebInspector isDebuggingJavaScript]):
        (-[WebInspector toggleDebuggingJavaScript:]):
        (-[WebInspector startDebuggingJavaScript:]):
        (-[WebInspector stopDebuggingJavaScript:]):
        (-[WebInspector isProfilingJavaScript]):
        (-[WebInspector toggleProfilingJavaScript:]):
        (-[WebInspector startProfilingJavaScript:]):
        (-[WebInspector stopProfilingJavaScript:]):
        (-[WebInspector isJavaScriptProfilingEnabled]):
        (-[WebInspector setJavaScriptProfilingEnabled:]):
        (-[WebInspector isTimelineProfilingEnabled]):
        (-[WebInspector setTimelineProfilingEnabled:]):
        (-[WebInspector setFrontend:]):
        (-[WebInspector releaseFrontend]):
        (-[WebInspector showWindow:]):
        * WebInspector/WebInspectorFrontend.h:
        * WebInspector/WebInspectorFrontend.mm:
        (-[WebInspectorFrontend isDebuggingEnabled]):
        (-[WebInspectorFrontend setDebuggingEnabled:]):
        (-[WebInspectorFrontend isProfilingJavaScript]):
        (-[WebInspectorFrontend startProfilingJavaScript]):
        (-[WebInspectorFrontend stopProfilingJavaScript]):
        (-[WebInspectorFrontend isJavaScriptProfilingEnabled]):
        (-[WebInspectorFrontend setJavaScriptProfilingEnabled:]):
        (-[WebInspectorFrontend isTimelineProfilingEnabled]):
        (-[WebInspectorFrontend setTimelineProfilingEnabled:]):
        * WebInspector/WebInspectorPrivate.h:

2011-06-01  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Move Full Screen Controllers into WebCore.

        Remove dependency on QTKit from wekitExitFullscreen()
        https://bugs.webkit.org/show_bug.cgi?id=61843

        WebVideoFullscreenController, WebVideoFullscreenHUDController, and WebWindowAnimation
        have been moved into WebCore.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Add support for four WKSI functions in WCSI.
        * WebView/WebFullScreenController.mm: Remove unused #include.
        * WebView/WebView.mm: Change the include location of 
            WebVideoFullscreenController.h

2011-06-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Separate concerns of loading file icons and choosing files.
        https://bugs.webkit.org/show_bug.cgi?id=62931

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::loadIconForFiles): Renamed.

2011-06-18  Andrew Wellington  <andrew@webkit.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=62843
        WebKit Mac API calls didReceiveAuthenticationChallenge instead of
        didCancelAuthenticationChallenge

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

2011-06-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89026.
        http://trac.webkit.org/changeset/89026
        https://bugs.webkit.org/show_bug.cgi?id=62804

        These patches were likely correct.  I'll investigate the
        browser_test failures. (Requested by abarth on #webkit).

        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController setPlaying:]):

2011-06-16  Vitaly Repeshko  <vitalyr@chromium.org>

        Unreviewed.

        Revert Adam's user gesture patch series r89002, r89005, r89007, r89018
        https://bugs.webkit.org/show_bug.cgi?id=62796

        The patches broke chromium browser tests.

        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController setPlaying:]):

2011-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove HTMLVideoElement::processingUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=62784

        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController setPlaying:]):

2011-06-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove ScriptController::setAllowPopupsFromPlugin
        https://bugs.webkit.org/show_bug.cgi?id=62706

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):

2011-06-15  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/62745> Convert WebNSFileManagerExtras.m to Objective-C++

        Reviewed by Joseph Pecoraro.

        * Misc/WebNSFileManagerExtras.mm: Renamed from Source/WebKit/mac/Misc/WebNSFileManagerExtras.m.
        (-[NSFileManager _webkit_setMetadataURL:referrer:atPath:]):
        Added static_cast<MetaDataInfo *>.

2011-06-14  Stephanie Lewis  <slewis@apple.com>

        Rubber stamped by Oliver Hunt.

        <rdar://problem/9511169>
        Update order files.

        * WebKit.order:

2011-06-13  Kentaro Hara  <haraken@google.com>

        Reviewed by Alexey Proskuryakov.

        Add resizePageRectsKeepingRatio(), which expands/shrinks a page, keeping the ratio of the original page
        https://bugs.webkit.org/show_bug.cgi?id=61256

        In order to prevent rounding error caused by expanding/shrinking a page
        using different calculation here and there, I added a common calculation
        method, resizePageRectsKeepingRatio(), which expands/shrinks a page,
        keeping the ratio of width and height of the original page.
        [WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]
        and [WebHTMLView _beginScreenPaginationModeWithPageSize:shrinkToFit:]
        use resizePageRectsKeepingRatio() to expand/shrink a page.

        Test: printing/page-count-with-one-word.html

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_setPrintingModeRecursive]):
        (-[WebHTMLView _web_clearPrintingModeRecursive]):
        (-[WebHTMLView _web_setPrintingModeRecursiveAndAdjustViewSize]):
        (-[WebHTMLView _beginPrintModeWithMinimumPageWidth:height:maximumShrinkRatio:]):
        (-[WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]):
        (-[WebHTMLView _endPrintMode]):
        (-[WebHTMLView _beginScreenPaginationModeWithPageSize:shrinkToFit:]):
        (-[WebHTMLView _endScreenPaginationMode]):
        (-[WebHTMLView layoutToMinimumPageWidth:height:maximumShrinkRatio:adjustingViewSize:]):
        (-[WebHTMLView layout]):
        (-[WebHTMLView _setPrinting:minimumPageLogicalWidth:logicalHeight:maximumShrinkRatio:adjustViewSize:paginateScreenContent:]):
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):
        (-[WebHTMLView setPageWidthForPrinting:]):

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        rename ENABLE_NEW_FLEXBOX to ENABLE_CSS3_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62578

        * Configurations/FeatureDefines.xcconfig:

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        rename ENABLE_FLEXBOX to ENABLE_NEW_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62545

        * Configurations/FeatureDefines.xcconfig:

2011-06-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Rename FrameLoaderClient::interruptForPolicyChangeError to use the past tense
        https://bugs.webkit.org/show_bug.cgi?id=62516

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

2011-06-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove FrameLoader::isProcessingUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=62519

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

2011-06-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove trival "forward-to-client" member functions from FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=62510

        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::blockedError):

2011-06-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        add a compile guard ENABLE(FLEXBOX)
        https://bugs.webkit.org/show_bug.cgi?id=62049

        * Configurations/FeatureDefines.xcconfig:

2011-06-06  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Fonts returned by FontCache::getFontDataForCharacters() are never released
        https://bugs.webkit.org/show_bug.cgi?id=61875

        This change allows fonts allocated as system fallback fonts to be
        released.  Previously, the reference counts for these fonts grew
        without bound.  This is implemented as an auto release class that wraps
        accesses to the cache for system fallback fonts. All such accesses are
        via the method FontCache::getFontDataForCharacters. The new class is
        called FontCachePurgePreventer. When such an object exists, it protects
        these fonts from deletion.

        See more comments for this defect in Source/WebCore/ChangeLog.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        (-[NSString _web_widthWithFont:]):
        Wrapped code accessing fallback fonts with local
        FontCachePurgePreventer in these methods.

        * Misc/WebStringTruncator.mm:
        (+[WebStringTruncator centerTruncateString:toWidth:]):
        (+[WebStringTruncator centerTruncateString:toWidth:withFont:]):
        (+[WebStringTruncator rightTruncateString:toWidth:withFont:]):
        (+[WebStringTruncator widthOfString:font:]):
        Wrapped code accessing fallback fonts with local
        FontCachePurgePreventer in these methods.

2011-06-06  Peter Kasting  <pkasting@google.com>

        Reviewed by Antonio Gomes.

        Remove unnecessary args from scroll functions.
        https://bugs.webkit.org/show_bug.cgi?id=61648

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

2011-06-06  Alexandru Chiculita  <achicu@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE_CSS_EXCLUSIONS support for build-webkit script
        https://bugs.webkit.org/show_bug.cgi?id=61628

        * Configurations/FeatureDefines.xcconfig:

2011-06-06  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE(CSS_REGIONS) guard for CSS Regions support
        https://bugs.webkit.org/show_bug.cgi?id=61631

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Sam Weinig.

        Need a way to install the memory pressure handler without initializing WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=61975

        Add a WebInstallMemoryPressureHandler function which will install the memory pressure handler.
        -[WebView WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:] will do this,
        but we'd like to be able to install a memory pressure handler without creating a WebView or even
        calling any WebView method since that will call +[WebView initialize].

        * WebKit.exp:
        * WebView/WebView.mm:
        (WebInstallMemoryPressureHandler):
        * WebView/WebViewPrivate.h:

2011-05-27  Stephanie Lewis  <slewis@apple.com>

        Unreviewed.

        Fix a typo in the order_file flag.

        * Configurations/Base.xcconfig:

2011-05-27  Stephanie Lewis  <slewis@apple.com>

        Rubber Stamped by Adam Roben.

        Update Order Files.  Use -order_file flag since it can order more of the binary.

        * Configurations/Base.xcconfig:
        * WebKit.order:

2011-05-25  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=61407
        part of <rdar://problem/8675177>
        Remove Quicklook pref.  Moving it enirely down into WebCore so it can
        be calculated only on reloads.

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

2011-05-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Video fails to play on Vimeo
        https://bugs.webkit.org/show_bug.cgi?id=61403

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added support for wkAVAssetResolvedURL and
            wkQTMovieResolvedURL.

2011-05-24  Keishi Hattori  <keishi@webkit.org>

        Reviewed by Kent Tamura.

        Disable input color. Add INPUT_COLOR feature flag. Implement input color sanitizer.
        https://bugs.webkit.org/show_bug.cgi?id=61273

        * Configurations/FeatureDefines.xcconfig: Added INPUT_COLOR feature flag.

2011-05-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add FIXME comments about removing FrameLoader::isProcessingUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=61395

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

2011-05-24  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Improve handling in WebCore of low memory situations
        https://bugs.webkit.org/show_bug.cgi?id=61222

        Added call to enable memory pressure handling.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        * WebView/WebViewInternal.h:

2011-05-24  Jay Civelli  <jcivelli@chromium.org>

        Rubberstamped by David Kilzer.

        Updated some files that I forgot in my previous MHTML CL.

        * Configurations/FeatureDefines.xcconfig:

2011-05-20  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Stack overflow in WebFullScreenController when built on Leopard and run on SnowLeopard.
        https://bugs.webkit.org/show_bug.cgi?id=61224

        Remove the CATransaction(SnowLeopardConvenience) functions, and replace them with the Leopard
        versions of same.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController windowDidEnterFullscreen:]):
        (-[WebFullScreenController enterFullscreen:]):
        (-[WebFullScreenController exitFullscreen]):
        (-[WebFullscreenWindow setRendererLayer:]):

2011-05-20  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        WebView loses firstResponder status when entering full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=61153

        * Misc/WebNSWindowExtras.h:
        * Misc/WebNSWindowExtras.m:
        (-[NSWindow makeResponder:firstResponderIfDescendantOfView:]): Add a
        convenience method to NSWindow that makes the given NSResponder first
        responder only if it is a descendant of the given view.
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController windowDidEnterFullscreen:]): If the WebView
        was a descendant of the browser window's first responder when entering
        full-screen mode, set the full-screen window's first responder to that
        same NSResponder.
        (-[WebFullScreenController exitFullscreen]): Do the reverse of what is
        done in windowDidEnterFullscreen:.

2011-05-20  Enrica Casucci  <enrica@apple.com>

        Reviewed by David Kilzer.

        Add delegate methods about focus and blur to all elements.
        https://bugs.webkit.org/show_bug.cgi?id=61218

        We want to have delegates for these events for all the elements, not only the form elements.
        The patch changes the name of the methods in a way that is not form element specific.

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

2011-05-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        numberOfActiveAnimations() can include animations from documents in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=53641

        Pass the Frame's document as the one to count animations on.

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

2011-05-17  Timothy Hatcher  <timothy@apple.com>

        Update the the context menu to reflect the system search provider on Mac.

        <rdar://problem/9198419>

        Reviewed by Sam Weinig.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        (-[WebDefaultUIDelegate menuItemWithTag:target:representedObject:]): Use wkCopyDefaultSearchProviderDisplayName to
        create the web search context menu title.
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added CopyDefaultSearchProviderDisplayName.

2011-05-16  Emil A Eklund  <eae@chromium.org>

        Reviewed by Eric Seidel.

        Replace docTop/Right/Bottom/Left/Width/Height with documentRect
        https://bugs.webkit.org/show_bug.cgi?id=60743

        Replace uses of docWidth/Height with documentRect.

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

2011-05-16  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Antti Koivisto.

        Fix for Bug 43704 - Web font is printed as blank if it is not cached
        https://bugs.webkit.org/show_bug.cgi?id=43704

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:paginateScreenContent:]): Use ResourceCacheValidationSuppressor to allow stale resources in printing.

2011-05-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/60913> C++ exceptions should not be enabled when building with llvm-gcc-4.2
        <rdar://problem/9446430>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Fixed typo.

2011-05-13  Jon Lee  <jonlee@apple.com>

        Reviewed by Simon Fraser.

        Can't horizontally scroll iframes and overflow because wheel events are always accepted
        https://bugs.webkit.org/show_bug.cgi?id=60779

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::numWheelEventHandlersChanged): Default impl of new ChromeClient method
        (WebChromeClient::shouldRubberBandInDirection): Default impl of new ChromeClient method

2011-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune #includes from FrameView.h (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=60748

        - Update files that were depending on FrameView.h #including Frame.h or
          Page.h.

        * WebView/WebClipView.mm:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:]):

2011-05-12  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Use CFRunLoop when using CFNetwork.

        * WebView/WebView.mm:
        (-[WebView scheduleInRunLoop:forMode:]):
        (-[WebView unscheduleFromRunLoop:forMode:]):

2011-05-12  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Antti Koivisto.

        Part of WebCore should use CFNetwork-based loader on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51836

        Include AuthenticationCF.h header file.

        * Misc/WebDownload.mm:
        * Plugins/WebBaseNetscapePluginView.mm:
        * WebCoreSupport/WebFrameLoaderClient.mm:

2011-05-12  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler and Adam Barth.

        Fix for <rdar://problem/9253454> Solar Walk For Mac: Info window is blank (HTML5 parser)
        https://bugs.webkit.org/show_bug.cgi?id=60685

        Solar Walk uses a self closing title tag, so to match the behavior of the old parser, 
        we use a UserScript to write the contents of the title element to the end of the document so it can be re-parsed.

        * Misc/SolarWalkQuirksUserScript.js: Added.
        * WebView/WebView.mm:
        (needsSolarWalkQuirksScript):
        (leakSolarWalkQuirksUserScriptContents):
        (-[WebView _injectSolarWalkQuirksScript]):
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2011-05-12  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Regression caused by changeset 86281
        https://bugs.webkit.org/show_bug.cgi?id=60712
        <rdar://problem/9427970>

        Removed the condition variable. [NSSpellChecker dismissCorrectionIndicatorForView:] is blocking.
        So handleAcceptedReplacement() triggered by dismissInternal() will return before dismissInternal()
        returns. So we don't need to use the condition to coordinate between these two function. In fact,
        all callbacks are delivered on main thread. We don't really need any locking here.

        Since now we don't have distinction between dismiss() and dismissSoon(). dismissSoon() has
        been removed.

        * WebCoreSupport/CorrectionPanel.h:
        * WebCoreSupport/CorrectionPanel.mm:
        (CorrectionPanel::CorrectionPanel):
        (CorrectionPanel::show):
        (CorrectionPanel::dismiss):
        (CorrectionPanel::dismissInternal):
        (CorrectionPanel::handleAcceptedReplacement):
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::dismissCorrectionPanelSoon):

2011-05-12  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Enable OwnPtr strict mode in PluginHalter
        https://bugs.webkit.org/show_bug.cgi?id=60681

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2011-05-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        String operator+ reallocates unnecessarily when concatting > 2 strings
        https://bugs.webkit.org/show_bug.cgi?id=58420

        Provide a faster String append operator. See Source/JavaScriptCore/ChangeLog for details.

        * WebView/WebFrame.mm: Explicitely cast to Strings first, so operator NSString*() can be invoked.
        (-[WebFrame _stringWithDocumentTypeStringAndMarkupString:]):

2011-05-10  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Perform some forward declarations suggested by include-what-you-use
        https://bugs.webkit.org/show_bug.cgi?id=60545

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        * WebView/WebFrame.mm:

2011-05-11  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        CorrectionPanel sometimes hangs in dismissSoon().
        https://bugs.webkit.org/show_bug.cgi?id=60599
        <rdar://problem/9313628>

        Make sure dismissSoon() won't wait indefinitely if handleAcceptedReplacement() sets m_resultForSynchronousDismissal
        to nil. Added a designated variable m_isDismissing, instead of piggy-backing m_resultForSynchronousDismissal,
        for condition checking.

        * WebCoreSupport/CorrectionPanel.h:
        * WebCoreSupport/CorrectionPanel.mm:
        (CorrectionPanel::CorrectionPanel):
        (CorrectionPanel::show):
        (CorrectionPanel::dismissSoon):
        (CorrectionPanel::dismissInternal):
        (CorrectionPanel::handleAcceptedReplacement):

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by David Levin.

        Add ApplicationCache API to get disk usage per origin
        https://bugs.webkit.org/show_bug.cgi?id=57127

        Added Mac port API.

        * WebCoreSupport/WebApplicationCache.h:
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache diskUsageForOrigin:]):

2011-05-10  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add ApplicationCache API to get disk usage per origin
        https://bugs.webkit.org/show_bug.cgi?id=57127

        Added Mac port API.

        * WebCoreSupport/WebApplicationCache.h:
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache diskUsageForOrigin:]):

2011-05-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=60582
        Crash switching overlay/non-overlay scrollbar preference still possible
        -and corresponding-
        <rdar://problem/9323983>

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-05-09  Jeremy Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Command-~/Exposé to another window while <video> is in full screen, breaks Safari, eventually leading to crash
        https://bugs.webkit.org/show_bug.cgi?id=60496

        When animating into and out of full screen, order out and back in the original webView window,
        disabling animations when necessary.  The exitFullscreen method was targeting the wrong window,
        as the webView is hosted in the full screen window when we ask for it's parent window.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController windowDidEnterFullscreen:]):
        (-[WebFullScreenController exitFullscreen]):

2011-05-04  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Dimitri Glazkov.

        Implement LayoutTestController::pseudoShadowId()
        https://bugs.webkit.org/show_bug.cgi?id=60034

        * DOM/WebDOMOperations.mm:
        (-[DOMElement _shadowPseudoId]):
        * DOM/WebDOMOperationsPrivate.h:

2011-05-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        WebKit part of <rdar://problem/9155590> Broken animation in iAd producer

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize wkExecutableWasLinkedOnOrBeforeSnowLeopard.

2011-05-05  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Rename SelectionController to FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=60234

        * WebView/WebFrame.mm:
        (-[WebFrame _rangeByAlteringCurrentSelection:FrameSelection::direction:granularity:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebHTMLView.mm:
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]):
        * WebView/WebView.mm:

2011-05-04  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Expose WebView directly through ChromeClient.
        https://bugs.webkit.org/show_bug.cgi?id=49902

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::webView):
        * WebView/WebFrame.mm:
        (kit):

2011-05-04  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Populate touch-icon url to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=59143

        Respect the interface change in FrameLoaderClient.

        * Configurations/FeatureDefines.xcconfig:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidChangeIcons):

2011-05-03  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Dimitri Glazkov.

        Element:shadowRoot & Element::ensureShadowRoot should return ShadowRoot*
        https://bugs.webkit.org/show_bug.cgi?id=58703

        * DOM/WebDOMOperations.mm: Added #include for ShadowRoot.h.

2011-05-02  Adam Roben  <aroben@apple.com>

        Take advantage of implicit conversion from nullptr_t to PassOwnPtr

        Fixes <http://webkit.org/b/59964> Implicit conversion from std::nullptr_t to PassOwnPtr
        doesn't work, but should

        Reviewed by Adam Barth.

        * History/WebHistory.mm:
        * Plugins/WebNetscapePluginEventHandler.mm:
        * WebView/WebView.mm:

2011-05-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/9340945> and https://bugs.webkit.org/show_bug.cgi?id=59973
        In Aperture, a WebView might be dealloc'ed before it finishes loading.

        * WebView/WebView.mm:
        (needsSelfRetainWhileLoadingQuirk):
        (-[WebView _didStartProvisionalLoadForFrame:]): If we need the quirk, retain self.
        (-[WebView _didFinishLoadForFrame:]): If we need the quirk, release self on a delay.
        (-[WebView _didFailLoadWithError:forFrame:]): Ditto.
        (-[WebView _didFailProvisionalLoadWithError:forFrame:]): Ditto.

2011-05-02  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        PLATFORM(MAC) should (almost!) build with strict PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59924

        * History/WebHistory.mm:
        (-[WebHistory _visitedURL:withTitle:method:wasFailure:increaseVisitCount:]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::savePlatformDataToCachedFrame):
        * WebView/WebView.mm:
        (-[WebView _injectMailQuirksScript]):
        (-[WebView _injectOutlookQuirksScript]):
        (toStringVector):

2011-05-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Prune some #includes from DOMWindow.h
        https://bugs.webkit.org/show_bug.cgi?id=59907

        * Plugins/WebBaseNetscapePluginView.mm:
        * WebView/WebFrame.mm:
        Add now missing SecurityOrigin.h #includes.

2011-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Get rid of versions of sendContextMenuEvent and eventMayStartDrag that takes NSEvent
        https://bugs.webkit.org/show_bug.cgi?id=59837

        Call sendContextMenuEvent and eventMayStartDrag with PlatformMouseEvent instead of NSEvent.

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

2011-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Move currentKeyboardEvent from EventHandlerMac.mm to WebHTMLView.mm
        https://bugs.webkit.org/show_bug.cgi?id=59835

        Moved currentKeyboardEvent.

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

2011-04-29  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Add ENABLE macro for WebKitAnimation
        https://bugs.webkit.org/show_bug.cgi?id=59729

        Add new feature to toggle WebKit Animation API.

        * Configurations/FeatureDefines.xcconfig:

2011-04-28  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59758> Fix static analyzer warnings for missing assignment to 'self' in -init methods

        Reviewed by Anders Carlsson.

        * History/WebHistory.mm:
        (-[WebHistoryPrivate init]):
        * Misc/WebElementDictionary.mm:
        (-[WebElementDictionary initWithHitTestResult:]):
        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase init]):
        * Plugins/WebPluginController.mm:
        (-[WebPluginController initWithDocumentView:]):
        * Plugins/WebPluginRequest.m:
        (-[WebPluginRequest initWithRequest:frameName:notifyData:sendNotification:didStartFromUserGesture:]):
        * WebCoreSupport/WebEditorClient.mm:
        (-[WebEditCommand initWithEditCommand:]):
        * WebCoreSupport/WebJavaScriptTextInputPanel.m:
        (-[WebJavaScriptTextInputPanel initWithPrompt:text:]):
        * WebView/WebNavigationData.mm:
        (-[WebNavigationData initWithURLString:title:originalRequest:response:hasSubstituteData:clientRedirectSource:]):

2011-04-28  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Remove IMAGE_RESIZER related code.
        https://bugs.webkit.org/show_bug.cgi?id=59735

        * Configurations/FeatureDefines.xcconfig:

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        Remove WML-related configuration options and private APIs.

        * Configurations/FeatureDefines.xcconfig:
        * WebCoreSupport/WebChromeClient.mm:
        (stringForMessageSource):
        * WebView/WebFramePrivate.h:
        * WebView/WebUIDelegatePrivate.h:

2011-04-28  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: REGRESSION(85051): Develop Menu items are wrong when inspector is frontmost window
        https://bugs.webkit.org/show_bug.cgi?id=59747

        Restore functions that were removed in r85051. They were needed when the inspector is the frontmost window.
        Also update them to call _inspectedWebView.get() - since it's a RetainPtr now.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWebInspector:]):
        (-[WebInspectorWindowController showErrorConsole:]):
        (-[WebInspectorWindowController toggleDebuggingJavaScript:]):
        (-[WebInspectorWindowController toggleProfilingJavaScript:]):
        (-[WebInspectorWindowController validateUserInterfaceItem:]):

2011-04-28  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59725> -[WebFullscreenWindow initWithContentRect:styleMask:backing:defer:] leaks a CALayer

        Reviewed by Dan Bernstein.

        * WebView/WebFullScreenController.mm:
        (-[WebFullscreenWindow initWithContentRect:styleMask:backing:defer:]):
        Use a RetainPtr to hold the CALayer and to fix the leak.

2011-04-28  David Kilzer  <ddkilzer@apple.com>

        Follow-up fix: <http://webkit.org/b/59727> -[WebPDFView menuForEvent:] leaks NSMenuItem objects

        Addresses review comment from Darin Adler.

        * WebView/WebPDFView.mm:
        (-[WebPDFView menuForEvent:]): Use a local variable and -release
        instead of -autorelease.

2011-04-28  Anders Carlsson  <andersca@apple.com>

        Fix a thinko - separateRealmLabel is not an NSImageView.

        * Panels/WebAuthenticationPanel.h:

2011-04-28  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59727> -[WebPDFView menuForEvent:] leaks NSMenuItem objects

        Reviewed by Dan Bernstein.

        * WebView/WebPDFView.mm:
        (-[WebPDFView menuForEvent:]): Call -autorelease after copying
        each NSMenuItem.  Regressed in r9566 for Bug 3711.

2011-04-28  Enrica Casucci  <enrica@apple.com>

        Reviewed by Beth Dakin.

        Momentum scroll tweak for WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=59723
        <rdar://problem/9259933>

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]): Changed constant.

2011-04-27  Anders Carlsson  <andersca@apple.com>

        Follow-up Leopard build fix.

        * Carbon/HIViewAdapter.m:
        (_webkit_NSView_setNeedsDisplayInRect):

2011-04-27  Anders Carlsson  <andersca@apple.com>

        More clang++ 32-bit build fixes.

        * Carbon/CarbonWindowAdapter.mm:
        (-[CarbonWindowAdapter reconcileToCarbonWindowBounds]):
        (-[CarbonWindowAdapter setContentView:]):
        (-[CarbonWindowAdapter _handleContentBoundsChanged]):
        * Carbon/HIViewAdapter.m:
        (_webkit_NSView_setNeedsDisplayInRect):
        * Panels/WebAuthenticationPanel.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView convertFromX:andY:space:toX:andY:space:]):
        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (getCarbonEvent):
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scrollRectIntoView):
        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory accessibilityConvertScreenRect:]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController windowDidEnterFullscreen:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _hitViewForEvent:]):
        (coreGraphicsScreenPointForAppKitScreenPoint):
        * WebView/WebPDFView.mm:
        (-[WebPDFView setScrollPoint:]):

2011-04-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        Use RetainPtr access inspected view from the inspector one to avoid inspected view being deleted before
        inspector is closed.

        * WebCoreSupport/WebInspectorClient.mm: store reference to inspected view in RetainPtr. Despite the removed
        comment in initWithInspectedWebView this doesn't introduce cyclic reference since there are no retaining
        pointers to the WebInspectorWindowController from the inspected page or from the WebInspectorClient.
        There is only one reference to it from WebInspectorFrontendClient which is held by the inspector
        front-end page.

        Drive-by fix: removed several unused methods which are currently implemented in mac/WebInspector/WebInspector.mm
        (-[WebInspectorWindowController initWithInspectedWebView:]):
        (-[WebInspectorWindowController close]):
        (-[WebInspectorWindowController showWindow:]):
        (-[WebInspectorWindowController setAttachedWindowHeight:]):
        (-[WebInspectorWindowController destroyInspectorView:]):

2011-04-26  Sam Weinig  <sam@webkit.org>

        Reviewed by David Hyatt.

        Remove Datagrid from the tree
        https://bugs.webkit.org/show_bug.cgi?id=59543

        * Configurations/FeatureDefines.xcconfig:
        Remove feature.

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Choose the compiler based on the Xcode version for Snow Leopard debug builds.

        * Configurations/Base.xcconfig:
        * Configurations/CompilerVersion.xcconfig: Added.

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        WebKit2 should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59426

        Fix include ordering.

        * WebView/WebDeviceOrientationProviderMock.mm:

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        WebKit1 should build cleanly with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59424

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem initFromDictionaryRepresentation:]):
        * Plugins/WebNetscapePluginEventHandler.h:
        * Plugins/WebNetscapePluginEventHandler.mm:
        (WebNetscapePluginEventHandler::create):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):
        * WebView/WebDeviceOrientationProviderMock.mm:
        * WebView/WebTextIterator.mm:
        (-[WebTextIterator initWithRange:]):

2011-04-25  Jon Lee  <jonlee@apple.com>

        Reviewed by Maciej Stachowiak.

        Overlay scroller hard to see on pages with dark background (59183)
        https://bugs.webkit.org/show_bug.cgi?id=59183
        <rdar://problem/8975367>
        
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): adding method to allow changing style

2011-04-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84740.
        http://trac.webkit.org/changeset/84740
        https://bugs.webkit.org/show_bug.cgi?id=59290

        change breaks apple internal builds and is incorrect
        (Requested by smfr on #webkit).

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-04-22  Jon Lee  <jonlee@apple.com>

        Reviewed by Beth Dakin.

        Overlay scroller hard to see on pages with dark background (59183)
        https://bugs.webkit.org/show_bug.cgi?id=59183
        <rdar://problem/8975367>
        
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): adding method to allow changing style

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

        Reviewed by Daniel Bates.

        Full Screen from within an <iframe> does not cause <iframe> to resize.
        https://bugs.webkit.org/show_bug.cgi?id=58638

        Tests: fullscreen/full-screen-frameset-allowed.html
               fullscreen/full-screen-frameset-not-allowed.html

        Return the _element's document instead of the WKView's document, which 
        will be different in the case of elements within <iframe>s.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController _document]):

2011-04-22  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Disable MediaPlayerPrivateAVFoundation when using old full screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=59147

        Add a new user default preference, and plumb that preference down to WebCore
        Settings. Allow the fullScreenEnabled preference to override the new 
        isAVFoundationEnabled preference, so that clients of the legacy full screen
        mode will continue to use that mode normally.

        * WebView/WebPreferenceKeysPrivate.h: Add new preference key.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set the default value of new
            preference.
        (-[WebPreferences setAVFoundationEnabled:]): Added.
        (-[WebPreferences isAVFoundationEnabled]): Added.
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Update the WebCore settings with the
            new values from WebPreferences.

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

        Reviewed by Gavin Barraclough.

        Remove remaining uses of deprecated version of toJS
        https://bugs.webkit.org/show_bug.cgi?id=59170

        * DOM/WebDOMOperations.mm:
        (-[DOMElement _shadowRoot:]):
        (-[DOMElement _ensureShadowRoot:]):
        Replace use of deprecated toJS overload with explicit call to deprecatedGlobalObjectForPrototype.

2011-04-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Roben.

        Add a feature define to allow <details> and <summary> to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=59118
        <rdar://problem/9257045>

        * Configurations/FeatureDefines.xcconfig:

2011-04-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Sam Weinig.

        Add Frame* to the argument lists of canCopyCut and canPaste
        https://bugs.webkit.org/show_bug.cgi?id=59153

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::canCopyCut):
        (WebEditorClient::canPaste):

2011-04-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82052.
        http://trac.webkit.org/changeset/82052
        https://bugs.webkit.org/show_bug.cgi?id=59135

        New full screen api should be opt-in, not opt-out. (Requested
        by jernoble on #webkit).

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

2011-04-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=59048
        Need to track whether overlay scrollbar is currently visible and in lower-
        righthand corner
        -and corresponding-
        <rdar://problem/9211232>

        A new WebSystemInterface is needed for this.
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-04-21  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG feDropShadow implementation of SVG Filters 1.2
        https://bugs.webkit.org/show_bug.cgi?id=52513

        * MigrateHeaders.make:

2011-04-20  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        layoutTestController can create and destroy shadow DOM
        https://bugs.webkit.org/show_bug.cgi?id=59058

        Support for new methods in Mac DRT.

        * DOM/WebDOMOperations.mm:
        (-[DOMElement _ensureShadowRoot:]):
        (-[DOMElement _removeShadowRoot]):
        * DOM/WebDOMOperationsPrivate.h:

2011-04-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Adopt QTKit API for listing and deleting file in its media cache.
        <rdar://problem/9130029> 

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize new functions.

2011-04-19  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        WebPreferences in WebKit1 should have CanvasUsesAcceleratedDrawing set to NO by default
        https://bugs.webkit.org/show_bug.cgi?id=58936

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

2011-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename lengthReceived to encodedDataLength/dataLength
        https://bugs.webkit.org/show_bug.cgi?id=58883

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

2011-04-18  Jia Pu  <jpu@apple.com>

        Reviewed by Mark Rowe.

        WebKit needs to stop importing <AppKit/NSTextChecker.h>
        https://bugs.webkit.org/show_bug.cgi?id=58798
        <rdar://problem/9294938>

        Use public header <AppKit/NSSpellChecker.h> instead.

        * WebCoreSupport/CorrectionPanel.h:
        * WebCoreSupport/CorrectionPanel.mm:
        (correctionIndicatorType):
        (CorrectionPanel::show):
        (CorrectionPanel::dismissInternal):
        (CorrectionPanel::handleAcceptedReplacement):
        * WebCoreSupport/WebEditorClient.mm:
        * WebView/WebView.mm:

2011-04-17  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Timothy Hatcher.

        Stop using -[NSString initWithContentsOfFile:]
        https://bugs.webkit.org/show_bug.cgi?id=58763

        -[NSString initWithContentsOfFile:] was deprecated in 10.4, so we should stop using it.

        * WebView/WebView.mm:
        (leakMailQuirksUserScriptContents):
        (leakOutlookQuirksUserScriptContents):

2011-04-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/58463> Switch HTTP pipelining from user default to private setting
        <rdar://problem/9268729>

        Reviewed by Dan Bernstein.

        This replaces support for the WebKitEnableHTTPPipelining user
        default with methods on the WebCore::ResourceRequest class in
        WebCore, the WebView class in WebKit1, and the WebContext class
        in WebKit2.  It also removes support for the
        WebKitForceHTTPPipeliningPriorityHigh user default which was not
        needed.

        * WebView/WebView.mm:
        (+[WebView(WebPrivate) _HTTPPipeliningEnabled]): Added.
        (+[WebView(WebPrivate) _setHTTPPipeliningEnabled:]): Added.
        * WebView/WebViewPrivate.h:
        (+[WebView(WebPrivate) _HTTPPipeliningEnabled]): Added declaration.
        (+[WebView(WebPrivate) _setHTTPPipeliningEnabled:]): Added declaration.

2011-04-17  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Dan Bernstein.

        Assign to self in WebInspectorWindowController constructors
        https://bugs.webkit.org/show_bug.cgi?id=58749

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController init]):
        (-[WebInspectorWindowController initWithInspectedWebView:]):

2011-04-17  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Move WebNodeHighlighter into its own file
        https://bugs.webkit.org/show_bug.cgi?id=58746

        Extract this class into its own file alongside the
        other WebNodeHighlight files. In doing so do some
        cleanup on WebInspectorClient removing some methods
        that were never called.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient): style fix.
        * WebInspector/WebNodeHighlighter.h: Added.
        * WebInspector/WebNodeHighlighter.mm: Added.
        (-[WebNodeHighlighter initWithInspectedWebView:]): call super init.
        (-[WebNodeHighlighter dealloc]):
        (-[WebNodeHighlighter highlightNode:]):
        (-[WebNodeHighlighter hideHighlight]):
        (-[WebNodeHighlighter didAttachWebNodeHighlight:]):
        (-[WebNodeHighlighter willDetachWebNodeHighlight:]):

2011-04-15  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        [Mac] WebKit needs to convert the bounding box of autocorrected word to view coordinate.
        https://bugs.webkit.org/show_bug.cgi?id=58717

        Convert the bounding box from window coordinate to view coordinate, which is expected by NSCorrectionPanel.

        * WebCoreSupport/CorrectionPanel.mm:
        (CorrectionPanel::show):

2011-04-15  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by James Robinson.

        Add a flag to guard Page Visibility API changes.
        https://bugs.webkit.org/show_bug.cgi?id=58464

        * Configurations/FeatureDefines.xcconfig:

2011-04-15  Oliver Hunt  <oliver@apple.com>

        GC allocate Structure
        https://bugs.webkit.org/show_bug.cgi?id=58483

        Rolling r83894 r83827 r83810 r83809 r83808 back in with
        a workaround for the gcc bug seen by the gtk bots

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::createStructure):

2011-04-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Password field input does not switch to ASCII-compatible source
        https://bugs.webkit.org/show_bug.cgi?id=58583
        <rdar://problem/9059651>

        Now that WebCore doesn't set secure input mode, WebKit has to. Happily, it already has the
        necessary logic, needed to return a nil text input context when in password fields.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView close]): If the view is still enforcing secure event mode, stop.
        (-[WebHTMLView windowDidBecomeKey:]): Call _updateSecureInputState.
        (-[WebHTMLView windowDidResignKey:]): Ditto.
        (-[WebHTMLView becomeFirstResponder]): Call _updateSecureInputState. It's a bit tricky
        because the first responder is still different an this point, so set a boolean variable to
        let _updateSecureInputState know what's going on.
        (-[WebHTMLView resignFirstResponder]): Disable secure event mode if it's on.
        (-[WebHTMLView _updateSecureInputState]): Update HIToolbox secure event input state and
        allowed input sources accorsing to current selection.
        (-[WebHTMLView _updateSelectionForInputManager]): Call _updateSecureInputState.

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

        Reviewed by Maciej Stachowiak.

        Make mac WebKit1 use the default localization strategy
        https://bugs.webkit.org/show_bug.cgi?id=58628

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        Remove the localization strategy code. The equivalent is now
        in WebCore/platform/DefaultLocalizationStrategy.cpp.

2011-04-15  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Renaming TRACK feature define to VIDEO_TRACK
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Configurations/FeatureDefines.xcconfig:

2011-04-14  Pratik Solanki  <psolanki@apple.com>

        Reviewed by David Kilzer.

        Set minimum priority for fast lane connections
        https://bugs.webkit.org/show_bug.cgi?id=58353

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Support for new WKSI method WKSetHTTPPipeliningMinimumFastLanePriority.

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

        Reviewed by Gavin Barraclough.

        WebKit2 doesn't keep overlay scrollers shown while scroll gesture held
        <rdar://problem/9260518>

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Initialize new WKSI functions.

2011-04-13  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/58172> Fix -Wcast-align warning in WebBasePluginPackage.mm

        Reviewed by Anders Carlsson.

        Fixes the following warning with -Wcast-align enabled:

            Source/WebKit/mac/Plugins/WebBasePluginPackage.mm:402:21:{402:21-402:93}{402:39-402:93}: error: cast from 'uint8_t *' (aka 'unsigned char *') to 'struct fat_arch *' increases required alignment from 1 to 4 [-Werror,-Wcast-align,3]
                         archs = (struct fat_arch*)((uint8_t*)rawData.data() + sizeof(struct fat_header));
                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage isNativeLibraryData:]): Added
        COMPILE_ASSERT() to make sure our pointer math is valid.
        Removed cast to (uint8_t*) and divide sizeof(struct fat_header)
        by sizeof(uint32_t) to fix the pointer math.  Replaced C-style
        casts with reinterpret_cast.

2011-04-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Infinite recursion in WebHTMLView executeSavedKeypressCommands.
        https://bugs.webkit.org/show_bug.cgi?id=58382
        <rdar://problem/9239370>

        Execution of some editing commands could trigger a call to selectedRange that
        internally calls executeSavedKeypressCommands creating an infinite recursion.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _executeSavedKeypressCommands]): Added a flag to avoid recursion.
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Added flag initialization.

2011-04-12  Alice Liu  <alice.liu@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=58292
        Provide new setting to allow site icon loading despite disabling automatic image loading in general.

        * WebView/WebPreferenceKeysPrivate.h: Add preference key.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Initialize to false.
        (-[WebPreferences setLoadsSiteIconsIgnoringImageLoadingPreference:]): Added.
        (-[WebPreferences loadsSiteIconsIgnoringImageLoadingPreference]): Added.
        * WebView/WebPreferencesPrivate.h: Add setter/getter definitions.
        * WebView/WebView.mm:
        (-[WebView _preferencesChanged:]): Add to settings that get propagated upon changes. 

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

        Reviewed by Maciej Stachowiak.

        WebKit2: Safari doesn't respect cmd-arrows (and variations) as custom keyboard shortcuts
        https://bugs.webkit.org/show_bug.cgi?id=58175
        <rdar://problem/9060555>

        * WebView/WebFrameView.mm: (-[WebFrameView keyDown:]): Added a comment explaining how this
        should be changed to match WebKit2.

2011-04-06  Timothy Hatcher  <timothy@apple.com>

        Fix a bug where the context menu does not show in PDF documents if there is no
        UI delegate or the UI delegate does not respond to the context menu selector.

        https://webkit.org/b/57958

        Reviewed by Darin Adler.

        * WebView/WebView.mm:
        (-[WebView _menuForElement:defaultItems:]): CallUIDelegate returns nil
        if UIDelegate is nil or doesn't respond to the selector. So check that
        here to distinguish between using defaultMenuItems or the delegate
        really returning nil to say "no context menu".

2011-04-11  Jer Noble  <jer.noble@apple.com>

        Unreviewed; roll out unintentional change to WebFullScreenController.mm.

        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController enterFullscreen:]):

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

        Reviewed by Oliver Hunt.

        A few heap-related renames and file moves.
        
        WeakGCPtr<T> => Weak<T>
        Global<T> => Strong<T>
        collector/ => heap/
        collector/* => heap/*
        runtime/WeakGCPtr.h => heap/Weak.h
        
        (Eventually, even more files should move into the heap directory. Like
        Heap.h and Heap.cpp, for example.)

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        * WebView/WebScriptDebugger.h:

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

        Reviewed by Darin Adler.

        WebKit2: Safari doesn't respect cmd-arrows (and variations) as custom keyboard shortcuts
        https://bugs.webkit.org/show_bug.cgi?id=58175
        <rdar://problem/9060555>

        * WebView/WebFrameView.mm: (-[WebFrameView keyDown:]): Added a comment explaining how this
        should be changed to match WebKit2.

2011-04-08  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r83335.
        http://trac.webkit.org/changeset/83335
        https://bugs.webkit.org/show_bug.cgi?id=53556

        GTK and QT bots are broken

        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Configurations/FeatureDefines.xcconfig:

2011-04-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        -[WebView setPreferences:] can take a lot of time if loading lots of webviews at once
        https://bugs.webkit.org/show_bug.cgi?id=58128
        <rdar://problem/9244553>
        
        The root of the problem here was an O(N^2) issue - each WebView,
        upon having its preferences initialized, would broadcast a
        notification that was listened to by all other WebViews sharing
        its preferences.
        
        To maintain the API contract, I split the notification into two,
        one that is for public API consumption, and the other which is for
        internal use only. Changes that don't need to be picked up by
        other WebViews broadcast the public notification only. And we
        avoid WebView broadcasting a notification just to get itself to
        update.

        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase _startUpIconDatabase]):
        (-[WebIconDatabase _shutDownIconDatabase]):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView viewWillMoveToWindow:]):
        (-[WebBaseNetscapePluginView viewWillMoveToSuperview:]):
        (-[WebBaseNetscapePluginView viewDidMoveToWindow]):
        (-[WebBaseNetscapePluginView viewWillMoveToHostWindow:]):
        * WebView/WebPreferences.mm:
        (-[WebPreferences initWithIdentifier:]):
        (-[WebPreferences _setStringValue:forKey:]):
        (-[WebPreferences _setIntegerValue:forKey:]):
        (-[WebPreferences _setFloatValue:forKey:]):
        (-[WebPreferences _setBoolValue:forKey:]):
        (-[WebPreferences _setLongLongValue:forKey:]):
        (-[WebPreferences _setUnsignedLongLongValue:forKey:]):
        (-[WebPreferences _postPreferencesChangedNotification]):
        (-[WebPreferences _postPreferencesChangedAPINotification]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView _preferencesChanged:]):
        (-[WebView setUsesPageCache:]):
        (+[WebView initialize]):
        (-[WebView setPreferences:]):
        (-[WebView _keyboardUIMode]):
        * WebView/WebViewInternal.h:

2011-04-07  Andrew Scherkus  <scherkus@chromium.org>

        Revert ENABLE_TRACK patch due to compile failures.

        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        REGRESSION (WebKit2): Reverse conversion doesn't work in Kotoeri
        https://bugs.webkit.org/show_bug.cgi?id=58066
        <rdar://problem/8965302>

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView attributedSubstringFromRange:]):
        (-[WebHTMLView attributedString]):
        (-[WebHTMLView selectedAttributedString]):
        Updated for editingAttributedStringFromRange: now taking a WebCore::Range instead of DOMRange.

2011-04-07  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r64712): Microsoft Outlook 2011: original message contents
        not included when replying to an email.
        https://bugs.webkit.org/show_bug.cgi?id=57794
        
        Outlook populates a reply message by creating an empty WebView and
        using DOM API to populate the WebView's empty document with content
        from the original message. It expects the initial empty document to
        simply be "<html></html>", and it proceeds to dynamically create and
        append a BODY node and add the original message content as a child of
        that node. Outlook then takes the innerHTML of the frame's first body
        element and copies it into a *new* document that is displayed and
        edited in the reply message window.
        
        Due to implementing the HTML5 tree building algorithm in r64712,
        initial empty documents went from being "<html></html>" to being
        "<html><head></head><body></body></html>". Outlook still dynamically
        creates a BODY node to parent the original message content, but this
        BODY node duplicates the one created by the tree builder. When Outlook
        then takes the innerHTML of the first body element to populate the
        reply message window it gets the empty body element created by the
        parser, not the one it created with the original message content.
        
        Fix this by injecting a user script into the initial empty document
        that removes the HEAD and BODY nodes created by the parser. This
        ensures that the BODY created by Outlook is the only BODY in the
        document.

        * Misc/OutlookQuirksUserScript.js: Added.
        * WebView/WebView.mm:
        (leakMailQuirksUserScriptContents):
        (-[WebView _injectMailQuirksScript]):
        (needsOutlookQuirksScript):
        (leakOutlookQuirksUserScriptContents):
        (-[WebView _injectOutlookQuirksScript]):
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2011-04-06  Dai Mikurube  <dmikurube@chromium.org>

        Reviewed by David Levin.

        Add QUOTA build flag for unified quota API
        https://bugs.webkit.org/show_bug.cgi?id=57918

        * Configurations/FeatureDefines.xcconfig: Added QUOTA build flag

2011-04-06  Robert Sesek  <rsesek@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Move code duplicated between the WebKit/mac and WebKit2 down to WebCore because Chromium will need it too
        https://bugs.webkit.org/show_bug.cgi?id=54969

        * WebView/WebFrame.mm:
        (-[WebFrame _convertToNSRange:]): Moved duplicated code to WebCore
        (-[WebFrame _characterRangeAtPoint:]): Moved duplicated code to WebCore

2011-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Move attributedStringFromRange down to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=57905

        * Misc/WebNSAttributedStringExtras.h: Removed.
        * Misc/WebNSAttributedStringExtras.mm: Removed.
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation attributedStringFrom:startOffset:to:endOffset:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _writeSelectionWithPasteboardTypes:toPasteboard:cachedAttributedString:]):
        (-[WebHTMLView attributedSubstringFromRange:]):
        (-[WebHTMLView attributedString]):
        (-[WebHTMLView selectedAttributedString]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView writeSelectionWithPasteboardTypes:toPasteboard:]):

2011-04-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        [Refactoring] SpellCheckingResult should be replaced with TextCheckingResult
        https://bugs.webkit.org/show_bug.cgi?id=56085

        Removed NSTextCheckingResult to SpellCheckingResult convertion, and extracted
        NSTextCheckingResult to TextCheckingResult convertio from checkTextOfParagraph method.
        for requestCheckingOfString method.
        
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (toCoreTextCheckingResults):
        (WebEditorClient::checkTextOfParagraph):
        (-[WebEditorSpellCheckResponder initWithSender:WebCore::sequence:types:WebCore::results:]):
        (-[WebEditorSpellCheckResponder perform]):
        (WebEditorClient::requestCheckingOfString):
        * WebView/WebFrame.mm:
        (-[WebFrame markersForSelectionStartAsText]):
        * WebView/WebFramePrivate.h:

2011-04-05  Anders Carlsson  <andersca@apple.com>

        Didn't mean to land this.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getVariable:value:]):

2011-04-04  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/57384> CFNetwork and WebCore load priorities should match

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added initialization for
        wkSetHTTPPipeliningMaximumPriority().

2011-04-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (WebKit2): Caps-Lock indicator sometimes doesn't appear in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51230
        <rdar://problem/8780989>

        * WebView/WebHTMLView.mm: (-[WebHTMLView flagsChanged:]): Moved Caps Lock handling from
        WebKits to WebCore, because WebKit shouldn't be smart.

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Assertion failure when executing a complex custom key binding
        https://bugs.webkit.org/show_bug.cgi?id=57681

        * WebView/WebHTMLView.mm: (-[WebHTMLView hasMarkedText]): There is no need to execute saved
        commands when they can't possibly change the result.

2011-04-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Shockwave plug-in doesn't accept mouse events
        https://bugs.webkit.org/show_bug.cgi?id=57653
        <rdar://problem/8483273>

        Fix an unrelated bug found by the added test.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView convertFromX:andY:space:toX:andY:space:]):
        Make sure to always set destX and destY.

2011-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        Make WebKit2 text input handling more like WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=57649

        * WebView/WebFrameInternal.h: Expose _convertToDOMRange for use in WebHTMLView.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _executeSavedKeypressCommands]): Renamed, since these are not editor commands.
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Updated for the renamed _executeSavedKeypressCommands.
        (-[WebHTMLView characterIndexForPoint:]): Ditto.
        (-[WebHTMLView firstRectForCharacterRange:]): Ditto.
        (-[WebHTMLView selectedRange]): Ditto.
        (-[WebHTMLView markedRange]): Ditto.
        (-[WebHTMLView attributedSubstringFromRange:]): Ditto.
        (-[WebHTMLView hasMarkedText]): Ditto.
        (-[WebHTMLView unmarkText]): Ditto.
        (-[WebHTMLView setMarkedText:selectedRange:]): Ditto. Changed the comment about the argument
        type into an assertion. Removed resetting interpretKeyEventsParameters to 0, as we shouldn't
        be able to call text input protocol methods from here (and we didn't even reset it back on
        return). Changed to retrieve all data before starting to apply actions to better match WK2 code.
        (-[WebHTMLView insertText:]): Ditto.

2011-04-01  Timothy Hatcher  <timothy@apple.com>

        Make momentum scroll event latching work in WebKit2 on Mac.

        <rdar://problem/8751861>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Remove IsLatchingWheelEvent, add GetNSEventMomentumPhase.
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]): Use WKGetNSEventMomentumPhase to set isLatchingEvent.

2011-03-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Assertion failure in -[WebHTMLView _handleStyleKeyEquivalent:]
        https://bugs.webkit.org/show_bug.cgi?id=26667

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _handleStyleKeyEquivalent:]): Handle the case where WebView is
        nil rather than asserting that it is non-nil. One case where WebView will be nil
        is when the frame is closed, but in any case where it is nil, the correct thing
        to do is to not try to handle the style key.

2011-03-31  Alexey Proskuryakov  <ap@apple.com>

        Patch by John Harvey, reviewed and tweaked by me.

        <rdar://problem/8644403> Should notify TSM that plug-ins would show a bottom input window for marked text.

        * Plugins/Hosted/WebTextInputWindowController.m:
        (-[WebTextInputPanel _interpretKeyEvent:string:]):

2011-03-31  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        <title> should support dir attribute
        https://bugs.webkit.org/show_bug.cgi?id=50961

        Update to new FrameLoaderClient interface.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchDidReceiveTitle):
        (WebFrameLoaderClient::setTitle):

2011-03-30  Dominic Cooney  <dominicc@google.com>

        Reviewed by Dimitri Glazkov.

        Adds layoutTestController.shadowRoot accessor to Mac DRT.
        https://bugs.webkit.org/show_bug.cgi?id=57415

        * DOM/WebDOMOperations.mm:
        (-[DOMElement _shadowRoot:]):
        * DOM/WebDOMOperationsPrivate.h:

2011-03-30  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        WebHTMLView shouldn't resend noop: commands
        https://bugs.webkit.org/show_bug.cgi?id=57504
        <rdar://problem/9209390>

        * WebView/WebHTMLView.mm: (-[WebHTMLView _executeSavedEditingCommands]): Filter out NOOPs,
        which we get e.g. when handling Cmd-key combos.

2011-03-30  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r82320): Spacebar no longer pages down
        https://bugs.webkit.org/show_bug.cgi?id=57423
        <rdar://problem/9207702>

        Also includes some unrelated cleanup that I had in my tree.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Added an assertion that the event is
        being dispatched to the right frame.
        (-[WebHTMLView setMarkedText:selectedRange:]): Use 0 for a pointer, not NULL.
        (-[WebHTMLView doCommandBySelector:]): Update eventInterpretationHadSideEffects with "|=".
        Even if this specific command hasn't been handled, that doesn't nullify side effects from
        previous commands.
        (-[WebHTMLView insertText:]): Besides looking at the return value of insertText() to fix the
        bug, removed setting _private->interpretKeyEventsParameters to 0. I don't see any way for
        another WebHTMLView NSTextInput method to be called from within insertText:, so no one is
        going to look at it.

2011-03-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Brady Eidson.

        WebKit2: Attempting to view css file from url causes it to download
        <rdar://problem/9102611>
        https://bugs.webkit.org/show_bug.cgi?id=57501

        * WebView/WebHTMLRepresentation.h:
        * WebView/WebHTMLRepresentation.mm:
        (+[WebHTMLRepresentation unsupportedTextMIMETypes]):
        * WebView/WebHTMLView.mm:
        (+[WebHTMLView unsupportedTextMIMETypes]):
        Re-factor unsupportedTextMIMETypes to pull from WebCore's
        MIMETypeRegistry, so that the list can be shared with WebKit2.

2011-03-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=57408 
        webkit-min-device-pixel-ratio media query doesn't work post-SnowLeopard 
        -and corresponding-
        <rdar://problem/8665411>

        * Misc/WebNSControlExtras.m:
        (-[NSControl sizeToFitAndAdjustWindowHeight]):
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scaleFactor):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView viewDidMoveToWindow]):
        (-[WebHTMLView attachRootLayer:]):

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Make validation message bubble testable
        https://bugs.webkit.org/show_bug.cgi?id=57290

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Copy the private value of
          the timer magnification to WebCore::Settings.
        (-[WebView validationMessageTimerMagnification]): Added.
        (-[WebView setValidationMessageTimerMagnification:]): Added.
        * WebView/WebViewData.h: Declare a member for the timer magnification.
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]): Initialize the timer magnification.
        * WebView/WebViewPrivate.h:
          Declare a setter and a getter for the timer magnification.

2011-03-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Mac] Enable interactive-validation tests on Mac DRT
        https://bugs.webkit.org/show_bug.cgi?id=57308

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):
          Convey a WebView flag for interactive validation to WebCore::Settings.
        (-[WebView interactiveFormValidationEnabled]): Added.
        (-[WebView setInteractiveFormValidationEnabled:]): Added.
        * WebView/WebViewData.h: Add interactiveFormValidationEnabled.
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]): Initialize interactiveFormValidationEnabled.
        * WebView/WebViewPrivate.h: Add setter and getter for interactiveFormValidationEnabled.

2011-03-29  Timothy Hatcher  <timothy@apple.com>

        Update the order of the context menu to better match AppKit on Mac.

        <rdar://problem/9054893>

        Reviewed by John Sullivan.

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        (-[WebDefaultUIDelegate webView:contextMenuItemsForElement:defaultMenuItems:]): Update the order of items.
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::contextMenuItemTagLookUpInDictionary): Added argument for selected string.

2011-03-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57379
        Clean up WK1 key event handling logic

        No bugs knowingly fixed, but this makes the code more consistent.

        * WebView/WebHTMLView.mm:
        (struct WebHTMLViewInterpretKeyEventsParameters): Renamed eventWasHandled to
        eventInterpretationHadSideEffects, because "handled" doesn't really mean much.
        (-[WebHTMLView _executeSavedEditingCommands]): Factored out from _interpretKeyEvent for use
        from other functions. We need to execute saved commands when an input method asks for current
        state, because providing stale state could confuse it.
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Heavily commented, and updated for other
        changes.
        (-[WebHTMLView characterIndexForPoint:]): Call _executeSavedEditingCommands, because otherwise,
        the answer would be stale.
        (-[WebHTMLView firstRectForCharacterRange:]): Ditto.
        (-[WebHTMLView selectedRange]): Ditto.
        (-[WebHTMLView markedRange]): Ditto.
        (-[WebHTMLView attributedSubstringFromRange:]): Ditto.
        (-[WebHTMLView hasMarkedText]): Ditto.
        (-[WebHTMLView unmarkText]): Call _executeSavedEditingCommands, because otherwise, we'd be
        operating on stale data. Also, updated for eventWasHandled renaming.
        (-[WebHTMLView setMarkedText:selectedRange:]): Ditto.
        (-[WebHTMLView doCommandBySelector:]): Removed special handling for noop:. I verified that
        it's no longer needed for bug 14522, presumably due to WebCore level changes. It was also
        fragile, because there is no guarantee about when noop: is sent (also, a custom key binding
        could have a noop: as one of its commands, although that's hardly practical).
        Added the same "from input method" logic that we have in insertText: - I don't know of any
        IMs that call this method, but we clearly need to execute it as part of IM processing when
        there is marked text.
        (-[WebHTMLView insertText:]): Removed a confusing check for [text length]. Always set
        eventInterpretationHadSideEffects to true, becasue there is no reason to try multiple times
        if current selection isn't editable. This is different from doCommandBySelector:, where we
        need to give super class a chance to handle the event if our processing fails.
        Removed a nonsense "consumedByIM = true" assignment - we no longer need it now that the
        return value of _interpretKeyEvent is computed differently.

2011-03-28  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Seidel.

        Fix for <rdar://problem/9112694> REGRESSION (r79411): "Check grammar with spelling" context menu doesn't check as you type
        https://bugs.webkit.org/show_bug.cgi?id=57173

        * WebView/WebFrame.mm:
        (-[WebFrame hasSpellingMarker:length:]): Call new selectionStartHasMarkerFor method instead of selectionStartHasSpellingMarkerFor.
        (-[WebFrame hasGrammarMarker:length:]): Call new selectionStartHasMarkerFor method.
        * WebView/WebFramePrivate.h: Add hasGrammarMarker so grammar marking can be tested.

2011-03-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57260
        Clean up text input code a little

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::handleKeyboardEvent):
        (WebEditorClient::handleInputMethodKeydown):
        * WebView/WebHTMLViewInternal.h:
        Renamed _interceptEditingKeyEvent:shouldSaveCommand:, becasue it doesn't really intercept
        anything. It's just a version it interpretKeyEvents: that tells us whether it was handled,
        and also possibly saves resulting commands for later execution.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _interpretKeyEvent:savingCommands:]): Changed to use early return. Changed
        return value in case platformEvent is null to be less mysterious. Moved receivedNOOP from
        WebHTMLViewPrivate to WebHTMLViewInterpretKeyEventsParameters, as this is just part of event
        handling state, like the other booleans there. Don't call interpretKeyEvents: again simply
        because the first call resulted in no saved commands, becasue it's confusing and apparently
        useless (I couldn't find any broken behavior).
        (-[WebHTMLView unmarkText]): Cleaned upo BOOL vs. bool constants.
        (-[WebHTMLView setMarkedText:selectedRange:]): Ditto.
        (-[WebHTMLView doCommandBySelector:]): Ditto.
        (-[WebHTMLView insertText:]): Ditto.

        * WebView/WebViewInternal.h: There was no _interceptEditingKeyEvent:shouldSaveCommand:
        method on WebView.

2011-03-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Full Screen: disable keyboard access by default
        https://bugs.webkit.org/show_bug.cgi?id=56684

        Take into account whether keyboard access was requested when deciding whether full
        screen mode is supported.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::supportsFullScreenForElement):
        * WebView/WebView.mm:
        (-[WebView _supportsFullScreenForElement:WebCore::withKeyboard:]):
        * WebView/WebViewInternal.h:

2011-03-26  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Enable the Full Screen API by default in WebKit/mac and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=56956

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Default the WebKitFullScreenEnabled preference to true.

2011-03-25  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

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

2011-03-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81939.
        http://trac.webkit.org/changeset/81939
        https://bugs.webkit.org/show_bug.cgi?id=57084

        Rolling out 81939, as it's causing a number of app cache test
        failures. (Requested by jernoble on #webkit).

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

2011-03-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Maciej Stachowiak.

        Application Cache should save audio/ and video/ mime types as flat files
        https://bugs.webkit.org/show_bug.cgi?id=53784
        <rdar://problem/8932473>

        No new tests.

        Initialize the AppCache Total size quotas with the values for WebKitPreferences
        upon startup.

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

2011-03-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81916 and r81917.
        http://trac.webkit.org/changeset/81916
        http://trac.webkit.org/changeset/81917
        https://bugs.webkit.org/show_bug.cgi?id=57071

        broke a test on platforms that do not have QuickTime installed
        (Requested by estes on #webkit).

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

2011-03-24  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

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

2011-03-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Ensure that all compilation takes place within a dynamic global object scope
        https://bugs.webkit.org/show_bug.cgi?id=57054

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]): Updated for signature change.

2011-03-24  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Dismissed reversion suggestion is incorrectly learned.
        https://bugs.webkit.org/show_bug.cgi?id=57039

        CorrectionPanel should always use [NSSpellChecker dismissCorrectionBubbleForView].
        [NSSpellChecker cancelCorrectionBubbleForView] is reserved for situation where correction panel
        is dismissed explicitly by ESC key or clicking the dimiss button. Misusing these causes
        incorrect automatic learning.

        * WebCoreSupport/CorrectionPanel.mm:
        (CorrectionPanel::dismissInternal):

2011-03-24  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/56993> ENABLE_PLUGIN_PROXY_FOR_VIDEO should be defined to 0 on Mac OS X

        Reviewed by Joseph Pecoraro.

        * Plugins/WebPluginContainerPrivate.h: Changed value of
        ENABLE_PLUGIN_PROXY_FOR_VIDEO from 1 to 0.

2011-03-23  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Hook up new AppKit autocorrection UI with WK2.
        https://bugs.webkit.org/show_bug.cgi?id=56055
        <rdar://problem/8947463>

        Please see WebCore/ChangeLog for detail.

        * WebCoreSupport/CorrectionPanel.h: Added.
        (CorrectionPanel::isShowing):
        * WebCoreSupport/CorrectionPanel.mm: Added.
        (correctionBubbleType):
        (CorrectionPanel::CorrectionPanel):
        (CorrectionPanel::~CorrectionPanel):
        (CorrectionPanel::show):
        (CorrectionPanel::dismiss):
        (CorrectionPanel::dismissSoon):
        (CorrectionPanel::dismissInternal):
        (CorrectionPanel::recordAutocorrectionResponse):
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient):
        (WebEditorClient::showCorrectionPanel):
        (WebEditorClient::dismissCorrectionPanel):
        (WebEditorClient::dismissCorrectionPanelSoon):
        (WebEditorClient::recordAutocorrectionResponse):
        * WebView/WebView.mm:
        (-[WebView handleCorrectionPanelResult:]):
        * WebView/WebViewPrivate.h:

2011-03-23  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Services menu item to convert selected Simplified/Traditional Chinese Text is not working.
        https://bugs.webkit.org/show_bug.cgi?id=56974
        <rdar://problem/8284642>

        This fixes a regression introduced by http://trac.webkit.org/changeset/61794
        where readSelectionFromPasteboard was accidentally removed.
        This method and writeSelectionToPasteboard are needed to support Mac OS X
        services.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _pasteAsPlainTextWithPasteboard:]): Added.
        (-[WebHTMLView readSelectionFromPasteboard:]): Added.

2011-03-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Change IconDatabase opening to allow for arbitrary filenames
        https://bugs.webkit.org/show_bug.cgi?id=56977

        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase _startUpIconDatabase]):

2011-03-22  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        Add +[WebApplicationCache getOriginsWithCache]
        https://bugs.webkit.org/show_bug.cgi?id=56722

        Call existing WebCore::ApplicationCacheStorage::getOriginsWithCache API.

        * WebCoreSupport/WebApplicationCache.h:
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache originsWithCache]):

2011-03-22  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        OBJECT element with DivX source is always downloaded
        https://bugs.webkit.org/show_bug.cgi?id=56879

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        Always try to split every element in the "WebPluginExtensions" array, since the DivX plug-in
        specifies multiple file extensions in a single element.

2011-03-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56876
        WK2 Icon DB: Expand IconDatabaseClient interface and move it to the main thread

        Note that while the new client calls always come through on the main thread, our mechanisms to
        route dispatches to the main thread are still valid and will still work.

        Update to the new IconDatabaseClient interface:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebIconDatabaseClient.mm:
        (WebIconDatabaseClient::didRemoveAllIcons):
        (WebIconDatabaseClient::didImportIconURLForPageURL):
        (WebIconDatabaseClient::didImportIconDataForPageURL):
        (WebIconDatabaseClient::didChangeIconForPageURL):
        (WebIconDatabaseClient::didFinishURLImport):

2011-03-22  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Have WebKit push acceleratedDrawing preferences to settings
        https://bugs.webkit.org/show_bug.cgi?id=56792

        * WebView/WebView.mm:

2011-03-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Brady Eidson.

        Expose a preference to use caching quirks for QuickLook,
        and use it if the QuickLook framework is loaded.

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

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (useQuickLookQuirks):
        (+[WebPreferences initialize]):
        (-[WebPreferences useQuickLookResourceCachingQuirks]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2011-03-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: showContextMenu not working in WK2
        https://bugs.webkit.org/show_bug.cgi?id=56734

        Implement showContextMenu() so accessibility related code can call this
        independent of whether WK1 or WK2 is running.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::showContextMenu):

2011-03-21  Chang Shu  <cshu@webkit.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r79953): Can't type in MS Outlook 2011
        https://bugs.webkit.org/show_bug.cgi?id=56665

        r79953 removed the WebView level editablity which is persistent no matter whether
        underlying document itself is changed and editability gets lost. The resolution is to
        set this WebView editable value to WebCore. This avoids the callback from WebCore to
        WebKit which was the main goal in r79953 to improve performance.

        * WebView/WebView.mm:
        (-[WebView setEditable:]):
        (-[WebView isEditable]):

2011-03-19  Anton D'Auria  <adauria@apple.com>

        Reviewed by Alexey Proskuryakov.

        ApplicationCacheGroup is not obsolete after being deleted via ApplicationCacheStorage::deleteEntriesForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=56415
        
        Use new ApplicationCache API to delete all cache for an origin.

        * WebCoreSupport/WebApplicationCache.h:
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache deleteOrigin:]):

2011-03-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        More groundwork for WebKit2 IconDatabase

        Update already-used function names:
        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase iconForURL:withSize:cache:]):
        (-[WebIconDatabase iconURLForURL:]):
        * WebView/WebView.mm:
        (-[WebView _dispatchDidReceiveIconFromWebFrame:]):

2011-03-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement inspector session storage.
        https://bugs.webkit.org/show_bug.cgi?id=56643

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::saveSessionSetting):
        (WebInspectorClient::loadSessionSetting):
        (WebInspectorFrontendClient::saveSessionSetting):
        (WebInspectorFrontendClient::loadSessionSetting):
        (-[WebInspectorWindowController inspectorClient]):

2011-03-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed a leak seen on the buildbot.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend): Smart pointers are smart.

2011-03-16  Jeff Johnson  <github@lapcatsoftware.com>

        Reviewed by Alexey Proskuryakov.

        Logic error in -[WebHTMLView close]
        https://bugs.webkit.org/show_bug.cgi?id=56445

        Page is always nil at this point, because [self _webView] is nil,
        so the conditional code is never run.

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

2011-03-16  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WK2: Need to propagate enhanced accessibility flag from UI -> web process
        https://bugs.webkit.org/show_bug.cgi?id=56379

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

2011-03-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make Structure creation require a JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=56438

        Mechanical change to make all Structure creation use a JSGlobalData&

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::createStructure):

2011-03-15  Alexey Proskuryakov  <ap@apple.com>

        Forgot to save a modification to this file when committing.

        * WebCoreSupport/WebKeyGenerator.mm: Changed "Apple Computer" to "Apple" in copyright header.

2011-03-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): keygen element doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=56402
        <rdar://problem/9006545>

        * WebCoreSupport/WebKeyGenerator.h:
        * WebCoreSupport/WebKeyGenerator.m: Removed.
        * WebCoreSupport/WebKeyGenerator.mm: Copied from Source/WebKit/mac/WebCoreSupport/WebKeyGenerator.m.
        (+[WebKeyGenerator sharedGenerator]):
        (toWebCertificateParseResult):
        WebCore no longer needs WebKeyGenerator. Safari still does need a part of it, so keeping
        this misnamed and misplaced code for now.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::keygenMenuItem512):
        (WebPlatformStrategies::keygenMenuItem1024):
        (WebPlatformStrategies::keygenMenuItem2048):
        (WebPlatformStrategies::keygenKeychainItemName):
        Added strings used by keygen.

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface): Initialize a WebCore
        pointer to a function used by keygen.

        * WebView/WebFrameView.mm: (-[WebFrameView initWithFrame:]): WebKeyGenerator can be lazily
        initialized now.

2011-03-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        WebKit part of <rdar://problem/9075624> Overlay scrollbars slow down PLT by 6%

        New WebKitystemInterface function to force the scrollbars to flash
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-03-15  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Tony Chang.

        Autofilled form elements are assigned fixed background color but not text color
        https://bugs.webkit.org/show_bug.cgi?id=48382

        * DOM/WebDOMOperations.mm:
        (-[DOMHTMLInputElement _setAutofilled:]): Added (wrapper).
        * DOM/WebDOMOperationsPrivate.h:

2011-03-15  Adam Roben  <aroben@apple.com>

        Fix a leak in WebStorageTrackerClient::dispatchDidModifyOrigin

        Fixes <http://webkit.org/b/56385> SecurityOrigin leaks seen in
        WebStorageTrackerClient::dispatchDidModifyOrigin

        Reviewed by Antti Koivisto.

        * Storage/WebStorageTrackerClient.mm:
        (WebStorageTrackerClient::dispatchDidModifyOriginOnMainThread): Adopt the reference passed
        to us by dispatchDidModifyOrigin.
        (WebStorageTrackerClient::dispatchDidModifyOrigin): Added a comment and removed an
        unnecessary cast.

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
        info into the headers rather than in export symbol definition files, but disable it on 
        all platforms initially so we can deal with port build issues one port at a time.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * WebKitPrefix.h:

2011-03-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=56320
        Remove HistoryItem::icon() and the WebCore dependency on "IconDatabaseBase::defaultIcon()"

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem icon]): This far-future FIXME is now irrelevant.

2011-03-13  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Brady Eidson.

        Make adjustMIMETypeIfNecessary use CFNetwork directly
        https://bugs.webkit.org/show_bug.cgi?id=55912

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Support for new WKSI functions.

2011-03-12  Mark Rowe  <mrowe@apple.com>

        Fix the 32-bit build.

        * Carbon/CarbonWindowAdapter.mm:
        (-[CarbonWindowAdapter initWithCarbonWindowRef:takingOwnership:disableOrdering:carbon:]): Use a more appropriate format specifier.
        (-[CarbonWindowAdapter _carbonWindowClass]): Ditto.

2011-03-11  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson

        <rdar://problem/8648311> and https://bugs.webkit.org/show_bug.cgi?id=56216
        Rework disabled IconDatabase builds while allowing for a pluggable icon database implementation.

        * Misc/WebIconDatabase.mm:
        (+[WebIconDatabase _checkIntegrityBeforeOpening]): Call these static methods on IconDatabase::, not iconDatabase().
        (-[WebIconDatabase _startUpIconDatabase]): Ditto.
        (importToWebCoreFormat):

2011-03-11  Anton D'Auria  <adauria@apple.com>

        Reviewed and landed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=51878
        Add WebKit1 API to view and delete local storage

        * Storage/WebStorageManager.mm: Added.
        (+[WebStorageManager sharedWebStorageManager]):
        (-[WebStorageManager origins]):
        (-[WebStorageManager deleteAllOrigins]):
        (-[WebStorageManager deleteOrigin:]):
        (-[WebStorageManager syncLocalStorage]):
        (-[WebStorageManager syncFileSystemAndTrackerDatabase]):
        (storageDirectoryPath):
        (WebKitInitializeStorageIfNecessary):
        * Storage/WebStorageManagerInternal.h: Added.
        * Storage/WebStorageManagerPrivate.h: Added.
        * Storage/WebStorageTrackerClient.h: Added.
        * Storage/WebStorageTrackerClient.mm: Added.
        (WebStorageTrackerClient::sharedWebStorageTrackerClient):
        (WebStorageTrackerClient::WebStorageTrackerClient):
        (WebStorageTrackerClient::~WebStorageTrackerClient):
        (WebStorageTrackerClient::dispatchDidModifyOriginOnMainThread):
        (WebStorageTrackerClient::dispatchDidModifyOrigin):
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin protocol]):
        (-[WebSecurityOrigin host]):
        (-[WebSecurityOrigin databaseIdentifier]):
        (-[WebSecurityOrigin domain]):
        (-[WebSecurityOrigin _initWithWebCoreSecurityOrigin:]):
        * WebCoreSupport/WebSecurityOriginPrivate.h:
        * WebKit.exp:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

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

        Reviewed by Sam Weinig.

        <rdar://problem/9117047>
        Don't paint more than 60 times per second even when scrolling

        * WebView/WebClipView.mm:
        (-[WebClipView _immediateScrollToPoint:]):

2011-03-09  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Plumb through settings for accelerated drawing for canvas
        https://bugs.webkit.org/show_bug.cgi?id=56039

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        * WebView/WebPreferencesPrivate.h:

2011-03-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        VisiblePosition's next and previous should take an enum instead of a boolean
        https://bugs.webkit.org/show_bug.cgi?id=56135

        SelectionController::isAll now takes EditingBoundaryCrossingRule instead of
        StayInEditableContent.

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

2011-03-09  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Use the Cookie Storage from the Private Browsing Storage Session directly
        https://bugs.webkit.org/show_bug.cgi?id=55986

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Timothy Hatcher.

        Promote a method used outside WebKit from internal to private
        https://bugs.webkit.org/show_bug.cgi?id=55949

        * Misc/WebNSPasteboardExtras.mm: Removed an unused category declaration.
        Minor tweak, not directly related to the rest of this patch.

        * WebView/WebFrame.mm:
        (-[WebFrame _computePageRectsWithPrintScaleFactor:pageSize:]): Moved
        this method from the internal category into the private category.
        Streamlined the code a bit.

        * WebView/WebFrameInternal.h: Removed _computePageRects method.
        * WebView/WebFramePrivate.h: Added _computePageRects method.

2011-03-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        selectionHasStyle and selectionStartHasStyle should use EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=55902

        selectionHasStyle now takes a property id and a value instead of a CSSMutableStyleDeclaration.

        * WebView/WebHTMLView.mm: Removed unused selectionHasStyle.
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]): Calls Editor::selectionHasStyle.

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

        LLVM Compiler build fix.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::checkGrammarOfString):

2011-03-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: WK1 needs to use ScrollView attachment for AXScrollArea, WK2 does not
        https://bugs.webkit.org/show_bug.cgi?id=55706

        Make sure WebDynamicScrollBarsView appear in the AX tree in WK1 (since this object
        returns the scroll bar objects).
        Make the accessibilityRoot object be the web area in WK1 because WebDynamicScrollBarsView
        will expect that as its child, instead of the WebCore ScrollView object.

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView accessibilityIsIgnored]):
        * WebView/WebFrame.mm:
        (-[WebFrame accessibilityRoot]):

2011-03-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WebKit2's decidePolicyForMIMEType with decidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=55827

        Renamed FrameLoaderClient::dispatchDecidePolicyForMIMEType to dispatchDecidePolicyForResponse
        and pass the entire response, instead of just the MIMEType.

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

2011-03-06  Dan Bernstein  <mitz@apple.com>

        LLVM Compiler build fix.

        * DOM/WebDOMOperations.mm:
        (-[DOMHTMLInputElement _setValueForUser:]):

2011-03-06  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, use cookies from a in-memory cookie storage based on the
        Private Browsing Storage Session.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Add support for using the new WKSI functions in WebCore.

2011-03-05  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Darin Adler.

        HTMLInputElement::setValue() should schedule change event when the element is focused
        In service of https://code.google.com/p/chromium/issues/detail?id=42716
        https://bugs.webkit.org/show_bug.cgi?id=53160

        * DOM/WebDOMOperations.mm:
        (-[DOMHTMLInputElement _setValueForUser:]): Expose HTMLInputElement::setValueForUser() to tests
        * DOM/WebDOMOperationsPrivate.h:
        * WebView/WebViewInternal.h:

2011-03-04  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        On Mac, the bounding box sent to EditorClient::showCorrectionPanel() is incorrect when the correction occurs in an iframe.
        https://bugs.webkit.org/show_bug.cgi?id=55717
        <rdar://problem/9018127>

        With the change in WebCore, the bounding box passed into EditorClient::showCorrectionPanel()
        is already in window coordinate. We don't need to do further conversion anymore.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::showCorrectionPanel):

2011-03-04  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Maciej Stachowiak.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        When Private Browsing is enabled, get the cached url response from the cache associated with
        the Private Browsing Storage Session.

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

2011-03-03  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get rid of Page::globalHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=55738

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::updateGlobalHistoryItemForPage):
        Get the current history item and update it using -[WebView _setGlobalHistoryItem:].
    
        * WebView/WebView.mm:
        (-[WebView _globalHistoryItem]):
        (-[WebView _setGlobalHistoryItem:]):
        Set _globalHistoryItem ivar.

        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        Add _globalHistoryItem ivar.

2011-03-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=55721
        Global IconDatabase should be returned by reference, not as a pointer

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics iconPageURLMappingCount]):
        (+[WebCoreStatistics iconRetainedPageURLCount]):
        (+[WebCoreStatistics iconRecordCount]):
        (+[WebCoreStatistics iconsWithDataCount]):
        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase init]):
        (-[WebIconDatabase iconForURL:withSize:cache:]):
        (-[WebIconDatabase iconURLForURL:]):
        (-[WebIconDatabase defaultIconWithSize:]):
        (-[WebIconDatabase retainIconForURL:]):
        (-[WebIconDatabase releaseIconForURL:]):
        (-[WebIconDatabase isEnabled]):
        (-[WebIconDatabase setEnabled:]):
        (-[WebIconDatabase removeAllIcons]):
        (+[WebIconDatabase _checkIntegrityBeforeOpening]):
        (-[WebIconDatabase _startUpIconDatabase]):
        (-[WebIconDatabase _applicationWillTerminate:]):
        (-[WebIconDatabase _resetCachedWebPreferences:]):
        (importToWebCoreFormat):
        * WebView/WebView.mm:
        (-[WebView _dispatchDidReceiveIconFromWebFrame:]):

2011-03-03  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        Set the Private Browsing Storage Session on requests when Private Browsing is enabled.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Support using WKCopyRequestWithStorageSession in WebCore.

2011-03-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): Tab keys no longer observe Full Keyboard Access
        https://bugs.webkit.org/show_bug.cgi?id=55633
        <rdar://problem/8963023>

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        Removed tabsToLinks(). Mac WebKit already implements keyboardUIMode().

        * WebView/WebView.mm: (-[WebView _retrieveKeyboardUIModeFromPreferences:]):
        Removed an incorrect comment. We actually get a value of 2 on Snow Leopard, and we don't
        require both bits to be set. The rest of the comment might be wrong too, but I'm not sure,
        so I've preserved it.

2011-03-02  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Dan Bernstein.

        Fix crashes in private browsing tests in WK1 on Snow Leopard.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Put the INIT call for wkCreatePrivateStorageSession outside of the
        #if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD)
        guards.

2011-03-02  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435.

        Add the ability to create a Private Browsing Storage Session.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        Support calling wkCreatePrivateStorageSession from WebCore.

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Anders Carlsson.

        Fix remaining localization issues by piping all localized strings through WebCore's
        localization bottleneck.
        <rdar://problem/8728860>

        * DefaultDelegates/WebDefaultContextMenuDelegate.mm:
        (-[WebDefaultUIDelegate menuItemWithTag:target:representedObject:]):
        * Misc/WebKitErrors.m:
        * Misc/WebLocalizableStringsInternal.h: Added.
        * Misc/WebLocalizableStringsInternal.mm: Added.
        (WebLocalizedStringInternal):
        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * WebCoreSupport/WebEditorClient.mm:
        (undoNameForEditAction):
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::updateWindowTitle):
        (-[WebInspectorWindowController validateUserInterfaceItem:]):
        * WebCoreSupport/WebKeyGenerator.m:
        (-[WebKeyGenerator strengthMenuItemTitles]):
        (-[WebKeyGenerator signedPublicKeyAndChallengeStringWithStrengthIndex:challenge:pageURL:]):
        * WebCoreSupport/WebPlatformStrategies.mm:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validateUserInterfaceItemWithoutDelegate:]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView menuForEvent:]):

2011-03-01  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Part of WebKit2: Need a way to send notifications to client when cookies change
        https://bugs.webkit.org/show_bug.cgi?id=55427
        <rdar://problem/9056027>
        
        Add stubs for CookiesStrategy on Mac WebKit1.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createCookiesStrategy):
        (WebPlatformStrategies::notifyCookiesChanged):

2011-03-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] support in mac video fullscreen controller
        https://bugs.webkit.org/show_bug.cgi?id=52280

        Factored the code to configure the video overlay in a new private
        method of the controller and added GStreamer support to it.

        * WebView/WebVideoFullscreenController.h:
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController setupVideoOverlay:]):
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):
        (-[WebVideoFullscreenController windowDidExitFullscreen]):

2011-02-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        All Console Messages should be passed to ChromeClients.
        https://bugs.webkit.org/show_bug.cgi?id=54926

        Add a new private UIDelegate method, -webView:addMessageToConsole:withSource:,
        which supersedes -webView:addMessageToConsole if it exists. The new delegate
        does not filter to only JavaScript originated console messages. The old
        delegate is left around for clients that expect filtered messages, like
        DashCode and older versions of Safari.

        The dictionary message passed to the delegate now includes more information
        about the message source, type, and level.

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

2011-03-01  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Stop instantiating legacy editing Positions in VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=52919

        Changing usage of legacy VisiblePosition constructor. Since we were dealing
        with positions from DOM Ranges, we're guaranteed a parent-anchored position.

        * WebView/WebFrame.mm:
        (-[WebFrame _caretRectAtPosition:affinity:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]):

2011-03-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Timothy Hatcher.

        WebKit2 needs to be made localizable
        https://bugs.webkit.org/show_bug.cgi?id=55483

        * WebCoreSupport/WebPlatformStrategies.mm:
        Use WebCore's localizedString function instead of WebLocalizableStrings
        since WebCore is now responsible for localization.

2011-02-25 Steve Block <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Bridge.h should not include BridgeJSC.h
        https://bugs.webkit.org/show_bug.cgi?id=55212

        Include BridgeJSC.h directly instead.

        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:

2011-02-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Ryosuke Niwa.

        Remove the support of Frame::isContentEditable and its dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=54292

        Remove the WebKit side implementation. Make WebKit support depend on Document::inDesignMode.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        * WebView/WebView.mm:
        (-[WebView setEditable:]):
        (-[WebView isEditable]):
        * WebView/WebViewData.h:

2011-02-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make ScopeChainNode GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=55283

        More updates for the absence of the ScopeChain class

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WebFramePrivate.

        * WebView/WebFrame.mm:
        (-[WebFrame _clearOpener]):
        * WebView/WebFramePrivate.h:

2011-02-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79764.
        http://trac.webkit.org/changeset/79764
        https://bugs.webkit.org/show_bug.cgi?id=55295

        "broke Chromium builds" (Requested by rniwa on #webkit).

        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2011-02-26  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by David Kilzer.

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

        Add a resource load delegate method to query if WebCore should paint the default broken image for failed images.

        Add a new resource load client method (shouldPaintBrokenImage).  WebKit client can decide if WebCore
        should paint the default broken image when an image fails to load or decode.  The method also passes the
        URL of the failed image.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::shouldPaintBrokenImage):
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm: Added case for passing one object.
        (CallResourceLoadDelegateReturningBoolean):
        * WebView/WebResourceLoadDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebView _cacheResourceLoadDelegateImplementations]):

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WebFramePrivate.

        * WebView/WebFrame.mm:
        (-[WebFrame _clearOpener]):
        * WebView/WebFramePrivate.h:

2011-02-25  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/8902546> Build fix.

        * Misc/QuickDrawCompatibility.h:

2011-02-24  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * WebCoreSupport/WebKeyGenerator.m:
        (toWebCertificateParseResult):
        (-[WebKeyGenerator addCertificatesToKeychainFromData:]):
        * WebView/WebTextCompletionController.mm:

2011-02-24  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        Drop the "U; " encryption level from the User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54566

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

2011-02-24  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79570.
        http://trac.webkit.org/changeset/79570
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Breaks chromium build because glue/mocks/mock_web_frame.h/cc
        was not updated

        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2011-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to WebFramePrivate.

        * WebView/WebFrame.mm:
        (-[WebFrame _clearOpener]):
        * WebView/WebFramePrivate.h:

2011-02-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Drop the language tag part from the User Agent string
        https://bugs.webkit.org/show_bug.cgi?id=54560

        * WebView/WebView.mm:
        (+[WebView _standardUserAgentWithApplicationName:]): Drop the
        language tag part.

2011-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Part of <rdar://problem/8762042> and https://bugs.webkit.org/show_bug.cgi?id=54514
        API to view and delete Application Cache data by origin.

        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache deleteAllApplicationCaches]): Move this implementation into WebCore itself.

2011-02-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Rename Position::node() to Position::deprecatedNode()
        https://bugs.webkit.org/show_bug.cgi?id=54622

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

2011-02-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Rename Position::node() to Position::deprecatedNode()
        https://bugs.webkit.org/show_bug.cgi?id=54622
        
        Done the rename.

        * WebView/WebFrame.mm:
        (-[WebFrame _smartDeleteRangeForProposedRange:]): Since newStart and newEnd are parent-anchored,
        use containerNode() and offsetInContainerNode() instead of deprecated member functions.

2011-02-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54786 - Devirtualize JSCell::classInfo()

        Instead of making a virtual function call, add a pointer to the ClassInfo
        onto Structure.

        This removes a virtual function call, and paves the way towards removing all
        the createStructure methods, and StructureFlags/AnonymousSlotCount properties
        (these should be able to move onto ClassInfo).

        Calls to Structure::create must now pass a pointer to the ClassInfo for the
        structure. All objects now have a ClassInfo pointer, non-object cell types
        still do not.

        Changes are most mechanical, involving three steps:
            * Remove virtual classInfo() methods.
            * Add &s_info parameter to calls to Structure::create.
            * Rename ClassInfo static members on classes from 'info' to 's_info',
              for consistency.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):
        (WebKit::ProxyRuntimeMethod::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        (WebKit::ProxyRuntimeObject::createStructure):
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):
        * WebView/WebView.mm:
        (aeDescFromJSValue):

2011-02-19  Brian Ryner  <bryner@chromium.org>

        Reviewed by Adam Barth.

        Add missing #include of DocumentLoader.h, needed since the transitive
        include through Document.h is removed.
        https://bugs.webkit.org/show_bug.cgi?id=50489

        * WebView/WebFrame.mm:

2011-02-19  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Ensure loading has stopped in HistoryController::goToItem
        https://bugs.webkit.org/show_bug.cgi?id=54517

        Add a FrameLoaderClient callback for whether to stop loading before goToItem.

        Test: http/tests/navigation/forward-to-fragment-fires-onload.html

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::shouldStopLoadingForHistoryItem): Added.
        * WebCoreSupport/WebFrameLoaderClient.h:

2011-02-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=54244
        
        Convert the line box tree to floating point and eliminate font rounding hacks.  This patch removes all of the rounding
        hacks from the Font code and makes sure all Font APIs involving width measurement and width offsets use floats.
        
        The line box tree's x, y and logicalWidth members have all been converted to floats and all of the line box APIs have
        been changed as well.
        
        In terms of pixel adjustments, overflow is using an enclosing model (so it will be enclosingIntRect of a line box's x/y/width/height).
        
        Background and border painting is using a rounding model, so borders and backgrounds will round to the nearest pixel when painting.
        
        Replaced elements still snap to integer positions on lines, and they use a rounding model as well, although their underlying line boxes
        still have a precise floating point position.

        Justification will now allow subpixel positioning to occur as well.  Platforms that don't support subpixel positioning should already
        be rounding justification spacing in their font code.

        Many layout test results change on Mac, since rounding hacks were used there and are now gone.

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

2011-02-10  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Adam Roben.

        HTML5 <details> and <summary>: localized text
        https://bugs.webkit.org/show_bug.cgi?id=54260

        The method defaultDetailsSummaryText was added to LocalizationStrategy class. It is used to
        provide the default label to be used by a <details> tag that has no <summary> child.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::defaultDetailsSummaryText):

2011-02-16  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Allow acceleratesDrawing for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=54511

        Plumb through preference for accelerated drawing.
        
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences acceleratedDrawingEnabled]):
        (-[WebPreferences setAcceleratedDrawingEnabled:]):
        * WebView/WebPreferencesPrivate.h:

2011-02-15  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/54505> Move -[WebDynamicScrollBarsView inProgrammaticScroll] to WebDynamicScrollBarsViewInternal.h

        Reviewed by Darin Adler.

        * WebView/WebDynamicScrollBarsView.h:
        (-[WebDynamicScrollBarsView inProgrammaticScroll]): Removed
        declaration.
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView inProgrammaticScroll]): Moved
        implementation into correct category.
        * WebView/WebDynamicScrollBarsViewInternal.h:
        (-[WebDynamicScrollBarsView inProgrammaticScroll]): Added
        declaration.
        * WebView/WebHTMLView.mm: Included
        WebDynamicScrollBarsViewInternal.h instead of
        WebDynamicScrollBarsView.h.

2011-02-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough and Geoff Garen.

        Refactor handles and weak pointers to become nicer and more automatic
        https://bugs.webkit.org/show_bug.cgi?id=54415

        Update to use Global<> instead of ProtectedPtr, and refactored slightly
        to get global data to places it's needed for when we're assigning to
        Global<>s

        * ForwardingHeaders/collector/handles/Global.h: Added.
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::get):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget):
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
        (WebKit::NetscapePluginInstanceProxy::getPluginElementNPObject):
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::WebScriptDebugger):

2011-02-15  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Autocorrection should respect undo.
        https://bugs.webkit.org/show_bug.cgi?id=52221
        <rdar://problem/8663399>

        Please see WebCore/ChangeLog for detailed description.

        * WebCoreSupport/WebEditorClient.h: Updated for the new function declared in EditorClient.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::recordAutocorrectionResponse): Ditto.

        * WebView/WebFrame.mm:
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
             Adopted new signature of ReplaceSelectionCommand::create().

2011-02-15  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/54485> Fix spelling of -inProgramaticScroll

        Reviewed by Darin Adler.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView inProgrammaticScroll]): Renamed from
        -inProgramaticScroll.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]): Corrected method name.

2011-02-15  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Allow controlling minimum DOMTimer interval on a per-page basis
        https://bugs.webkit.org/show_bug.cgi?id=54312

        Added needed methods to implement LayoutTestController's new
        setMinimumTimerInterval method.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (+[WebView _defaultMinimumTimerInterval]):
        (-[WebView _setMinimumTimerInterval:]):
        * WebView/WebViewPrivate.h:

2011-02-11  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A little more encapsulation for the heap: Removed CollectorHeapIterator
        https://bugs.webkit.org/show_bug.cgi?id=54298

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptProtectedObjectTypeCounts]):
        (+[WebCoreStatistics javaScriptObjectTypeCounts]): Updated for new typedef.

2011-02-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Update calls to DocumentWriter.
        https://bugs.webkit.org/show_bug.cgi?id=50489

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

2011-02-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Anders Carlsson.

        AX: AX needs to stop using WebCoreViewFactory
        https://bugs.webkit.org/show_bug.cgi?id=54153

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-02-10  Peter Varga  <pvarga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove PCRE source from trunk
        https://bugs.webkit.org/show_bug.cgi?id=54188

        * ForwardingHeaders/pcre/pcre.h: Removed.

2011-02-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: follow up on InspectorAgent split -
        removing unnecessary methods from InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=54093

        * WebInspector/WebInspector.mm:
        (-[WebInspector showConsole:]):
        (-[WebInspector stopProfilingJavaScript:]):

2011-02-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Jon Honeycutt and Maciej Stachowiak.

        <rdar://problem/8959420> Find in Mail no longer cycles around

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]): Set
        the wrap option according to the flag.

2011-02-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77980.
        http://trac.webkit.org/changeset/77980
        https://bugs.webkit.org/show_bug.cgi?id=54043

        "Crashes on Windows and Linux..." (Requested by leviw on
        #webkit).

        * WebView/WebFrame.mm:
        (-[WebFrame _caretRectAtNode:offset:affinity:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]):

2011-02-08  Levi Weintraub  <leviw@chromium.org>

        Reviewed by Ryosuke Niwa.

        Stop instantiating legacy editing Positions in VisiblePosition
        https://bugs.webkit.org/show_bug.cgi?id=52919

        Changing usage of legacy VisiblePosition constructor. Since we were dealing
        with positions from DOM Ranges, we're guaranteed a parent-anchored position.

        * WebView/WebFrame.mm:
        (-[WebFrame _caretRectAtPosition:affinity:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]):

2011-02-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove orphan code from old parser
        https://bugs.webkit.org/show_bug.cgi?id=53984

        * WebCoreSupport/WebChromeClient.h:

2011-02-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move InspectorController's methods from InspectorAgent to InspectorController.

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

        Minor change enforced by major changes in WebCore/inspector/InspectorController.

        * WebInspector/WebInspector.mm:
        (-[WebInspector isTimelineProfilingEnabled]):

2011-02-07  Enrica Casucci  <enrica@apple.com>

        Reviewed Adam Roben and Darin Adler.

        WebKit2: drag and drop support on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=52775

        Removed createDragImageForLink from DragClient.

        * WebCoreSupport/WebDragClient.h:
        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::startDrag):

2011-02-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove settings related methods from InspectorClient
        https://bugs.webkit.org/show_bug.cgi?id=53686

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorFrontendClient::WebInspectorFrontendClient):

2011-02-03  James Kozianski  <koz@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add navigator.registerProtocolHandler behind a flag.
        https://bugs.webkit.org/show_bug.cgi?id=52609

        * Configurations/FeatureDefines.xcconfig:

2011-02-03  Adam Langley  <agl@chromium.org>

        Reviewed by Adam Barth.

        Plumb mixed script URL to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=52384

        Regressions covered by http/tests/security/mixedContent/*

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

2011-02-03  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8944544> Ability to animate track
        for WKPainter scrollers

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-02-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/8928367> Crash when loading canvas pages inside HTMLCanvasElement::createImageBuffer().

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Add some missing initializers.

2011-02-02  Steve Lacey  <sjl@chromium.org>

        Reviewed by Eric Carlson.

        Implement basic media statistics on media elements.
        https://bugs.webkit.org/show_bug.cgi?id=53322

        * Configurations/FeatureDefines.xcconfig:

2011-02-01  Sam Weinig  <sam@webkit.org>

        Reviewed by Beth Dakin.

        Part 2 for <rdar://problem/8492788>
        Adopt WKScrollbarPainterController

        Use header detection to define scrollbar painting controller #define.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-02-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=53520
        
        Remove the physical terminology from IntRect and FloatRect.
        
        Now that we have flipped RenderBlocks for vertical-rl and horizontal-bt writing modes,
        we need to update our terminology to be more accurate.

        I'm borrowing a page from AppKit here (which also supports flipped NSViews) and
        renaming right() and bottom() to maxX() and maxY().  These terms remain accurate
        even for flipped rectangles.

        * WebView/WebHTMLView.mm:
        (setNeedsDisplayInRect):

2011-02-01  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for <rdar://problem/8492788> Adopt WKScrollbarPainterController

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-02-01  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46422, make printing and pagination work
        with vertical text.

        Change printing functions to check writing-mode and properly swap width and height
        as needed.

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setScrollOrigin:updatePositionAtAll:immediately:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _computePageRectsWithPrintScaleFactor:pageSize:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_setPrintingModeRecursive]):
        (-[WebHTMLView _web_clearPrintingModeRecursive]):
        (-[WebHTMLView _web_setPrintingModeRecursiveAndAdjustViewSize]):
        (-[WebHTMLView _beginPrintModeWithMinimumPageWidth:height:maximumPageWidth:]):
        (-[WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]):
        (-[WebHTMLView _endPrintMode]):
        (-[WebHTMLView _beginScreenPaginationModeWithPageSize:shrinkToFit:]):
        (-[WebHTMLView _endScreenPaginationMode]):
        (-[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:]):
        (-[WebHTMLView _setPrinting:minimumPageLogicalWidth:logicalHeight:maximumPageLogicalWidth:adjustViewSize:paginateScreenContent:]):
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):
        (-[WebHTMLView _scaleFactorForPrintOperation:]):
        (-[WebHTMLView setPageWidthForPrinting:]):
        (-[WebHTMLView knowsPageRange:]):

2011-01-31  Oliver Hunt  <oliver@apple.com>

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        rolling r77098, r77099, r77100, r77109, and
        r77111 back in, along with a few more Qt fix attempts.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2011-01-30  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r77098, r77099, r77100, r77109, and
        r77111.
        http://trac.webkit.org/changeset/77098
        http://trac.webkit.org/changeset/77099
        http://trac.webkit.org/changeset/77100
        http://trac.webkit.org/changeset/77109
        http://trac.webkit.org/changeset/77111
        https://bugs.webkit.org/show_bug.cgi?id=53219

        Qt build is broken

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2011-01-30  Oliver Hunt  <oliver@apple.com>

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        rolling r77006 and r77020 back in.

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2011-01-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Some more Heap cleanup.
        https://bugs.webkit.org/show_bug.cgi?id=53357

        Updated for JavaScriptCore changes.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]):

2011-01-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r77006 and r77020.
        http://trac.webkit.org/changeset/77006
        http://trac.webkit.org/changeset/77020
        https://bugs.webkit.org/show_bug.cgi?id=53360

        "Broke Windows tests" (Requested by rniwa on #webkit).

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2011-01-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Convert markstack to a slot visitor API
        https://bugs.webkit.org/show_bug.cgi?id=53219

        Update to new marking api

        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame scopeChain]):

2011-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <select> can't display right-to-left (rtl) languages
        https://bugs.webkit.org/show_bug.cgi?id=19785

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::selectItemWritingDirectionIsNatural): Changed to return false.
        (WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added. Returns true.

2011-01-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r76891.
        http://trac.webkit.org/changeset/76891
        https://bugs.webkit.org/show_bug.cgi?id=53280

        Makes every layout test crash (Requested by othermaciej on
        #webkit).

        * Misc/WebIconDatabase.mm:
        (-[ThreadEnabler threadEnablingSelector:]):
        (importToWebCoreFormat):

2011-01-27  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Use Document::url() instead of FrameLoader::url().
        https://bugs.webkit.org/show_bug.cgi?id=41165

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

2011-01-27  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Anders Carlsson.

        Reverted an accidental change in r76561.

        * WebView/WebHTMLView.mm:

2011-01-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/53192> Add experimental support for HTTP pipelining in CFNetwork
        <rdar://problem/8821760>

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Added initialization for
        GetHTTPPipeliningPriority and SetHTTPPipeliningPriority.

2011-01-26  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/8895140> Adopt WKScrollbar metrics 
        when using WKScrollbars.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-01-25  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        WebKit is using CSBackupSetItemExcluded incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=53095
        rdar://problem/8790540

        * Misc/WebIconDatabase.mm:
        (importToWebCoreFormat): Removed code that was calling CSBackupSetItemExcluded.
        It was incorrect, and this responsibility has been moved to WebCore.

2011-01-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Seidel.

        Change ENABLE_3D_CANVAS to ENABLE_WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=53041

        * Configurations/FeatureDefines.xcconfig:

2011-01-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove "attached" state related methods from InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=53086

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]):
        (-[WebInspectorWindowController attach]):
        (-[WebInspectorWindowController detach]):

2011-01-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/6097826> Mail's cursor does not become a resize cursor when moving mouse from scrolled email to the horizontal splitter

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setCursor): If the current cursor comes from a cursor rect, do not override it.

2011-01-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=52473
        Auto-scaling to avoid orphans is broken, remove dysfunctional code

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:paginateScreenContent:]):
        (-[WebHTMLView _scaleFactorForPrintOperation:]):
        (-[WebHTMLView knowsPageRange:]):

2011-01-21  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Jon Honeycutt.

        Fix the build when using Clang by removing some unused variables.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController enterFullscreen:]):
        (-[WebFullScreenController exitFullscreen]):

2011-01-21  Chris Rogers  <crogers@google.com>

        Reviewed by Darin Fisher.

        Add run-time enable support for the web audio API
        https://bugs.webkit.org/show_bug.cgi?id=52741

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences webAudioEnabled]):
        (-[WebPreferences setWebAudioEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2011-01-20  John Sullivan  <sullivan@apple.com>

        Reviewed by Mark Rowe.

        Shift-tab doesn't cycle through fields in http authentication panel
        https://bugs.webkit.org/show_bug.cgi?id=52850

        * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib:
        * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:
        Re-wired the key loop so that there aren't two views with the same nextKeyView.

2011-01-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Geoffrey Garen.

        Fix for <rdar://problem/8890255>

        Allow WebKitSystemInterface to draw scrollbars 
        when appropriate.
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2011-01-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        GraphicsLayers in subframes can get sync'd multiple times
        https://bugs.webkit.org/show_bug.cgi?id=52489

        * WebView/WebView.mm:
        (-[WebView _syncCompositingChanges]): syncCompositingStateRecursive()
        was renamed to syncCompositingStateIncludingSubframes().

2011-01-19  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Would like script debugging protocol method to differentiate between caught and uncaught exceptions
        https://bugs.webkit.org/show_bug.cgi?id=52104
        rdar://problem/8704226

        * WebView/WebDelegateImplementationCaching.h:
        Fix type of second integer in CallScriptDebugDelegate function overload
        to be int to match the actual Objective-C method. Added a new overload
        that includes a BOOL in the right place. Added a boolean named
        exceptionWasRaisedExpectsHasHandlerFlag.

        * WebView/WebDelegateImplementationCaching.mm:
        (CallDelegate): Added overloads as above.
        (CallScriptDebugDelegate): Ditto.

        * WebView/WebScriptDebugDelegate.h: Added new method with the additional
        boolean argument. Marked the old method informally deprecated.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::exception): Added code to call with or without the
        boolean depending on exceptionWasRaisedExpectsHasHandlerFlag.

        * WebView/WebView.mm:
        (-[WebView _cacheScriptDebugDelegateImplementations]): Set up the
        exceptionWasRaisedExpectsHasHandlerFlag. Also fixed old code that was not
        guaranteed to set didParseSourceExpectsBaseLineNumber to NO.

2011-01-19  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Mihai Parparita.

        Perform some forward declaration
        https://bugs.webkit.org/show_bug.cgi?id=52522

        * Misc/WebKitNSStringExtras.mm:

2011-01-19  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [JSC] scripts have incorrect starting line (always 1).
        https://bugs.webkit.org/show_bug.cgi?id=52721

        * WebView/WebScriptDebugger.h:
        * WebView/WebScriptDebugger.mm:
        (toNSString):
        (WebScriptDebugger::sourceParsed):

2011-01-19  Levi Weintraub  <leviw@google.com>

        Reviewed by Ryosuke Niwa.

        Updating to use Position::parentAnchoredEquivalent instead of
        the old htmlediting rangeCompliantEquivalent.

        remove rangeCompliantEquivalent and replace it with Position methods
        https://bugs.webkit.org/show_bug.cgi?id=25057

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

2011-01-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: A problem with Voiceover and finding links
        https://bugs.webkit.org/show_bug.cgi?id=52324

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView accessibilityIsIgnored]):

2011-01-17  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/52596> Add missing DOMDocument/DOMDocumentFragment headers to Xcode project

        Reviewed by Dan Bernstein.

        * MigrateHeaders.make: Copy DOMDocumentFragmentPrivate.h and
        DOMDocumentPrivate.h to the PrivateHeaders directory.

2011-01-17  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Drag and drop support: refactoring of image from link and image from selection
        https://bugs.webkit.org/show_bug.cgi?id=52496

        This work cleans up the Mac code and makes it more similar to the Windows implementation,
        avoiding the use of an NSView when the FrameView can be used.
        The refactoring is a necessary step towards the complete support of drag and drop
        in WebKit2.

        * WebCoreSupport/WebDragClient.mm:
        (WebDragClient::createDragImageForLink): Added.
        * WebView/WebHTMLView.mm: Removed dragImageFromLink and dragImageFromURL.
        * WebView/WebHTMLViewPrivate.h: Removed dragImageFromLink and dragImageFromURL.

2011-01-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: simplify debugger enabling routine.
        https://bugs.webkit.org/show_bug.cgi?id=52472

        * WebInspector/WebInspector.mm:
        (-[WebInspector startDebuggingJavaScript:]):

2011-01-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Assertion failure (!inSetWindow) with in-process plug-in in plugins/destroy-on-setwindow.html
        https://bugs.webkit.org/show_bug.cgi?id=52550

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView setWindowIfNecessary]): Removed the assertion, making sure
        that inSetWindow remains YES until we exit the top-level setWindowIfNecessary.

2011-01-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Issues with iframes and plugins when the WebView is scaled.
        <rdar://problem/6213380>
        
        When _scaleWebView has been called on a WebView, iframes
        in WebKit1 render and hit-test incorrectly, and plug-ins don't scale up.
        This is caused by AppKit NSViews not playing nicely with the scale
        applied through style.
        
        Work around most of these issues by adjusting the bounds size
        of widgets to allow iframe contents to paint with the correct scale,
        and fix various places in the code where we relied on coordinate
        transforms via NSViews (which ignore CSS transforms).

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView setBoundsSize:]):

2011-01-16  Beth Dakin  <bdakin@apple.com>

        Reviewed by Kevin Decker.

        Fix for <rdar://problem/8871204>

        Don't try to save elasticity state. Just rely on
        NSScrollElasticityAutomatic to restore the correct state.
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::WebFrameLoaderClient):
        (WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebFrameLoaderClient::provisionalLoadStarted):

2011-01-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Plugins render incorrectly with transformed ancestors
        https://bugs.webkit.org/show_bug.cgi?id=52507
        
        -[NSView visibleRect] gives the wrong answer if there are CSS transforms
        in the ancestor chain of a plugin.
        
        So use of this method with calls to -actualVisibleRectInWindow, which
        maps rects through the render tree to compute the correct rect,
        clipping via windowClipRect() if necessary.
        
        Not testable, because doing so relies on the behavior of some
        plugins, which stop rendering if setWindow passes an empty rect.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView actualVisibleRectInWindow]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):

2011-01-14  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Antti Koivisto.

        Rename cache() to memoryCache()
        https://bugs.webkit.org/show_bug.cgi?id=52433

        * Misc/WebCache.mm:
        (+[WebCache statistics]):
        (+[WebCache setDisabled:]):
        (+[WebCache isDisabled]):
        * WebView/WebView.mm:
        (+[WebView _setCacheModel:]):

2011-01-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Split out a MarkedSpace strategy object from Heap.
        https://bugs.webkit.org/show_bug.cgi?id=52421

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]): Updated for class move.

2011-01-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        WebKit/mac part of <rdar://problem/8441312> Crash in -[NSView _invalidateGStatesForTree]

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _invalidateGStatesForTree]): Override this NSView method, and bracket the call
        to the superclass implementation with suspending WebCore Widget hierarchy updates. This ensures
        that the NSView tree doesn’t change from under AppKit as it traverses it.

2011-01-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Mark Rowe.

        Fix for <rdar://problem/7793902> Artifacts when scrolling
        page in Safari while page is loading

        Call setDrawsBackground:YES on the scrollView in 
        dispatchDidFirstLayout() rather than waiting until
        frameLoadCompleted(). Also suspend scrolling elasticity
        between provisionalLoadStarted() and dispatchDidFirstLayout()
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::WebFrameLoaderClient):
        (WebFrameLoaderClient::dispatchDidFirstLayout):
        (WebFrameLoaderClient::provisionalLoadStarted):

2011-01-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        WebKit2: Add support for drag and drop
        https://bugs.webkit.org/show_bug.cgi?id=52343
        <rdar://problem/7660558>
        
        The DragData class has been extended to provide
        additional context from the application (keyboard state, modal windows, etc.)
        as well as information of the drag pasteboard being used.
        These are the changes to align the behavior for WebKit.

        * WebView/WebView.mm:
        (-[WebView applicationFlags:]): Added.
        (-[WebView draggingEntered:]): Added parameter to the DragData constructor.
        (-[WebView draggingUpdated:]): Added parameter to the DragData constructor.
        (-[WebView draggingExited:]): Added parameter to the DragData constructor.
        (-[WebView performDragOperation:]): Added parameter to the DragData constructor.

2011-01-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Add-on for https://bugs.webkit.org/show_bug.cgi?id=52309 
        Expose fixed layout through WebKit SPI
        -and corresponding-
        <rdar://problem/8844464>

        And now with getters!
        * WebView/WebView.mm:
        (-[WebView _useFixedLayout]):
        (-[WebView _fixedLayoutSize]):
        * WebView/WebViewPrivate.h:

2011-01-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=52309 Expose
        fixed layout through WebKit SPI
        -and corresponding-
        <rdar://problem/8844464>

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

2011-01-07  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Paste and drag and drop use different code paths to interact with the pasteboard.
        https://bugs.webkit.org/show_bug.cgi?id=52093
        The change consists in a refactoring of the code to have only one class that
        deals with the pasteboard on Mac.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm: Added two methods to provide to WebCore functionality
        exposed by NSURLExtras.
        (WebEditorClient::canonicalizeURL):
        (WebEditorClient::canonicalizeURLString):
        * WebCoreSupport/WebPasteboardHelper.h: Removed.
        * WebCoreSupport/WebPasteboardHelper.mm: Removed.
        * WebView/WebHTMLView.mm: Removed comment.
        * WebView/WebView.mm: The following methods have been changed to use the new DragData
        constructor that doesn't use the WebPasteboardHelper reference.
        (-[WebView draggingEntered:]):
        (-[WebView draggingUpdated:]):
        (-[WebView draggingExited:]):
        (-[WebView performDragOperation:]):

2011-01-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Forward declare some headers where possible
        https://bugs.webkit.org/show_bug.cgi?id=52133

        * WebView/WebFrame.mm:

2011-01-09  Xianzhu Wang <phnixwxz@gmail.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=41441
        createWindow method should only do window-creating without URL navigation

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

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

        Try to fix the Leopard build.

        * WebView/WebFullScreenController.mm:

2011-01-07  Jer Noble  <jer.noble@apple.com>

        Yet another Leopard build fix: NSRect and CGRect are not inter-
        changable in 32-bit.  
        
        * WebView/WebFullScreenController.mm:
        (-[WebFullScreenController exitFullscreen]):

2011-01-07  Jer Noble  <jer.noble@apple.com>

        Fix the Leopard build: Replace CoreAnimation SL-only functions
        with Leopard equivalents.

        * WebView/WebFullScreenController.mm:
        (+[CATransaction setDisableActions:]):
        (+[CATransaction setAnimationDuration:]):
        (-[WebFullScreenController _animationDuration]):
        (-[WebFullscreenWindow initWithContentRect:styleMask:backing:defer:]):

2010-12-21  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Implement WebKit Full Screen support.
        https://bugs.webkit.org/show_bug.cgi?id=49481
        rdar://problem/8247444

        Support the new fullscreen Chrome client requests.  WebView will pass
        through these requests to a WebFullscreenController.

        * WebCoreSupport/WebChromeClient.h: Add fullScreenRendererChanged().
        * WebView/WebView.mm:
        (-[WebView _supportsFullScreenForElement:WebCore::]): Check to see if the fullscreen pref has been enabled.
        (-[WebView _enterFullScreenForElement:WebCore::]): Create a WebFullScreenController.
        (-[WebView _exitFullScreenForElement:WebCore::]): Request that the WebFullScreenController exit fullscreen.
        (-[WebView _fullScreenRendererChanged:WebCore::]): Notify the WebFullScreenController that its renderer has changed.
        * WebView/WebViewData.h: Add ivar newFullscreenController.

2010-12-17  Jer Noble  <jer@kokode.apple.com>

        Reviewed by Simon Fraser.

        Implement WebKit Full Screen support.
        https://bugs.webkit.org/show_bug.cgi?id=49481
        rdar://problem/8247444
        
        This patch implements the FullScreen APIs using the new RenderFullScreen renderer and the new
        Document client APIs. The RenderFullScreen renderer's CALayer is hosted in a new, fullscreen
        window, and a custom CAAnimation animates that layer between the initial screen rect of the
        full screen element, to its final value. WebFullscreenController will swap the WebView out of
        its original window, and into the fullscreen window. The controller will replace the WebView
        with a placeholder view, so that if the placeholder moves or resized while the WebView is
        absent, the WebView will move back to the correct location when exiting fullscreen.

        * WebView/WebFullscreenController.h: Added.
        * WebView/WebFullscreenController.mm: Added.
        (-[WebFullscreenController windowDidExitFullscreen:]):  Close the fullscreen window.
        (-[WebFullscreenController windowDidEnterFullscreen:]): Swap the webView back into the fullscreen window. 
        (-[WebFullscreenController animationDidStop:finished:]): Call windowDid{Exit|Enter}FullScreen as appropriate.
        (-[WebFullscreenController applicationDidResignActive:]):
        (-[WebFullscreenController applicationDidChangeScreenParameters:]): Resize the fullscreen window to match
            the new screen parameters.
        (-[WebFullscreenController enterFullscreen:]):  Set up the animation that will take the fullscreen element
            from its original screen rect into fullscreen.
        (-[WebFullscreenController exitFullscreen]): Swap the webView back into its original window.
            Set up the animation that will take the fullscreen element back into its original screen
            rect.
        (-[WebFullscreenController _updatePowerAssertions]): Now checks _isAnyMoviePlaying to determine 
            whether to disable screensaver and sleep.
        (-[WebFullscreenController _isAnyMoviePlaying]): Walks through the sub-tree starting at the fullscreen element
            looking for HTMLVideoElements; returns whether any are found to be playing.
        (-[WebFullscreenController _animationDuration]): Returns the current animation duration, affected by control
            and shift keys.
        (-[WebFullscreenWindow canBecomeKeyWindow]): Allow the window to become key.
        (-[WebFullscreenWindow keyDown:]): Handle the 'Esc' key.
        (-[WebFullscreenWindow cancelOperation:]): Request to exit fullscreen.
        (-[WebFullscreenWindow rendererLayer]): Convenience accessor.
        (-[WebFullscreenWindow setRendererLayer:]): Ditto.
        (-[WebFullscreenWindow backgroundLayer]): Ditto.
        (-[WebFullscreenWindow animationView]): Ditto.
        (MediaEventListener::MediaEventListener): Implements the EventListener protocol.
        (MediaEventListener::handleEvent): Tells its delegate to _updatePowerAssertions.
        
2011-01-07  James Robinson  <jamesr@chromium.org>

        Revert "Implement mozilla's animationTime property"
        https://bugs.webkit.org/show_bug.cgi?id=51952

        This approach isn't quite right.

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

2011-01-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 52035 - Unregistering DOMWrapperWorlds is unsafe

        The method DOMWrapperWorld::unregisterWorld() effectively calls the DOMWrapperWorld's
        destructor early, in order to release wrappers once we know we no longer intend to use them.
        Whilst it is okay to have a method to throw away wrappers (assuming we know we're willing to
        lose any state stored on them) it is not okay to deregister the world from the JSGlobalData.
        A sequence of events that triggers the bug would look like this:

        (1) Create a DOMWrapperWorld.
        (2) Register a timer in the world.
        (3) Call unregisterWorld() on the world.
        (4) Timer goes off, code is executed in the world, creates a Node not attached to a Document.
        (5) We attempt to lookup a wrapper map for the world on the JSGlobalData, but because we've
            called forgetWorld() none exists.
        (6) Attempt to add a wrapper to a NULL map.

        Fix the problem by not removing the JSGlobalData's wrapper map until the world really goes away.

        * WebView/WebScriptWorld.mm:
        (-[WebScriptWorld unregisterWorld]):

2011-01-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

        Use rootObject() method to get top of AX tree.

        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient::accessibilityRemoteObject):
        * WebView/WebFrame.mm:
        (-[WebFrame setAccessibleName:]):
        (-[WebFrame accessibilityRoot]):
        * WebView/WebFrameInternal.h:
        * WebView/WebFramePrivate.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView accessibilityAttributeValue:]):
        (-[WebHTMLView accessibilityFocusedUIElement]):
        (-[WebHTMLView accessibilityHitTest:]):
        (-[WebHTMLView _accessibilityParentForSubview:]):

2011-01-04  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/51889> WebFrameLoaderClient::createMediaPlayerProxyPlugin() should use WebCore::PluginInfo.name

        Reviewed by Eric Carlson.

        This originally broke in r61581.  It is inside an
        ENABLE(PLUGIN_PROXY_FOR_VIDEO) macro, so it didn't break the Mac
        build then.

        * WebCoreSupport/WebFrameLoaderClient.mm: Call
        (WebFrameLoaderClient::createMediaPlayerProxyPlugin): Updated to
        use WebCore::PluginInfo.name instead of
        -[WebBasePluginPackage name].

2011-01-02  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Simon Fraser.

        <rdar://problem/8812159> Update copyright strings

        * Info.plist:

2010-12-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan.

        <rdar://problem/8758191> REGRESSION (r72887): Mail crashes when doing searches in a message due to method name conflict
        https://bugs.webkit.org/show_bug.cgi?id=51717

        Renamed -findString:options: to -_findString:options: in the WebDocumentOptionsSearching
        protocol to avoid conflict with -[WebHTMLView(MailExtras) findString:options:] which Mail defines.

        * WebView/WebDocumentInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]):
        (-[WebHTMLView _findString:options:]):
        * WebView/WebView.mm:
        (findString):

2010-12-28  Daniel Bates  <dbates@rim.com>

        Reviewed by Sam Weinig.

        Substitute // MARK: for compiler-specific #pragma mark
        https://bugs.webkit.org/show_bug.cgi?id=51657

        For consistency, we should substitute "// MARK:" for compiler-
        specific "#pragma mark" in the source files for the Mac port.

        * History/WebHistory.mm:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebNetscapePluginView.mm:
        * WebCoreSupport/WebInspectorClient.mm:
        * WebCoreSupport/WebSecurityOrigin.mm:
        * WebView/WebPDFView.mm:
        * WebView/WebVideoFullscreenController.mm:
        * WebView/WebVideoFullscreenHUDWindowController.mm:

2010-12-23  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by Darin Adler.

        WebKit crashes at DebuggerCallFrame::functionName() if m_callFrame is the top global callframe.
        https://bugs.webkit.org/show_bug.cgi?id=38535

        WebScriptDebugger in WebKit has empty implementations for willExecuteProgram and didExecuteProgram.  As a result,
        if the top call frame is from a program, WebKitScriptDebugger doesn't record that callframe as the top frame, and
        WebScriptDebugger's callframe stack is wrong from this point.  That could cause crash if we trying to access the top
        call frame from this stack when an exception throws because the saved top frame could be invalid.

        To fix that, we need to maintain the call frame stack in willExecuteProgram and didExecuteProgram, as we did in
        callEvent and returnEvent.

        * WebView/WebScriptDebugger.mm:
        (WebScriptDebugger::willExecuteProgram):
        (WebScriptDebugger::didExecuteProgram):

2010-12-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        WebKit2 needs to mirror the frame tree in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=51546

        - Add client functions to notify that a frame has been added or
          removed from the page cache.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didSaveToPageCache):
        (WebFrameLoaderClient::didRestoreFromPageCache):

2010-12-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Editor.h doesn't need to include SelectionController.h
        https://bugs.webkit.org/show_bug.cgi?id=51441

        Renamed SelectionController::EDirection to SelectionDirection.

        * WebView/WebFrame.mm:
        (-[WebFrame _rangeByAlteringCurrentSelection:SelectionController::direction:granularity:]):
        Takes SelectionDirection instead of SelectionController::EDirection.
        * WebView/WebFrameInternal.h:
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController doCompletion]): Calls _rangeByAlteringCurrentSelection:SelectionController.

2010-12-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Cache snapshots of plug-ins before painting, to avoid script running during painting
        https://bugs.webkit.org/show_bug.cgi?id=51493

        When FrameView is asked to do a flattening paint (e.g. when Safari snapshots,
        or when printing), plug-ins which otherwise use the CA rendering model
        are sent a paint event. Some plug-ins may run script while handling this event,
        or out of process plug-ins may process queued requests at this time. Running
        script while inside layout or painting can have bad consequences, because it
        can result in arbitrary changes to the render tree.
        
        This patch avoids sending plug-ins paint events inside of painting. Instead,
        we ask the plug-ins to cache a snapshot before we paint, and then the software
        paint simply draws that snapshot.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView drawRect:]): If we have a cached snapshot,
        draw it. Also only send the snapshot message to the plugin proxy if we
        know we're snapshotting, since even if creating the snapshot image failed,
        we still don't want to call to the plug-in.

        * Plugins/WebBaseNetscapePluginView.h: Add a retained NSImage member for the snapshot.
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView cacheSnapshot]): Create an image and draw the snapshot into it.
        (-[WebBaseNetscapePluginView clearCachedSnapshot]): Clear the snapshot.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView drawRect:]): If we have a cached snapshot, use it.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (NetscapePluginWidget::notifyWidget): Implement notifyWidget() and use it
        to cache and clear the snapshots.

2010-12-21  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        -[WebBasePluginPackage isNativeLibraryData:] integer underflows on zero-sized data
        https://bugs.webkit.org/show_bug.cgi?id=51431
        <rdar://problem/8791757>

        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage isNativeLibraryData:]): Change an arithmetic expression so
        it doesn't underflow.

2010-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Cameron Zwarich.

        REGRESSION(r74172): 125 java tests fail on Mac
        https://bugs.webkit.org/show_bug.cgi?id=51214

        The regression was caused by an incorrectly adding sizeof(struct fat_header)
        to a pointer for uint32_t as supposed to uint8_t.

        Fixed the bug by explicitly casting it to uint8_t* before the addition.

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

2010-12-15  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Darin Adler.

        Clang -Wcast-align gives an error in WebBasePluginPackage.mm
        https://bugs.webkit.org/show_bug.cgi?id=51144

        Fix an alignment issue. OSSwapInt32 takes data that is 32-bit aligned on ARM, but
        we were calling it on a byte array 32 bits at a time. While this is okay in practice,
        since TCMalloc won't give us a non-32-bit aligned block array of bytes and Vector's
        inline storage is at the beginning of the Vector, it is still better to fix this
        and silence the warning.

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

2010-12-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <http://webkit.org/b/51064> Reproducible crash inside WebCore::MediaPlayerPrivateQTKit::createQTMovie when loading <video>

        * History/WebHistoryItem.mm:
        (-[WebHistoryItem description]): Test whether the string is empty rather than incorrectly
        always including the target in the output.

2010-12-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=50953
        DNS Prefetch should be an opt-in feature

        * WebView/WebPreferences.mm: (+[WebPreferences initialize]): Changed default to false.

2010-12-13  Mike Thole  <mthole@apple.com>

        Rubber-stamped by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=50956
        WebAuthenticationPanel.nib appears to have a cut-off sentence
        
        Replace the sentence fragment in the sheet layout with "<-- do not localize -->" style text.
        The contents of this text field are updated dynamically before the sheet is displayed.

        * Panels/English.lproj/WebAuthenticationPanel.nib/designable.nib:
        * Panels/English.lproj/WebAuthenticationPanel.nib/keyedobjects.nib:

2010-12-13  Antti Koivisto  <antti@apple.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=50758
        <rdar://problem/8722094> 
        Defer loading print stylesheets
        
        Expose SPI for DRT for making resources load serially. This is useful for testing resource load order.

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

2010-12-09  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Adopt new CG API for canvas
        https://bugs.webkit.org/show_bug.cgi?id=50591

        * WebCoreSupport/WebSystemInterface.mm:

2010-10-28  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        spellcheck does not check pasted text
        https://bugs.webkit.org/show_bug.cgi?id=40092

        Added asynchronous spell checking API to WebEditorClient using
        -[NSSpellChecker requestCheckingOfString].
        Note that WebEditorSpellCheckResponder is a small class to receive
        requested spell-checking result. Note that this feature is
        disabled at default.
        
        Also added [WebPreferences setAsynchronousSpellCheckingEnabled:] to 
        enable the feature from LayoutTestController.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (-[WebEditorSpellCheckResponder initWithSender:WebCore::sequence:results:]):
        (-[WebEditorSpellCheckResponder perform]):
        (toCoreSpellingResult):
        (-[WebEditorSpellCheckResponder WTF::WebCore::]):
        (WebEditorClient::requestCheckingOfString):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setAsynchronousSpellCheckingEnabled:]):
        (-[WebPreferences asynchronousSpellCheckingEnabled]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

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

        Fix a bug uncovered by clang++.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _documentFragmentFromPasteboard:forType:inContext:subresources:]):

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

        Clang++ build fixes.

        Silence a couple of warnings.

        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController filterKeyDown:]):

2010-12-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=48545, Home/End, PgUp, PgDown should respect
        writing-mode.  This first part of the patch just patches Mac WebKit 1 views.

        * WebView/WebFrameView.mm:
        (-[WebFrameView _isVerticalDocument]):
        (-[WebFrameView _isFlippedDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):
        (-[WebFrameView _pageInBlockProgressionDirection:]):
        (-[WebFrameView scrollPageUp:]):
        (-[WebFrameView scrollPageDown:]):

2010-12-08  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        Enable pre-HTML5 parser quirks for Apple Mail.app
        https://bugs.webkit.org/show_bug.cgi?id=50727

        * WebView/WebView.mm:
        (-[WebView _needsPreHTML5ParserQuirks]): Return true if the embedding
        application is Mail.app.

2010-12-08  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        REGRESSION: r73429-r73490: Some Contextual menu items non-functional, such as Open Link in New Tab
        https://bugs.webkit.org/show_bug.cgi?id=50683
        
        If our context menu item already has an action, don't overwrite the action with the context menu
        forwarder.

        * WebView/WebHTMLView.mm:
        (setMenuItemTarget):

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

        Remove an unused variable.

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setScrollOrigin:updatePosition:]):

2010-12-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Layering Violation in ContextMenu - member variable of type HitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=50586
        
        Update users of ContextMenu and ContextMenuController to match where the new functions 
        are located.

        * WebCoreSupport/WebContextMenuClient.mm:
        (WebContextMenuClient::getCustomMenuFromDefaultItems):
        (WebContextMenuClient::contextMenuItemSelected):
        * WebView/WebHTMLView.mm:
        (-[WebMenuTarget validateMenuItem:]):

2010-12-07  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Part of Layering Violation in ContextMenu
        https://bugs.webkit.org/show_bug.cgi?id=50586
        
        Move WebMenuTarget from ContextMenuMac to here, because having it in ContextMenuMac
        was a layering violation. Also, make sure we set the menu item targets for all menu
        items before showing them, because the ContextMenu constructor doesn't do that anymore.

        * WebView/WebHTMLView.mm:
        (+[WebMenuTarget sharedMenuTarget]): Moved from ContextMenuMac.mm.
        (-[WebMenuTarget WebCore::]): Ditto.
        (-[WebMenuTarget setMenuController:WebCore::]): Ditto.
        (-[WebMenuTarget forwardContextMenuAction:]): Ditto.
        (-[WebMenuTarget validateMenuItem:]): Ditto.

        (setMenuItemTarget): Sets the target of the NSMenuItem to the shared WebMenuTarget.
        (setMenuTargets): Recursively iterates over all NSMenuItems in an NSMenu (including
            submenus), and calls setMenuItemTarget on them.
        (-[WebHTMLView menuForEvent:]): Call setMenuTarget on all the menu items before adding
            them to the menu.

2010-12-06  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Pass security origin to make local file decision correctly
        https://bugs.webkit.org/show_bug.cgi?id=48603

        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFViewWillClickOnLink:withURL:]): Pass security origin.

2010-12-07  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed, rolling out r73392.
        http://trac.webkit.org/changeset/73392
        https://bugs.webkit.org/show_bug.cgi?id=50489

        This commit caused crashes on the GTK+ bots

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

2010-12-07  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        Let HTMLObjectElement be a form associated element
        https://bugs.webkit.org/show_bug.cgi?id=48821

        Modified to use FormAssociatedElement instead of HTMLFormControlElement.

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementWithName:inForm:]): Modified to use
        FormAssociatedElement instead of HTMLFormControlElement.
        (-[WebHTMLRepresentation controlsInForm:]): Ditto.

2010-12-06  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Update calls to DocumentWriter.
        https://bugs.webkit.org/show_bug.cgi?id=50489

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

2010-12-06  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Got rid of GraphicsLayer::nativeLayer() call, replacing it with 
        GraphicsLayer::platformLayer().

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

2010-12-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        WebKit part of <rdar://problem/8145955> Add text search API for counting/marking/highlighting matches in a range
        https://bugs.webkit.org/show_bug.cgi?id=50530

        * WebView/WebDocumentInternal.h: Added a DOMRange parameter to -countMatchesForText:options:limit:markMatches:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView countMatchesForText:inDOMRange:options:limit:markMatches:]): Added DOMRange parameter,
        which is passed through to WebCore.
        * WebView/WebPDFView.mm:
        (isFrameInRange): Added this helper function.
        (-[WebPDFView countMatchesForText:inDOMRange:options:limit:markMatches:]): Added DOMRange parameter and
        a check if the frame is in the range.
        * WebView/WebView.mm:
        (-[WebView countMatchesForText:options:highlight:limit:markMatches:]): Now calls the inDOMRange: version.
        (-[WebView countMatchesForText:inDOMRange:options:highlight:limit:markMatches:]): Added DOMRange
        parameter, which is passed to document views' -countMatchesForText:inDOMRange:options:limit:markMatches:.
        * WebView/WebViewPrivate.h:

2010-12-03  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Enable <a ping> for Mac/Windows/WebKit2 builds
        <rdar://problem/8504473>
        https://bugs.webkit.org/show_bug.cgi?id=50488

        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Enable "HyperlinkAuditing" by default.

2010-12-03  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Need to move all code that applies correction into correction panel callback.
        https://bugs.webkit.org/show_bug.cgi?id=50426
        <rdar://problem/8720832>

        * WebCoreSupport/WebEditorClient.h: Adopted new signature of dismissCorrectionPanel.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::~WebEditorClient): Adopted new signature of dismissCorrectionPanel.
        (WebEditorClient::showCorrectionPanel): Added more user dictionary learning code.
        (WebEditorClient::dismissCorrectionPanel): Adopted new signature of dismissCorrectionPanel.

2010-12-02  Simon Fraser  <simon.fraser@apple.com>

        Revert r73217 and r73227 because of continued bustage.

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

2010-12-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Got rid of GraphicsLayer::nativeLayer() call, replacing it with 
        GraphicsLayer::platformLayer().

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

2010-12-02  Mark Rowe  <mrowe@apple.com>

        Reviewed by Beth Dakin.

        <rdar://problem/8708730> Objects reported as being leaked due to lack of autorelease pool

        * Misc/WebNSFileManagerExtras.m:
        (setMetaData): Create an autorelease pool for the duration of the thread body.

2010-12-02  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Move requestGeolocationPermissionForFrame to GeolocationClient
        https://bugs.webkit.org/show_bug.cgi?id=50061

        This change facilitates client-based geolocation implementation by
        bringing together permission control into the geolocation client
        interface.

        Move method ChromeClient::requestGeolocationPermissionForFrame to
        GeolocationClient::requestPermission, and supporting class
        WebGeolocationPolicyListener. The moved code is unchanged except
        that requestPermission now takes only one argument (Geolocation*)
        and the Frame parameter is retrieved from the Geolocation object.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        * WebCoreSupport/WebGeolocationClient.h:
        (WebGeolocationClient::cancelPermissionRequest):
        * WebCoreSupport/WebGeolocationClient.mm:
        (WebGeolocationClient::requestPermission):
        (-[WebGeolocationPolicyListener initWithGeolocation:]):
        (-[WebGeolocationPolicyListener allow]):
        (-[WebGeolocationPolicyListener deny]):

2010-12-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Eric Carlson.

        Style Fixes in WebPluginController
        https://bugs.webkit.org/show_bug.cgi?id=50397

        * Plugins/WebPluginController.mm:
        (-[WebPluginController startAllPlugins]):
        (-[WebPluginController stopAllPlugins]):

2010-12-02  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.
        
        Slightly speculative fix for:

        <rdar://problem/8712674>
        <https://bugs.webkit.org/show_bug.cgi?id=50393>
        setStringValue: sometimes called with nil in [WebAuthenticationPanel setUpForChallenge]        

        * Panels/WebAuthenticationPanel.m:
        (-[WebAuthenticationPanel setUpForChallenge:]):
        If the realm is nil, use @"" instead.

2010-12-01  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Support multiple correction candidates panel for misspelled word on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=50137
        <rdar://problem/8568059>

        This patch is for supporting multiple correction suggestion panel on Mac OS X.
        The behavior and implementation is similar to that of reversion candiate panel.

        * WebCoreSupport/WebEditorClient.h: Adopted new signatures defined in base class.

        * WebCoreSupport/WebEditorClient.mm:  Adopted new signatures defined in base class.
          Added code to handle new multiple suggestion canidate panel type.
        (WebEditorClient::showCorrectionPanel):
        (WebEditorClient::getGuessesForWord):

2010-12-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46645
        
        Part 1 of making scrolling work with vertical text. This patch generalizes the scrollOriginX concept
        recently added for horizontal RTL documents and applies it to writing modes as well.  Now the
        scrollOrigin is a point, since you can start off locked to the bottom or locked to the right.
        
        This patch also fixes numerous bugs with the scrollOrigin code using native Mac NSScrollViews and
        makes them behave the same as the cross-platform code (allowing for cross-platform results to be
        landed).

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView adjustForScrollOriginChange]):
        (-[WebDynamicScrollBarsView updateScrollers]):
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        (-[WebDynamicScrollBarsView setScrollOrigin:updatePosition:]):
        (-[WebDynamicScrollBarsView scrollOrigin]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebKit Mac part of <rdar://problem/8650085> adding word-prefix search options to the text search API.
        https://bugs.webkit.org/show_bug.cgi?id=50038
        Based on a patch from Darin Adler.

        * WebView/WebDocumentInternal.h: Removed -markAllMatchesForText:caseSensitive:limit: and
        replaced -countMatchesForText:caseSensitive:limit:markMatches: with a WebFindOptions-based
        method. Declared a WebDocumentOptionsSearching protocol with a new -findString:options:
        method. Made WebHTMLView conform to the new protocol.
        * WebView/WebHTMLView.mm:
        (coreOptions): Added. Converts WebFindOptions to WebCore FindOptions.
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]): Changed to use
        -findString:options:.
        (-[WebHTMLView countMatchesForText:options:limit:markMatches:]): Changed to use WebFindOptions.
        (-[WebHTMLView findString:options:]): Added. Calls through to WebCore::Editor::findString().
        * WebView/WebPDFView.mm:
        (-[WebPDFView countMatchesForText:options:limit:markMatches:]): Changed to use WebFindOptions.
        * WebView/WebView.mm:
        (-[WebView markAllMatchesForText:caseSensitive:highlight:limit:]): Now calls through to
        -countMatchesForText:options:highlight:limit:markMatches.
        (-[WebView countMatchesForText:caseSensitive:highlight:limit:markMatches:]): Ditto.
        (-[WebView searchFor:direction:caseSensitive:wrap:startInSelection:]): Now calls through to
        -findString:options:.
        (incrementFrame): Changed to use WebFindOptions.
        (findString): Added this helper method that performs the search using the best supported
        method for the document view.
        (-[WebView findString:options:]): Changed -searchFor::::: into this.
        (-[WebView canMarkAllTextMatches]):
        (-[WebView countMatchesForText:options:highlight:limit:markMatches:]): Updated to use
        WebFindOptions.
        (-[WebView unmarkAllTextMatches]): Updated for change to incrementFrame.
        (-[WebView rectsForTextMatches]): Ditto.
        * WebView/WebViewPrivate.h: Added WebFindOptions, -findString:options:, and WebFindOptions version
        of countMatchesForText:.

2010-11-29  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by David Hyatt.

        Right-to-left pages should be scrollable to reveal left overflow.
        https://bugs.webkit.org/show_bug.cgi?id=23556

        Set and get the original x-axis scroll position and reset scroll position on HOME/END key press.
        Modify WebFrameView to support setting the initial horizontal scroller's thumb position to the right for
        pages with a left overflow.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView inProgramaticScroll]):
        (-[WebDynamicScrollBarsView refreshInitialScrollbarPosition]):
        (-[WebDynamicScrollBarsView updateScrollers]):
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        (-[WebDynamicScrollBarsView setScrollOriginX:]):
        (-[WebDynamicScrollBarsView scrollOriginX]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        (-[WebFrameView _scrollToEndOfDocument]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]):

2010-11-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        SelectionController::typingStyle() should return EditingStyle*
        https://bugs.webkit.org/show_bug.cgi?id=49813

        Changed the return value of SelectionController::typingStyle() to EditingStyle*.
        Also added SelectionController::copyTypingStyle() to copy the typing style
        as an instance of CSSMutableStyleDeclaration.

        No tests are added since this is no behavioral change.

        * WebView/WebFrame.mm:
        (-[WebFrame _typingStyle]): Calls SelectionController::copyTypingStyle()

2010-11-19  Michael Saboff  <msaboff@apple.com>

        Reviewed by Sam Weinig

        Remove DOMSVGAnimatedPathData.h from all: target to fix build.

        * MigrateHeaders.make:

2010-11-19  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49580

        * WebView/WebRenderLayer.mm: Add missing StyledElement.h include.

2010-11-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Adam Roben.

        <rdar://problem/8602509&8602717&8602724> Enable compaction support.

        * Configurations/WebKit.xcconfig:

2010-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72288.
        http://trac.webkit.org/changeset/72288
        https://bugs.webkit.org/show_bug.cgi?id=49730

        'krit attempted to do that, but revert got stuck' (Requested
        by antonm on #webkit).

        * WebView/WebRenderLayer.mm:

2010-11-17  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49580

        * WebView/WebRenderLayer.mm: Add missing StyledElement.h include.

2010-11-16  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Geoff Garen.

        <rdar://problem/8624267> Leak creating offscreen webview running fast/dom tests

        Make a static provider for WebDeviceOrientationProviderMock.  The old code allocated a new WebDeviceOrientationProviderMock for 
        every WebView, and the WebKit API doesn't support that ownership model.

        * WebView/WebDeviceOrientationProviderMock.h:
        * WebView/WebDeviceOrientationProviderMock.mm:
        (+[WebDeviceOrientationProviderMock shared]):

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=11004
        
        font-size:0 is ignored.  Remove the minimum font size of 1 in CSSStyleSelector.
        Change the pref value for minimum font size from 1 to 0.  Make sure to never use the NSFont's size,
        since it doesn't honor a size of 0.  Instead pass the size in to the FontPlatformData(NSFont*) version
        of the constructor rather than using [NSFont pointSize].

        https://bugs.webkit.org/show_bug.cgi?id=49582
        
        Negative leading is not handled correctly.  There are two bugs here.  The first is that
        maxAscent and maxDescent can be negative, so we need a notion of whether or not we have
        set them before so that we can allow them to be < 0.
        
        The second issue is that we should understand where fonts will end up relative to
        our baseline (excluding line height), and only allow those boxes to impact ascent and
        descent if the actual font box (without factoring in line height) is above or below the
        root line box baseline.

        Added fast/css/negative-leading.html
        
        These two bug fixes have to land together to keep the Acid 3 test rendering correctly.

        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]):
        (-[NSString _web_widthWithFont:]):
        * Misc/WebStringTruncator.mm:
        (fontFromNSFont):
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):

2010-11-16  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        * WebCoreSupport/WebFrameLoaderClient.mm:

2010-11-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Andreas Kling.

        KeyboardEvent::keyIdentifier() should return "const String&"
        https://bugs.webkit.org/show_bug.cgi?id=49426

        * WebCoreSupport/WebEditorClient.mm:
        (selectorForKeyEvent):
          Change the type of a variable to have keyIdentifier(); String -> const String&

2010-11-12  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Rename GeolocationControllerClient to GeolocationClient.
        https://bugs.webkit.org/show_bug.cgi?id=49259

        * WebCoreSupport/WebGeolocationClient.h: Renamed from WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.h.
        (WebGeolocationClient::webView):
        (WebGeolocationClient::setEnableHighAccuracy):
        * WebCoreSupport/WebGeolocationClient.mm: Renamed from WebKit/mac/WebCoreSupport/WebGeolocationControllerClient.mm.
        (WebGeolocationClient::WebGeolocationClient):
        (WebGeolocationClient::geolocationDestroyed):
        (WebGeolocationClient::startUpdating):
        (WebGeolocationClient::stopUpdating):
        (WebGeolocationClient::lastPosition):
        * WebKit.order:
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2010-11-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=49356 
        -[WebView _scaleWebView:] should take and origin and scroll the 
        document
        -and corresponding-
        <rdar://problem/8643921>

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

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

        Reviewed by David Hyatt.

        HTML5 Ruby support should be mandatory feature
        https://bugs.webkit.org/show_bug.cgi?id=49272

        Remove Ruby as optional feature.

        * Configurations/FeatureDefines.xcconfig:

2010-11-08  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Adam Barth.

        Avoid CFAttributedString creation in ComplexTextController by adopting UniChar provider SPI.
        https://bugs.webkit.org/show_bug.cgi?id=48886

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2010-11-08  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Clumsy typo in r71562.

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::start):

2010-11-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Interface changes in https://bugs.webkit.org/show_bug.cgi?id=27165

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::start): Move duplicate code into NetscapePluginStreamLoader
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::start): Move duplicate code into NetscapePluginStreamLoader
        * WebView/WebView.mm:
        (-[WebView _dispatchPendingLoadRequests]): Use resourceLoadScheduler() instead of cache()->loader().

2010-11-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Plug-in views should not assume that plugins are RenderEmbeddedObjects
        https://bugs.webkit.org/show_bug.cgi?id=49196
        <rdar://problem/8638467>

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginHostDied]):

2010-11-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48685
        Notify UI process about focused frame

        Added an empty implementation of the new ChromeClient method.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::focusedFrameChanged):

2010-11-08  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * MigrateHeaders.make:

2010-11-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Remove use of HIGetScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=49186
        <rdar://problem/8618410>

        Scale factors can vary on a display-by-display basis and it doesn't make sense
        to compute scale factor event coordinates like this.

        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (getCarbonEvent):

2010-11-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Allow applets to participate in accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=49117
        <rdar://problem/8625819>
        
        If Java is being loaded via the Netscape Plugin API, create a
        NetscapePluginWidget so that it has an implementation of platformLayer().
        
        Also clean up by using early returns.

        * WebCoreSupport/WebFrameLoaderClient.mm:

2010-11-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename Cache to MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=49159

        * Misc/WebCache.mm:
        (+[WebCache statistics]):
        * WebCoreSupport/WebDeviceOrientationClient.mm:
        (WebDeviceOrientationClient::setController):
        * WebView/WebView.mm:

2010-11-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49100
        ASSERT([self window]) fails in -[WebBaseNetscapePluginView restartTimers]

        * Plugins/WebBaseNetscapePluginView.mm: (-[WebBaseNetscapePluginView restartTimers]):
        Removed the assertion. Multiple callers provide no guarantee that the plug-in is still alive
        (see bug comments), and there seems to be no harm in executing this function in that case.

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Move resumeAnimations/suspendAnimations from Frame to AnimationController.
        https://bugs.webkit.org/show_bug.cgi?id=49073

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

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49008
        <rdar://problem/7906226> Frequent crashes on mail.yahoo.co.jp

        Callers of NetscapePluginInstanceProxy::waitForReply() are not prepared to be deleted during
        the call, unless it returns 0. There are two reasons for NetscapePluginInstanceProxy to be
        deleted during wait:
        - plugin crashed;
        - plugin was stopped (e.g. due to a DOM modification performed by another reply that came in
        while waiting).

        We didn't recognize the latter.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::PluginDestroyDeferrer::~PluginDestroyDeferrer):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::waitForReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::didCallPluginFunction):

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make suspendAnimations/resumeAnimations and setCSSAnimations traverse through subframes and remember state
        https://bugs.webkit.org/show_bug.cgi?id=46945

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

2010-11-04  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        reversion bubble in WebViews
        https://bugs.webkit.org/show_bug.cgi?id=47630
        <rdar://problem/8530960>

        This patch is to add reversion to correction panel. Please see WebCore/ChangeLog for detail.

        * WebCoreSupport/WebEditorClient.h: Adopted new signature of base class method.
        * WebCoreSupport/WebEditorClient.mm: Adopted new signature of base class method. And code
          change to use new reversion API in AppKit.
        (WebEditorClient::WebEditorClient):
        (WebEditorClient::~WebEditorClient):
        (WebEditorClient::respondToChangedSelection):
        (WebEditorClient::showCorrectionPanel):
        (WebEditorClient::dismissCorrectionPanel):
        (WebEditorClient::isShowingCorrectionPanel):

2010-11-04  Mike Thole  <mthole@apple.com>

        Reviewed by Dan Bernstein.

        Title for images should use localized numerals
        https://bugs.webkit.org/show_bug.cgi?id=49017

        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::imageTitle): Use localized numerals on Snow Leopard or newer.

2010-11-02  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Part 1 of 2.

        Substitute FrameTree::uniqueName() for FrameTree::name() in the Mac port. 

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

2010-11-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7660547> and https://bugs.webkit.org/show_bug.cgi?id=48699
        Context menu support for WebKit 2.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::showContextMenu):

2010-10-29  Daniel Bates  <dbates@rim.com>

        No review, rolling out 70971.
        http://trac.webkit.org/changeset/70971
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Rolling out changeset 70971 <http://trac.webkit.org/changeset/70971> since
        it caused layout test failures on all bots. In particular, the
        child count in a generated frame name differs after this patch. We need
        to look into this further.

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

2010-10-28  Antonio Gomes  <agomes@rim.com>

        Reviewed by Ojan Vafai.

        Needs a "LinuxEditingBehavior", perhaps with a better name
        https://bugs.webkit.org/show_bug.cgi?id=36627

        Added the corresponding GTK+ setting to WebCore's EditingUnixBehavior: WebKitEditingUnixBehavior.

        * WebView/WebFrame.mm:
        (core):
        * WebView/WebPreferencesPrivate.h:

2010-10-29  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Modified Mac-port to use FrameTree::uniqueName().

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

2010-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Change BackForwardList clients to use BackForwardListImpl to prepare for further refactoring
        https://bugs.webkit.org/show_bug.cgi?id=48574

        * History/WebBackForwardList.mm:
        Use BackForwardListImpl.

2010-10-29  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Sam Weinig.

        Comment for usesDocumentViews explains it backwards. This flag is true in ToT, and we do
        create views for subframes.

        * WebView/WebViewData.h: Double negation is better than a lie.

2010-10-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Full screen video in Safari (still) exits full-screen if you switch to another 
        app on a multi-display system.
        https://bugs.webkit.org/show_bug.cgi?id=47364
        <rdar://problem/8382299>
        
        The FullScreen window does not technically close when it deactivates, but the 
        two NSWindows that make up the FullScreen feature should not hide when deactivated.
        
        * WebView/WebVideoFullscreenController.mm:
        (createBackgroundFullscreenWindow): Do not set hidesOnDeactivate.
        (-[WebVideoFullscreenWindow initWithContentRect:styleMask:backing:defer:]): Ditto.
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindow initWithContentRect:styleMask:backing:defer:]): Ditto.

2010-10-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48576
        Let WebKit2 client know when a frame is a frameset

        Added a blank implementation of the new FrameLoaderClient method.

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

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

        Reviewed by Adam Roben and David Kilzer.

        Fix and cleanup of build systems
        https://bugs.webkit.org/show_bug.cgi?id=48342

        * Configurations/FeatureDefines.xcconfig: Remove unnecessary ENABLE_SANDBOX.

2010-10-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        LLVM compiler build fix

        * Misc/WebDownload.mm:
        (-[WebDownload initWithRequest:delegate:]): Changed the delegate type from id to
        id<NSURLDownloadDelegate> to match the method signature in NSURLDownload.

2010-10-28  Ivan Krstić  <ike@apple.com>

        Reviewed by Mark Rowe.

        Remove unused experimental proxied panel interface.
        <rdar://problem/7237059>

        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPlugin):
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/Hosted/WebKitPluginHost.defs:
        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        * WebView/WebPreferencesPrivate.h:

2010-10-27  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Darin Adler.

        Improve memSize calculation in [WebView _setCacheModel]
        https://bugs.webkit.org/show_bug.cgi?id=48484

        * WebView/WebView.mm:
        (roundUpToPowerOf2): Added. Utility function to calculate the nearest power of 2.
        (+[WebView _setCacheModel:]): Update memSize calculation to set it to the next
        bigger power of 2. Also update WebCore cache settings.

2010-10-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.dumpBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42322
        rdar://problem/8193631

        WebKitTestRunner needs to support layoutTestController.clearBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42333
        rdar://problem/8193643

        * History/WebBackForwardList.mm:
        (core): Return BackForwardListImpl.
        (kit): Take BackForwardListImpl.
        (-[WebBackForwardList initWithBackForwardList:]): Use BackForwardListImpl.
        (-[WebBackForwardList dealloc]): Ditto.
        (-[WebBackForwardList finalize]): Ditto.
        (-[WebBackForwardList description]): Ditto.
        (-[WebBackForwardList setPageCacheSize:]): Ditto.
        (-[WebBackForwardList pageCacheSize]): Ditto.
        * History/WebBackForwardListInternal.h: Ditto.
        * WebView/WebFrameView.mm:
        (-[WebFrameView keyDown:]): Ditto.
        * WebView/WebView.mm:
        (-[WebView initWithCoder:]): Ditto.
        (-[WebView encodeWithCoder:]): Ditto.
        (-[WebView backForwardList]): Ditto.
        (-[WebView setMaintainsBackForwardList:]): Ditto.

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Marrin.

        Add ENABLE_WEB_AUDIO feature enable flag (initially disabled) to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=48279

        * Configurations/FeatureDefines.xcconfig:

2010-10-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=48385 Add WebKit 
        SPI to scale a WebView
        -and corresponding-
        <rdar://problem/8107667>

        This patch adds SPI to Mac WebKit that scales the page by the given 
        scale factor.

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

2010-10-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70335): Incorrect article layout in Safari Reader
        https://bugs.webkit.org/show_bug.cgi?id=48436

        * Misc/WebKitVersionChecks.h: Added WEBKIT_FIRST_VERSION_WITH_GET_MATCHED_CSS_RULES_RESTRICTIONS.
        * WebView/WebView.mm:
        (-[WebView _needsUnrestrictedGetMatchedCSSRules]): Added. Returns YES for Safari linked against
        versions of WebKit that did not have the cross-origin restrictions in getMatchedCSSRules().
        (-[WebView _preferencesChangedNotification:]): Call Settings::setCrossOriginCheckInGetMatchedCSSRulesDisabled()
        based on the above.

2010-10-18  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Safari fullscreen media element tickles when it should not.
        
        https://bugs.webkit.org/show_bug.cgi?id=47861

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController updatePowerAssertions]):

2010-10-26  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Resource tracking failure when trying to move a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=44713

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::didTransferChildFrameToNewDocument):
        Empty method.
        (WebFrameLoaderClient::transferLoadingResourceFromPage):
        Update resource tracking for a resource load that has been transferred
        to a new page.

2010-10-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove exec and globalData arguments from jsNumber
        https://bugs.webkit.org/show_bug.cgi?id=48270

        Mechanical removal of exec parameter to jsNumber

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::numberValue):

2010-10-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Expose HitTestResult::absoluteMediaURL() via WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=48219

        * Misc/WebElementDictionary.mm:
        (+[WebElementDictionary initializeLookupTable]): Map WebElementMediaURLKey to
        _absoluteMediaURL.
        (-[WebElementDictionary _absoluteMediaURL]): Added. Returns absoluteMediaURL().
        * WebKit.exp: Export WebElementMediaURLKey.
        * WebView/WebView.mm: Define WebElementMediaURLKey.
        * WebView/WebViewPrivate.h: Declare WebElementMediaURLKey.

2010-10-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Removed deprecated methods from the WebHTMLHighlighter private protocol.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::customHighlightRect): Call -highlightRectForLine:representedNode:
        unconditionally.
        (WebChromeClient::paintCustomHighlight): Call
        -paintHighlightForBox:onLine:behindText:entireLine:representedNode: unconditionally.
        * WebView/WebHTMLViewPrivate.h:

2010-10-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Sam Weinig.

        Unify globalData APIs
        https://bugs.webkit.org/show_bug.cgi?id=47969

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluate):
        (WebKit::NetscapePluginInstanceProxy::invoke):
        (WebKit::NetscapePluginInstanceProxy::invokeDefault):
        (WebKit::NetscapePluginInstanceProxy::construct):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):

2010-10-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48186> Remove unneeded WebHTMLRepresentationInternal.h header

        Reviewed by Sam Weinig.

        The only method defined in WebHTMLRepresentationInternal.h is
        also defined in WebHTMLRepresentation.h, so use that instead.

        * WebView/WebHTMLRepresentationInternal.h: Removed.

2010-10-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=48083
        <rdar://problem/8489082> Need WebKit2 API for private browsing (48083)

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface): Initialize the new method.

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

        Reviewed by Anders Carlsson.

        WebKit2 needs to pass the current event modifier flags when requesting a new window
        https://bugs.webkit.org/show_bug.cgi?id=48140

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::createWindow):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::dispatchCreatePage):
        Add NavigationAction parameter.

2010-10-21  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Carlson.

        WebKit shouldn't load a plug-in based on file extension if a MIME type
        is specified.
        https://bugs.webkit.org/show_bug.cgi?id=48046

        If a MIME type is specified in an object or embed element, and that MIME
        type isn't supported by an installed plug-in, WebKit shouldn't attempt
        to find a plug-in based on the file extension of the url attribute.
        Doing so can lead to cases where a plug-in is loaded that can't handle
        resources of the MIME type specified by the author.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Only check for a pluginPackage by
        extension if MIME type is the empty string.

2010-10-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Composited elements drawn twice when WebView is layer-backed
        https://bugs.webkit.org/show_bug.cgi?id=48024
        <rdar://problem/7916580>
        
        When drawing content in a layer-backed WebView, WebFrame's test
        for drawing to a bitmap succeeded, causing us to paint flattened
        compositing layers into the view. They would also be rendered
        by the normal compositing path, resulting in double rendering.
        
        Fix this by detecting when the WebHTMLView is being drawn into
        a layer, and avoiding flattening in that case.

        * WebView/WebFrame.mm:
        (-[WebFrame _showFlattenedCompositingLayers:]):
        (-[WebFrame _drawRect:contentsOnly:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawLayer:inContext:]):
        (-[WebHTMLView _web_isDrawingIntoLayer]):
        * WebView/WebHTMLViewInternal.h:

2010-10-20  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by David Levin.

        Repost the DatabaseTracker notifications to the main thread, if needed.
        https://bugs.webkit.org/show_bug.cgi?id=40655

        * Storage/WebDatabaseTrackerClient.mm:
        (DidModifyOriginData::dispatchToMainThread):
        (DidModifyOriginData::DidModifyOriginData):
        (DidModifyOriginData::dispatchDidModifyOriginOnMainThread):
        (WebDatabaseTrackerClient::dispatchDidModifyOrigin):
        (WebDatabaseTrackerClient::dispatchDidModifyDatabase):

2010-10-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(r67568-r67643): Some HTML/CSS renders upside down and backwards on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=47369
        
        r46947 added code that limits the size of the layer-backed view on Leopard when
        the page height exceeds 4096px (later adjusted to 2048px in r48401).
        
        Later, r67576 altered the geometry flipping behavior to push the geometry flipping
        down into WebKit. However, the code that adjusts the hosting layer's sublayer transform
        to account for layer-backed view size-limiting was not fixed at the same time.
        This change corrects that.

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

2010-10-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8508422> Compositing layers aren't always displayed correctly in layer-backed WebViews
        
        AppKit has some special code to prevent it meddling with view's layers
        under layer-backed WebViews. When a layer-backed WebView became composited,
        this caused our layer to remain zero-sized. Fix this by manually
        setting the geometry for our layer, if the WebHTMLView has a layer.
        
        This does not seem to be a problem if the WebView becomes layer-backed, or
        stops being layer-backed after the WebView starts using compositing.

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

2010-10-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Merge ColorSpace and ImageColorSpace enums
        https://bugs.webkit.org/show_bug.cgi?id=47922

        Renamed ColorSpace enum entries DeviceColorSpace and sRGBColorSpace to ColorSpaceDeviceRGB and ColorSpaceSRGB
        to follow webkit style rules.

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

2010-10-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=47933
        <rdar://problem/8494337> navigator.language doesn't work in WebKit2

        * Misc/WebNSUserDefaultsExtras.mm: Moved code for computing default language to WebCore.
        We need to keep _webkit_preferredLanguageCode for Safari.

        * WebCoreSupport/WebSystemInterface.mm: (InitWebCoreSystemInterface):
        Initialize wkCopyCFLocalizationPreferredName.

        * WebCoreSupport/WebViewFactory.mm: Removed defaultLanguage. WebCore was the only caller.

2010-10-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=47864
        Convert WebNSUserDefaultsExtras.m to .mm

        Also, fixed some issues in the process:
        - removed locking, which was only necessary when this code was in Foundation;
        - fixed notification center observer to actually work (previously, it picked up changes
        when application preferences changed, not when system language did);
        - removed unused NSString category;
        - updated style.

        * Misc/WebNSUserDefaultsExtras.m: Removed.
        * Misc/WebNSUserDefaultsExtras.mm: Copied from WebKit/mac/Misc/WebNSUserDefaultsExtras.m.
        (createHTTPStyleLanguageCode):
        (+[NSUserDefaults _webkit_defaultsDidChange]):
        (addLanguageChangeObserver):
        (+[NSUserDefaults _webkit_preferredLanguageCode]):

2010-10-18  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Eric Seidel.

        Switch to using the new Carbon NPAPI event declarations, and remove
        the old ones.

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

        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::mouseEntered):
        (WebNetscapePluginEventHandlerCarbon::mouseExited):
        (WebNetscapePluginEventHandlerCarbon::mouseMoved):
        (WebNetscapePluginEventHandlerCarbon::focusChanged):

2010-10-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: disable private browsing for inspector
        https://bugs.webkit.org/show_bug.cgi?id=47827

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

2010-10-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspector settings/properties/states management
        should be extracted into separate class.

        We have a lot of flags/values in InspectorController.
        Some flags are persisting into profile.
        Others are part of inspector state for frontend.
        All these flags should keep their values after navigation.
        It'd be better to extract these flags/values into separate
        class which will care about theirs lifetime.

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

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]):
        (-[WebInspectorWindowController attach]):
        (-[WebInspectorWindowController detach]):

2010-10-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=43987
        Switch XMLHttpRequest, FileReader, and FileReaderSync to use a Stringbuilder
        to construct their internal result string.  Remove ScriptString (this is now
        redundant).

        * WebCoreSupport/WebFrameLoaderClient.mm:

2010-10-12  Andy Estes  <aestes@apple.com>

        Rubber-stamped by Darin Adler.

        Check in some cleanup from the previous commit.

        * WebView/WebView.mm:
        (leakMailQuirksUserScriptPath): Renamed to indicate that this function
        leaks an NSString.
        (-[WebView _injectMailQuirksScript]): Moved a static initialization from
        a separate class method into the only method that used it and removed
        the now-unnecessary class method.

2010-10-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION (new parser): Leopard/Tiger Mail <head>/<body> quirk is gone
        https://bugs.webkit.org/show_bug.cgi?id=45693

        Re-implement this former WebCore parser quirk as a
        Mac-only userscript-based quirk.  As far as I can tell
        from Darin's description this should satisfy Mail's needs.

        * Misc/MailQuirksUserScript.js: Added.
        * WebView/WebView.mm:
        (+[WebView _mailQuirksUserScript]):
        (-[WebView _injectMailQuirksScript]):
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2010-10-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Add 'didDraw' callback for framerate tracking
        https://bugs.webkit.org/show_bug.cgi?id=47478

        Add a callback at the end of -[WebHTMLView drawRect:] so
        a delegate can get notified when a draw happens.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawRect:]):
        * WebView/WebUIDelegatePrivate.h:

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

        Reviewed by Darin Adler.

        Remove WebIconFetcher from WebKit and IconFetcher from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=47523

        Remove all traces of the WebKit WebIconFetcher class. It's SPI that nobody uses.

        * Misc/WebIconFetcher.h: Removed.
        * Misc/WebIconFetcher.mm: Removed.
        * Misc/WebIconFetcherInternal.h: Removed.
        * WebView/WebFrame.mm:
        * WebView/WebFramePrivate.h:

2010-10-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Add Private API for creating a WebKit2 WebSerializedScriptValue from the internal
        representation of a WebKit1 WebSerializedJSValue.
        https://bugs.webkit.org/show_bug.cgi?id=47439

        * WebView/WebSerializedJSValue.mm:
        (-[WebSerializedJSValue internalRepresentation]):
        * WebView/WebSerializedJSValuePrivate.h:

2010-10-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Add Private API for creating a WebKit1 WebSerializedJSValue from the internal
        representation of a WebKit2 WebSerializedScriptValue.
        https://bugs.webkit.org/show_bug.cgi?id=47390

        * WebView/WebSerializedJSValue.mm:
        (-[WebSerializedJSValue initWithInternalRepresentation:]):
        Set the WebSerializedJSValuePrivate's WebCore::SerializedScriptValue to be the passed in
        internal representation.
        * WebView/WebSerializedJSValuePrivate.h: Added.

2010-10-07  Antonio Gomes  <agomes@rim.com>

        Reviewed by Simon Fraser.

        [Mac] [DRT] implement setSpatialNavigationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=47291

        Added the needed bits to make it possible to enabled spatial navigation
        for the Mac port. For now it is being only used by DRT.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences isSpatialNavigationEnabled]):
        (-[WebPreferences setSpatialNavigationEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-10-07  Jer Noble  <jer.noble@apple.com>

        Fix the Leopard 64-bit build.

        * Configurations/WebKit.xcconfig: Add CoreServices.framework/Frameworks to the 
            framework search path.
        * WebView/WebVideoFullscreenController.mm: Explicitly import <OSStatus/Power.h>.

2010-10-06  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Screensaver starts while watching fullscreen playback.
        https://bugs.webkit.org/show_bug.cgi?id=47299
        <rdar://problem/8478956>

        To disable the Screen Saver, we need to periodically call UpdateSystemActivity().  

        * WebView/WebVideoFullscreenController.h: Added _tickleTimer.
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController dealloc]): Invalidate _tickleTimer.
        (-[WebVideoFullscreenController _enableTickleTimer]): Create _tickleTimer. 
        (-[WebVideoFullscreenController _disableTickleTimer]): Invalidate _tickleTimer.
        (-[WebVideoFullscreenController _tickleTimerFired]): Call UpdateSystemActivity().
        (-[WebVideoFullscreenController updatePowerAssertions]): Call _enableTickleTimer 
            or _disableTickleTimer.

2010-10-05  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        check for ENABLE(GLIB_SUPPORT) in WebView
        https://bugs.webkit.org/show_bug.cgi?id=46788

        Use ENABLE(GLIB_SUPPORT) in WebView to guard the glib runloop observer.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _close]):
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

2010-10-01  Anders Carlsson  <andersca@apple.com>

        Fix Snow Leopard build.

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

2010-10-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add proxy server query function proxyServersForURL and change the Mac plug-in code to use it
        https://bugs.webkit.org/show_bug.cgi?id=47022
        <rdar://problem/8504712>

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getProxy):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView getVariable:forURL:value:length:]):

2010-09-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Remove remaining calls to deprecatedParseURL
        https://bugs.webkit.org/show_bug.cgi?id=26599

        * DOM/WebDOMOperations.mm:
        (-[DOMDocument URLWithAttributeString:]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):
        Call stripLeadingAndTrailingHTMLSpaces instead of deprecatedParseURL.

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

        Reviewed by Darin Adler.

        -[DOMDocument _documentRange] throws an exception if there is no document element
        https://bugs.webkit.org/show_bug.cgi?id=46934
        <rdar://problem/8169260>

        If there is no document element, just return an empty range. Otherwise we'll try to call
        Range::selectNode with a null Node which will throw a NOT_FOUND exception.

        * DOM/WebDOMOperations.mm:
        (-[DOMDocument _documentRange]):

2010-09-30  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make 2D accelerated canvas rendering build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=46007
        
        Added ACCELERATED_2D_CANVAS to FeatureDefines

        * Configurations/FeatureDefines.xcconfig:

2010-09-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        Add printing SPI allowing full control over shrink-to-fit
        https://bugs.webkit.org/show_bug.cgi?id=46877

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _beginPrintModeWithMinimumPageWidth:height:maximumPageWidth:]): Added.
        * WebView/WebHTMLViewPrivate.h:

2010-09-28  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=41292
        Some windowed plugins did not handle events through EventHandler, so we
        never set right gesture state for those events.
        This change is to set right allowPopupsFromPlugin flag to current
        execution frame, so WeKit can always get right gesture state on Mac.
        From Mac Snow Leopard, the plugin is run under "WebKitPluginHost,app"
        process, that process passes the allowPopupsFromPlugin flag to
        WKPCEvaluate(in NetscapePluginHostProxy.mm), then flag is set in
        NetscapePluginInstanceProxy::evaluate.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView sendEvent:isDrawRect:]):

2010-09-28  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Added oldPage param to FrameLoaderClient::didTransferChildFrameToNewDocument.
        https://bugs.webkit.org/show_bug.cgi?id=46663

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

2010-09-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Kenneth Rohde Christiansen.

        DRT/Mac nodesFromRect support

        [Mac][DRT] Implement LayoutTestController::nodesFromRect
        https://bugs.webkit.org/show_bug.cgi?id=46580

        Implement nodesFromRect as a private method to access non-exposed Document
        methods, similarly to computedStyleIncludingVisitedInfo.

        * WebView/WebView.mm: Added JSDocument.h and JSNodeList.h to the include list.
        These headers makes it possible to:
        1) Get a Document off of a JSDocument;
        2) Call toJS function, defined in JSNodeList.cpp|h so we can convert RefPtr<NodeList>
        gotten from Document::nodesFromRect to JS bindings.
        (-[WebView _nodesFromRect:forDocument:x:y:hPadding:vPadding:ignoreClipping:]):
        * WebView/WebViewPrivate.h: Added nodesFromRect method to access methods of the
        Document class not exposed to JavaScript. It works similarly to computedStyleIncludingVisitedInfo.

2010-09-24  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        automaticSpellingCorrectionEnabled isn't updated.
        https://bugs.webkit.org/show_bug.cgi?id=46486
        <rdar://problem/8475212>

        * WebView/WebView.mm:
        (+[WebView initialize]): Should update "automaticSpellingCorrectionEnabled"
          instead of "automaticTextReplacementEnabled".

2010-09-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46380
        REGRESSION: Crash when downloading a file

        Downloading cannot be tested in DRT.

        * Misc/WebNSFileManagerExtras.m: (-[NSFileManager _webkit_setMetadataURL:referrer:atPath:]):
        Don't copy null strings.

2010-09-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: CRASH at node highlight on MAC Safari.
        1) run-safari --debug
        2) open inspector
        3) open elements panel
        4) hover mouse over elements panel items multiple times
        5) CRASH
        Looks like it is a race condition. WebNodeHighlightView doesn't check
        the pointer to WebNodeHighligh object and it can be nil.

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

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

2010-09-23  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r61285): some Dashboard widgets are always invisible due to
        HTML parser changes.
        https://bugs.webkit.org/show_bug.cgi?id=46435

        Enable pre-HTML5 parser quirks if Dashboard is in backward compatibility
        mode.

        * WebView/WebView.mm:
        (-[WebView _needsPreHTML5ParserQuirks]): Renamed from
        shouldUsePreHTML5ParserQuirks(). Return true if
        WebCore::Settings::usesDashboardCompatibilityMode() is true.
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView _setDashboardBehavior:to:]): Enable pre-HTML5 parser quirks
        if Dashboard behavior is set to backward compatibility mode.

2010-09-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Reduce minimum DOMTimer interval
        https://bugs.webkit.org/show_bug.cgi?id=45362

        * WebView/WebView.mm:
        Updating set interval call to use Settings' static version inside
        one time init block.

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

        Reviewed by Darin Adler.

        REGRESSION (r61285): Microsoft Entourage 2008 does not invoke My Day window
        https://bugs.webkit.org/show_bug.cgi?id=46334

        Microsoft My Day loads scripts using self-closing script tags, markup
        which is incompatible with the HTML5 parser. Enable parser quirks for
        this application.

        * WebView/WebView.mm:
        (shouldUsePreHTML5ParserQuirks): Return true if the application is
        Microsoft My Day and was linked against a version of WebKit prior to the
        introduction of the HTML5 parser.

2010-09-23  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Add hyperlink auditing settings (i.e., <a ping>).
        https://bugs.webkit.org/show_bug.cgi?id=30458

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setMemoryInfoEnabled:]):
        (-[WebPreferences hyperlinkAuditingEnabled]):
        (-[WebPreferences setHyperlinkAuditingEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-09-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=43667
        ASSERT failure in NetscapePluginInstanceProxy::disconnectStream

        Test: plugins/get-javascript-url.html

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::evaluateJavaScript): Add the stream to m_streams, just
        like any other one.

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

        Reviewed by Anders Carlsson.

        Fix some Objective-C GC problems and use RetainPtr instead of HardRetain/Release
        https://bugs.webkit.org/show_bug.cgi?id=46220

        * Misc/WebNSFileManagerExtras.m:
        (setMetaData): Use CFRelease instead of HardRelease.
        (-[NSFileManager _webkit_setMetadataURL:referrer:atPath:]): Use CFStringCreateCopy
        instead of -[NSObject copy] combined with HardRetainWithNSRelease.

2010-09-22  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        PluginStrategy should satisfy the needs of Qt
        https://bugs.webkit.org/show_bug.cgi?id=45857
        No new functionality so no new tests.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):

2010-09-22  Paul Knight  <pknight@apple.com>

        Reviewed by Simon Fraser.

        -[WebView _scheduleCompositingLayerSync] should wake the run loop
        https://bugs.webkit.org/show_bug.cgi?id=46226

        Call CFRunLoopWakeUp to make sure the run loop is not sleeping, which could delay layer painting.

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

2010-09-21  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r61285): AIM 2.1.296: Code rendered as text in Welcome screen
        https://bugs.webkit.org/show_bug.cgi?id=46134

        AIM clients linked against versions of WebKit prior to the introduction
        of the HTML5 parser contain markup incompatible with the new parser.
        Enable parser quirks in this case to remain compatible with these
        clients.

        * WebView/WebView.mm:
        (shouldUsePreHTML5ParserQuirks): Returns true if the embedding
        application is AIM and was linked against a version of WebKit prior to
        the introduction of the HTML5 parser, or if the
        WebKitPreHTML5ParserQuirks WebPreference is enabled.
        (-[WebView _preferencesChangedNotification:]): Call
        WebCore::Settings::setUsePreHTML5ParserQuirks().

2010-09-21  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        DeviceOrientationClient and DeviceMotionClient should have controllerDestroyed() methods
        https://bugs.webkit.org/show_bug.cgi?id=45891

        Implements WebDeviceOrientationClient::deviceOrientationControllerDestroyed to delete the client.

        * WebCoreSupport/WebDeviceOrientationClient.h:
        * WebCoreSupport/WebDeviceOrientationClient.mm:
        (WebDeviceOrientationClient::deviceOrientationControllerDestroyed):

2010-09-20  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] enhanced context menu for media elements
        https://bugs.webkit.org/show_bug.cgi?id=45021

        New localized strings for the media element context-menu.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::contextMenuItemTagOpenVideoInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagOpenAudioInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaControls):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaLoop):
        (WebPlatformStrategies::contextMenuItemTagEnterVideoFullscreen):
        (WebPlatformStrategies::contextMenuItemTagMediaPlay):
        (WebPlatformStrategies::contextMenuItemTagMediaPause):
        (WebPlatformStrategies::contextMenuItemTagMediaMute):

2010-09-20  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        REGRESSION (HTML5 Parser): Pages broken due to <tag<tag> parsing changes
        https://bugs.webkit.org/show_bug.cgi?id=40961

        Implement WebKitUsePreHTML5ParserQuirks preference.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Default WebKitUsePreHTML5ParserQuirks to
        false.
        (-[WebPreferences usePreHTML5ParserQuirks]):
        (-[WebPreferences setUsePreHTML5ParserQuirks:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Update WebCore::Settings
        with the value of WebKitUsePreHTML5ParserQuirks when a preference
        changes.

2010-09-20  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Pasteboard doesn't work in WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=42317
        <rdar://problem/7660537>

        Some changes to fix style inconsistencies.
        Added OBJC 2.0 style enumeration.
        
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::userVisibleString):
        (createExcludedElementsForAttributedStringConversion):
        (WebEditorClient::documentFragmentFromAttributedString): Changed parameter to be
        a Vector of RefPtr.
        (WebEditorClient::setInsertionPasteboard):
        (WebEditorClient::pasteboardTypesForSelection):

2010-09-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=45993, convert printing to the new pagination model.

        Make printing store the page height in the RenderView and push that into the layout state to
        use the new pagination model.  The old pagination model is retained because it is still used
        for embedded WebViews.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _adjustedBottomOfPageWithTop:bottom:limit:]):

2010-09-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r60104): Zoom level is unexpectedly reset on page reload
        https://bugs.webkit.org/show_bug.cgi?id=42863

        * WebView/WebView.mm:
        (-[WebView _setZoomMultiplier:isTextOnly:]):
        Call functions on Frame instead of FrameView.

2010-09-17  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Reduce minimum DOMTimer interval
        https://bugs.webkit.org/show_bug.cgi?id=45362

        * WebView/WebView.mm: Added in a call to set the mimimum allowed DOMTimer to 4ms.

2010-09-17  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Add WebKitAccelerated2dCanvasEnabled flag to WebKit for Mac
        https://bugs.webkit.org/show_bug.cgi?id=45911

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences accelerated2dCanvasEnabled]):
        (-[WebPreferences setAccelerated2dCanvasEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-09-17  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        WebKit should use system wide spell checking preference when application specific one isn't set.
        https://bugs.webkit.org/show_bug.cgi?id=45789
        <rdar://problem/8416041>

        * WebView/WebView.mm:
        (+[WebView initialize]): Use system wide autocorrection and text substitution preferences
          when the application level preferences are not set.

2010-09-16  John Sullivan  <sullivan@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8395558>
        https://bugs.webkit.org/show_bug.cgi?id=45938
        _web_makePluginViewsPerformSelector:: mutates subviews array while iterating it

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_makePluginSubviewsPerformSelector:withObject:]):
        Converted from -[NSArray _web_makePluginViewsPerformSelector:withObject:]. The old method
        was only ever called on the result of -[WebHTMLView subviews]. By moving that knowledge into
        this helper method, it can't be used incorrectly. Now it makes a copy of [WebHTMLView subviews]
        before enumerating it, to ensure that the selector can't mutate the array being enumerated.
        (-[WebHTMLView viewWillMoveToHostWindow:]):
        Updated for _web_makePluginSubviewsPerformSelector:: signature change.
        (-[WebHTMLView viewDidMoveToHostWindow]):
        Ditto.

2010-09-16  Darin Adler  <darin@apple.com>

        Reviewed by Andreas Kling.

        Reduce use of HTMLInputElement::inputType so we can remove it later
        https://bugs.webkit.org/show_bug.cgi?id=45903

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementDoesAutoComplete:]): Use isPasswordField.
        (-[WebHTMLRepresentation elementIsPassword:]): Use isPasswordField.

2010-09-16  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Always use a valid string when setting WebKitUserStyleSheetLocationPreferenceKey.
        https://bugs.webkit.org/show_bug.cgi?id=41510

        This prevents usage of nil value, which would cause an uncaught exception.

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

2010-09-16  Dan Bernstein  <mitz@apple.com>

        Reverted the previous change because r67628 has been reverted.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:

2010-09-16  Dan Bernstein  <mitz@apple.com>

        Build fix after r67628. Added context menu item localizable strings for the items
        added in r67628, following equivalent menu items in Mac OS X when possible. However,
        this set of menu items does not make much sense for Mac OS X, and this should be
        addressed separately.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::contextMenuItemTagOpenMediaInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagCopyMediaLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaControls):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaLoop):
        (WebPlatformStrategies::contextMenuItemTagEnterVideoFullscreen):
        (WebPlatformStrategies::contextMenuItemTagMediaPlay):
        (WebPlatformStrategies::contextMenuItemTagMediaPause):
        (WebPlatformStrategies::contextMenuItemTagMediaMute):
        (WebPlatformStrategies::contextMenuItemTagMediaUnMute):

2010-09-16  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Jian Li.

        Unify FILE_SYSTEM and FILE_WRITER enables under the name FILE_SYSTEM.
        https://bugs.webkit.org/show_bug.cgi?id=45798

        * Configurations/FeatureDefines.xcconfig:

2010-09-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=44715
        maps.google.com flips upside down when zooming map using trackpad in WebKit2 on Mac

        Move geometry flipping to platform-specific code.

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

2010-09-14  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        * WebCoreSupport/WebEditorClient.h: Added declaration of isShowingCorrectionPanel(),
          which provides an inteface to query whether autocorrection panel is shown.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient): Defined a constant, InvalidCorrectionPanelTag,
          for invalid correction panel tag. Replaced -1 with this constant.
        (WebEditorClient::dismissCorrectionPanel): Ditto
        (WebEditorClient::isShowingCorrectionPanel): Query whether autocorrection panel is shown.

2010-09-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by John Sullivan.

        Part of <rdar://problem/8420003>.  Make it possible to override the version number used in linked-in-or-after checks.

        * Misc/WebKitVersionChecks.h: Remove two unused functions from the header and add a method to set the overriden version.
        * Misc/WebKitVersionChecks.m:
        (WebKitLinkedOnOrAfter):
        (setWebKitLinkTimeVersion): Set the overridden version.
        (WebKitLinkTimeVersion): Return the overridden version if set, otherwise do the old thing.
        * WebView/WebPreferences.mm:
        (+[WebPreferences setWebKitLinkTimeVersion:]): Call through to set the overridden version.
        * WebView/WebPreferencesPrivate.h:

2010-09-14  Eric Seidel  <eric@webkit.org>

        Unreviewed, reverting changes r67451 and r67451.
        Broke lots of builders.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient):
        (WebEditorClient::dismissCorrectionPanel):

2010-09-14  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        * WebCoreSupport/WebEditorClient.h: Added declaration of isShowingCorrectionPanel(),
          which provides an inteface to query whether autocorrection panel is shown.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient): Defined a constant, InvalidCorrectionPanelTag,
          for invalid correction panel tag. Replaced -1 with this constant.
        (WebEditorClient::dismissCorrectionPanel): Ditto
        (WebEditorClient::isShowingCorrectionPanel): Query whether autocorrection panel is shown.

2010-09-13  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Preparation for eliminating deprecatedParseURL
        https://bugs.webkit.org/show_bug.cgi?id=45695

        * DOM/WebDOMOperations.mm:
        (-[DOMDocument webFrame]): Get rid of unneeded local variable.
        (-[DOMDocument URLWithAttributeString:]): Remove unhelpful comment.

2010-09-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Paste should be implemented in WebCore like Copy and Cut for Mac also.
        https://bugs.webkit.org/show_bug.cgi?id=45494
        <rdar://problem/7660537>

        On the Mac platform, the implementation of the paste operation is all done
        at the WebKit level. In order to support it on WebKit2 it is necessary to
        refactor the code and move this functionality at the level of WebCore like
        we already have on Windows.
        The original code relies on some in AppKit functions that call back into
        WebKit causing problems in WebKit2. All this functionality has been moved
        at the level of the editor client where it can be dealt with appropriately.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (excludedElementsForAttributedStringConversion):
        (WebEditorClient::documentFragmentFromAttributedString): Added.
        (WebEditorClient::setInsertionPasteboard):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canShowMIMETypeAsHTML): Re-implemented at the level
        of the editor client.
        * WebView/WebHTMLView.mm: Removed paste method.

2010-09-13  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=45677
        [WebView canMarkAllTextMatches] can crash if called after [WebView close]
        
        <rdar://problem/8404890>

        * WebView/WebView.mm:
        (-[WebView canMarkAllTextMatches]):
        Return NO immediately if the webview has already been closed. This was an overlooked
        case from the fix for 45175.

2010-09-10  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Chromium] Implement textInputController.hasSpellingMarker() for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=45441

        Moved the actual logic of hasSpellingMarker into WebCore to share
        it with other ports.

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

2010-09-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Make SecurityOrigin::canDisplay an instance function
        https://bugs.webkit.org/show_bug.cgi?id=45219

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        * Plugins/WebPluginContainerCheck.mm:
        (-[WebPluginContainerCheck _isForbiddenFileLoad]):
        * WebView/WebFrame.mm:
        (-[WebFrame _allowsFollowingLink:]):

2010-09-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove unnecessary constraint in WebCore of choosing either text zoom or full page zoom.
        Precursor to <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45522

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView _setZoomMultiplier:isTextOnly:]):
        (-[WebView _realZoomMultiplierIsTextOnly]):
        * WebView/WebViewData.h:
        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]):
        Move tracking of text only zoom here from WebCore.

2010-09-10  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Alexey Proskuryakov.

        Refactor JavaScriptCore memory statistics so that WebKit doesn't need to know about the JIT and
        other implementation details of JavaScriptCore.  Necessary to fix PPC build.
        
        https://bugs.webkit.org/show_bug.cgi?id=45528

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]):

2010-09-10  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Move some Dashboard stuff from WebCore to WebKit along with a bit more FrameMac cleanup
        https://bugs.webkit.org/show_bug.cgi?id=45582

        * MigrateHeaders.make: Removed WebDashboardRegion.h from the set of header to copy.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::dashboardRegionsChanged): Changed this to call
        -[WebView _dashboardRegions] so we don't have two copies of that code.

        * WebView/WebDashboardRegion.h: Copied from WebCore/page/mac/WebDashboardRegion.h.
        * WebView/WebDashboardRegion.mm: Copied from WebCore/page/mac/WebDashboardRegion.m.

        * WebView/WebView.mm:
        (-[WebView _dashboardRegions]): Moved the code from Frame::dashboardRegions here.

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Move code from WebKit-layer to DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=45569

        This code is the most confused, but now should be a bit cleaner.
        There's still a magical fake-setting for creating renderers that needs
        to be cleaned up, but we can do that in a separate patch.

        * WebView/WebFrame.mm:
        (-[WebFrame _commitData:]):
        * WebView/WebFrameInternal.h:
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation receivedData:withDataSource:]):
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):

2010-09-09  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions from Frame to SelectionController as planned
        https://bugs.webkit.org/show_bug.cgi?id=45508

        * WebView/WebFrame.mm:
        (-[WebFrame _selectionGranularity]):
        (-[WebFrame _insertParagraphSeparatorInQuotedContent]):
        (-[WebFrame _typingStyle]):
        (-[WebFrame _replaceSelectionWithFragment:selectReplacement:smartReplace:matchStyle:]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation currentForm]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView jumpToSelection:]):
        (-[WebHTMLView centerSelectionInVisibleArea:]):
        (-[WebHTMLView _canSmartCopyOrDelete]):
        (-[WebHTMLView _lookUpInDictionaryFromMenu:]):
        (-[WebHTMLView selectionRect]):
        (-[WebHTMLView selectionTextRects]):
        (-[WebHTMLView selectionImageRect]):
        * WebView/WebView.mm:
        (-[WebView setEditable:]):
        Call functions on selection().

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Main resource bytes shouldn't bounce through FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=45496

        Now return the bytes to the DocumentLoader.

        Previously, we were checking the document for null.  However, Frame can
        never have a null document, so this check is no longer needed.

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

2010-09-09  John Therrell  <jtherrell@apple.com>

        Reviewed by Alexey Proskuryakov.

        Added statistics sampling and reporting for JavaScriptCore's RegisterFile and ExecutableAllocator classes
        https://bugs.webkit.org/show_bug.cgi?id=45134

        Added ability to enable new JavaScriptCore statistics sampling and reporting for RegisterFile 
        and ExecutableAllocator classes. Added reporting of JavaScriptCore's stack committed memory 
        and JIT code committed memory statistics to WebCoreStatistics memoryStatistics.

        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]):
        Added statistics reporting for JSC RegisterFile and ExecutableAllocator.

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

        Reviewed by Mark Rowe.

        Use of ENABLE macro in WebUIDelegatePrivate.h breaks use from outside WebKit
        <rdar://problem/8412657>

        * WebView/WebUIDelegatePrivate.h: Use ENABLE_FULLSCREEN_API instead of ENABLE(FULLSCREEN_API)

2010-09-08  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions from Frame to Editor as planned
        https://bugs.webkit.org/show_bug.cgi?id=45218

        * WebView/WebFrame.mm:
        (-[WebFrame _selectedString]):
        (-[WebFrame _firstRectForDOMRange:]):
        (-[WebFrame _markDOMRange]):
        (-[WebFrame _setTypingStyle:withUndoAction:]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation finishedLoadingWithDataSource:]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _selectionStartFontAttributesAsRTF]):
        (-[WebHTMLView toggleBaseWritingDirection:]):
        (-[WebHTMLView searchFor:direction:caseSensitive:wrap:startInSelection:]):
        (-[WebHTMLView countMatchesForText:caseSensitive:limit:markMatches:]):
        (-[WebHTMLView setMarkedTextMatchesAreHighlighted:]):
        (-[WebHTMLView markedTextMatchesAreHighlighted]):
        * WebView/WebView.mm:
        (-[WebView setEditable:]):
        Changed call sites to use editor().

2010-09-08  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        spellcheck does not check pasted text
        https://bugs.webkit.org/show_bug.cgi?id=40092

        Implemented async spell-check APIs on WebEditorClient.
        The implementations are using [NSSpellChecker requestCheckingOfString]
        which is available only on Mac OS 10.6 or later.
        
        Note that [NSSpellChecker requestCheckingOfString] could invoke
        the callback block on on of their worker thread, so we need to
        return the result to the main thread where WebCore is running.
        For that purpose, we made WebEditorSpellCheckResponder class.
        
        Test: editing/spelling/spellcheck-pasted-text-001.html
        
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::isAsynchronousSpellCheckingEnabled): Added.
        (-[WebEditorSpellCheckResponder initWithSender:WebCore::sequence:results:]): Added.
        (-[WebEditorSpellCheckResponder perform]): Added.
        (WebEditorClient::requestCheckingOfString): Added.
        * WebView/WebFramePrivate.h:

2010-09-08  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        spelling underline gets lost on backspace
        https://bugs.webkit.org/show_bug.cgi?id=41423

        Switched to use a anchorNode of the selection instead of a focused
        node for finer control of node selection in spellingNode():
        With the focused node, we cannot select other nodes but the first
        child of that node. In some case, we need to inspect these.

        The API is only for LayoutTests, and the change is compatible for
        existing test cases.
        
        * WebView/WebFrame.mm:
        (spellingNode):

2010-09-08  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Rename DocLoader to CachedResourceLoader because that's what it does.

        * WebView/WebFrame.mm:

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

        Reviewed by Oliver Hunt.

        Fix clang++ build.

        * Misc/WebLocalizableStrings.h:
        Fix a struct/tag mismatch.

        * WebView/WebDeviceOrientationProviderMock.mm:
        (-[WebDeviceOrientationProviderMock init]):
        Remove stray semicolon.

        * WebView/WebViewData.h:
        Remove unused class forward declaration.

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

        Reviewed by Darin Adler.

        <rdar://problem/8381749> -Wcast-align warning emitted when building with clang

        Remove the -Wcast-align-warning since it isn't really useful, and clang is more aggressive about warning than gcc.
        
        * Configurations/Base.xcconfig:

2010-09-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Rename SecurityOrigin::canLoad to canDisplay
        https://bugs.webkit.org/show_bug.cgi?id=45214

        Propagate name change.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::loadRequest):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::WebNetscapePluginStream):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView loadRequest:inTarget:withNotifyData:sendNotification:]):
        * Plugins/WebPluginContainerCheck.mm:
        (-[WebPluginContainerCheck _isForbiddenFileLoad]):
        * WebView/WebFrame.mm:
        (-[WebFrame _allowsFollowingLink:]):

2010-09-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Add Mac's specific implementation of FrameNetworkingContext.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        * WebCoreSupport/WebFrameNetworkingContext.mm:
        (WebFrameNetworkingContext::needsSiteSpecificQuirks):
        (WebFrameNetworkingContext::localFileContentSniffingEnabled):
        (WebFrameNetworkingContext::scheduledRunLoopPairs):
        (WebFrameNetworkingContext::blockedError):

2010-09-03  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.
        
        https://bugs.webkit.org/show_bug.cgi?id=45175
        [WebView unmarkAllTextMatches] will crash if the webview is already closed

        Made this and related methods robust against being called when the WebView is closed.

        * WebView/WebView.mm:
        (-[WebView markAllMatchesForText:caseSensitive:highlight:limit:]):
        Bail out if the WebView is closed.
        (-[WebView countMatchesForText:caseSensitive:highlight:limit:markMatches:]):
        Ditto.
        (-[WebView unmarkAllTextMatches]):
        Ditto.
        (-[WebView rectsForTextMatches]):
        Ditto.

2010-09-03  Hironori Bono  <hbono@chromium.org>

        Reviewed by Kent Tamura.

        Adds textInputController.hasSpellingMarker() to avoid using pixel tests for spellchecking tests
        and implements it for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=41832

        * WebView/WebFrame.mm: Implemented [WebFrame hasSpellingMarker:length:].
        (spellingNode):
        (-[WebFrame hasSpellingMarker:length:]):
        * WebView/WebFramePrivate.h: Added [WebFrame hasSpellingMarker:length:] so TextInputController can use it.

2010-09-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView:]):

2010-09-02  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Hook up LayoutTestController.setMockDeviceOrientation() on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=43181

        This patch hooks up the mock device orientation client on Mac for use
        in DumpRenderTree.

        The patch adds a new WebDeviceOrientationClient for Mac. This client acts
        as a proxy to either a real or mock device orientation provider, both of
        which implement a new WebDeviceOrientationProvider interface.

        The provider is created by the embedder and passed to the WebView, from
        where WebDeviceOrientationClient can access it.

        The mock provider, WebDeviceOrientationProviderMock, is a wrapper around
        the existing WebCore mock.

        * WebCoreSupport/WebDeviceOrientationClient.h: Added.
        * WebCoreSupport/WebDeviceOrientationClient.mm: Added.
        (WebDeviceOrientationClient::WebDeviceOrientationClient):
        (WebDeviceOrientationClient::setController):
        (WebDeviceOrientationClient::startUpdating):
        (WebDeviceOrientationClient::stopUpdating):
        (WebDeviceOrientationClient::lastOrientation):
        * WebKit.exp:
        * WebView/WebDeviceOrientation.h: Added.
        * WebView/WebDeviceOrientation.mm: Added.
        (-[WebDeviceOrientation initWithCoreDeviceOrientation:WebCore::]):
        (core):
        (-[WebDeviceOrientation initWithCanProvideAlpha:alpha:canProvideBeta:beta:canProvideGamma:gamma:]):
        (-[WebDeviceOrientation dealloc]):
        * WebView/WebDeviceOrientationInternal.h: Added.
        * WebView/WebDeviceOrientationProvider.h: Added.
        * WebView/WebDeviceOrientationProviderMock.h: Added.
        * WebView/WebDeviceOrientationProviderMock.mm: Added.
        (-[WebDeviceOrientationProviderMockInternal setOrientation:]):
        (-[WebDeviceOrientationProviderMockInternal setController:]):
        (-[WebDeviceOrientationProviderMockInternal startUpdating]):
        (-[WebDeviceOrientationProviderMockInternal stopUpdating]):
        (-[WebDeviceOrientationProviderMockInternal lastOrientation]):
        (-[WebDeviceOrientationProviderMock init]):
        (-[WebDeviceOrientationProviderMock dealloc]):
        (-[WebDeviceOrientationProviderMock setOrientation:]):
        (-[WebDeviceOrientationProviderMock setController:]):
        (-[WebDeviceOrientationProviderMock startUpdating]):
        (-[WebDeviceOrientationProviderMock stopUpdating]):
        (-[WebDeviceOrientationProviderMock lastOrientation]):
        * WebView/WebDeviceOrientationProviderMockInternal.h: Added.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _setDeviceOrientationProvider:]):
        (-[WebView _deviceOrientationProvider]):
        * WebView/WebViewData.h:
        * WebView/WebViewPrivate.h:

2010-09-01  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Add support for autocorrection UI on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=44958
        <rdar://problem/7326847>

        See detailed high level description in WebCore/ChangeLog.

        * WebCoreSupport/WebEditorClient.h: Added new member methods declared in
          EditorClient. Added m_correctionPanelTag to store the ID of current autocorrection UI object.

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::WebEditorClient): Initialize m_correctionPanelTag.
        (WebEditorClient::~WebEditorClient): Make sure the autocorrection UI is
          dismissed before destroying the object.
        (WebEditorClient::respondToChangedSelection): Dismiss autocorrection UI whenever the selection changes.
        (WebEditorClient::showCorrectionPanel): Show autocorrection UI.
        (WebEditorClient::dismissCorrectionPanel): Dismiss autocorrection UI.

2010-09-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/8374711> WebKit needs to compile without access to QuickDraw private headers.

        * Carbon/HIViewAdapter.m:
        * Carbon/HIWebView.mm:
        * Misc/QuickDrawCompatibility.h: Added.
        * Plugins/WebNetscapePluginView.mm:

2010-08-31  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=44863, disentangle style recalc from layout, so that
        the former can occur in more places without having to do the latter.

        Eliminate Mac-specific code for style re-application and recursive layout/style updating in 
        favor of the cross-platform code that all the other ports use.

        * Carbon/HIWebView.mm:
        (Draw):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::forceLayout):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _propagateDirtyRectsToOpaqueAncestors]):
        (-[WebHTMLView viewWillDraw]):
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        (-[WebHTMLView _recursiveDisplayAllDirtyWithLockFocus:visRect:]):
        (-[WebHTMLView _recursive:displayRectIgnoringOpacity:inContext:topView:]):
        (-[WebHTMLView reapplyStyles]):
        (-[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:]):
        (-[WebHTMLView setNeedsToApplyStyles:]):
        (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:paginateScreenContent:]):
        (-[WebHTMLView _layoutIfNeeded]):
        (-[WebHTMLView _web_updateLayoutAndStyleIfNeededRecursive]):
        * WebView/WebHTMLViewInternal.h:
        * WebView/WebView.mm:
        (-[WebView _viewWillDrawInternal]):

2010-08-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add ability to count text matches without marking
        https://bugs.webkit.org/show_bug.cgi?id=43996

        Safari needs to be able to count text matches without triggering lots of repainting.
        Rename markAllMatchesForText: to countMatchesForText: and add a markMatches:
        parameter.  For backwards compatibility markAllMatchesForText: calls
        countMatchesForText: and passes YES for markMatches:.

        * WebView/WebDocumentInternal.h:
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView markAllMatchesForText:caseSensitive:limit:]):
        (-[WebHTMLView countMatchesForText:caseSensitive:limit:markMatches:]):
        * WebView/WebPDFView.mm:
        (-[WebPDFView markAllMatchesForText:caseSensitive:limit:]):
        (-[WebPDFView countMatchesForText:caseSensitive:limit:markMatches:]):
        * WebView/WebView.mm:
        (-[WebView markAllMatchesForText:caseSensitive:highlight:limit:]):
        (-[WebView countMatchesForText:caseSensitive:highlight:limit:markMatches:]):
        * WebView/WebViewPrivate.h:

2010-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        * WebInspector/WebInspectorFrontend.mm:
        (-[WebInspectorFrontend initWithFrontendClient:]): Remove a stray semicolon.

2010-08-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8369736> WebKit build fails.

        Temporarily add some extra includes in order to get things building again until <rdar://problem/8374711> is addressed.

        * Carbon/HIViewAdapter.m:
        * Carbon/HIWebView.mm:
        * Plugins/WebNetscapePluginView.mm:

2010-08-30  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r66156): Sites using AppleConnect for authentication fail to log in.
        https://bugs.webkit.org/show_bug.cgi?id=44865

        After http://trac.webkit.org/changeset/66156, sites using the AppleConnect plug-in
        for authentication fail to log in. This is due to a bug in AppleConnect that r66156
        exposed, but since this will have a significant impact on users of WebKit nightly
        builds, a plugin-specific hack should be added while the underlying issue is being
        addressed.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Convert plug-in parameter names to lowercase
        if the plugin is of type 'application/x-snkp'.

2010-08-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        text/plain non-video files cause <video> to hang (while reading them?)
        https://bugs.webkit.org/show_bug.cgi?id=44212
        
        Add the new WebKitSystemInterface function WKQTMovieDisableComponent to
        the initialization routine.

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize WKQTMovieDisableComponent.

2010-08-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66198.
        http://trac.webkit.org/changeset/66198
        https://bugs.webkit.org/show_bug.cgi?id=44856

        It made tests crash on Qt bot (Requested by Ossy_ on #webkit).

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

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

        Reviewed by Sam Weinig.

        Make an internal method used by Apple Mail into SPI
        https://bugs.webkit.org/show_bug.cgi?id=44832
        rdar://problem/5748951

        * WebView/WebFrame.mm:
        (-[WebFrame _smartInsertForString:replacingRange:beforeString:afterString:]): Moved this method
        from the internal section to the private section.
        * WebView/WebFrameInternal.h: Moved the method declaration out of here.
        * WebView/WebFramePrivate.h: Moved the method declaration in here.

2010-08-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Add JavaScript API to allow a page to go fullscreen.
        rdar://problem/6867795

        Added chrome client overrides which support entering and exiting full screen.  A new preference has
        been added (setFullScreenEnabled:) to control at runtime whether full screen support is enabled 
        (defaults to disabled).  Added a new WebKitFullScreenListener callback object which notifies WebCore
        when the chrome has started/finished its full screen animation.

        * Configurations/FeatureDefines.xcconfig:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::supportsFullscreenForElement):
        (WebChromeClient::enterFullscreenForElement):
        (WebChromeClient::exitFullscreenForElement):
        (-[WebKitFullScreenListener initWithElement:]):
        (-[WebKitFullScreenListener webkitWillEnterFullScreen]):
        (-[WebKitFullScreenListener webkitDidEnterFullScreen]):
        (-[WebKitFullScreenListener webkitWillExitFullScreen]):
        (-[WebKitFullScreenListener webkitDidExitFullScreen]):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences setFullScreenEnabled:]):
        (-[WebPreferences fullScreenEnabled]):
        * WebView/WebUIDelegatePrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-08-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=44788, implement HTML5-compliant doctype switching.

        Rename the various modes to match the HTML5 specification:
            ParseMode -> CompatibilityMode
            CompatMode -> QuirksMode
            AlmostStrictMode -> LimitedQuirksMode
            StrictMode -> NoQuirksMode
            
        Remove the htmlHacks() accessor from RenderStyle and make rendering code just go to the document
        instead.  This makes switching modes avoid forcing all RenderStyles to detect as changed.
        
        Clean up user stylesheets to minimize style recalculation when the mode is switched.
        
        Fix bugs with the propagation of correct modes in the HTML5 parser.  Make sure the
        dummy document created for fragment parsing properly inherits the real document's CompatibilityMode.
        Make sure the tree builder properly changes the insertion mode to "BeforeHTML" after handling
        a doctype token.
        
        determineParseMode -> setCompatibilityModeFromDoctype, and it now implements the HTML5 algorithm
        precisely.

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

2010-08-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView:]):

2010-08-26  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Revert r66103 since Qt tests are failing.

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

2010-08-26  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController destroyInspectorView:]):

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove HTML5 parser testing infrastructure now that we don't need it
        https://bugs.webkit.org/show_bug.cgi?id=44581

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

2010-08-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Paste event fires twice for mac WebKit
        <rdar://problem/8094611>
        https://bugs.webkit.org/show_bug.cgi?id=44535

        The mac implementation of paste in WebKit was accidentally calling 
        Editor::tryDHTMLPaste twice, once in -[WebHTMLView paste:] and once
        in Editor::pasteAsPlainText (which is called -[WebHTMLView paste:]).
        Use the new pasteAsPlainTextBypassingDHTML function to bypass the
        second call.

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

2010-08-24  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Generate drag images for HTML elements and selections.
        https://bugs.webkit.org/show_bug.cgi?id=43449

        Fix up calls to Frame::nodeImage, which has a new signature.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView halt]):

2010-08-23  Mike Thole  <mthole@apple.com>

        Reviewed by Dan Bernstein.

        WebPDFView should remove itself as the delegate of its PDFView before being dealloced
        https://bugs.webkit.org/show_bug.cgi?id=44441

        * WebView/WebPDFView.mm:
        (-[WebPDFView dealloc]): Set the PDFView's delegate to nil.

2010-08-22  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

        Encapsulate document marker management into DocumentMarkerController
        https://bugs.webkit.org/show_bug.cgi?id=44383

        Modify call sites in the Apple Mac port to use DocumentMarkerController.

        No functionality was changed, so no new tests.

        * WebView/WebFrame.mm:
        (-[WebFrame _unmarkAllBadGrammar]):
        (-[WebFrame _unmarkAllMisspellings]):
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView unmarkAllTextMatches]):
        (-[WebHTMLView rectsForTextMatches]):

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/44285> Fix compilation with NETSCAPE_PLUGIN_API disabled

        Reviewed by Joseph Pecoraro.

        * Plugins/Hosted/HostedNetscapePluginStream.mm: Changed
        USE(PLUGIN_HOST_PROCESS) to
        USE(PLUGIN_HOST_PROCESS) && ENABLE(NETSCAPE_PLUGIN_API).
        * Plugins/Hosted/NetscapePluginHostManager.mm: Ditto.
        * Plugins/Hosted/NetscapePluginHostProxy.mm: Ditto.
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm: Ditto.
        * Plugins/Hosted/ProxyInstance.mm: Ditto.
        * Plugins/Hosted/WebHostedNetscapePluginView.mm: Ditto.
        * WebCoreSupport/WebChromeClient.mm: Ditto.
        (WebChromeClient::createWindow):
        * WebCoreSupport/WebFrameLoaderClient.mm: Ditto.
        (WebFrameLoaderClient::dispatchCreatePage):
        * WebView/WebHTMLView.mm:
        (needsCursorRectsSupportAtPoint): Added #if
        ENABLE(NETSCAPE_PLUGIN_API) and #endif macros as needed.
        * WebView/WebView.mm:
        (+[WebView _isNodeHaltedPlugin:]): Ditto.
        (+[WebView _hasPluginForNodeBeenHalted:]): Ditto.
        (+[WebView _restartHaltedPluginForNode:]): Ditto.

2010-08-17  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Preparation: Just add the files to the build system.

        * WebCoreSupport/WebFrameNetworkingContext.h: Added.
        Placeholder with tentative code that might be changed when landing
        the rest of it.
        * WebCoreSupport/WebFrameNetworkingContext.mm: Added.
        Empty placeholder for now.

2010-08-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Navigating back/forward during a modal dialog causes a crash when the modal dialog is dismissed.
        <rdar://problem/8313579> and https://bugs.webkit.org/show_bug.cgi?id=44131

        * WebView/WebView.mm:
        (-[WebView canGoBack]): Return false if loads are deferred.
        (-[WebView canGoForward]): Ditto.

2010-08-14  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: -[WebInspector attach] and detach should work
        https://bugs.webkit.org/show_bug.cgi?id=43924

        For actions that relate only to the Web Inspector's Frontend
        window (actions on the InspectorFrontendClient) the new Obj-C
        wrapper class WebInspectorFrontend can be used. For now, this
        is just attach and detach.

        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::openInspectorFrontend): setup and attach the WebInspectorFrontend to the WebInspector.
        * WebInspector/WebInspector.h:
        * WebInspector/WebInspector.mm:
        (-[WebInspector dealloc]):
        (-[WebInspector attach:]): delegate to the frontend.
        (-[WebInspector detach:]): delegate to the frontend.
        (-[WebInspector setFrontend:]):
        * WebInspector/WebInspectorFrontend.h: Added.
        * WebInspector/WebInspectorFrontend.mm: Added.
        (-[WebInspectorFrontend initWithFrontendClient:]):
        (-[WebInspectorFrontend attach]):
        (-[WebInspectorFrontend detach]):
        * WebInspector/WebInspectorPrivate.h:

2010-08-13  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.
        Switch String::/UString::ascii() to return a CString.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):

2010-08-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

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

2010-08-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65295.
        http://trac.webkit.org/changeset/65295
        https://bugs.webkit.org/show_bug.cgi?id=43950

        It broke 4 sputnik tests (Requested by Ossy on #webkit).

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

2010-08-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

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

2010-08-12  Jeremy Orlow  <jorlow@chromium.org>

        Revert for now
        https://bugs.webkit.org/show_bug.cgi?id=43794 

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _preferencesChangedNotification:]):

2010-08-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        Some settings are linked to the PageGroup not the Page.  Create a new class for those.
        https://bugs.webkit.org/show_bug.cgi?id=43794

        Change WebView to use the new GroupSettings class rather than Settings for the
        settings that moved.  This is sub-optimal since the settings aren't really
        per-view, but we can't really change the API at this point.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _preferencesChangedNotification:]):

2010-08-11  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamps by Darin Adler & Sam Weinig.

        Bug 43867 - Some UString cleanup

        Change JSC::UString data(), size(), and from(), to characters(), length(), and number() to match WTF::String.
        Move string concatenation methods to a new header to simplify down UString.h.  Remove is8Bit().

        * WebView/WebScriptDebugger.mm:
        (toNSString):

2010-08-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=43806, add ability to paginate screen content.
        
        Add SPI for entering and exiting screen pagination mode.  This is similar to printing mode but it can be done for on-screen
        content.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_setPrintingModeRecursive]):
        (-[WebHTMLView _web_clearPrintingModeRecursive]):
        (-[WebHTMLView _web_setPrintingModeRecursiveAndAdjustViewSize]):
        (-[WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]):
        (-[WebHTMLView _endPrintMode]):
        (-[WebHTMLView _isInScreenPaginationMode]):
        (-[WebHTMLView _beginScreenPaginationModeWithPageSize:shrinkToFit:]):
        (-[WebHTMLView _endScreenPaginationMode]):
        (-[WebHTMLView reapplyStyles]):
        (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:paginateScreenContent:]):
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]):
        (-[WebHTMLView setPageWidthForPrinting:]):
        * WebView/WebHTMLViewPrivate.h:

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Build fix (update more includes)

        * Plugins/Hosted/NetscapePluginHostManager.h:

2010-08-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Add suspendAnimations/resumeAnimation API to DRT
        https://bugs.webkit.org/show_bug.cgi?id=43733
        
        Mac specific API. Plumbs suspendAnimations/resumeAnimations down to WebCore.

        * WebView/WebFrame.mm:
        (-[WebFrame _suspendAnimations]):
        (-[WebFrame _resumeAnimations]):
        * WebView/WebFramePrivate.h:

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43817 - Remove UString::Rep
        UString::Rep has for a long time been replaced by UStringImpl (Rep
        remaining as a typedef).  UStringImpl has since been removed too
        (unified with StringImpl). Remove Rep, rename rep() to impl() and
        m_rep to m_impl.  Also add impl() method to Identifier, and rename
        its UString member from _ustring to m_string.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::methodsNamed):
        (WebKit::ProxyInstance::fieldNamed):

2010-08-06  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/WebBaseNetscapePluginView.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebPluginHalterClient.h:
        * WebView/WebViewInternal.h:

2010-08-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        Pasting should fire textInput event.
        https://bugs.webkit.org/show_bug.cgi?id=42958

        On paste, invoke Editor instead of direct command invocation,
        which allows dispatching events before actual paste.

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

2010-08-06  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by Eric Seidel.

        add "const" to WebChromeClient::webView().
        https://bugs.webkit.org/show_bug.cgi?id=43631

        Change WebChromeClient::webView() to be const because ChromeClient::didReceiveViewportArguments
        is const method now, and calling webView() inside port-specific didReceiveViewportArguments
        implementation fails compiling if webView() is not const.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::webView):

2010-08-06  Jessie Berlin  <jberlin@apple.com>

        Roll out http://trac.webkit.org/changeset/64801, which broke the Safari Windows Build.
        Unreviewed.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/WebBaseNetscapePluginView.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebPluginHalterClient.h:
        * WebView/WebViewInternal.h:

2010-08-05  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Remove Invalid Asserts for Application Cache Quotas
        https://bugs.webkit.org/show_bug.cgi?id=43585

        Removed Invalid ASSERTs that would always happen for quotas
        that were not noQuota().

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

2010-08-05  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/WebBaseNetscapePluginView.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebIconDatabaseClient.h:
        * WebCoreSupport/WebPluginHalterClient.h:
        * WebView/WebViewInternal.h:

2010-08-05  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Unify blob related feature defines to ENABLE(BLOB).
        https://bugs.webkit.org/show_bug.cgi?id=43081

        * Configurations/FeatureDefines.xcconfig:

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 6 - LayoutTest and Cleanup

        * WebCoreSupport/WebApplicationCache.h:
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache setMaximumSize:]): refactor out deleting the application caches.
        (+[WebApplicationCache deleteAllApplicationCaches]): delete application caches.

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 5 - Refactor Quota Management in WebSecurityOrigin into Managers

        Per-Origin quotas exist for Databases and Application Caches. Clients
        given a WebSecurityOrigin have the ability to set the quota for any
        per-origin quota type. This puts quota management into an interface
        and WebSecurityOrigin allows access to quota managers for the
        different types of quotas.

        This also deprecates the old methods on WebSecurityOrigin. They are
        left in for now to prevent breaking older clients.

          The WebQuotaManager interface allows querying and modifying a
          per-origin quota. This is implemented for both Databases and
          Application Caches.

        * Misc/WebQuotaManager.h: Added. Interface for quota management (usage, quota, setQuota).
        * Storage/WebDatabaseQuotaManager.h: Added.
        * Storage/WebDatabaseQuotaManager.mm: Added.
        (-[WebDatabaseQuotaManager origin]):
        (-[WebDatabaseQuotaManager usage]):
        (-[WebDatabaseQuotaManager quota]):
        (-[WebDatabaseQuotaManager setQuota:]):
        * Storage/WebDatabaseSecurityOrigin.h: Removed.
        * Storage/WebDatabaseSecurityOrigin.mm: Removed.
        * WebCoreSupport/WebApplicationCacheQuotaManager.h: Added.
        * WebCoreSupport/WebApplicationCacheQuotaManager.mm: Added.
        (-[WebApplicationCacheQuotaManager origin]):
        (-[WebApplicationCacheQuotaManager usage]):
        (-[WebApplicationCacheQuotaManager quota]):
        (-[WebApplicationCacheQuotaManager setQuota:]):
        * WebCoreSupport/WebSecurityOriginPrivate.h: Added a category to access managers. Deprecated old methods.

          Remove the WebSecurityOrigin sub-classes. Managers are better.

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

          Create the managers lazily. Change old style calls to make use
          of the managers.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::exceededDatabaseQuota):
        (WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin applicationCacheQuotaManager]):
        (-[WebSecurityOrigin databaseQuotaManager]):
        (-[WebSecurityOrigin dealloc]): release the managers if they exist.

2010-08-03  Alex Milowski  <alex@milowski.com>

        Reviewed by Beth Dakin.

        Changed the ENABLE_MATHML value to enable MathML by default.

        * Configurations/FeatureDefines.xcconfig:

2010-08-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Add VisitedLinkStrategy for each platform to implement
        https://bugs.webkit.org/show_bug.cgi?id=43393

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createVisitedLinkStrategy):
        (WebPlatformStrategies::isLinkVisited): Call back into PageGroup's visited links.
        (WebPlatformStrategies::addVisitedLink): Ditto.

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::createPopupMenu):
        (WebChromeClient::createSearchPopupMenu):

2010-08-02  Jeremy Orlow  <jorlow@chromium.org>

        Speculative revert of 64425 due to Chromium instability
        https://bugs.webkit.org/show_bug.cgi?id=43347

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::createPopupMenu):
        (WebChromeClient::createSearchPopupMenu):

2010-07-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64422.
        http://trac.webkit.org/changeset/64422
        https://bugs.webkit.org/show_bug.cgi?id=43304

        Build fixes are needed for Snow Leopard and Windows.
        (Requested by lca on #webkit).

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::createPopupMenu):
        (WebChromeClient::createSearchPopupMenu):

2010-07-31  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/43300> Simplify variables in *.xcconfig files after adding iOS support

        Reviewed by Darin Adler.

        * Configurations/WebKit.xcconfig: Extracted
        PRODUCTION_FRAMEWORKS_DIR and PRODUCTION_ROOT variables.

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

        Reviewed by Darin Adler.

        <rdar://problem/8257783> Short documents may print a second blank page
        https://bugs.webkit.org/show_bug.cgi?id=43271

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _web_setPrintingModeRecursive]): Updated for additional height parameter
        to _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:.
        (-[WebHTMLView _web_clearPrintingModeRecursive]): Ditto.
        (-[WebHTMLView _web_setPrintingModeRecursiveAndAdjustViewSize]): Ditto.
        (-[WebHTMLView _beginPrintModeWithPageWidth:height:shrinkToFit:]): Added height parameter,
        which is scaled and passed on to _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:.
        (-[WebHTMLView _endPrintMode]): Updated for additional height parameter to
        _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:.
        (-[WebHTMLView layoutToMinimumPageWidth:height:maximumPageWidth:adjustingViewSize:]): Added
        height parameter, which is passed on to FrameView::forceLayoutForPagination().
        (-[WebHTMLView layout]): Updated for additional height parameter.
        (-[WebHTMLView _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize:]): Added height
        parameter, which is passed on to -layoutToMinimumPageWidth:height:maximumPageWidth:adjustViewSize:.
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]): Updated for additional height
        parameter.
        (-[WebHTMLView setPageWidthForPrinting:]): Ditto.
        (-[WebHTMLView knowsPageRange:]): Pass the available height on the page on to
        _setPrinting:minimumPageWidth:height:maximumPageWidth:adjustViewSize.
        * WebView/WebHTMLViewPrivate.h: 

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Fix for tests that broke after r64400. Tracking a more
        ideal solution in https://bugs.webkit.org/show_bug.cgi?id=40627

        Switch the interface back to (unsigned long long), and move
        the WebDatabaseSecurityOrigin implementation up into WebSecurityOrigin.
        The subclasses' implementations were not getting called.

        * Storage/WebDatabaseSecurityOrigin.mm:
        * WebCoreSupport/WebApplicationCacheSecurityOrigin.mm:
        (-[WebApplicationCacheSecurityOrigin quota]):
        (-[WebApplicationCacheSecurityOrigin setQuota:]):
        * WebCoreSupport/WebSecurityOrigin.mm:
        (-[WebSecurityOrigin usage]):
        (-[WebSecurityOrigin quota]):
        (-[WebSecurityOrigin setQuota:]):
        * WebCoreSupport/WebSecurityOriginPrivate.h:

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 4 - Client Notification when the Quota is Reached

        Notify the WebKit client when the per-origin quota is reached
        via a delegate method reachedApplicationCacheOriginQuota.

          Refactor the WebSecurityOrigin class to be generic enough to
          allow quota management of both Databases or Application Caches
          via subclasses.

        * Storage/WebDatabaseSecurityOrigin.h: Added.
        * Storage/WebDatabaseSecurityOrigin.mm: Added.
        (-[WebDatabaseSecurityOrigin quota]):
        (-[WebDatabaseSecurityOrigin setQuota:]):
        * WebCoreSupport/WebApplicationCacheSecurityOrigin.h: Added.
        * WebCoreSupport/WebApplicationCacheSecurityOrigin.mm: Added.
        (-[WebApplicationCacheSecurityOrigin quota]):
        (-[WebApplicationCacheSecurityOrigin setQuota:]):
        * Storage/WebSecurityOrigin.mm: Removed. (Moved to WebCoreSupport)
        * Storage/WebSecurityOriginPrivate.h: Removed. (Moved to WebCoreSupport)
        * WebCoreSupport/WebSecurityOrigin.mm: Added.
        (-[WebSecurityOrigin usage]): to be implemented by subclasses.
        (-[WebSecurityOrigin quota]): to be implemented by subclasses.
        (-[WebSecurityOrigin setQuota:]): to be implemented by subclasses.
        * WebCoreSupport/WebSecurityOriginInternal.h: Renamed from WebKit/mac/Storage/WebSecurityOriginInternal.h.
        * WebCoreSupport/WebSecurityOriginPrivate.h: Added.

          Turn the notification into a WebUI Delegate to call. Following
          the example of Databases.

        * DefaultDelegates/WebDefaultUIDelegate.m:
        (-[WebDefaultUIDelegate webView:exceededApplicationCacheOriginQuotaForSecurityOrigin:]):
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::exceededDatabaseQuota): use the Databases Security Origin subclass.
        (WebChromeClient::reachedApplicationCacheOriginQuota): use the Application Cache Security Origin subclass.
        * WebView/WebUIDelegatePrivate.h:

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 1 - Add Total and Per-Origin Quota Preferences.

        Allow the application cache total size to be a preference, and
        add a new preference for the default per-origin quota.

          Storage quotas were int64_t (long long). Boilerplate for
          these types added for consistency.

        * Misc/WebNSDictionaryExtras.h:
        * Misc/WebNSDictionaryExtras.m:
        (-[NSMutableDictionary _webkit_setLongLong:forKey:]):
        * WebCoreSupport/WebApplicationCache.h: setters and accessors for WebCore's cacheStorage.
        * WebCoreSupport/WebApplicationCache.mm:
        (+[WebApplicationCache maximumSize:]):
        (+[WebApplicationCache setMaximumSize:]):
        (+[WebApplicationCache defaultOriginQuota]):
        (+[WebApplicationCache setDefaultOriginQuota:]):
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): defaults to noQuota for both preferences.
        (-[WebPreferences _longLongValueForKey:]):
        (-[WebPreferences _setLongLongValue:forKey:]):
        (-[WebPreferences applicationCacheTotalQuota]):
        (-[WebPreferences setApplicationCacheTotalQuota:]):
        (-[WebPreferences applicationCacheDefaultOriginQuota]):
        (-[WebPreferences setApplicationCacheDefaultOriginQuota:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): respect updates to the preferences.

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

        Reviewed by David Kilzer.

        Add Xcode support for compiling WebKit against iOS SDKs.
        https://bugs.webkit.org/show_bug.cgi?id=42796

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

2010-07-26  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Page clients should be passed to Page constructor via structure of pointers
        https://bugs.webkit.org/show_bug.cgi?id=42834

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2010-07-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Add FILE_SYSTEM build flag for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=42915

        * Configurations/FeatureDefines.xcconfig:

2010-07-27  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Client-based Geolocation does not pass enableHighAccuracy option to controller and client
        https://bugs.webkit.org/show_bug.cgi?id=40374

        Stub out setEnableHighAccuracy method for the Mac port.

        * WebCoreSupport/WebGeolocationControllerClient.h:
        (WebGeolocationControllerClient::setEnableHighAccuracy):

2010-07-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for <rdar://problem/8222626>
        Send textDidChangeInTextField delegate callback only in response to typing or other forms of user text input.

        The function name no longer perfectly matches the behavior, but I didn't want to break any existing clients. Maybe we
        should migrate to a new function name eventually

        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::textDidChangeInTextField):

2010-07-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42836
        Add localized strings stubs for WebKit2.

        - Convert WebKit (mac) to use a LocalizationStrategy rather than the WebCoreViewFactory
          for localized strings.

        Gets us below 200 tests failing in WebKitTestRunner.

        * WebCoreSupport/WebContextMenuClient.mm:
        (fixMenusReceivedFromOldClients): Use LocalizedStrings rather than the factory.
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        * WebCoreSupport/WebViewFactory.mm:

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

        Reviewed by Geoffrey Garen.

        Break out "scheme registration" functionality from SecurityOrigin to a SchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=42783

        * WebView/WebView.mm:
        (+[WebView _registerURLSchemeAsSecure:]):
        (+[WebView registerURLSchemeAsLocal:]):

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

        Reviewed by Anders Carlsson.

        Composited layers don't scroll in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42771

        Prep work: FrameView::scrollPositionChanged() sounds like a generic "did scroll" bottleneck,
        but this is deceiving. It's only every called on one platform (Mac) when the NSScrollView gets
        scrolled, so rename it to FrameView::scrollPositionChangedViaPlatformWidget().

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

2010-07-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Update plug-in proxy backed <video> and <audio> elements.
        https://bugs.webkit.org/show_bug.cgi?id=42770
        <rdar://problem/7963467>

        * Plugins/WebPluginController.h:
        * Plugins/WebPluginController.mm:
        (-[WebPluginController dealloc]): Release _viewsNotInDocument.
        (-[WebPluginController stopAllPlugins]): Stop plug-ins not in the document.
        (-[WebPluginController pluginViewCreated:]): New, add a View (plug-in) to _viewsNotInDocument.
        (+[WebPluginController pluginViewHidden:]): New, remove the view (plug-in) from pluginViews.
        (-[WebPluginController addPlugin:]): Remove the new plug-in from _viewsNotInDocument.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Remove PLUGIN_PROXY_FOR_VIDEO code, the media
        player proxy plug-in should never be allocated by this method.
        (WebFrameLoaderClient::createMediaPlayerProxyPlugin): New, allocate a media player proxy.

        * WebView/WebView.mm:
        (-[WebView _videoProxyPluginForMIMEType:]): New. Identical to _pluginForMIMEType except it doesn't
        consider the arePlugInsEnabled preference.
        * WebView/WebViewInternal.h:


2010-07-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42118
        Disable WebGL on Leopard for now. 

        LayoutTests fail on some graphics hardware on Leopard because one of the features we use,
        GL_ARB_framebuffer_object, is not universally available in Leopard like it is in
        SnowLeopard. This will allow LayoutTests to pass on Leopard until we add logic to use a
        software OpenGL driver on machines without this support.

        * Configurations/FeatureDefines.xcconfig:

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move PluginWidget to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=42530

        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView pluginLayer]):
        Add default pluginLayer implementation.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (PluginWidget::PluginWidget):
        (PluginWidget::invalidateRect):
        Move the guts of PluginWidget here from WebCore.
        
        (NetscapePluginWidget::platformLayer):
        Get the layer from the plug-in view.

2010-07-18  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/42522> Add missing (id) return type to Obj-C methods

        Reviewed by Dan Bernstein.

        * Carbon/CarbonWindowAdapter.mm:
        (-[NSWindow(HIWebFrameView) _initContent:styleMask:backing:defer:contentView:]):
        (-[CarbonWindowAdapter _destroyRealWindow:]):
        (-[CarbonWindowAdapter _clearModalWindowLevel]):
        * Misc/WebIconDatabase.mm:
        (-[WebIconDatabase init]):
        * Misc/WebNSPasteboardExtras.mm:
        (-[NSFilePromiseDragSource initWithSource:]):
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation init]):
        * WebView/WebPreferences.mm:
        (-[WebPreferences init]):
        * WebView/WebView.mm:
        (-[WebView UIDelegate]):
        (-[WebView resourceLoadDelegate]):
        (-[WebView downloadDelegate]):
        (-[WebView policyDelegate]):
        (-[WebView frameLoadDelegate]):

2010-07-16  Zhe Su  <suzhe@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r61484): Broke focus behaviour on Qt and probably other platforms
        https://bugs.webkit.org/show_bug.cgi?id=42253

        Dummy implementation of EditorClient::willSetInputMethodState.

        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebEditorClient.mm:
        (WebEditorClient::willSetInputMethodState):

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

        Reviewed by Sam Weinig.

        Part of <rdar://problem/7233974> Deprecate +[WebView _setShouldUseFontSmoothing:]
        https://bugs.webkit.org/show_bug.cgi?id=29355

        * Misc/WebKitNSStringExtras.h:
        * Misc/WebKitNSStringExtras.mm:
        (-[NSString _web_drawAtPoint:font:textColor:]): Now calls through to
        -_web_drawAtPoint:font:textColor:allowingFontSmoothing: passing YES for the last
        parameter.
        (-[NSString _web_drawAtPoint:font:textColor:allowingFontSmoothing:]): Added
        allowingFontSmoothing:. If font smoothing is not allowed, sets the font smoothing
        mode to antialiased. Otherwise, sets it to auto.
        (-[NSString _web_drawDoubledAtPoint:withTopColor:bottomColor:font:]): Instead of
        changing the font smoothing setting in the graphics context, call
        -_web_drawAtPoint:font:textColor:allowingFontSmoothing: passing NO for the last
        parameter.

2010-07-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove semicolons from Objective-C method declarations.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):
        (+[WebRenderLayer compositingInfoForLayer:]):

2010-07-16  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Make JS memory stats available via 'Performance' object (Web Timing).
        This statistics is populated only if 'WebKitMemoryInfoEnabled'
        preference is set.

        'console.memory' is kept until Web Timing object becomes visible by
        default (currently it is hidden under compile-time flag).  These stats
        are guarded with the same preference.

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

        * WebKit.order:
        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences memoryInfoEnabled]):
        (-[WebPreferences setMemoryInfoEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame printToCGContext:cgContext:pageWidthInPixels:]):

2010-07-15  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        [Mac] Implement LayoutTestController::markerTextForListItem()
        https://bugs.webkit.org/show_bug.cgi?id=37929

        Implements support for markerTextForListItem in the Mac port.

        * DOM/WebDOMOperations.mm:
        (+[DOMElement _DOMElementFromJSContext]): Added.
        (-[DOMElement _markerTextForListItem]): Added.
        * DOM/WebDOMOperationsPrivate.h:

2010-07-14  Simon Fraser  <simon.fraser@apple.com>

        Fix non-ACCELERATED_COMPOSITING build.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer compositingInfoForLayer:]):

2010-07-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/8186963> Expose information about compositing layers.

        Use RenderLayerBacking::compositingLayerType() to add more information about compositing to
        WebRenderLayer, via a compositingInfo property. Also show element classnames.
        
        Also add separator items between the various z-order lists.
        
        * WebView/WebRenderLayer.h:
        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):
        (+[WebRenderLayer compositingInfoForLayer:]):
        (-[WebRenderLayer initWithRenderLayer:]):
        (-[WebRenderLayer initWithName:]):
        (-[WebRenderLayer initWithWebFrame:]):
        (-[WebRenderLayer dealloc]):
        (-[WebRenderLayer buildDescendantLayers:]):
        (-[WebRenderLayer compositingInfo]):
        (-[WebRenderLayer isComposited]):
        (-[WebRenderLayer isSeparator]):

2010-07-14  Darin Adler  <darin@apple.com>

        Another try at fixing the Tiger build.

        Avoid non-ASCII in source files to keep Tiger compiler happy.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]): Use %C for the non-ASCII characters.

2010-07-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42232
        Make changing Cursors work in WebKit2.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::setCursor):
        * WebView/WebView.mm:
        Implement cursor changing at the WebKit level for the sake of WebKit2.
        This functionality is being moved from WidgetMac.mm.
        (+[WebView _pointingHandCursor]):
        Update to use platformCursor() instead of impl().

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

        Fix Tiger build.

        Avoid non-ASCII in souce files to keep Tiger compiler happy.

        * WebView/WebRenderLayer.mm:
        (+[WebRenderLayer nameForLayer:]):

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

        Reviewed by Dan Bernstein.

        <rdar://problem/8186963> Expose RenderLayer hierarchy via Obj-C for debugging.

        Add a WebRenderLayer class that reflects the RenderLayer tree into a hierarchy
        of Objective-C objects suitable for display in an outline view.
        
        * WebKit.exp: Export the WebRenderLayer Objective-C class.
        * WebView/WebRenderLayer.h: Added.
        * WebView/WebRenderLayer.mm: Added.

2010-07-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Darin Adler.

        Prevent assertion/duplicate loads for non-deferred subtitute-data loads

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

        MainResourceLoader uses the member m_initialRequest to store requests for future
        deferred loads. When doing the actual load in handleDataLoadNow(), we therefore
        have to clear this request so that subsequent entries into the loader will not
        start yet another load.

        This can happen as a result of a PageGroupLoadDeferrer going out of scope when
        returning from Chrome::runJavaScriptAlert(), which calls setDeferredLoading(false),
        but only in the case of using both substitute-data and non-deferred main resource
        load together. That's why two new DRT functions were added:

         * queueLoadHTMLString()
         * setDeferMainResourceLoad()

        The change adds DRT hooks for Mac, Win and Qt for these two functions. For Mac
        and Win the hook uses new SPI in WebDataSource. For Qt a new static member was
        added to the FrameLoaderClientQt and accessed though DumpRenderTreeSupportQt.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _setDeferMainResourceDataLoad:]):
        * WebView/WebDataSourcePrivate.h:

2010-07-13  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Xan Lopez.

        Updated the copyright headers of the files modified in r62476.

        * WebView/WebView.mm:
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

2010-07-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=13075
        XMLHttpRequest with failed authentication should set status to 401

        https://bugs.webkit.org/show_bug.cgi?id=6871
        <rdar://problem/3363403> 401 error page is never shown

        * Panels/WebPanelAuthenticationHandler.m:
        (-[WebPanelAuthenticationHandler startAuthentication:window:]): Updated a comment - this
        code cancels loading, not authentication (canceling authentication means telling to
        continue without credentials).
        (-[WebPanelAuthenticationHandler _authenticationDoneWithChallenge:result:]): If there were
        no credentials provided, tell to continue without any. There may be alternative content
        returned with 401.

2010-07-09  Leon Clarke  <leonclarke@google.com>

        Reviewed by Adam Barth.

        add support for link prefetching
        https://bugs.webkit.org/show_bug.cgi?id=3652

        * Configurations/FeatureDefines.xcconfig:

2010-07-08  Aaron Boodman  <aa@chromium.org>

        Reviewed by Timothy Hatcher.

        Add the ability for user scripts and user styles to affect just the top frame.

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

        * WebView/WebView.mm:
        (+[WebView _addUserScriptToGroup:world:source:url:whitelist:blacklist:injectionTime:]):
        (+[WebView _addUserScriptToGroup:world:source:url:whitelist:blacklist:injectionTime:injectedFrames:]):
        (+[WebView _addUserStyleSheetToGroup:world:source:url:whitelist:blacklist:]):
        (+[WebView _addUserStyleSheetToGroup:world:source:url:whitelist:blacklist:injectedFrames:]):
        * WebView/WebViewPrivate.h:

2010-07-08  Adele Peterson  <adele@apple.com>

        Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=41721
        <rdar://problem/8158561> Missing plug-in indicator should have a pressed state

        Implement shouldMissingPluginMessageBeButton.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::shouldMissingPluginMessageBeButton):

2010-07-08  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/8136327> - Crash in Entourage calling WebCache method from background thread

        * Misc/WebCache.mm:
        (+[WebCache setDisabled:]): Forward the call to the main thread if called from a background thread.

        * Misc/WebNSObjectExtras.h:
        * Misc/WebNSObjectExtras.mm:
        (+[NSObject _webkit_invokeOnMainThread]): Add a class version of the main thread invoker.

2010-07-08  Mike Thole  <mthole@apple.com>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41896
        Crash under allScriptsInPDFDocument() in WebPDFDocumentExtras.mm for certain PDFs

        * WebView/WebPDFDocumentExtras.mm:
        (allScriptsInPDFDocument): Null-check 'data', as CGPDFStreamCopyData() may have returned 0.

2010-07-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41826
        Convert BackForwardList to an abstract base class and add BackForwardListImpl
        as the concrete implementation of it.

        * History/WebBackForwardList.mm:
        (-[WebBackForwardList init]):
        (-[WebBackForwardList setPageCacheSize:]):
        (-[WebBackForwardList pageCacheSize]):

2010-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
        Add basic piping for BackForwardControllerClient.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Change requestURL to a KURL.
        https://bugs.webkit.org/show_bug.cgi?id=41775

        * Plugins/WebNetscapePluginStream.h:
        (WebNetscapePluginStream::setRequestURL):
        * Plugins/WebNetscapePluginStream.mm:
        (WebNetscapePluginStream::pluginCancelledConnectionError):
        (WebNetscapePluginStream::errorForReason):
        (WebNetscapePluginStream::startStream):
        (WebNetscapePluginStream::didReceiveResponse):
        (WebNetscapePluginStream::destroyStream):

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Rename the WebBaseNetscapePluginStream.cpp and .h files to WebNetscapePluginStream.cpp and .h to match the class name.

        * Plugins/WebNetscapePluginStream.h: Renamed from WebKit/mac/Plugins/WebBaseNetscapePluginStream.h.
        * Plugins/WebNetscapePluginStream.mm: Renamed from WebKit/mac/Plugins/WebBaseNetscapePluginStream.mm.

2010-07-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Simon Fraser.

        Expose URL matching from WebUserContentURLPattern
        https://bugs.webkit.org/show_bug.cgi?id=41726
        <rdar://problem/7910144>

        We previously had a way to construct WebUserContentURLPattern
        instances via WebKit, but no way for callers to perform matching.
        This patch adds the matchesURL functionality to allow for this.

        * Misc/WebUserContentURLPattern.h: Added matchesURL.
        * Misc/WebUserContentURLPattern.mm:
        (-[WebUserContentURLPattern matchesURL:]): Added. Calls through to WebCore::UserContentURLPattern::matches.

2010-06-23  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] on Mac OS use a runloop observer to process the glib context iterations
        https://bugs.webkit.org/show_bug.cgi?id=35747

        If VIDEO and GSTREAMER are enabled, make the WebView start a
        runloop observer that will trigger the glib main context
        iterations. Those are needed by the GStreamer player only at the
        moment but could later be used for other GLib-dependant components
        if required.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _close]):
        (-[WebView _clearGlibLoopObserver]):
        (glibContextIterationCallback):
        (-[WebView _scheduleGlibContextIterations]):
        * WebView/WebViewData.h:
        * WebView/WebViewInternal.h:

2010-07-03  Jon Honeycutt  <jhoneycutt@apple.com>

        The missing plug-in indicator should be clickable

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

        From an original patch by Kevin Decker.

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.h:
        Declare an override of missingPluginButtonClicked().

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::missingPluginButtonClicked):
        Call the UIDelegate's method.

        * WebView/WebUIDelegatePrivate.h:
        Declare didPressMissingPluginButton.

2010-07-01  Timothy Hatcher  <timothy@apple.com>

        Provide a WebView preference to disable DNS prefetching.

        https://bugs.webkit.org/show_bug.cgi?id=28825
        rdar://problem/7181249

        Reviewed by Darin Adler.

        * WebView/WebPreferenceKeysPrivate.h: Added WebKitDNSPrefetchingEnabledPreferenceKey.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Set WebKitDNSPrefetchingEnabledPreferenceKey to YES.
        (-[WebPreferences isDNSPrefetchingEnabled]): Added. Return WebKitDNSPrefetchingEnabledPreferenceKey's value.
        (-[WebPreferences setDNSPrefetchingEnabled:]): Added. Set WebKitDNSPrefetchingEnabledPreferenceKey's value.
        * WebView/WebPreferencesPrivate.h: Added isDNSPrefetchingEnabled and setDNSPrefetchingEnabled:.
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Call WebCore::Settings::setDNSPrefetchingEnabled.

2010-07-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8148656> <https://bugs.webkit.org/show_bug.cgi?id=41431>
        REGRESSION (r49411): Various crashes due to JavaScript execution during plug-in destruction

        Strengthen m_inDestroy "swipe under the carpet" fix.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h: Added a long comment about m_inDestroy, and
        changed it to static.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy): m_inDestroy is now
        static, so we don't initialize it in constructor.
        (WebKit::NetscapePluginInstanceProxy::destroy): Assert that we aren't already destroying
        some plug-in.
        (WebKit::NetscapePluginInstanceProxy::evaluate): This function accidentally lacked an
        m_inDestroy check in r42789.

2010-06-29  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Add ConvolveMatrixElement to MigrateHeaders.make
        https://bugs.webkit.org/show_bug.cgi?id=5861

        * MigrateHeaders.make:

2010-06-23  John Gregg  <johnnyg@google.com>

        Reviewed by Kent Tamura.

        add ENABLE_DIRECTORY_UPLOAD build support
        https://bugs.webkit.org/show_bug.cgi?id=41100

        * Configurations/FeatureDefines.xcconfig:

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to test the new HTML5 TreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41276

        Adam was concerned that someone might make their port
        depend on this setting (I guess we had some trouble with that
        with the HTML5Parser setting), so I littered the code with warnings.

        test-html5-parser now tests this code path.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences html5TreeBuilderEnabled]):
        (-[WebPreferences setHTML5TreeBuilderEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-06-25  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Improve default value handling for page format properties.
        https://bugs.webkit.org/show_bug.cgi?id=41150

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame pageSizeAndMarginsInPixels:pageNumber:width:height:marginTop:marginRight:marginBottom:]):

2010-06-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add an ENABLE_WEB_TIMING option for enabling Web Timing support.
        https://bugs.webkit.org/show_bug.cgi?id=38924

        * Configurations/FeatureDefines.xcconfig:

2010-06-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Full-screened content doesn't keep the display on: Safari not grabbing a power assertion?
        https://bugs.webkit.org/show_bug.cgi?id=40939
        rdar://problem/7996172
        
        Take a IOKit power assertion when playing video in fullscreen mode.  Release the
        assertion when paused in fullscreen mode, and when exiting fullscreen mode.

        * WebView/WebVideoFullscreenController.h:
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidExitFullscreen]): Call updatePowerAssertions.
        (-[WebVideoFullscreenController windowDidEnterFullscreen]): Call updatePowerAssertions.
        (-[WebVideoFullscreenController _disableIdleDisplaySleep]):
        (-[WebVideoFullscreenController _enableIdleDisplaySleep]):
        (-[WebVideoFullscreenController _disableIdleSystemSleep]):
        (-[WebVideoFullscreenController _enableIdleSystemSleep]):
        (-[WebVideoFullscreenController updatePowerAssertions]): Call _(enable|disable)Idle(System|Display)sleep depending on current playback rate and fullscreen status.
        (-[WebVideoFullscreenController rateChanged:]): Call updatePowerAssertions.

2010-06-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Playing movie full screen on second monitor hides menu bar and title bar on main monitor
        https://bugs.webkit.org/show_bug.cgi?id=40933
        rdar://problem/7858452
        
        Remove all references to GetSystemUIMode and SetSystemUIMode.  Replace these calls with 
        [NSApplication setPresentationOptions:].  Do not auto-hide the menu bar if the fullscreen
        screen is does not contain the menu-bar.  Do not auto-hide the dock if the fullscreen screen
        is both not the menu-bar screen and not the dock screen.

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]): Register the applicationDidChangeScreenParameters: listener.
        (-[WebVideoFullscreenController windowDidExitFullscreen]): Calls updateMenuAndDockForFullscreen.
        (-[WebVideoFullscreenController windowDidEnterFullscreen]): Calls updateMenuAndDockForFullscreen.
        (-[WebVideoFullscreenController applicationDidChangeScreenParameters:]):  New notification handler; catches NSApplicationDidChangeScreenParameters.
        (-[WebVideoFullscreenController updateMenuAndDockForFullscreen]): Hide/show the menu-bar and dock according to the fullscreen window's screen.

2010-06-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Full screen video in Safari exits full-screen if you switch to another app
        https://bugs.webkit.org/show_bug.cgi?id=40635
        rdar://problem/7885101

        Implement the following rules for exiting full screen when switching apps:
        1. If the system has a single screen, switching apps will cause Safari to exit full-screen.
        2. Otherwise, if the full-screen screen is the "main screen" (the one with the title bar), 
           switching apps will cause Safari to exit full-screen.
        3. Overriding rules 1 & 2, if the full-screen screen is not on the "current space", 
           switching apps will NOT cause Safari to exit full-screen.

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController applicationDidResignActive:]):

2010-06-24  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        Updated fix for <rdar://problem/8093680> "Paste and Match Style" should fire paste events
        https://bugs.webkit.org/show_bug.cgi?id=41085

        * WebView/WebHTMLView.mm: Use the WebCore command system for the pasteAsPlainText selector.
        Also remove internal methods that no one is using.

2010-06-24  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Sam Weinig.

        Added an ObjC wrapper to Node::renderRect(bool&).

        * DOM/WebDOMOperations.mm:
        (-[DOMNode _renderRect:]):
        * DOM/WebDOMOperationsPrivate.h:

2010-06-24  Adele Peterson  <adele@apple.com>

        Reviewed by Eric Carlson.

        Fix for <rdar://problem/8093680> "Paste and Match Style" should fire paste events
        https://bugs.webkit.org/show_bug.cgi?id=41085

        * WebView/WebHTMLView.mm: (-[WebHTMLView pasteAsPlainText:]): Reuse code in WebCore
        which does everything done here and also fires paste events.

2010-06-23  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement page format data programming interface.
        Add methods for testing.
        https://bugs.webkit.org/show_bug.cgi?id=37538

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame isPageBoxVisible:]):
        (-[WebFrame pageAreaRectInPixels:]):
        (-[WebFrame preferredPageSizeInPixels:]):

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

        Reviewed by Sam Weinig.

        Get rid of more USE_LIBDISPATCH code.

        * Plugins/Hosted/NetscapePluginHostProxy.h:

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

        Reviewed by Sam Weinig.

        Get rid of the USE_LIBDISPATCH code.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::~NetscapePluginHostProxy):

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

        Reviewed by Sam Weinig.

        Wean NetscapePluginHostManager of any knowledge about WebNetscapePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=41006

        * Plugins/Hosted/NetscapePluginHostManager.h:
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPlugin):
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        (WebKit::NetscapePluginHostManager::createPropertyListFile):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage createPropertyListFile]):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix an off-by-one bug I introduced.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):

2010-06-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        FrameLoader cleanup: Split high level subframe and plugin
        loading functions into a separate class.
        https://bugs.webkit.org/show_bug.cgi?id=40453

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

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Another Tiger build fix.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _tryLoad]):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        More WebBasePluginPackage cleanup
        https://bugs.webkit.org/show_bug.cgi?id=40944

        * Plugins/Hosted/HostedNetscapePluginStream.mm:
        (WebKit::HostedNetscapePluginStream::pluginCancelledConnectionError):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::pluginCancelledConnectionError):
        * Plugins/WebBaseNetscapePluginView.mm:
        (WebHaltablePlugin::pluginName):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage _objectForInfoDictionaryKey:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage load]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage finalize]):
        (-[WebBasePluginPackage pluginInfo]):
        (-[WebBasePluginPackage supportsExtension:]):
        (-[WebBasePluginPackage supportsMIMEType:WebCore::]):
        (-[WebBasePluginPackage MIMETypeForExtension:]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        (-[WebBasePluginPackage versionNumber]):
        (-[WebBasePluginPackage WebCore::]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage openResourceFile]):
        (-[WebNetscapePluginPackage closeResourceFile:]):
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        (-[WebNetscapePluginPackage _initWithPath:]):
        (-[WebNetscapePluginPackage _applyDjVuWorkaround]):
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage supportsSnapshotting]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase refresh]):
        (-[WebPluginDatabase _removePlugin:]):
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage initWithPath:]):
        (-[WebPluginPackage load]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Another PowerPC build fix.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage openResourceFile]):
        (-[WebNetscapePluginPackage _tryLoad]):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Try to fix the PowerPC build.

        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _tryLoad]):

2010-06-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Update relevant calls into FrameLoader to make use of 
        FrameLoaderStateMachine.
        https://bugs.webkit.org/show_bug.cgi?id=39695

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::transitionToCommittedForNewPage):
        * WebView/WebFrame.mm:
        (-[WebFrame _firstLayoutDone]):

2010-06-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Dan Bernstein.

        Chromium/Mac build fix.

        * WebCoreSupport/WebSystemInterface.mm: Change the order of wtf/Platform.h include to let other 
            headers smell it.

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Make all of WebKit build with clang++

        * DefaultDelegates/WebDefaultPolicyDelegate.m:
        (-[WebDefaultPolicyDelegate webView:decidePolicyForMIMEType:request:frame:decisionListener:]):
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView resolvedURLStringForURL:target:]):
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setSuppressLayout:]):
        * WebView/WebHTMLRepresentation.mm:
        * WebView/WebNavigationData.mm:
        (-[WebNavigationData initWithURLString:title:originalRequest:response:hasSubstituteData:clientRedirectSource:]):
        * WebView/WebPDFRepresentation.mm:
        (-[WebPDFRepresentation setDataSource:]):
        (-[WebPDFRepresentation receivedData:withDataSource:]):
        (-[WebPDFRepresentation receivedError:withDataSource:]):
        * WebView/WebResource.mm:
        (-[WebResource description]):
        * WebView/WebSerializedJSValue.mm:
        (-[WebSerializedJSValue initWithValue:context:exception:]):
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController WebCore::]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):
        (-[WebVideoFullscreenController setDelegate:]):
        (-[WebVideoFullscreenController enterFullscreen:]):
        * WebView/WebView.mm:
        (-[WebView _openFrameInNewWindowFromMenu:]):
        (-[WebView _geolocationDidChangePosition:]):

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove unused dictionary ivars from WebBasePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40928

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage dealloc]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):

2010-06-21  Dan Bernstein  <mitz@apple.com>

        Build fix

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface):

2010-06-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebKit part of implementing the 'hyphens' and 'hyphenate-character' properties
        https://bugs.webkit.org/show_bug.cgi?id=10228

        * WebCoreSupport/WebSystemInterface.mm:
        (InitWebCoreSystemInterface): Initialize wkGetHyphenationLocationBeforeIndex.

2010-06-21  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Speech Input Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=40878

        * Configurations/FeatureDefines.xcconfig:

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Fix Tiger build.

        * Plugins/WebNetscapePluginPackage.mm:

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Get rid of the old MIMETypes getter method
        https://bugs.webkit.org/show_bug.cgi?id=40898

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage supportsExtension:]):
        (-[WebBasePluginPackage supportsMIMEType:WebCore::]):
        (-[WebBasePluginPackage MIMETypeForExtension:]):
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase refresh]):
        (-[WebPluginDatabase _removePlugin:]):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Remove bogus const qualifiers.

        * WebCoreSupport/WebPasteboardHelper.h:
        * WebCoreSupport/WebPasteboardHelper.mm:
        (WebPasteboardHelper::urlFromPasteboard):
        (WebPasteboardHelper::plainTextFromPasteboard):
        (WebPasteboardHelper::fragmentFromPasteboard):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Get rid of the extensionToMIME mapping in WebBasePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40897

        Instead of using the extensionToMIME mutable dictionary, use the MIME types vector.
        While this makes lookup of MIME types based on extensions linear instead of constant,
        the number of extensions per plug-in is too small for it to matter.

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage supportsExtension:]):
        (-[WebBasePluginPackage MIMETypeForExtension:]):
        (-[WebBasePluginPackage setMIMEToExtensionsDictionary:]):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add a MimeClassInfo Vector to WebBasePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40896

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage WebCore::]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Move the NSBundle ivar to WebPluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40894

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage _objectForInfoDictionaryKey:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage load]):
        (-[WebBasePluginPackage dealloc]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage _initWithPath:]):
        * Plugins/WebPluginPackage.h:
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage initWithPath:]):
        (-[WebPluginPackage dealloc]):
        (-[WebPluginPackage viewFactory]):
        (-[WebPluginPackage load]):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove -[WebBasePluginPackage bundle]
        https://bugs.webkit.org/show_bug.cgi?id=40892

        Add -[WebBasePluginPackage bundleIdentifier] and switch clients over to it.
        
        Move the supportsSnapshotting method over to the plug-in package.
        
        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::hostForPackage):
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView initWithFrame:pluginPackage:URL:baseURL:MIMEType:attributeKeys:attributeValues:loadManually:element:WebCore::]):
        (-[WebBaseNetscapePluginView supportsSnapshotting]):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage isQuickTimePlugIn]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        (-[WebBasePluginPackage WebCore::]):
        Call bundleIdentifier directly instead of asking the bundle 
        * Plugins/WebNetscapePluginPackage.h:
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage supportsSnapshotting]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView setAttributeKeys:andValues:]):
        (-[WebNetscapePluginView _createPlugin]):
        * Plugins/WebPluginDatabase.mm:
        (checkCandidate):

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Change some WebPluginDabase ivars to use WebCore::String instead of NSString.
        https://bugs.webkit.org/show_bug.cgi?id=40869
        
        Re-land r61459, with extra null-checks in WebFrameLoaderClient.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage name]):
        (-[WebBasePluginPackage path]):
        (-[WebBasePluginPackage filename]):
        (-[WebBasePluginPackage pluginDescription]):
        (-[WebBasePluginPackage description]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage load]):
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin):

2010-06-18  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r61459.
        http://trac.webkit.org/changeset/61459
        https://bugs.webkit.org/show_bug.cgi?id=40869

        Seems to have broken two tests on the Tiger buildbot:

        dom/html/level2/html/AppletsCollection.html
        plugins/qt-qwidget-plugin.html

        Anders wasn't on #webkit...

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage name]):
        (-[WebBasePluginPackage path]):
        (-[WebBasePluginPackage filename]):
        (-[WebBasePluginPackage pluginDescription]):
        (-[WebBasePluginPackage setName:]):
        (-[WebBasePluginPackage setPath:]):
        (-[WebBasePluginPackage setPluginDescription:]):
        (-[WebBasePluginPackage description]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage load]):

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

        Fix Tiger build.

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

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

        Reviewed by Sam Weinig.

        Change some WebPluginDabase ivars to use WebCore::String instead of NSString.
        https://bugs.webkit.org/show_bug.cgi?id=40869

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::spawnPluginHost):
        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage initWithPath:]):
        (-[WebBasePluginPackage getPluginInfoFromPLists]):
        (-[WebBasePluginPackage dealloc]):
        (-[WebBasePluginPackage name]):
        (-[WebBasePluginPackage path]):
        (-[WebBasePluginPackage filename]):
        (-[WebBasePluginPackage pluginDescription]):
        (-[WebBasePluginPackage description]):
        (-[WebBasePluginPackage isJavaPlugIn]):
        * Plugins/WebNetscapePluginPackage.mm:
        (-[WebNetscapePluginPackage getPluginInfoFromResources]):
        (-[WebNetscapePluginPackage _tryLoad]):
        (-[WebNetscapePluginPackage _unloadWithShutdown:]):
        * Plugins/WebPluginPackage.mm:
        (-[WebPluginPackage load]):

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

        Reviewed by Sam Weinig.

        Rename WebPluginPackage.m to make it an Objective-C++ file.
        
        * Plugins/WebPluginPackage.m: Removed.
        * Plugins/WebPluginPackage.mm: Copied from Plugins/WebPluginPackage.m.

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

        Reviewed by Sam Weinig.

        Get rid of the NSEnumerators from WebBasePluginPackage
        https://bugs.webkit.org/show_bug.cgi?id=40868

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (-[WebBasePluginPackage MIMETypes]):
        (-[WebBasePluginPackage supportsExtension:]):
        (-[WebBasePluginPackage supportsMIMEType:]):
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase pluginForMIMEType:]):
        (-[WebPluginDatabase pluginForExtension:]):
        (-[WebPluginDatabase refresh]):
        (-[WebPluginDatabase _removePlugin:]):
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::getPluginInfo):

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

        Reviewed by Sam Weinig.

        Make WebCoreSystemInterface.h a C++ only header
        https://bugs.webkit.org/show_bug.cgi?id=40867

        * WebCoreSupport/WebSystemInterface.h:
        * WebCoreSupport/WebSystemInterface.m: Removed.
        * WebCoreSupport/WebSystemInterface.mm: Copied from WebKit/mac/WebCoreSupport/WebSystemInterface.m.

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

        Reviewed by Sam Weinig.

        Clean up WebPluginDatabase.mm
        https://bugs.webkit.org/show_bug.cgi?id=40866

        * Plugins/WebBasePluginPackage.h:
        * Plugins/WebBasePluginPackage.mm:
        (pathByResolvingSymlinksAndAliases):
        (-[WebBasePluginPackage initWithPath:]):
        Change an instance method into a static function.
        
        * Plugins/WebPluginDatabase.mm:
        (PluginPackageCandidates::PluginPackageCandidates):
        (PluginPackageCandidates::update):
        (PluginPackageCandidates::bestCandidate):
        Add a new PluginPackageCandidates class.
        
        (-[WebPluginDatabase pluginForKey:withEnumeratorSelector:]):
        Use PluginPackageCandidates here.

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

        Fix Tiger build.
        
        * WebCoreSupport/WebPlatformStrategies.mm:

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

        Reviewed by Darin Adler.

        Get rid of PluginDataMac.mm and use the plug-in strategy instead
        https://bugs.webkit.org/show_bug.cgi?id=40860

        * Plugins/WebBasePluginPackage.h:
        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.mm:
        (WebPlatformStrategies::createPluginStrategy):
        (WebPlatformStrategies::refreshPlugins):
        (WebPlatformStrategies::getPluginInfo):
        * WebCoreSupport/WebViewFactory.mm:

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

        Reviewed by Dan Bernstein.

        Add stubbed out WebPlatformStrategies class to WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=40851

        * WebCoreSupport/WebPlatformStrategies.h: Added.
        * WebCoreSupport/WebPlatformStrategies.mm: Added.
        (WebPlatformStrategies::initialize):
        (WebPlatformStrategies::WebPlatformStrategies):
        (WebPlatformStrategies::createPluginStrategy):
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2010-06-15  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Move isAvailable()/setIsAvailable() from Database/DatabaseSync to AbstractDatabase.
        https://bugs.webkit.org/show_bug.cgi?id=39041

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

2010-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Use adoptRef and create functions in more code paths
        https://bugs.webkit.org/show_bug.cgi?id=40760

        * Plugins/Hosted/NetscapePluginInstanceProxy.h: Made create no longer
        be an inline function.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Moved the call to addPluginInstance out of here.
        (WebKit::NetscapePluginInstanceProxy::create): Move it in here.
        This makes sure we call adoptRef on the new proxy before any caller
        calls ref on it.

2010-06-16  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Enable HTML5 Parser in Safari on Mac
        https://bugs.webkit.org/show_bug.cgi?id=40739

        The HTML5 parser is probably off on all webkit ports.
        We should either flip the meaning of the default so that
        "false" means HTML5 on all ports, or we'll have to write
        more code like this for all the other ports.

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

2010-06-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Don't leak WebGeolocationPositionInternal and GeolocationPosition instances for every WebGeolocationPosition created.

        * WebView/WebGeolocationPosition.mm:
        (-[WebGeolocationPosition dealloc]): Implement -dealloc and release our WebGeolocationPositionInternal instance.

2010-06-10  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement render style selection for pages to support CSS3 Paged Media.
        https://bugs.webkit.org/show_bug.cgi?id=35961

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame pageProperty:propertyName:]):

2010-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        * WebView/WebView.mm:
        (-[WebView shouldClose]): Call shouldClose on FrameLoader instead of
        going through Frame.

2010-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Remove getPluginInfoFromBundleAndMIMEDictionary:

        * Plugins/WebBasePluginPackage.mm:

2010-06-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Fold getPluginInfoFromBundleAndMIMEDictionary: into its sole caller.

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

2010-06-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8084721> Pages using accelerated compositing fail to update correctly in Carbon apps
        
        The run loop observer used to commit compositing layer changes does not do
        updates if [window viewsNeedDisplay] is true, because this indicates that a delayed window
        update is pending (added in r58623).
        
        However, Carbon apps don't use the NSWindow updating mechanism, so [window viewsNeedDisplay] always returns YES.
        This caused us to never sync compositing layers.
        
        So detect if the current window is wrapping a carbon window, and in that case consult the root
        HIView to detect if display is pending.

        * WebView/WebView.mm:
        (layerSyncRunLoopObserverCallBack):

2010-06-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/8077032> REGRESSION (r50796): Black background on AppleScript generated email

        Test: platform/mac/editing/input/NSBackgroundColor-transparent.html

        r50796 changed the initial background color from invalid to transparent. As a result,
        NSAttributedStrings returned from +_web_attributedStringFromRange started including the
        NSBackgroundColor attribute, with a transparent color as the value. This caused problems for
        components in the system that ignore the alpha component, turning the color into opaque black.

        * Misc/WebNSAttributedStringExtras.mm:
        (+[NSAttributedString _web_attributedStringFromRange:]): Change to not include the background
        and foreground color attributes if the color are transparent.

2010-06-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: On the way to Remote Debugging we want to transfer dom/timeline/etc
        data from inspected page to WebInspector as JSON string via http. The native
        serialization to JSON string is supported by InspectorValue's classes. This patch
        has the implementation of sendMessageToFrontend function. WebKit version of it still
        uses ScriptFunctionCall and will be switched to another transport a little bit later.
        https://bugs.webkit.org/show_bug.cgi?id=40134

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):

2010-06-10  David Hyatt  <hyatt@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=40441, back out the original fix for 29601, since it has broken continuous
        wheel delta values.

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]):

2010-06-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60889.
        http://trac.webkit.org/changeset/60889
        https://bugs.webkit.org/show_bug.cgi?id=40365

        gtk bot has some kind of memory corruption (Requested by
        loislo on #webkit).

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

2010-06-07  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: On the way to Remote Debugging we want to transfer dom/timeline/etc
        data from inspected page to WebInspector as JSON string via http. The native
        serialization to JSON string is supported by InspectorValue's classes. This patch
        has the implementation of sendMessageToFrontend function. WebKit version of it still
        uses ScriptFunctionCall and will be switched to another transport a little bit later.
        https://bugs.webkit.org/show_bug.cgi?id=40134

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):

2010-06-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/8072136> REGRESSION (r56051): Inspect Element context menu does nothing in applications linked against 10.4 SDK

        * WebCoreSupport/WebContextMenuClient.mm:
        (fixMenusReceivedFromOldClients): Fix up the tag on the Inspect Element menu item. This ensures that even if the
        context menu layout doesn't match our expectations that the menu item will continue to trigger the web inspector.

2010-06-08  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ojan Vafai and Darin Adler.

        Refactor platform dependent editing behavior code out of Settings
        https://bugs.webkit.org/show_bug.cgi?id=39854

        EditingBehavior enum was renamed to EditingBehaviorTypes and moved out from Settings.h to
        EditingBehaviorTypes.h . Call sites in WebKit/ adjusted accordingly.

        * WebView/WebFrame.mm:
        (core):
        * WebView/WebFrameInternal.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-06-06  MORITA Hajime  <morrita@google.com>

        Unreviewd, follow up to r60820

        https://bugs.webkit.org/show_bug.cgi?id=40219
        [Mac] ENABLE_METER_TAG should be enabled
        
        Added ENABLE_METER_TAG.

        * Configurations/FeatureDefines.xcconfig:

2010-06-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 40214 - Clean up error construction / throwing in JSC.
        
        The one egregious insanity here is that creating an error requires
        a VM-entry-esqe-host call (the string argument is wrapped as a JS
        object & pushed on the RegisterFile, then unwrapped back to a
        UString).  Changing this also means you only require a global
        object, not an ExecState, to create an error.

        The methods to create error objects are also parameterized
        requiring a switch on the type, which can be made cleaner and
        faster by moving to a separate method per error type.  Code to add
        divot information to error had been duplicated, and is coalesced
        back into a single function.

        Convenience methods added to create & throw type & syntax error
        with a default error message, since this is a common case.

        Also, errors are currently thrown either using
        "throwError(exec, error)" or "exec->setException(error)" - unify
        on the former, since this is more commonly used.  Add
        "throwVMError(exec, error)" equivalents, as a convenience for
        cases where the result was being wrapped in "JSValue::encode(...)".

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invokeMethod):

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

        Reviewed by Oliver Hunt.

        Bug 40094 - The return type of NativeFunction should be EncodedJSValue
        On Windows & Linux, using JSVALUE32_64, EncodedJSValue is returned in registers, but JSValue is not.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::invoke):

2010-06-02  Sterling Swigart  <sswigart@google.com>

        Reviewed by David Levin.

        Image Resizer Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=39906

        * Configurations/FeatureDefines.xcconfig:

2010-06-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        Add a preference for paginating during layout (the new model for computing page breaks).

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences paginateDuringLayoutEnabled]):
        (-[WebPreferences setPaginateDuringLayoutEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-06-01  Kevin Decker  <kdecker@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=40025
        <rdar://problem/8046273> All Flash content crashes after installing CS5 Design Premium.
        
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView supportsSnapshotting]): Do not support snapshotting Flash 10.1 if
        the version is less than 10.1.53.60.

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=39434
        REGRESSION (r59811): Geolocation callbacks cannot be created

        Removing unused WebGeolocationMock.

        * WebCoreSupport/WebGeolocationMock.mm: Removed.
        * WebCoreSupport/WebGeolocationMockPrivate.h: Removed.
        * WebKit.exp:

2010-05-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Make more HTML DOM members private, especially constructors, third and final batch
        https://bugs.webkit.org/show_bug.cgi?id=39916

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementWithName:inForm:]): Use the new HTMLFormElement
        function, associatedElements, rather than getting directly at a data member
        named formElements.
        (-[WebHTMLRepresentation controlsInForm:]): Ditto.

2010-05-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig, Gavin Barraclough, Oliver Hunt.

        Simplified the host calling convention.

        PART ONE: Functional code changes.
        
        [ None in WebKit ]
        
        PART TWO: Global search and replace.
        
        In the areas below, I used global search-and-replace to change
            (ExecState*, JSObject*, JSValue, const ArgList&) => (ExecState*)
            args.size() => exec->argumentCount()
            args.at(i) => exec->argument(i)

        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke):
        (WebKit::ProxyInstance::invokeMethod):
        (WebKit::ProxyInstance::invokeDefaultMethod):

2010-05-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Change z-component to 1.

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

2010-05-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin and Darin Adler.

        Fix for <rdar://problem/7464703> HiDPI: [Layers] Compositing layers 
        do not scale properly when running with a resolution independent 
        scale

        Apply the userSpaceScaleFactor as a scale on the layerHostingView.

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

2010-05-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=39621
        <rdar://problem/8009738> Extreme memory growth on DOM Hanoi test

        Removed formStateDidChange support, which is not needed by any client.

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

2010-05-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Database origins aren't populated at launch (missing db in prefs sheet, possible other symptoms)
        <rdar://problem/8013233> and https://bugs.webkit.org/show_bug.cgi?id=39486

        * Storage/WebDatabaseManager.mm:
        (WebKitInitializeDatabasesIfNecessary): Call initializeTracker() instead of trying to set the path on
          an already created tracker that already has its origins populated.

2010-05-24  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        Move view-related functions from Frame to FrameView
        https://bugs.webkit.org/show_bug.cgi?id=39366

        * WebView/WebView.mm:
        (-[WebView _setZoomMultiplier:isTextOnly:]): Call function on FrameView.
        (-[WebView setEditable:]): Get rid of call to empty function,
        removeEditingStyleFromBodyElement.

2010-05-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Make sure everyone who needs to is using visitedDependentColor rather than accessing styles
        directly.

        * Misc/WebNSAttributedStringExtras.mm:
        (+[NSAttributedString _web_attributedStringFromRange:]):
        * WebView/WebFrame.mm:
        (-[WebFrame _bodyBackgroundColor]):

2010-05-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        All callable objects should have a global object reference
        https://bugs.webkit.org/show_bug.cgi?id=39495

        Update the plugin proxy to handle the need for global object.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::newRuntimeObject):
        (WebKit::ProxyRuntimeMethod::ProxyRuntimeMethod):
        (WebKit::ProxyInstance::getMethod):
        * Plugins/Hosted/ProxyRuntimeObject.h:
        * Plugins/Hosted/ProxyRuntimeObject.mm:
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):

2010-05-21  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Add DeviceOrientation and DeviceOrientationClient
        https://bugs.webkit.org/show_bug.cgi?id=39479

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):

2010-05-20  Mike Thole  <mthole@apple.com>

        Reviewed by Dave Hyatt.

        When using a scale factor > 1, scrollbars sometimes appear when not necessary
        https://bugs.webkit.org/show_bug.cgi?id=39458

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView updateScrollers]): Round up non-integral sizes from AppKit
        so that they can be compared against the integral document size.

2010-05-20  Kevin Decker  <kdecker@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=39441
        <rdar://problem/7985715> Flash context menu is both horizontally and vertically offset from point of click
        <rdar://problem/7986109> Youtube video controller UI entirely missing
        <rdar://problem/7986154> Flash content paints at horizontally and vertically shifted locations (within the plug-in region)

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]): The base coordinates of a window and
         it's contentView happen to be the equal at a userSpaceScaleFactor of 1. For non-1.0 scale
         factors this assumption is false. Accordingly we now convert to the window contentView
        coordinate system when computing bounds in "window" and the visible rect.
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]): Ditto.

2010-05-20  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Provide bindings for DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=39210

        Adds ENABLE_DEVICE_ORIENTATION to XCode project file, always disabled.

        * Configurations/FeatureDefines.xcconfig:

2010-05-20  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Ojan Vafai.

        Expose the editing behavior setting in DRT to test all editing code paths
        https://bugs.webkit.org/show_bug.cgi?id=38603

        * WebView/WebFrame.mm:
        (core):
        * WebView/WebFrameInternal.h: Added a conversion method from the API enum to the WebCore enum.
        * WebView/WebPreferenceKeysPrivate.h: Added a preference key for the new setting.
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]): Initialize the EditingBehavior to Mac style.
        (-[WebPreferences editingBehavior]): Added.
        (-[WebPreferences setEditingBehavior:]): Added.
        * WebView/WebPreferencesPrivate.h: Added the new API points to the private API.
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]): Set the editing behavior via the WebPreferences setting.

2010-05-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Kevin Decker and Simon Fraser.

        <rdar://problem/8004528> 
        REGRESSION: Coordinate system for Core Animation NPAPI plug-ins is flipped with accelerated compositing turned on
        
        When needed, create a new CALayer and set it's geometry to be flipped. Add the plug-in layer as a sublayer and then return
        the newly created layer.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):

2010-05-18  Tony Chang  <tony@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24943
        Command-B and Command-I do not generate keydown events in contentEditable regions.

        Manual test because performKeyEquivalent is not called by DRT.

        Test: manual-tests/style-keypress-events.html

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView performKeyEquivalent:]): Move style key handling until after webcore gets a chance to handle the event

2010-05-18  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Darin Adler, Jian Li.

        DragData::asURL() shouldn't do file validity checks
        https://bugs.webkit.org/show_bug.cgi?id=38711

        Change [NSPasteboard _web_bestURL] to still return a file URL for paths
        that don't exist. Callers who care about the existence of the file or
        whether or not it is a directory should check themselves when they
        want to use the file. The directory check has been left in for now,
        since the Mac implementation of ResourceHandle, which uses this function
        indirectly via DragController::performDrag) handles directories somewhat
        non-intuitively: it opens the parent directory in the Finder, rather
        than opening the directory itself.

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_bestURL]):

2010-05-18  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth (and Maciej Stachowiak).

        Make it possible to enable the new HTML5Tokenizer for testing
        https://bugs.webkit.org/show_bug.cgi?id=39275

        Expose the WebCore::Settings::html5ParserEnabled as a private WebKit setting.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (-[WebPreferences html5ParserEnabled]):
        (-[WebPreferences setHTML5ParserEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-05-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59652.
        http://trac.webkit.org/changeset/59652
        https://bugs.webkit.org/show_bug.cgi?id=39268

        file-input-files-access test is broken on Mac (Requested by
        dcheng on #webkit).

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_bestURL]):

2010-05-17  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Darin Adler.

        DragData::asURL() shouldn't do file validity checks
        https://bugs.webkit.org/show_bug.cgi?id=38711

        Change [NSPasteboard _web_bestURL] to still return a file URL for paths
        that don't exist. Callers who care about the existence of the file or
        whether or not it is a directory should check themselves when they
        want to use the file. The directory check has been left in for now,
        since the Mac implementation of ResourceHandle, which uses this function
        indirectly via DragController::performDrag) handles directories somewhat
        non-intuitively: it opens the parent directory in the Finder, rather
        than opening the directory itself.

        * Misc/WebNSPasteboardExtras.mm:
        (-[NSPasteboard _web_bestURL]):

2010-05-14  Stephanie Lewis  <slewis@apple.com>

        Rubber-stamped by Mark Rowe.

        Update order files.

        * WebKit.order:

2010-05-13  Timothy Hatcher  <timothy@apple.com>

        Allow reporting exceptions that occur when using JavaScriptCore APIs
        to the Web Inspector.

        <rdar://problem/7975410>

        Reviewed by Sam Weinig.

        * WebView/WebView.mm:
        (+[WebView _reportException:inContext:]): Call WebCore::reportException after checking
        that the global object is a DOMWindow.
        * WebView/WebViewPrivate.h: Added _reportException:inContext:.

2010-05-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=39089
        <rdar://problem/7974044> Domain names in Russian '.рф' domain are displayed as punycode

        Add a custom check for this domain. Currently, this is the only non-ASCII TLD, we'll
        investigate a more extensible solution when there are more, and we know what the
        typical restictions are.

        * Misc/WebNSURLExtras.mm:
        (allCharactersAllowedByTLDRules):
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]):

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

        Reviewed by David Hyatt.

        Composited plug-ins can cause missed painting
        https://bugs.webkit.org/show_bug.cgi?id=39033
        <rdar://problem/7972478>
        
        Eagerly enable compositing mode via the enclosing FrameView when the plug-in tells us it wants
        to do compositing.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView createPlugin]):

2010-05-12  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Bug 38689: #34005 will break fullscreen video playback
        https://bugs.webkit.org/show_bug.cgi?id=38689

        Use the new definition of PlatformMedia to check the actual type 
        returned by MediaPlayer.
        
        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):

2010-05-11  Mark Rowe  <mrowe@apple.com>

        Fix the world.

        In r59162 a change was made to WebCore's FeatureDefines.xcconfig that enabled FILE_READER and FILE_WRITER.
        The author and reviewer of that patch ignored the carefully-worded warning at the top of that file asking
        that changes to the file be kept in sync across JavaScriptCore, WebCore and WebKit, as well as being kept
        in sync with build-webkit.  This led to WebCore and WebKit having different views of Document's vtable
        and results in crashes in Safari shortly after launch when virtual function calls resulted in the wrong
        function in WebCore being called.

        We fix this by bringing the FeatureDefines.xcconfig files in to sync.  Based on the ChangeLog message and
        other changes in r59162 it appears that enabling FILE_WRITER was unintentional so that particular change
        has been reverted.

        * Configurations/FeatureDefines.xcconfig:

2010-05-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Allow compositing layers to be connected across iframe boundaries on Mac
        https://bugs.webkit.org/show_bug.cgi?id=38856
        
        When painting an iframe into a compositing layer, the "PaintBehaviorFlattenCompositingLayers"
        flag was mistakenly set, because we'd detect that we were drawing into a bitmap. This caused
        content to show up in both compositing layers, and the painted background inside the iframe.
        
        Fix by taking the flattening state from the parent frame, if there is one. For the root
        frame, we continue to look to see if we're painting into a bitmap.

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

2010-05-10  Timothy Hatcher  <timothy@apple.com>

        Fix a crash when closing a WebView while the Web Inspector is open.

        <rdar://problem/7966830>

        Reviewed by Mark Rowe.

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController destroyInspectorView]): Null check Page since it can be null.
        * WebView/WebView.mm:
        (-[WebView _close]): Null out _private->page before deleting the page, so code called
        during destruction don't access a half deleted Page object.

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

        Unbreak the world. (Fix Mac builds).

        * Plugins/Hosted/WebKitPluginHostTypes.h:

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

        Reviewed by Simon Fraser.

        Change the order of the RendererType enum values, so that old versions of WebKitPluginHost will
        use accelerated compositing and not layer backed views.

        * Plugins/Hosted/WebKitPluginHostTypes.h:

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

        Reviewed by Sam Weinig and Simon Fraser.

        <rdar://problem/7947356>
        QT Plug-in in hardware-accelerated WebKit is missing the controller

        Replace the useSoftwareRenderer boolean with an enum that lets the plug-in host opt into using a layer
        backed NSView instead of inserting the layer into the WebCore layer hierarchy.

        * Plugins/Hosted/NetscapePluginHostManager.mm:
        (WebKit::NetscapePluginHostManager::instantiatePlugin):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInstantiatePluginReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::rendererType):
        (WebKit::NetscapePluginInstanceProxy::setRendererType):
        (WebKit::NetscapePluginInstanceProxy::InstantiatePluginReply::InstantiatePluginReply):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy):
        Replace the useSoftwareRenderer boolean everywhere with the RendererType enum.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView createPlugin]):
        Only go into full compositing mode when the renderer type returned is UseAcceleratedCompositing.
        Otherwise, use a layer backed NSView.

        * Plugins/Hosted/WebKitPluginHostTypes.h:
        Add a RendererType enum.

2010-05-06  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler and Dan Bernstein..

        REGRESSION (r51617): when plugins are disabled, plugins show up as garbage characters
        https://bugs.webkit.org/show_bug.cgi?id=38698
        <rdar://problem/7942075>

        When the plug-in database is initialized, we will register all the MIME types it supports with the global
        WebView dictionary. When plug-ins are disabled for a single web view, the MIME types still need to be 
        in the global mapping (because other web views might still have plug-ins enabled).
        
        Prior to r51617 we would always look at the plug-in database to determine that the MIME type belongs to a 
        plug-in, but now we won't even touch the plug-in database when plug-ins are disabled.
        
        In order to fix this, a new set of registered MIME types that are known to be plug-ins is added. When
        +[WebView _viewClass:andRepresentationClass:forMIMEType:allowingPlugins:] is called and allowingPlugins is FALSE
        we check if the MIME type is a known plug-in MIME type and return false in that case.
        
        * Plugins/WebPluginDatabase.mm:
        (-[WebPluginDatabase refresh]):
        (-[WebPluginDatabase _removePlugin:]):
        * WebView/WebView.mm:
        (knownPluginMIMETypes):
        (+[WebView _registerPluginMIMEType:]):
        (+[WebView _unregisterPluginMIMEType:]):
        (+[WebView _viewClass:andRepresentationClass:forMIMEType:allowingPlugins:]):
        * WebView/WebViewInternal.h:

2010-05-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7951285> REGRESSION (r58847): Composited iframe content obscures Safari's application chrome

        Fixed this other regression from r58847. The regression was caused by overriding -visibleRect to
        return the WebClipView’s full bounds. AppKit uses -visibleRect to determine the geometry
        of the surface for the child WebFrameView. The fix is to restrict the special behavior of
        -[WebClipView visibleRect] to when AppKit is consulting it for the purpose of invalidating
        areas while scrolling.

        * WebView/WebClipView.h:
        * WebView/WebClipView.mm:
        (-[WebClipView visibleRect]): If the WebClipView is not scrolling, always return
        [super visibleRect]. 
        (-[WebClipView _immediateScrollToPoint:]): Override this internal NSClipView method
        to set a flag telling -visibleRect that the view is scrolling.
        * WebView/WebView.mm:
        (layerSyncRunLoopObserverCallBack): Ensure that screen updates, disabled by AppKit
        when it thinks an upcoming window flush will re-enable them, are enabled here in
        case the -setNeedsDisplayInRect: override has prevented the window from needing to be
        flushed.

2010-05-06  Steve Block  <steveblock@google.com>

        Reviewed by Eric Seidel.

        MAC_JAVA_BRIDGE should be renamed JAVA_BRIDGE
        https://bugs.webkit.org/show_bug.cgi?id=38544

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

2010-05-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Fixed a crash when closing Top Sites after r58847.

        * WebView/WebFrameView.mm:
        (-[WebFrameView webFrame]): Null-check _private.

2010-05-05  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Mark Rowe.

        Fixed test crashes after r58847.

        * WebView/WebHTMLView.mm:
        (setNeedsDisplayInRect): Null-check the frame.

2010-05-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7932072> Iframes in composited layers don’t repaint correctly (affects Yahoo! Mail with Flash Player 10.1)
        https://bugs.webkit.org/show_bug.cgi?id=38427

        * WebView/WebClipView.m: Renamed to WebClipView.mm.
        * WebView/WebClipView.mm:
        (-[WebClipView visibleRect]): Added this override, which for instances used for WebFrameViews in
        composited layers, returns the clip view’s entire bounds. This prevents drawing from being clipped to
        AppKit’s idea of what part of the view would be visible if it was drawn as part of the view hierarchy.
        Since it is drawn into a compositing layer, that’s irrelevant, and we should not be clipping.
        * WebView/WebHTMLView.mm:
        (setCursor): Style tweak.
        (setNeedsDisplayInRect): Added. Replaces the default implementation of -[NSView setNeedsDisplayInRect:],
        so that if the receiver is a descendant of a WebFrameView that draws into a composited layer, the invalidation
        is routed back through the WebCore FrameView, which propagates it to the layer.
        (+[WebHTMLViewPrivate initialize]): Swizzle the setNeedsDisplayInRect: override in.
        (-[WebHTMLView visibleRect]): Removed whitespace.
        * WebView/WebView.mm:
        (layerSyncRunLoopObserverCallBack): If we bailed out on syncing, due to pending layout, do an eager layout
        in preparation for the displaying of compositing layers.

2010-05-05  John Sullivan  <sullivan@apple.com>

        <rdar://problem/7942606> Output appears in Console when exiting Safari with multiple windows opened

        Reviewed by Mark Rowe.

        * WebView/WebView.mm:
        (+[WebView closeAllWebViews]):
        Make copy of allWebViewsSet to avoid mutating it while iterating through it.

2010-05-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Improve check for drawing into the window that was added in r58623
        https://bugs.webkit.org/show_bug.cgi?id=38562
        
        Rather than assuming that any non-bitmap context is the window's context,
        compare the current graphics context with -[NSWindow graphicsContext] to
        determine that we're drawing into the window.

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

2010-05-04  Ada Chan  <adachan@apple.com>

        Reviewed by David Kilzer.

        https://bugs.webkit.org/show_bug.cgi?id=38555
        
        Small code refactoring: move the logic to figure out the path to the 
        databases directory to another method.

        * Storage/WebDatabaseManager.mm:
        (databasesDirectoryPath):
        (WebKitInitializeDatabasesIfNecessary):

2010-05-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Mike Thole.

        Fix for <rdar://problem/7818509> Crash occurs when exiting Safari

        We can avoid this crash if we call [self _removeFromAllWebViewsSet] 
        even in the case when we are doing a fastDocumentTeardown. This is 
        a much safer approach.
        * WebView/WebView.mm:
        (-[WebView _close]):

2010-05-03  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=27751

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences javaScriptCanAccessClipboard]):
        (-[WebPreferences setJavaScriptCanAccessClipboard:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-05-03  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add "willSendSubmitEvent" hook to WebFrameClient and FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=38397

        No tests (functionality is exposed only through native WebKit API.)

        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient::dispatchWillSendSubmitEvent):

2010-04-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7477071> REGRESSION: Bad flicker when wheel-scrolling Google Maps, iPad gallery and other sites

        Sites that frequently toggle content in and out of compositing layers (like http://www.tumblr.com/boothed)
        can cause flickering because of unsychronized compositing layer and view-based updates. There were two
        underlying issues:
        
        1. On SnowLeopard, AppKit can throttle window updates, thus breaking an assumption that
           NSView drawing will happen on the runloop cycle after a repaint. This provided a window
           for the layerSyncRunLoopObserver to fire and commit layer changes too early.
           
           Fix this by having the layerSyncRunLoopObserver in WebView check to see if a display is pending,
           and not commit layer changes in that case. We'll commit layer changes later when we
           finally draw.
           
        2. The change in r49269 was wrong; it was attempting to fix an issue that was actually caused
           by -drawRects: coming in for page snapshots. The correct approach is to avoid hitting the
           synchronization and update disabling code in WebHTMLView for draws that are not to the screen.
        
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView drawRect:]):
        * WebView/WebView.mm:
        (layerSyncRunLoopObserverCallBack):
        (-[WebView _scheduleCompositingLayerSync]):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Part of the previous part (forgot to save).

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView stopTimers]):
        (-[WebNetscapePluginView startTimers]):
        (-[WebNetscapePluginView checkIfAllowedToLoadURL:frame:callbackFunc:context:]):
        (-[WebNetscapePluginView _containerCheckResult:contextInfo:]):
        (-[WebNetscapePluginView cancelCheckIfAllowedToLoadURL:]):
        (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):
        (-[WebNetscapePluginView unscheduleTimer:]):
        (-[WebNetscapePluginView getVariable:forURL:value:length:]):
        (-[WebNetscapePluginView setVariable:forURL:value:length:]):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Use C99 integer types in more places.

        * Plugins/WebNetscapePluginView.mm:
        (getNPRect):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix Tiger build.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::startStream):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Another 32-bit build fix.

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

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build (again).

        * Plugins/WebNetscapeContainerCheckContextInfo.h:
        * Plugins/WebNetscapeContainerCheckContextInfo.mm:
        (-[WebNetscapeContainerCheckContextInfo initWithCheckRequestID:callbackFunc:context:]):
        (-[WebNetscapeContainerCheckContextInfo checkRequestID]):
        (-[WebNetscapeContainerCheckContextInfo callback]):
        * Plugins/WebNetscapePluginPackage.h:

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * Plugins/WebNetscapeContainerCheckContextInfo.h:
        * Plugins/WebNetscapeContainerCheckContextInfo.mm:
        (-[WebNetscapeContainerCheckContextInfo initWithCheckRequestID:callbackFunc:context:]):
        * Plugins/WebNetscapeContainerCheckPrivate.h:
        * Plugins/WebNetscapePluginPackage.mm:
        (functionPointerForTVector):
        * Plugins/WebNetscapePluginView.mm:
        (PluginTimer::PluginTimer):
        (-[WebNetscapePluginView checkIfAllowedToLoadURL:frame:callbackFunc:context:]):
        (-[WebNetscapePluginView scheduleTimerWithInterval:repeat:timerFunc:]):

2010-04-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Timothy Hatcher.

        Next step towards fixing
        
        https://bugs.webkit.org/show_bug.cgi?id=20784
        move npapi.h to C99 integer types

        Use the C99 types everywhere. The "old" types are still around but will be removed
        in a subsequent commit.

        * Plugins/WebBaseNetscapePluginStream.h:
        * Plugins/WebBaseNetscapePluginStream.mm:
        (WebNetscapePluginStream::deliverData):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]):
        (-[WebNetscapePluginView getAuthenticationInfoWithProtocol:host:port:scheme:realm:username:usernameLength:password:passwordLength:]):
        * Plugins/npapi.mm:
        (NPN_MemAlloc):
        (NPN_MemFlush):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_Write):
        (NPN_ScheduleTimer):
        (NPN_UnscheduleTimer):
        (NPN_GetValueForURL):
        (NPN_SetValueForURL):
        (NPN_GetAuthenticationInfo):
        (WKN_CheckIfAllowedToLoadURL):
        (WKN_CancelCheckIfAllowedToLoadURL):

2010-04-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        First part of
        https://bugs.webkit.org/show_bug.cgi?id=20784
        move npapi.h to C99 integer types.

        * MigrateHeaders.make:

2010-04-28  Mike Thole  <mthole@apple.com>

        Reviewed by David Kilzer.

        Add canAuthenticateAgainstProtectionSpace() to frame loader so that a protection space 
        can be inspected before attempting to authenticate against it
        https://bugs.webkit.org/show_bug.cgi?id=38271

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::canAuthenticateAgainstProtectionSpace):
        Added.  If the resource load delegate implements the callback, use its answer.  If it does
        not, then only send authentication challenges for pre-10.6 protection spaces, which matches
        CFNetwork's default behavior.
        * WebView/WebDelegateImplementationCaching.h:
        * WebView/WebDelegateImplementationCaching.mm:
        (CallResourceLoadDelegateReturningBoolean): Added case for passing three objects.
        * WebView/WebResourceLoadDelegatePrivate.h:
        Added private SPI definition: webView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:
        * WebView/WebView.mm:
        (-[WebView _cacheResourceLoadDelegateImplementations]):

2010-04-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7918719> ASSERT(isMainThread()) from Font::setShouldUseSmoothing()
        
        Ensure that the WebView +initialize method initializes threading, so that things are correctly
        initialized when the first call into the WebKit framework is via a WebView class method.

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

2010-04-28  Darin Adler  <darin@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION: Autoscroll does not work in Mail messages
        https://bugs.webkit.org/show_bug.cgi?id=38267
        rdar://problem/7559799

        The machinery to make autoscrolling work on Mac OS X when a WebView is embedded in another
        view had gotten broken in multiple ways. For some reason, a combination of bugs made it
        partly work until around r48064. This brings it back.

        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::scrollRectIntoView): When converting coordinates, use the document view
        rather than the WebView itself. This logic may not be correct for the case where
        usesDocumentViews is NO, but that is currently an experimental mode and can be fixed later.

2010-04-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler and Eric Seidel.

        Add layoutTestController.setPrinting()
        https://bugs.webkit.org/show_bug.cgi?id=37203

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame renderTreeAsExternalRepresentationForPrinting:]):

2010-04-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38097
        Disentangle initializing the main thread from initializing threading

        Calls initializeMainThreadToProcessMainThread since there is no way to ensure
        that the initialize method will be called on the main thread.

        * Carbon/CarbonWindowAdapter.mm:
        (+[CarbonWindowAdapter initialize]): Add call to initializeMainThreadToProcessMainThread.
        * History/WebBackForwardList.mm:
        (+[WebBackForwardList initialize]): Ditto.
        * History/WebHistoryItem.mm:
        (+[WebHistoryItem initialize]): Ditto.
        * Misc/WebElementDictionary.mm:
        (+[WebElementDictionary initialize]): Ditto.
        * Misc/WebIconDatabase.mm:
        (+[WebIconDatabase initialize]): Ditto.
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (+[WebHostedNetscapePluginView initialize]): Ditto.
        * Plugins/WebBaseNetscapePluginView.mm:
        (+[WebBaseNetscapePluginView initialize]): Ditto.
        * Plugins/WebBasePluginPackage.mm:
        (+[WebBasePluginPackage initialize]): Ditto.
        * Plugins/WebNetscapePluginView.mm:
        (+[WebNetscapePluginView initialize]): Ditto.
        * WebCoreSupport/WebEditorClient.mm:
        (+[WebEditCommand initialize]): Ditto.
        * WebCoreSupport/WebFrameLoaderClient.mm: 
        (+[WebFramePolicyListener initialize]): Ditto.
        * WebView/WebArchive.mm:
        (+[WebArchivePrivate initialize]): Ditto.
        * WebView/WebDataSource.mm:
        (+[WebDataSourcePrivate initialize]): Ditto.
        * WebView/WebHTMLView.mm:
        (+[WebHTMLViewPrivate initialize]): Ditto.
        (+[WebHTMLView initialize]): Ditto.
        * WebView/WebResource.mm:
        (+[WebResourcePrivate initialize]): Ditto.
        * WebView/WebTextIterator.mm:
        (+[WebTextIteratorPrivate initialize]): Ditto.
        * WebView/WebView.mm:
        * WebView/WebViewData.mm: Ditto.
        (+[WebViewPrivate initialize]): Ditto.

2010-04-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7903728> REGRESSION (r51617): WebView fails to load plug-in MIME types
        https://bugs.webkit.org/show_bug.cgi?id=38085

        WebView was calling -_webView in a few places where it should have just used itself. It never
        makes sense for WebView to call -_webView on itself, and these calls look like they were copied
        from similar code in WebHTMLView, WebFrameView and WebDataSource, where -_webView has a different,
        useful meaning.

        * WebView/WebView.mm:
        (-[WebView drawSingleRect:]): Replaced [self _webView] with self.
        (-[WebView _viewClass:andRepresentationClass:forMIMEType:]): Replaced [[self _webView] preferences]
        with _private->preferences.
        (-[WebView _canShowMIMEType:]): Ditto.

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

        Reviewed by Anders Carlsson.

        <rdar://problem/7894489> When printing Flash, send a drawRect event, rather than NPPrint
        
        When printing Flash plug-ins in 32-bit, send a drawRect event with a CGContextRef, rather than calling
        NPPrint with a GWorldPtr, since Flash prefers the CGContext path.

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

2010-04-22  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/38029> +[WebTextIteratorPrivate initialize] is missing call to JSC::initializeThreading()

        Reviewed by Timothy Hatcher.

        Every other Objective-C class that calls
        WebCoreObjCFinalizeOnMainThread(self) in +initialize also calls
        JSC::initializeThreading().  The WebTextIteratorPrivate class
        was the only one missing this call.

        * WebView/WebTextIterator.mm:
        (+[WebTextIteratorPrivate initialize]): Added call to
        JSC::initializeThreading().

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

        Rubber-stamped by Mark Rowe.

        <rdar://problem/7805969> REGRESSION: iTunes unable to play trailers

        Undo the changes made for https://bugs.webkit.org/show_bug.cgi?id=35215 (<rdar://problem/7673157>)
        for now. Clients rely on the old behavior, so a fix that changes it will need to account for
        those.

        * WebCoreSupport/WebFrameLoaderClient.mm: (WebFrameLoaderClient::createPlugin): Pass pluginURL
        instead of baseURL again.

2010-04-22  Dave Moore  <davemoore@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added notification when the favicons for a page are changed
        from a script.
        The Document object will notify the frame loader, which will
        notify the client. Implementations of FrameLoaderClient will
        have to add one method; dispatchDidChangeIcons().

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

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

2010-04-22  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r58069.
        http://trac.webkit.org/changeset/58069
        https://bugs.webkit.org/show_bug.cgi?id=27751

        Broke compile on Windows.

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

2010-04-22  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=27751

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences javaScriptCanAccessClipboard]):
        (-[WebPreferences setJavaScriptCanAccessClipboard:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-04-21  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Shinichiro Hamaji.

        https://bugs.webkit.org/show_bug.cgi?id=37964
        Fix a typo in comments - Korean encoding name is windows-949, not windows-939

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

2010-04-21  Mark Rowe  <mrowe@apple.com>

        Tiger build fix.

        * Plugins/WebPluginController.mm: Add an #import that is necessary on Tiger.

2010-04-21  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric Carlson.

        <rdar://problem/7313430> Many crashes in Safari inside Flip4Mac below -[NSAlert didEndAlert:returnCode:contextInfo:]

        Existing versions of the Flip4Mac WebKit plug-in have an object lifetime bug related to an NSAlert that is
        used to notify the user about updates to the plug-in. This bug can result in Safari crashing if the page
        containing the plug-in navigates while the alert is displayed (<rdar://problem/7313430>).

        The gist of the bug is thus: Flip4Mac sets an instance of the TSUpdateCheck class as the modal delegate of the
        NSAlert instance. This TSUpdateCheck instance itself has a delegate. The delegate is set to the WmvPlugin
        instance which is the NSView subclass that is exposed to WebKit as the plug-in view. Since this relationship
        is that of delegates the TSUpdateCheck does not retain the WmvPlugin. This leads to a bug if the WmvPlugin
        instance is destroyed before the TSUpdateCheck instance as the TSUpdateCheck instance will be left with a
        pointer to a stale object. This will happen if a page containing the Flip4Mac plug-in triggers a navigation
        while the update sheet is visible as the WmvPlugin instance is removed from the view hierarchy and there are
        no other references to keep the object alive.

        We work around this bug by patching the following two messages:

        1) -[NSAlert beginSheetModalForWindow:modalDelegate:didEndSelector:contextInfo:]
        2) -[TSUpdateCheck alertDidEnd:returnCode:contextInfo:]

        Our override of 1) detects whether it is Flip4Mac's update sheet triggering the alert by checking whether the
        modal delegate is an instance of TSUpdateCheck. If it is, it retains the modal delegate's delegate.

        Our override of 2) then autoreleases the delegate, balancing the retain we added in 1).

        These two overrides have the effect of ensuring that the WmvPlugin instance will always outlive the TSUpdateCheck
        instance, preventing the TSUpdateCheck instance from accessing a stale delegate pointer and crashing the application.

        * Plugins/WebPluginController.mm:
        (-[WebPluginController addPlugin:]): Check whether the plug-in being instantiated is the Flip4Mac plug-in and
        install our workaround if it is.
        (isKindOfClass): Helper function that checks whether the given object is an instance of the named class.
        (WebKit_TSUpdateCheck_alertDidEnd_returnCode_contextInfo_): Autorelease the delegate.
        (WebKit_NSAlert_beginSheetModalForWindow_modalDelegate_didEndSelector_contextInfo_): Retain the modal delegate's
        delegate if this NSAlert belongs to the Flip4Mac plug-in.
        (installFlip4MacPlugInWorkaroundIfNecessary): Swizzle the necessary methods.  We swizzle the TSUpdateCheck methods
        first since it is possible that in some versions of Flip4Mac the TSUpdateCheck class may not exist or may not have
        the method we're interested in.  In that case we want to bail out before patching any methods.

2010-04-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/7856151> REGRESSION: NPP_Destroy is not called when page navigates when plug-in is displaying modal dialog

        An interaction between the plug-in host and WebKit was resulting in WKPCSetModal being called while
        NetscapePluginInstanceProxy was waiting on a reply to the GetScriptableNPObject message. This resulted
        in calls to stop the plug-in being deferred due to the presence of plug-in code up the stack.  This
        could lead to crashes as it was possible for the plug-in view to be deallocated during the modal runloop.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInvalidateRect):
        (WKPCSetModal): Defer the handling of setModal until the next runloop iteration if the host proxy
        is already processing requests.  This ensures that there will be no plug-in code on the stack when
        the modal runloop is entered, which allows the plug-in to be stopped when the page is navigated while
        a modal dialog is displayed.

2010-04-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor DocumentWriter out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=37175

        Update these callsites because the method moved to DocumentWriter.

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):
        (-[WebFrame _receivedData:textEncodingName:]):

2010-04-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Change a parameter type of chooseIconForFiles()
        https://bugs.webkit.org/show_bug.cgi?id=37504

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::chooseIconForFiles):

2010-04-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57892.
        http://trac.webkit.org/changeset/57892
        https://bugs.webkit.org/show_bug.cgi?id=37864

        Caused an assertion in Mac builds (Requested by smfr on
        #webkit).

        * WebView/WebFrame.mm:
        (-[WebFrame _getVisibleRect:]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _install]):

2010-04-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Clean up RenderPart/RenderPartObject/RenderFrame/RenderEmbeddedObject
        https://bugs.webkit.org/show_bug.cgi?id=37741
        
        Make Frame::ownerRenderer() return a RenderFrameBase* rather than a
        RenderPart*, and add the necessary toRenderFrameBase() and isRenderFrameBase().

        * WebView/WebFrame.mm:
        (-[WebFrame _getVisibleRect:]):
        * WebView/WebFrameView.mm:
        (-[WebFrameView _install]):

2010-04-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Finish exposing extremal shrink factors WebHTMLView uses when shrinking pages to fit in the
        printing width as SPI.

        * WebKit.exp: Export _WebHTMLViewPrintingMinimumShrinkFactor and _WebHTMLViewPrintingMaximumShrinkFactor.

2010-04-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=37675
        Remove casts/constructors to/from JSC::UString type from WebCore::String
        
        WebCore's strings should not know about JSC::UString, this should be abstracted
        away in the bindings.  Add explicit conversion methods rather than relying on
        overloaded cast operators / constructors being implicitly called.

        This patch only changes the class String, once this has landed StringImpl, and
        hopefully AtomicString too, should follow suit.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (identifierFromIdentifierRep):
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::getPropertyNames):
        * WebView/WebFrame.mm:
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:forceUserGesture:]):
        (-[WebFrame _stringByEvaluatingJavaScriptFromString:withGlobalObject:inScriptWorld:]):
        * WebView/WebScriptDebugDelegate.mm:
        (-[WebScriptCallFrame evaluateWebScript:]):
        * WebView/WebScriptDebugger.mm:
        (toNSURL):
        * WebView/WebView.mm:
        (aeDescFromJSValue):

2010-04-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        Expose the extremal shrink factors WebHTMLView uses when shrinking pages to fit in the
        printing width as SPI.

        * WebView/WebHTMLView.mm:
        Replaced two macros with constants.
        (-[WebHTMLView _beginPrintModeWithPageWidth:shrinkToFit:]): Changed to use the constants.
        (-[WebHTMLView _scaleFactorForPrintOperation:]): Ditto.
        * WebView/WebHTMLViewPrivate.h: Declared _WebHTMLViewPrintingMinimumShrinkFactor and
        _WebHTMLViewPrintingMaximumShrinkFactor.

2010-04-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7870651> WebDynamicScrollBarsView.h generates compile errors when included in plain Objective-C files.

        * WebView/WebDynamicScrollBarsView.h:

2010-04-15  Adam Roben  <aroben@apple.com>

        Export WebUserContentURLPattern from WebKit

        Rubber-stamped by Mark Rowe.

        * WebKit.exp:

2010-04-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Made consecutive calls to -[WebHTMLView _beginPrintModeWithPageWidth:shrinkToFit:] work
        without intermediate calls -[WebHTMLView _endPrintMode].

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _setPrinting:minimumPageWidth:maximumPageWidth:adjustViewSize:]):

2010-04-15  Adam Roben  <aroben@apple.com>

        Expose UserContentURLPattern as WebKit SPI

        Fixes <http://webkit.org/b/37354>.

        Reviewed by Tim Hatcher.

        * Misc/WebUserContentURLPattern.h: Added.

        * Misc/WebUserContentURLPattern.mm: Added.
        (-[WebUserContentURLPattern initWithPatternString:]): Initialize
        _private and then parse the passed-in string into a
        UserContentURLPattern.
        (-[WebUserContentURLPattern dealloc]): Release _private.

        (-[WebUserContentURLPattern isValid]):
        (-[WebUserContentURLPattern scheme]):
        (-[WebUserContentURLPattern host]):
        (-[WebUserContentURLPattern matchesSubdomains]):
        Call through to UserContentURLPattern.

2010-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Separated a DOMWrapperWorld's behavior of keeping wrappers alive from
        its own lifetime, so a DOMWrapperWorld's controller can throw away
        its wrappers even before its refcount reaches 0.

        * WebView/WebScriptWorld.h:
        * WebView/WebScriptWorld.mm:
        (-[WebScriptWorld unregisterWorld]): Exported this function through WebKit.

2010-04-12  Timothy Hatcher  <timothy@apple.com>

        SecurityOrigin needs a way to remove individual OriginAccessEntries
        https://bugs.webkit.org/show_bug.cgi?id=37449

        Reviewed by Dave Hyatt.

        * WebView/WebView.mm:
        (+[WebView _removeOriginAccessWhitelistEntryWithSourceOrigin:destinationProtocol:destinationHost:allowDestinationSubdomains:]):
        Call SecurityOrigin::removeOriginAccessWhitelistEntry.
        * WebView/WebViewPrivate.h: Added _removeOriginAccessWhitelistEntryWithSourceOrigin.

2010-04-13  Timothy Hatcher  <timothy@apple.com>

        Rename SecurityOrigin::whiteListAccessFromOrigin to addOriginAccessWhitelistEntry.
        And SecurityOrigin::resetOriginAccessWhiteLists to resetOriginAccessWhitelists.

        SecurityOrigin needs a way to remove individual OriginAccessEntries
        https://bugs.webkit.org/show_bug.cgi?id=37449

        Reviewed by Dave Hyatt.

        * WebView/WebView.mm:
        (+[WebView _addOriginAccessWhitelistEntryWithSourceOrigin:destinationProtocol:destinationHost:allowDestinationSubdomains:]):
        (+[WebView _resetOriginAccessWhitelists]):
        * WebView/WebViewPrivate.h:

2010-04-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r57468.
        http://trac.webkit.org/changeset/57468
        https://bugs.webkit.org/show_bug.cgi?id=37433

        Broke the world...  Must have applied the patch wrong
        (Requested by abarth on #webkit).

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):
        (-[WebFrame _receivedData:textEncodingName:]):

2010-04-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor DocumentWriter out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=37175

        Update these callsites because the method moved to DocumentWriter.

        * WebView/WebFrame.mm:
        (-[WebFrame _canProvideDocumentSource]):
        (-[WebFrame _receivedData:textEncodingName:]):

2010-04-10  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7845305> Further adoption of formal protocols for delegates.

        Move EmptyProtocolDefinitions.h down in to WebCore, and add the new protocols. Adopt the protocols in the appropriate places.

        * Misc/EmptyProtocolDefinitions.h: Removed.
        * Misc/WebDownload.mm:
        * WebKitPrefix.h:

2010-04-09  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Work around QTMovieView bug (<rdar://problem/7712713>) by using a QTMovieLayer instead.
        https://bugs.webkit.org/show_bug.cgi?id=37311 / <rdar://problem/7749993>

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):

2010-04-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=24572
        XMLHttpRequest.statusText returns always "OK" on Mac

        * WebCoreSupport/WebSystemInterface.m: (InitWebCoreSystemInterface):

2010-04-09  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r57343.
        http://trac.webkit.org/changeset/57343
        https://bugs.webkit.org/show_bug.cgi?id=37311

        Broke Tiger compile.

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):

2010-04-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7846015> REGRESSION (r57332) - Crash in [WebDynamicScrollBarsView(WebInternal) reflectScrolledClipView:] when opening the Downloads window

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView initWithCoder:]): Added. Calls super and then initializes _private.

2010-04-09  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        Work around QTMovieView bug (<rdar://problem/7712713>) by using a QTMovieLayer instead.
        https://bugs.webkit.org/show_bug.cgi?id=37311 / <rdar://problem/7749993>

        * WebView/WebVideoFullscreenController.mm:
        (-[WebVideoFullscreenController windowDidLoad]):
        (-[WebVideoFullscreenController setMediaElement:WebCore::]):

2010-04-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/7814899> REGRESSION(r56008): iTunes crashes on quit inside -[NSScrollView dealloc]

        In r56008 new instance variables were added to WebDynamicScrollBarsView, increasing its size.
        This causes problems for 32-bit applications that derive from WebDynamicScrollBarsView, as the
        size and layout of their subclasses is baked in at compile time.  This results in instances
        being allocated that are smaller than the new code expects, and may result in the new instance
        variables sharing the same memory space as any instance variables that the subclass defines.

        We can avoid this problem by having the class contain only a single member that acts as a pointer
        to a heap-allocated structure that acts as storage for the real instance variables.  This makes
        us free to add instance variables in the future without risk of changing the size of the class.
        To ensure that 32-bit applications that are built against this new WebDynamicScrollBarsView header
        are able to run against older versions of WebKit we pad the class out to its previous size.  This
        results in any subclasses of WebDynamicScrollBarsView being created with a layout that is compatible
        with both versions of the code.

        This change could potentially break a subclass of WebDynamicScrollBarsView that directly accesses
        instance variables of its superclass.  However, this is a private header and no known subclasses
        of WebDynamicScrollBarsView access superclass instance variables in this fashion.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView initWithFrame:]):
        (-[WebDynamicScrollBarsView dealloc]):
        (-[WebDynamicScrollBarsView finalize]):
        (-[WebDynamicScrollBarsView setAllowsHorizontalScrolling:]):
        (-[WebDynamicScrollBarsView setAllowsScrollersToOverlapContent:]):
        (-[WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]):
        (-[WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]):
        (-[WebDynamicScrollBarsView horizontalScrollingAllowed]):
        (-[WebDynamicScrollBarsView verticalScrollingAllowed]):
        (-[WebDynamicScrollBarsView contentViewFrame]):
        (-[WebDynamicScrollBarsView tile]):
        (-[WebDynamicScrollBarsView setSuppressLayout:]):
        (-[WebDynamicScrollBarsView setScrollBarsSuppressed:repaintOnUnsuppress:]):
        (-[WebDynamicScrollBarsView updateScrollers]):
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        (-[WebDynamicScrollBarsView allowsHorizontalScrolling]):
        (-[WebDynamicScrollBarsView allowsVerticalScrolling]):
        (-[WebDynamicScrollBarsView scrollingModes:WebCore::vertical:WebCore::]):
        (-[WebDynamicScrollBarsView horizontalScrollingMode]):
        (-[WebDynamicScrollBarsView verticalScrollingMode]):
        (-[WebDynamicScrollBarsView setScrollingModes:vertical:andLock:]):
        (-[WebDynamicScrollBarsView setHorizontalScrollingModeLocked:]):
        (-[WebDynamicScrollBarsView setVerticalScrollingModeLocked:]):
        (-[WebDynamicScrollBarsView setScrollingModesLocked:]):
        (-[WebDynamicScrollBarsView horizontalScrollingModeLocked]):
        (-[WebDynamicScrollBarsView verticalScrollingModeLocked]):
        (-[WebDynamicScrollBarsView scrollWheel:]):

2010-04-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=24300, don't expose history info via CSS

        Add SPI so that layout tests can access computed style including :visited information.

        * WebView/WebRenderNode.mm:
        (copyRenderNode):
        * WebView/WebView.mm:
        (-[WebView _computedStyleIncludingVisitedInfo:forElement:]):
        * WebView/WebViewInternal.h:
        * WebView/WebViewPrivate.h:

2010-04-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        Refactor WebHTMLView printing code and add private methods to enter and exit printing mode.
        https://bugs.webkit.org/show_bug.cgi?id=37246

        * Misc/WebNSPrintOperationExtras.h: Declared -_web_availablePaperWidth and -_web_availablePaperHeight.
        * Misc/WebNSPrintOperationExtras.m:
        (-[NSPrintOperation _web_availablePaperWidth]): Turned -[WebHTMLView _availablePaperWidthForPrintOperation:]
        into this method.
        (-[NSPrintOperation _web_availablePaperHeight]): Turned -[WebHTMLView _calculatePrintHeight] into this
        method.
        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _isInPrintMode]): Added this accessor.
        (-[WebHTMLView _beginPrintModeWithPageWidth:shrinkToFit:]): Added. Moved the code from -knowsPageRange: that
        computes the layout widths and enters printing mode into this private method.
        (-[WebHTMLView _endPrintMode]): New private method (the old -_endPrintMode has been renamed).
        (-[WebHTMLView _scaleFactorForPrintOperation:]): Use -[NSPrintOperation _web_availablePaperWidth].
        (-[WebHTMLView _endPrintModeAndRestoreWindowAutodisplay]): Renamed -_endPrintMode to this, changed it to call
        _endPrintMode.
        (-[WebHTMLView _delayedEndPrintMode:]): Updated for rename.
        (-[WebHTMLView knowsPageRange:]): Use -_beginPrintModeWithPageWidth:shrintToFit:,
        -[NSPrintOperation _web_availablePaperWidth], and -[NSPrintOperation _web_availablePaperHeight]. Updated for
        rename.
        (-[WebHTMLView beginDocument]): Updated for rename.
        (-[WebHTMLView endDocument]): Ditto.
        * WebView/WebHTMLViewPrivate.h: Declared new private methods -_isInPrintMode,
        -_beginPrintModeWithPageWidth:shrinkToFit: and -_endPrintMode.

2010-04-07  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Removed redundant FrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest()
        https://bugs.webkit.org/show_bug.cgi?id=36949

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

2010-04-06  Dan Bernstein  <mitz@apple.com>

        Tiger build fix after r57184.

        * WebView/WebHTMLViewPrivate.h:

2010-04-06  Dan Bernstein  <mitz@apple.com>

        Tiger build fix after r57184.

        * WebView/WebHTMLViewPrivate.h:

2010-04-06  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Speculative build fix for Tiger.

        * WebView/WebHTMLViewPrivate.h:

2010-04-06  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig and Anders Carlsson.

        Expose WebHTMLView’s page breaking logic as SPI.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _adjustedBottomOfPageWithTop:bottom:limit:]): Factored out of -adjustPageHeightNew:top:bottom:limit:
        (-[WebHTMLView adjustPageHeightNew:top:bottom:limit:]): Call -_adjustedBottomOfPageWithTop:bottom:limit:
        * WebView/WebHTMLViewPrivate.h: Declared -_adjustedBottomOfPageWithTop:bottom:limit:

2010-04-06  Mark Rowe  <mrowe@apple.com>

        Add an #if in order to make Tiger happy.

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

2010-04-06  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * WebView/WebViewData.mm:
        (-[WebViewPrivate init]): Use objc_collectingEnabled like we do elsewhere in WebKit.

2010-04-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        Test case for <http://webkit.org/b/37115> / <rdar://problem/7829331>.
        REGRESSION(r56989): Crash in Mail in WebCore::Position::isCandidate when deleting block using block deletion UI

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _updateFontPanel]): Ask the window whether it is the key window rather than doing the comparison
        manually.  This allows DumpRenderTree's override of isKeyWindow to force this code path to be taken during tests.

2010-04-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37111
        <rdar://problem/7790327> Draw replacement text when plug-in host crashes

        * Plugins/Hosted/WebHostedNetscapePluginView.h: Removed _pluginDied - it was only used
        for drawing replacement icon, and this information is now in WebCore.
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView pluginHostDied]): Tell RenderEmbeddedObject that the plug-in
        has crashed.
        (-[WebHostedNetscapePluginView drawRect:]): Removed the case for crashed plug-in host. It is
        handled by WebCore now.

        * WebCoreSupport/WebViewFactory.mm: (-[WebViewFactory crashedPluginText]): Added a string
        for plug-in failure.        

2010-04-03  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Enable HTMLProgressElement for Safari on OSX
        https://bugs.webkit.org/show_bug.cgi?id=36961

        * Configurations/FeatureDefines.xcconfig:

2010-04-02  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        https://bugs.webkit.org/show_bug.cgi?id=36624
        Add an INIT macro for the WebKitSystemInterface function wkQTMovieSelectPreferredAlternates.

        * WebCoreSupport/WebSystemInterface.m:
        (InitWebCoreSystemInterface):

2010-04-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=37043
        Java regression tests spam stderr about being unable to set status message

        With this change, there is still spam about "Attempt to access JavaScript from destroyed
        applet, type 9." I haven't investigated if that indicates a problem or not.

        * Plugins/WebPluginController.mm: (-[WebPluginController webPlugInContainerShowStatus:]):
        Removed check for _documentView. We don't seem to care.

2010-04-01  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dmitry Titov.

        Add FileThread for async file operation support in FileReader and FileWriter
        https://bugs.webkit.org/show_bug.cgi?id=36896

        Add FILE_READER or FILE_WRITER feature defines.

        * Configurations/FeatureDefines.xcconfig:

2010-04-01  Ada Chan  <adachan@apple.com>

        Reviewed by Darin Adler.

        Change WebDatabaseManager::deleteOrigin() to return true if there are no errors in deleting the origin.
        Ditto for WebDatabaseManager::deleteDatabase().
        
        https://bugs.webkit.org/show_bug.cgi?id=36988

        * Storage/WebDatabaseManager.mm:
        (-[WebDatabaseManager deleteOrigin:]):
        (-[WebDatabaseManager deleteDatabase:withOrigin:]):
        * Storage/WebDatabaseManagerPrivate.h:

2010-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36976
        <rdar://problem/7817498>
        REGRESSION(r54783): Silverlight plug-in causes Safari to crash if JavaScript is disabled

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::get): The HashTable assertions aren't
        there to catch potential future attempts to store empty/deleted values before these happen -
        it's actually wrong to try to look up these values. Added an early return.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget): Ditto.

2010-04-01  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Added layerTreeAsText function to DRT (for Mac)
        https://bugs.webkit.org/show_bug.cgi?id=36782

        This is the WebKit side for Mac. It plumbs the
        call from WebCore to DRT.

        * WebView/WebFrame.mm:WebKit (Mac) side of plumbing
        (-[WebFrame _layerTreeAsText]):
        * WebView/WebFramePrivate.h:

2010-04-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=36976
        <rdar://problem/7817498>
        REGRESSION(r54783): Silverlight plug-in causes Safari to crash if JavaScript is disabled

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::get): Use find() instead of get(),
        because the latter fails with an assertion when looking up 0 or -1.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget): Be prepared for unexpected
        object IDs coming from plug-in host.

2010-03-31  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 36845 - AX: need a way to set the label of a AXWebArea through WebKit
        https://bugs.webkit.org/show_bug.cgi?id=36845

        Provide a way through WebKit to set an accessible label that describes the web area.    

        * WebView/WebFrame.mm:
        (-[WebFrame setAccessibleName:]):
        * WebView/WebFramePrivate.h:

2010-03-31  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Adds Geolocation param for cancelGeolocationPermissionRequestForFrame.
        https://bugs.webkit.org/show_bug.cgi?id=35031

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::cancelGeolocationPermissionRequestForFrame):

2010-03-30  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=36866
        Move CString to WTF

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getCookies):
        (WebKit::NetscapePluginInstanceProxy::getProxy):
        (WebKit::NetscapePluginInstanceProxy::getAuthenticationInfo):
        (WebKit::NetscapePluginInstanceProxy::resolveURL):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView resolveURL:forTarget:]):

2010-03-30  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=36848
        <rdar://problem/7362913>
        Menu items appropriate only for rich-content editing can appear in plain-text contexts

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView validRequestorForSendType:returnType:]):
        Don't return self for non-string content if _canEditRichly is false.

2010-03-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36791
        Add assertions for instance proxy validity

        Add some assertions that the instance proxy hasn't been deleted. We sometimes keep a raw
        pointer to one across complicated function calls, relying on the caller to protect the
        reference.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::renderContextID):
        (WebKit::NetscapePluginInstanceProxy::pluginView):
        (WebKit::NetscapePluginInstanceProxy::hostProxy):

2010-03-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by David Kilzer.

        Explicit guards for ENABLE_GEOLOCATION
        https://bugs.webkit.org/show_bug.cgi?id=25756

        * WebCoreSupport/WebGeolocationMock.mm:
        (-[WebGeolocationMock setError:code:]): Make the body conditional on 
        ENABLE(GEOLOCATION)
        (-[WebGeolocationMock setPosition:]): Ditto.

2010-03-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Change method name due to it dealing with both flattening
        of frame sets and inner frames.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences isFrameFlatteningEnabled]):
        (-[WebPreferences setFrameFlatteningEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-03-27  Darin Adler  <darin@apple.com>

        * Misc/WebNSFileManagerExtras.m:
        (-[NSFileManager _webkit_pathWithUniqueFilenameForPath:]):
        Removed stray "!". How did that get in there?

2010-03-27  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        WebKit NSFileManager methods don't handle broken symlinks correctly.
        Part of <rdar://problem/7574046>.

        * Misc/WebNSFileManagerExtras.h: Removed unused defines and methods.
        * Misc/WebNSFileManagerExtras.m: Removed unused methods.
        (fileExists): Added. For use instead of fileExistsAtPath: for cases where we'd like
        to treat a broken symlink as a file that does indeed exist.
        (-[NSFileManager _webkit_pathWithUniqueFilenameForPath:]): Use fileExists.

2010-03-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        * Plugins/Hosted/NetscapePluginHostProxy.mm: (WKPCRunSyncOpenPanel): Re-fetch host proxy in
        a way that works in a function that doesn't have a pluginID argument for some reason.

2010-03-25  Simon Fraser  <simon.fraser@apple.com>

        Build fix: no review.
        
        Another c_str() -> data().
        
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::enumerate):

2010-03-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Mark Rowe.

        Correctness fix after r56493.

        * Plugins/Hosted/NetscapePluginHostProxy.mm: (WKPCRunSyncOpenPanel): We still need to update
        our hostProxy reference, even though we didn't use to have instanceProxy. Nothing guarantees
        that the host proxy won't go away while the open panel is up.

2010-03-24  Mark Rowe  <mrowe@apple.com>

        Build fix after r56474.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCRunSyncOpenPanel):

2010-03-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=36563
        A plug-in makes Safari crash on http://www.itscodingtime.com/

        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (WebKit::NetscapePluginHostProxy::port): Assert that the object is still alive. This isn't
        beautifully systemic, but helped catch a bug, and may help catch more.
        (WebKit::NetscapePluginHostProxy::clientPort): Ditto.
        (WebKit::NetscapePluginHostProxy::isProcessingRequests): Changed m_processingRequests to a
        static. This doesn't change behavior much, but helps avoid writing into deallocated memory.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy): Changed m_processingRequests
        to a static.
        (WebKit::NetscapePluginHostProxy::processRequests): Ditto. Changing m_processingRequests
        after destroying the object in pluginHostDied() was wrong, but reasonably harmless, as there
        wasn't much time for some other object to be allocated at this address.
        (WKPCEvaluate): Refetch host proxy, as it may have been destroyed.
        (WKPCInvoke): Ditto.
        (WKPCInvokeDefault): Ditto.
        (WKPCGetProperty): Ditto.
        (WKPCSetProperty): Ditto.
        (WKPCRemoveProperty): Ditto.
        (WKPCHasProperty): Ditto.
        (WKPCHasMethod): Ditto.
        (WKPCEnumerate): Ditto.
        (WKPCRunSyncOpenPanel): Ditto.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::processRequestsAndWaitForReply): Bail out of the 
        "event loop" if host proxy went away while processing a request.

2010-03-24  Hayato Ito  <hayato@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Refactor computePageRects so that Mac can make use of it.
        https://bugs.webkit.org/show_bug.cgi?id=36159

        Refactoring only, so no new tests.

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

2010-03-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Make Icon::createIconForFiles() optional.
        https://bugs.webkit.org/show_bug.cgi?id=35072

        - Rename iconForFiles() to chooseIconForFiles().
        - Call Icon::createIconForFiles() from chooseIconForFiles().

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::chooseIconForFiles):

2010-03-23  Dan Bernstein  <mitz@apple.com>

        Reverted accidental change from r56429.

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

2010-03-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        WebKit part of
        <rdar://problem/7197736> Plug-in clip rect does not update when overflow
        clip changes
        https://bugs.webkit.org/show_bug.cgi?id=36479.

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView visibleRectDidChange]): Added. Calls
        WKSyncSurfaceToView().
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView _windowClipRect]): Changed to use Widget::windowClipRect().
        (-[WebBaseNetscapePluginView visibleRectDidChange]): Added. Invokes -renewGState.

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by Simon Fraser.

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

        This patch entirely WebNullPluginView.
        
        * Plugins/WebNetscapePluginView.mm:
        * Plugins/WebNullPluginView.h: Removed.
        * Plugins/WebNullPluginView.mm: Removed.
        * Resources/nullplugin.tiff: Removed.
        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): Invoke the resource load delegate if the plug-in failed to load.

2010-03-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=36455
        Make WebKit more resistant against plug-in crashes

        No tests, because crashing on build bots isn't good, even if it's only helper processes
        that crash.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::waitForReply): Protect "this", because this function
        needs it after waiting for reply. Some callers used to do this, but not all, and we really
        shouldn't depend on callers here.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::wheelEvent): Don't protect the plug-in instance proxy,
        because this function doesn't use it after waiting for reply.
        (WebKit::NetscapePluginInstanceProxy::createBindingsInstance): Ditto.

        * Plugins/Hosted/ProxyInstance.mm: (WebKit::ProxyInstance::invoke): Added an m_instanceProxy
        null check for another code path.

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by John Sullivan.

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

        * WebCoreSupport/WebViewFactory.mm:
        (-[WebViewFactory missingPluginText]): Added.

2010-03-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36337
        Log an error when an OOP plug-in sends an unknown object id

        Making these LOG_ERROR and not ASSERTs, because I don't want early returns to look
        temporary or redundant.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (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):

2010-03-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36184
        YouTube video resizing doesn't work with OOP plug-ins

        Test: plugins/resize-from-plugin.html

        We were calling _WKPHResizePluginInstance synchronously or asynchronously, depending on
        whether the size has changed. But sync and async messages are not necessarily delivered in
        order - plug-in host listens only to the former while waiting for a response to a message it
        sent (a call to invoke() in this case).

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::resize):
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]):

2010-03-16  Yury Semikhatsky <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Introduce InspectorFrontendClient that provides InspectorFrontend with an interface to the embedder. InspectorClient now serves as a delegate for InspectorController and does not contain methods for managing inspector frontend window. That allows to create remote InspectorFrontendHost.

        Introduce InspectorFrontendClient that would provide InspectorFrontend with an interface to the embedder
        https://bugs.webkit.org/show_bug.cgi?id=35036

        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorClient.mm:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::inspectorDestroyed):
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorClient::highlight):
        (WebInspectorClient::hideHighlight):
        (WebInspectorFrontendClient::WebInspectorFrontendClient):
        (WebInspectorFrontendClient::frontendLoaded):
        (WebInspectorFrontendClient::localizedStringsURL):
        (WebInspectorFrontendClient::hiddenPanels):
        (WebInspectorFrontendClient::bringToFront):
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::attachWindow):
        (WebInspectorFrontendClient::detachWindow):
        (WebInspectorFrontendClient::setAttachedWindowHeight):
        (WebInspectorFrontendClient::inspectedURLChanged):
        (WebInspectorFrontendClient::updateWindowTitle):
        (-[WebInspectorWindowController dealloc]):
        (-[WebInspectorWindowController windowShouldClose:]):
        (-[WebInspectorWindowController close]):
        (-[WebInspectorWindowController showWindow:]):
        (-[WebInspectorWindowController attach]):
        (-[WebInspectorWindowController detach]):
        (-[WebInspectorWindowController attached]):
        (-[WebInspectorWindowController setFrontendClient:]):
        (-[WebInspectorWindowController destroyInspectorView]):
        (-[WebNodeHighlighter initWithInspectedWebView:]):
        (-[WebNodeHighlighter dealloc]):
        (-[WebNodeHighlighter highlightNode:]):
        (-[WebNodeHighlighter hideHighlight]):
        (-[WebNodeHighlighter didAttachWebNodeHighlight:]):
        (-[WebNodeHighlighter willDetachWebNodeHighlight:]):
        * WebInspector/WebInspector.mm:
        (-[WebInspector attach:]):
        (-[WebInspector detach:]):

2010-03-15  Andy Estes  <aestes@apple.com>

        Reviewed by John Sullivan.

        Updated call to WKGetWheelEventDeltas() to match new method signature.

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

        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView scrollWheel:]):

2010-03-15  John Sullivan  <sullivan@apple.com>

        Reviewed by Adam Roben.
        
        -[WebFrame setAlwaysHideHorizontal/VerticalScroller:] prevents keyboard scrolling
        <https://bugs.webkit.org/show_bug.cgi?id=36125>

        * WebView/WebDynamicScrollBarsView.h:
        Added instance variables horizontalScrollingAllowedButScrollerHidden and
        verticalScrollingAllowedButScrollerHidden. Renamed instance variables 
        hideHorizontal/VerticalScroller to alwaysHideHorizontal/VerticalScroller for clarity.
        Declared methods -horizontalScrollingAllowed and -verticalScrollingAllowed.
        Added comments.
        
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]):
        Updated for instance variable renaming.
        (-[WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]):
        Ditto.
        (-[WebDynamicScrollBarsView horizontalScrollingAllowed]):
        New method, returns YES if the scroller is showing or the only reason that the scroller
        is not showing is that setAlwaysHideHorizontalScrolling has been called.
        (-[WebDynamicScrollBarsView verticalScrollingAllowed]):
        New method, returns YES if the scroller is showing or the only reason that the scroller
        is not showing is that setAlwaysHideVerticalScrolling has been called.
        (-[WebDynamicScrollBarsView updateScrollers]):
        Updated for instance variable renamings. Now updates horizontalScrollingAllowedButScrollerHidden
        and verticalScrollingAllowedButScrollerHidden. Now takes the always-hidden state into account
        in the early-return code path, to avoid taking it into account twice in the regular code path.
        
        * WebView/WebFrameView.mm:
        (-[WebFrameView _scrollToBeginningOfDocument]):
        Use _isScrollable instead of _hasScrollBars.
        (-[WebFrameView _scrollToEndOfDocument]):
        Ditto.
        (-[WebFrameView scrollToBeginningOfDocument:]):
        Use _largestScrollableChild instead of _largestChildWithScrollBars.
        (-[WebFrameView scrollToEndOfDocument:]):
        Ditto.
        (-[WebFrameView _pageVertically:]):
        Use _isScrollable and _largestScrollableChild instead of _hasScrollBars
        and _largestChildWithScrollBars.
        (-[WebFrameView _pageHorizontally:]):
        Ditto.
        (-[WebFrameView _scrollLineVertically:]):
        Ditto.
        (-[WebFrameView _scrollLineHorizontally:]):
        Ditto.
        (-[WebFrameView keyDown:]):
        Use _largestScrollableChild instead of _largestChildWithScrollBars.
        (-[WebFrameView _isScrollable]):
        New method, calls -[WebDynamicScrollBarsView horizontalScrollingAllowed] and
        -[WebDynamicScrollBarsView verticalScrollingAllowed]
        (-[WebFrameView _largestScrollableChild]):
        New method, like _largestChildWithScrollBars but uses _isScrollable.
        (-[WebFrameView _hasScrollBars]):
        Added a comment that this is no longer used by Safari, and can thus probably be
        deleted once we no longer want to support it for nightly build compatibility with
        old versions of Safari.
        (-[WebFrameView _largestChildWithScrollBars]):
        Ditto.
        
        * WebView/WebFrameViewPrivate.h:
        Declared -_isScrollable and -_largestScrollableChild. Added comments to
        _hasScrollBars and _largestChildWithScrollBars saying that they are no longer
        used by Safari, and can thus probably be deleted once we no longer want to 
        support them for nightly build compatibility with old versions of Safari.

2010-03-15  John Sullivan  <sullivan@apple.com>

        Method name and parameter name mistakes from recent SPI addition
        <https://bugs.webkit.org/show_bug.cgi?id=36119>

        Reviewed by Dan Bernstein.

        * WebView/WebDynamicScrollBarsView.h:
        Renamed instance variable and method name from "setAllowXXX" to "setAllowsXXX".
        
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setAllowsScrollersToOverlapContent:]):
        Updated for renamed instance variable and method.
        (-[WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]):
        Changed parameter name from shouldBeVisible to shouldBeHidden.
        (-[WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]):
        Ditto.
        (-[WebDynamicScrollBarsView contentViewFrame]):
        Updated for renamed instance variable.
        (-[WebDynamicScrollBarsView tile]):
        Ditto.
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]):
        Ditto.

        * WebView/WebFrame.mm:
        (-[WebFrame setAllowsScrollersToOverlapContent:]):
        Renamed method from setAllowXXX, and updated for same change in WebDynamicScrollBarsView.

        * WebView/WebFramePrivate.h:
        Renamed method name from "setAllowXXX" to "setAllowsXXX".

2010-03-14  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Remove unneeded dependency on non-string identifier for an NSTableColumn
        https://bugs.webkit.org/show_bug.cgi?id=36106

        * WebView/WebTextCompletionController.mm:
        (-[WebTextCompletionController _buildUI]): Use init instead of initWithIdentifier:
        because the table has only one column and that column does not need an identifier.

2010-03-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=34942 Fullscreen 
        API naming is inconsistent
        -and corresponding-
        <rdar://problem/7729165>

        This patch changes all occurrences of "fullScreen" to the more 
        popular "fullscreen."

        * Plugins/Hosted/NetscapePluginHostProxy.h:
        (WebKit::NetscapePluginHostProxy::isFullscreenWindowShowing):
        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WebKit::NetscapePluginHostProxy::NetscapePluginHostProxy):
        (WebKit::NetscapePluginHostProxy::didEnterFullscreen):
        (WebKit::NetscapePluginHostProxy::didExitFullscreen):
        (WebKit::NetscapePluginHostProxy::setFullscreenWindowIsShowing):
        (WKPCSetFullscreenWindowIsShowing):
        * Plugins/Hosted/WebKitPluginClient.defs:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView _workaroundSilverlightFullscreenBug:]):
        (-[WebNetscapePluginView _createPlugin]):
        (-[WebNetscapePluginView _destroyPlugin]):
        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController windowDidLoad]):

2010-03-12  Andy Estes  <aestes@apple.com>

        Reviewed by Brady Eidson.

        Expose WebPDFView's underlying PDFDocument.

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

        * WebView/WebDocumentPrivate.h: Create a new protocol called
        WebDocumentPDF.
        * WebView/WebPDFView.h: Have WebPDFView implement said protocol.
        * WebView/WebPDFView.mm:
        (-[WebPDFView PDFDocument]): Expose WebPDFView's underlying
        PDFDocument by implementing -(PDFDocument*)PDFDocument from
        WebDocumentPDF.

2010-03-12  Andy Estes  <aestes@apple.com>

        Reviewed by Brady Eidson.

        Remove an unused method.

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

        * Plugins/WebPluginController.mm:
        removed - (void)showURL:(NSURL *) inFrame:(NSString *)

2010-03-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by David Kilzer.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Default to using the appropriate SDK if the target Mac OS X version is not the current Mac OS X version.

        * Configurations/Base.xcconfig:

2010-03-11  Mark Rowe  <mrowe@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/7745082> Make it possible to build WebKit for older Mac OS X versions from the current Mac OS X version

        Introduce TARGET_MAC_OS_X_VERSION_MAJOR to represent the Mac OS X version that is being targeted.  It defaults to the
        current Mac OS X version unless otherwise specified.

        Key off TARGET_MAC_OS_X_VERSION_MAJOR where we'd previously been keying off MAC_OS_X_VERSION_MAJOR.

        Explicitly map from the target Mac OS X version to the preferred compiler since Xcode's default compiler choice
        may not be usable when targetting a different Mac OS X version.

        Key off TARGET_GCC_VERSION rather than MAC_OS_X_VERSION_MAJOR in locations where we'd previously been keying off
        MAC_OS_X_VERSION_MAJOR but the decision is really related to the compiler version being used.

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

2010-03-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Hyatt.

        Remove invalidateContents, it isn't used and it never makes sense to only invalidate the contents.

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:

2010-03-11  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=35965
        <rdar://problem/7742771> Crash when passing an object returned from plug-in back to the plug-in

        Test: plugins/round-trip-npobject.html

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::retainLocalObject): Corrected the check - there is
        now a separate ProxyRuntimeObject class for proxy pbjects.
        (WebKit::NetscapePluginInstanceProxy::releaseLocalObject): Ditto.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke): Check if m_instanceProxy is still non-zero. The plug-in
        could have crashed while we were waiting for response.
        (WebKit::ProxyInstance::setFieldValue): Ditto.

2010-03-10  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=35975
        <rdar://problem/7739922> Flash 10.1b crashes when generating snapshots

        Do a version check before sending a drawRect event to a Flash plugin,
        since 10.1.d51 has a bug that crashes when called this way.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView drawRect:]):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView supportsSnapshotting]):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView drawRect:]):

2010-03-10  John Sullivan  <sullivan@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/7735387> input type other than text won't work with autofill
        <https://bugs.webkit.org/show_bug.cgi?id=35963>

        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation elementDoesAutoComplete:]):
        Return true for any text field that's not a password, rather than only
        for TEXT type.

2010-03-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        REGRESSION: WebInspector docking busted on Windows
        <rdar://problem/7728433> and https://bugs.webkit.org/show_bug.cgi?id=35953

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]): Use the InspectorController:: copy of the should attach settings key.
        (-[WebInspectorWindowController attach]): Ditto.
        (-[WebInspectorWindowController detach]): Ditto.

2010-03-09  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Updated for FastMalloc reporting changes.
        
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics memoryStatistics]):

2010-03-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Mark Rowe.

        Move the new method to the end of the MIG definitions file, to avoid breaking
        compatibility between WebKit and older versions of WebKitPluginHost.

        * Plugins/Hosted/WebKitPluginHost.defs:

2010-03-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7714340> Need to grab image snapshot of Core Animation plugins
        
        Allow plug-ins using the Core Animation drawing model to be captured when doing a flattening paint,
        by sending them a drawRect event as if they were software-painting.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::snapshot):
        New snapshot() method that calls over to the plugin host, and then draws the image that comes back.
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView drawRect:]): If we don't have a software renderer, but we're doing
        a flattening paint, then call the snapshot method.
        
        * Plugins/Hosted/WebKitPluginHost.defs: Added snapshot method.
        
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView inFlatteningPaint]):
        New utility method that asks the FrameView whether the current paint behavior is
        flattening.
        
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView drawRect:]): If the plug-in is using CA but this is a flattening
        paint, go ahead and send a drawRect event to the plug-in.

2010-03-08  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Fix crash when you quit inside an unload handler.
        rdar://problem/6958347

        Test: manual-tests/quit-inside-unload.html

        * WebView/WebView.mm:
        (-[WebView _closeWithFastTeardown]): Removed code to set
        _private->closed since _close now does this earlier, before
        calling this method.
        (-[WebView _close]): Moved code to set _private->closed to the
        top of this method.
        (-[WebView setHostWindow:]): Rewrote the code that forbade
        setting the host window after closing so that it only forbids
        non-nil host windows. That way, the code to clear away the host
        window can run safely after setting _private->closed, yet client
        code cannot set a new host window after closing.

2010-03-08  Darin Adler  <darin@apple.com>

        Roll out a file I checked in by accident.

        * WebView/WebView.mm: Back to previous version.

2010-03-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Turn on HW accel on Leopard even if coreVideoHas7228836Fix() is false, when WebGL is enabled
        https://bugs.webkit.org/show_bug.cgi?id=35759

        This allows WebGL to work on Leopard without the fix. It exposes these users to the crash
        that happens because of the CoreVideo bug, but it limits the exposure to those who have 
        chosen to enable WebGL.

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

2010-03-02  Adam Treat  <atreat@rim.com>

        Reviewed by Dave Hyatt.

        Adapt the mac port to the refactoring of repaint methods.

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

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::invalidateContents):
        (WebChromeClient::invalidateWindow):
        (WebChromeClient::invalidateContentsAndWindow):
        (WebChromeClient::invalidateContentsForSlowScroll):

2010-03-08  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Blob.slice support.
        https://bugs.webkit.org/show_bug.cgi?id=32993

        Add ENABLE_BLOB_SLICE feature define.

        * Configurations/FeatureDefines.xcconfig:

2010-03-08  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Remove the now-redundant Settings fields for the Database
        https://bugs.webkit.org/show_bug.cgi?id=35763

        No new tests; this code isn't called.

        * WebView/WebView.mm: Remove the call into Settings.
        (-[WebView _preferencesChangedNotification:]):

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Cameron Zwarich.

        Remove unnecessary includes from header files, adding them to the handful of implementation files that need them.

        * Misc/WebIconDatabase.mm:

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Cameron Zwarich.

        Remove unnecessary includes from header files, adding them to the handful of implementation files that need them.

        * Misc/WebNSPasteboardExtras.mm:

2010-03-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7717249> DOMSVG.h includes a non-existent DOMSVGFEMorphologyElement.h

        * MigrateHeaders.make: Migrate DOMSVGFEMorphologyElement.h and DOMSVGFEMorphologyElementInternal.h.

2010-03-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Use a framework-style include to pull in WebInspector.h for consistency
        with other parts of WebKit.

        * WebInspector/WebInspectorPrivate.h:

2010-03-04  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff Garen.

        REGRESSION (31281): -[WebArchive initWithCoder:] leaks
        <rdar://problem/7702420> and https://bugs.webkit.org/show_bug.cgi?id=35534

        * WebView/WebArchive.mm:
        (-[WebArchive initWithCoder:]): Don't retain objects we don't own.

2010-03-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=35692
        <rdar://problem/7703622> Crash when calling abort() on an XHR while in a windowless WebView

        * Panels/WebAuthenticationPanel.m: (-[WebAuthenticationPanel runAsModalDialogWithChallenge:]):
        Retain the challenge, just like it's done for sheet.

2010-03-02  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Move database enable bit fully out of settings
        This is stage one of a three-stage commit [webkit, then chromium, then
        webkit again].  In this change I'm adding calls to
        Database::setIsAvailable inside Settings::setDatabaseEnabled and
        anywhere else that called it, and switching webkit fully over to using
        that flag [added in a previous checkin].  Phase two will remove
        Chromium's use of Settings for the Database, and phase three will remove
        the Setting for the Database enable entirely, leaving only
        Database::isAvailable/setIsAvailable.

        No new tests; tested by existing storage tests.

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

        * WebView/WebView.mm:  Added a call to Database::setIsAvailable.
        (-[WebView _preferencesChangedNotification:]):

2010-03-02  Adam Roben  <aroben@apple.com>

        Add -[WebView _registerURLSchemeAsSecure:]

        Fixes <http://webkit.org/b/35580> <rdar://problem/7706407> Expose
        SecurityOrigin::registerURLSchemeAsSecure as WebKit SPI

        Reviewed by Tim Hatcher.

        * WebView/WebView.mm:
        (+[WebView _registerURLSchemeAsSecure:]):
        * WebView/WebViewPrivate.h:
        Added. Calls through to SecurityOrigin::registerURLSchemeAsSecure.

2010-03-01  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Adam Barth.

        Adapt to the new ZoomMode enum.
        https://bugs.webkit.org/show_bug.cgi?id=35347

        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):
        (-[WebView _setZoomMultiplier:isTextOnly:]):
        (-[WebView _realZoomMultiplierIsTextOnly]):

2010-02-27  Jing Jin  <jjin@apple.com>

        Reviewed by Timothy Hatcher.

        Move implementation of Bug 35449 into WebFramePrivate.

        * WebView/WebFrame.h:
        * WebView/WebFrame.mm:
        (-[WebFrame setAllowScrollersToOverlapContent:]):
        (-[WebFrame setAlwaysHideHorizontalScroller:]):
        (-[WebFrame setAlwaysHideVerticalScroller:]):
        * WebView/WebFramePrivate.h:

2010-02-26  Jing Jin  <jjin@apple.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=35449
        Add ability to hide WebFrame scrollbars and to allow scrollbars to overlap with content.

        * WebView/WebDynamicScrollBarsView.h:
        * WebView/WebDynamicScrollBarsView.mm:
        (-[WebDynamicScrollBarsView setAllowScrollersToOverlapContent:]): Allows scrollbars to 
        overlap with the document and re-layouts the document.
        (-[WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]): Hides the horizontal scrollbar.
        (-[WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]): Hides the vertical scrollbar.
        (-[WebDynamicScrollBarsView contentViewFrame]): Calculates the appropriate frame based
        on allowScrollersToOverlapContent.
        (-[WebDynamicScrollBarsView tile]): If allowScrollersToOverlapContent is YES, set the
        contentView's frame so it overlaps with the scrollbar.
        (-[WebDynamicScrollBarsView updateScrollers]): Take into account hideHorizontalScroller
        and hideVerticalScroller.
        (-[WebDynamicScrollBarsView reflectScrolledClipView:]): set drawsBackground to NO when
        scrollbars are overlapping with content, so we don't get trails during scrollbar draw updates.
        * WebView/WebDynamicScrollBarsViewInternal.h:
        * WebView/WebFrame.h:
        * WebView/WebFrame.mm:
        (-[WebFrame setAllowScrollersToOverlapContent:]): Hook for [WebDynamicScrollBarsView setAllowScrollersToOverlapContent:]
        (-[WebFrame setAlwaysHideHorizontalScroller:]): Hook for [WebDynamicScrollBarsView setAlwaysHideHorizontalScroller:]
        (-[WebFrame setAlwaysHideVerticalScroller:]): Hook for [WebDynamicScrollBarsView setAlwaysHideVerticalScroller:]

2010-02-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Alexey Proskuryakov.

        Bug 35401 - Fix handling of errors in handling calls over bridge,
        where base object bridge-type does not match method bridge-type.

        The code assumes users will only attempt to invoke a Java method
        on a Java base object, etc.
        Add language specific subclasses of RuntimeMethod, and pass the
        RuntimeMethod into invokeMethod, so we can typecheck before
        casting.  Throw an exception on type mismatch.

        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::PluginRuntimeMethod::PluginRuntimeMethod): new class to distinguish this type of RuntimeMethod.
        (WebKit::ProxyInstance::getMethod): create an appropriate sublclass of RuntimeMethod.
        (WebKit::ProxyInstance::invokeMethod): dynamically check the type of the RuntimeMethod.

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

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=35394
        <rdar://problem/7685262> Make passing objects between Java and plug-ins work

        Added a ProxyInstance implementation of RuntimeObject.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        * Plugins/Hosted/ProxyInstance.h:
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::newRuntimeObject):
        (WebKit::ProxyInstance::getClass):
        * Plugins/Hosted/ProxyRuntimeObject.h: Added.
        (WebKit::ProxyRuntimeObject::classInfo):
        * Plugins/Hosted/ProxyRuntimeObject.mm: Added.
        (WebKit::ProxyRuntimeObject::ProxyRuntimeObject):
        (WebKit::ProxyRuntimeObject::~ProxyRuntimeObject):
        (WebKit::ProxyRuntimeObject::getInternalProxyInstance):

2010-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        [Chromium API] Disambiguate allowJavaScript from didNotAllowScript
        https://bugs.webkit.org/show_bug.cgi?id=35205

        Make these two callsites explicit about not running script immediately.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject):
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray):

2010-02-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher and Pavel Feldman.

        Regression (r55107) - WebInspector docking is busted.
        https://bugs.webkit.org/show_bug.cgi?id=35274

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]): Swap the order of the "should attach?" check
          to get the expected behavior.

2010-02-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7611158> Incomplete repaint of YouTube timeline thumb while scrolling
        https://bugs.webkit.org/show_bug.cgi?id=34381

        Test: fast/repaint/repaint-during-scroll.html

        NSClipView offsets any rects marked as needing display during scrolling
        by the scroll offset. Compensate for this when -setNeedsDisplay: is called
        during scrolling.

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _frameOrBoundsChanged]): Set inScrollPositionChanged to YES
        around to call to FrameView::scrollPositionChanged().
        (-[WebHTMLView setNeedsDisplayInRect:]): When called beneath
        scrollPositionChanged(), adjust the rect by the inverse of the scroll offset.

2010-02-23  Steve Block  <steveblock@google.com>

        Reviewed by Darin Adler.

        Adds ChromeClient::cancelGeolocationPermissionRequestForFrame
        https://bugs.webkit.org/show_bug.cgi?id=34962

        This method is required so that a Geolocation object can cancel an
        asynchronous permission request. This allows the chrome client to cancel
        any UI it is showing for the permission request.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::cancelGeolocationPermissionRequestForFrame):

2010-02-22  Alexey Proskuryakov  <ap@apple.com>

        Rubber-stamped by Geoff Garen.

        Rename RuntimeObjectImp to RuntimeObject.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::addValueToArray):
        (WebKit::NetscapePluginInstanceProxy::retainLocalObject):
        (WebKit::NetscapePluginInstanceProxy::releaseLocalObject):

2010-02-22  Brady Eidson  <beidson@apple.com>

        Reviewed by Tim Hatcher.

        Disable WebView docking to views that are too small.
        <rdar://problem/7248409> and https://bugs.webkit.org/show_bug.cgi?id=35254

        * WebCoreSupport/WebInspectorClient.mm:
        (-[WebInspectorWindowController showWindow:]): No matter the preference, don't open the inspector 
          window attached if WebCore says it shouldn't be attached.

2010-02-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/7285392> 
        On Leopard, we have to disable hardware acceleration if we detect that the
        installed Core Video framework has bug <rdar://problem/7228836>.
        
        * WebView/WebView.mm:
        (coreVideoHas7228836Fix):
        (-[WebView _preferencesChangedNotification:]):

2010-02-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        False warnings about needing layout in
        -[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]
        https://bugs.webkit.org/show_bug.cgi?id=35218

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:]):
        Suppress the warning and the forced layout if the view is not being drawn
        in this display operation.

2010-02-21  Kevin Decker  <kdecker@apple.com>

        Reviewed by Sam Weinig.

        plugInViewWithArguments: API sends wrong parameter for WebPlugInBaseURLKey
        https://bugs.webkit.org/show_bug.cgi?id=35215
        <rdar://problem/7673157>
        
        The plugInViewWithArguments: API passes a dictionary of plugin arguments. One of the parameters
        is WebPlugInBaseURLKey, which is a key that represents the base URL of the document containing
        the plug-in's view. Instead of sending the base URL, code in  WebFrameLoaderClient::createPlugin
        would incorrectly pass the source URL of the plug-in resource.

        * WebCoreSupport/WebFrameLoaderClient.mm:
        (WebFrameLoaderClient::createPlugin): When building the plug-in arguments dictionary, pass the
        real base URL for the WebPlugInBaseURLKey key.

2010-02-19  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by David Levin.

        Add an ENABLE flag for sandboxed iframes to make it possible to disable it in releases
        https://bugs.webkit.org/show_bug.cgi?id=35147

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=35132
        <rdar://problem/7664353> Mouse cursor sometimes flickers over Flash content (35132)

        * Plugins/WebNetscapePluginEventHandlerCarbon.mm:
        (WebNetscapePluginEventHandlerCarbon::mouseMoved): Send adjustCursor events on every mouse
        move. This matches Firefox, and is actually required for plug-ins to manipulate cursor wihout
        resorting to techniques such as fast firing timers.

        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView handleMouseEntered:]): Some plug-ins handle mouse cursor internally,
        but those that don't just need to get an arrow cursor (matching Firefox). This means that
        e.g. a plugin inside <A> won't get a finger mouse pointer.

        * Plugins/WebHostedNetscapePluginView.mm:
        (-[WebNetscapePluginView handleMouseEntered:]):
        (-[WebNetscapePluginView handleMouseExited:]):
        Implement this behavior here, too. Also, out of process code didn't reset mouse pointer on
        mouse exit, which it needed to do.

        * WebView/WebHTMLView.mm:
        (needsCursorRectsSupportAtPoint):
        (setCursor):
        (resetCursorRects):
        Make sure that the same workaround we have for Web content also applies to Netscape plug-ins,
        as AppKit would reset the mouse pointer to arrow if given a chance.
        (+[WebHTMLViewPrivate initialize]): Renamed setCursorIMP on Leopard and higher to prevent
        confusion - the method we override is completely different.
        (-[WebHTMLView hitTest:]): Added a FIXME about a likely bug.

2010-02-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7535894> Page contents missing from snapshot on Newsweek.com article
        
        Followup to avoid capturing compositing layers twice in snapshots. Add private
        methods to WebView to specify whether drawing the WebView into an image will
        include flattened compositing layers (the default behavior) or not.

        * WebView/WebFrame.mm:
        (-[WebFrame _drawRect:contentsOnly:]): Consult the WebView flag to see if we
        want flattening.
        
        * WebView/WebViewPrivate.h: New methods.
        * WebView/WebView.mm: Ditto.
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView _setIncludesFlattenedCompositingLayersWhenDrawingToBitmap:]):
        (-[WebView _includesFlattenedCompositingLayersWhenDrawingToBitmap]):

        * WebView/WebViewData.h: New member variable.

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35165
        plugins/set-status.html fails on Windows bot

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::status):
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView status:]):
        Match Windows port behavior (and also Firefox one, in a way) - pass null status messages as
        empty ones to chrome.

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

        Reviewed by Dan Bernstein.

        <rdar://problem/7535894> Page contents missing from snapshot on Newsweek.com article

        Add logic to determine when painting via the software rendering path will give an equivalent
        result to the accelerated compositing presentation. This tests for the presence of 3D transforms.

        Also have -[WebFrame _drawRect:contentsOnly:] set the PaintBehaviorFlattenCompositingLayers
        paint behavior when painting into a bitmap context, so that snapshots contain composited layers.

        * WebView/WebFrame.mm:
        (-[WebFrame _drawRect:contentsOnly:]): Set the PaintBehaviorFlattenCompositingLayers flag
        when painting into a bitmap context.
        * WebView/WebView.mm:
        (-[WebView _isSoftwareRenderable]): Returns YES if all frames can be software-rendered.
        * WebView/WebViewPrivate.h: New _isSoftwareRenderable method.

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=35134
        <rdar://problem/7246280> Crash when a plugin calls NPN_SetStatus(0)

        Test: plugins/set-status.html

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::status):
        (WebKit::NetscapePluginInstanceProxy::loadURL):
        Added null checks for CFStringCreateWithCString arguments.

2010-02-17  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin, Darin Fisher, Simon Hausmann.

        When a live iframe element is moved between pages, it still depends on the old page.
        https://bugs.webkit.org/show_bug.cgi?id=34382

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameLoaderClient.mm:
        Added empty implementation of a new virtual method.

        (WebFrameLoaderClient::didTransferChildFrameToNewDocument):

2010-02-17  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        Introduces new Icon loading interface in order to support
        asynchronous loading.
        https://bugs.webkit.org/show_bug.cgi?id=32054

        Add an empty implementation of ChromeClient::iconForFiles().

        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebChromeClient.mm:
        (WebChromeClient::iconForFiles):

2010-02-17  Timothy Hatcher  <timothy@apple.com>

        Add a way for WebView and its dependancies to be selectively included
        in WebKitStatistics leak tracking. By default WebView is not included and
        you need to subclass WebView and implement +isIncludedInWebKitStatistics
        to be included.

        rdar://problem/7567677&7572900
        https://webkit.org/b/35045

        Reviewed by Adam Roben.

        * WebView/WebDataSource.mm:
        (-[WebDataSource _initWithDocumentLoader:]): Increment WebDataSourceCount if the WebFrame is included in statistics.
        (-[WebDataSource dealloc]): Only --WebDataSourceCount if _private->includedInWebKitStatistics is YES.
        (-[WebDataSource finalize]): Ditto.
        * WebView/WebFrame.mm:
        (-[WebFrame _isIncludedInWebKitStatistics]): Return _private->includedInWebKitStatistics.
        (-[WebFrame _initWithWebFrameView:webView:]): Increment WebFrameCount if the WebView's class is included in statistics.
        (-[WebFrame dealloc]): Only --WebFrameCount if _private->includedInWebKitStatistics is YES.
        (-[WebFrame finalize]): Ditto.
        * WebView/WebFrameInternal.h:
        * WebView/WebFrameView.mm:
        (-[WebFrameView _setWebFrame:]): Increment WebFrameViewCount if the WebFrame is included in statistics.
        (-[WebFrameView initWithFrame:]): Move ++WebFrameViewCount from here since we don't
        know what WebFrame we belong to yet.
        (-[WebFrameView dealloc]): Only --WebFrameViewCount if _private->includedInWebKitStatistics is YES.
        (-[WebFrameView finalize]): Ditto.
        * WebView/WebHTMLRepresentation.mm:
        (-[WebHTMLRepresentation init]): Move ++WebHTMLRepresentationCount from here since we don't
        know what WebFrame we belong to yet.
        (-[WebHTMLRepresentation dealloc]): Only --WebHTMLRepresentationCount if _private->includedInWebKitStatistics is YES.
        (-[WebHTMLRepresentation finalize]): Ditto.
        (-[WebHTMLRepresentation setDataSource:]): Increment WebHTMLRepresentationCount if the WebFrame of the dataSource is
        included in statistics.
        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        (-[WebView dealloc]):
        (+[WebView shouldIncludeInWebKitStatistics]): Return NO, so any WebView wont be included.
        Subclasses that care can return YES to be included.
        * WebView/WebViewInternal.h:

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

        Reviewed by Sam Weinig.

        Generalize delayed plug-in start for background tabs for use for other media
        https://bugs.webkit.org/show_bug.cgi?id=34981

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView viewWillMoveToWindow:]): Added comment.
        (-[WebHTMLView viewDidMoveToWindow]): Ditto.

        * WebView/WebView.mm:
        (-[WebView _commonInitializationWithFrameName:groupName:usesDocumentViews:]):
        Call setCanStartMedia right away so that if this view is not in a window, it
        will not start any media.
        (-[WebView viewWillMoveToWindow:]): Call setCanStartMedia(false) when moving
        to a window of nil.
        (-[WebView viewDidMoveToWindow]): Call setCanStartMedia(true) when moved to
        a window that is non-nil.

2010-02-16  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=34988
        WebHTMLView.mm has two -willRemoveSubview: methods

        * WebView/WebHTMLView.mm:
        (-[WebHTMLView willRemoveSubview:]): Consolidate the two copies of this method.

2010-02-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen and Kevin Decker.

        https://bugs.webkit.org/show_bug.cgi?id=34989
        <rdar://problem/7417965> Cursor disappears on scroll bars that are over plugin content

        This fixes event dispatch for both Cocoa and Carbon event models (mouseEntered/mouseExited
        in the former case, and adjustCursor in the latter).

        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView handleMouseEntered:]):
        (-[WebHostedNetscapePluginView handleMouseExited:]):
        * Plugins/WebBaseNetscapePluginView.h:
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView handleMouseEntered:]):
        (-[WebBaseNetscapePluginView handleMouseExited:]):
        * Plugins/WebNetscapePluginView.h:
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView handleMouseEntered:]):
        (-[WebNetscapePluginView handleMouseExited:]):
        AppKit cannot reliably dispatch events for overlapping views. We are now asking WebCore to
        notify plug-in views of mouse entered/exited as part of DOM event dispatch.

        * WebCoreSupport/WebFrameLoaderClient.mm: (NetscapePluginWidget::handleEvent): Besides
        mouse moved, dispatch plugin mouse entered/exit events in HTMLPlugInElement default event
        handler. Other mouse events are passed down by EventHandler.

2010-02-15  Alexey Proskuryakov  <ap@apple.com>

        More build fixing (for what is actually a 64-bit failure, as 32-bit apparently includes
        headers that aren't included in 64-bit).

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::contains):
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::get):
        Move inline functions to .cpp; also made the class Noncopyable.

2010-02-15  Alexey Proskuryakov  <ap@apple.com>

        Mac release build fix attempt.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::~LocalObjectMap):
        Implement destructor in .cpp file, where necessary headers are already included.

2010-02-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Kevin Decker.

        <rdar://problem/7130641> Browser objects identity is not preserved by Safari

        Out of process part.

        To avoid excessive IPC, plugin process doesn't send each NPObject release/retain call to
        Safari. It only sends one when the last one is removed, and it can destroy the proxy
        NPObject.

        However, the browser may be sending the same object out to plug-in as a function call
        argument at the same time - neither side can know what the other one is up to. The solution
        is to make the "destroying object" call return a boolean result, making it possible for 
        the browser to make plugin host keep the proxy with zero refcount for a little longer.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCForgetBrowserObject): This function (that used to be named ReleaseObject) is only
        called when plug-in releases all of its references, so renamed it. Its boolean result
        is returned as call success or failure.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap): Made the numeric ID to JSObject map
        two-way.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::idForObject): This method is tricky
        in that it creates objects with refcount of 1, but doesn't increase refcount when returning
        found objects. This extra count accounts for the "reference" kept by plugin process.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::retain): Only retaining for the
        duration of calls out to plug-in, which means that refcount is almost always equal to 1.
        Note that we can't use "++" here, due to how std::pair works!
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::release): Ditto.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::clear): Clear all references when
        stopping plug-in.
        (WebKit::NetscapePluginInstanceProxy::LocalObjectMap::forget): Like release(), but only
        functional when recount is 1 (meaning that the object is not being sent out to plug-in at
        the moment).
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy): Updated for other changes.
        (WebKit::NetscapePluginInstanceProxy::cleanup): Ditto.
        (WebKit::NetscapePluginInstanceProxy::getWindowNPObject): Ditto.
        (WebKit::NetscapePluginInstanceProxy::getPluginElementNPObject): Ditto.
        (WebKit::NetscapePluginInstanceProxy::forgetBrowserObjectID): Ditto.
        (WebKit::NetscapePluginInstanceProxy::evaluate): Ditto.
        (WebKit::NetscapePluginInstanceProxy::invoke): Ditto.
        (WebKit::NetscapePluginInstanceProxy::invokeDefault): Ditto.
        (WebKit::NetscapePluginInstanceProxy::construct): Ditto.
        (WebKit::NetscapePluginInstanceProxy::getProperty): Ditto.
        (WebKit::NetscapePluginInstanceProxy::setProperty): Ditto.
        (WebKit::NetscapePluginInstanceProxy::removeProperty): Ditto.
        (WebKit::NetscapePluginInstanceProxy::hasProperty): Ditto.
        (WebKit::NetscapePluginInstanceProxy::hasMethod): Ditto.
        (WebKit::NetscapePluginInstanceProxy::enumerate): Ditto.
        (WebKit::NetscapePluginInstanceProxy::addValueToArray): Ditto.
        (WebKit::NetscapePluginInstanceProxy::demarshalValueFromArray): Ditto.
        (WebKit::NetscapePluginInstanceProxy::retainLocalObject): Helper for calling retain when
        making calls out to plug-in. No-op for objects that aren't wrapped to be sent (i.e. for
        objects wrapping ProxyInstance wrappers for plug-in objects being sent bak).
        (WebKit::NetscapePluginInstanceProxy::releaseLocalObject): Ditto.

        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke): Retain/release arguments during call. 
        (WebKit::ProxyInstance::setFieldValue): Ditto.

        * Plugins/Hosted/WebKitPluginClient.defs: Renamed PCReleaseObject to PCForgetBrowserObject.

2010-02-12  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Removed unneeded custom implementation of isDescendantOf.

        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView shouldClipOutPlugin]): Use the
        -[NSView isDescendantOf:] method instead of our own method
        named superviewsHaveSuperviews.

2010-02-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7615234> REGRESSION (r48586): Loading an HTML page causes
        PDFKit to be loaded

        * WebView/WebPDFDocumentExtras.h: Removed the category declaration and
        addWebPDFDocumentExtras(). Declare allScriptsInPDFDocument().
        * WebView/WebPDFDocumentExtras.mm:
        (allScriptsInPDFDocument): Changed the -_web_allScripts method into this function.
        * WebView/WebPDFRepresentation.mm: Removed +initialize.
        (-[WebPDFRepresentation finishedLoadingWithDataSource:]): Use
        allScriptsInPDFDocument() instead of -_web_allScripts.

2010-02-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Exported some new JavaScript heap introspection.

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (+[WebCoreStatistics javaScriptObjectTypeCounts]): Just like
        javaScriptProtectedObjectTypeCounts, except this function enumerates all
        live objects, not just protected objects.

2010-02-08  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Cameron Zwarich.

        Restore ENABLE_RUBY flag so vendors can ship with Ruby disabled if they choose.
        https://bugs.webkit.org/show_bug.cgi?id=34698

        * Configurations/FeatureDefines.xcconfig:

2010-02-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=34490
        WebCore::ImageEventSender::dispatchPendingEvents() crashes in certain conditions

        * ForwardingHeaders/wtf/ValueCheck.h: Added.

2010-02-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Support frameset flattening
        https://bugs.webkit.org/show_bug.cgi?id=32717

        Add support for enabling/disabling FrameSet Flattening on the Mac port.

        * WebView/WebPreferenceKeysPrivate.h:
        * WebView/WebPreferences.mm:
        (+[WebPreferences initialize]):
        (-[WebPreferences isFrameSetFlatteningEnabled]):
        (-[WebPreferences setFrameSetFlatteningEnabled:]):
        * WebView/WebPreferencesPrivate.h:
        * WebView/WebView.mm:
        (-[WebView _preferencesChangedNotification:]):

2010-02-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=34771
        A stray mouse moved event is sent to plug-ins after mouse exit

        * WebCoreSupport/WebFrameLoaderClient.mm: (NetscapePluginWidget::handleEvent): A mouseout
        DOM event is dispatched while handling NSMouseMoved - but we shouldn't be sending a
        mouse moved event to plug-ins at this point.

2010-02-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get total number of pages to be printed
        https://bugs.webkit.org/show_bug.cgi?id=34699

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame numberOfPages:pageWidthInPixels:]):

2010-02-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=34727
        Assertion crashes and freezes when plug-in property access results in an exception

        * Plugins/Hosted/WebKitPluginClient.defs: Made PCSetProperty and PCRemoveProperty async.
        A plug-in can call back whil processing this call (e.g. for NPN_SetException), so we need
        to listen for messages while waiting for reply.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCEvaluate): If there is no instance proxy, return KERN_FAILURE. This improves consistency
        between method implementations, and leaves us with one less IPC call to make in failure case
        (returning false with KERN_SUCCESS and returning KERN_FAILURE looks the same from plugin
        host code).
        (WKPCInvoke): Ditto.
        (WKPCInvokeDefault): Ditto.
        (WKPCGetProperty): Ditto.
        (WKPCSetProperty): Send a reply once done.
        (WKPCRemoveProperty): Ditto.
        (WKPCHasProperty): If there is no instance proxy, return KERN_FAILURE.
        (WKPCHasMethod): Ditto.
        (WKPCEnumerate): Ditto.

2010-02-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/6530010> OOP: Support NPN_SetException

        Tested by plugins/netscape-throw-exception.html (removed it from skipped list).

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCSetException):
        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::globalExceptionString):
        (WebKit::NetscapePluginInstanceProxy::setGlobalException):
        (WebKit::NetscapePluginInstanceProxy::moveGlobalExceptionToExecState):
        * Plugins/Hosted/ProxyInstance.mm:
        (WebKit::ProxyInstance::invoke):
        (WebKit::ProxyInstance::getPropertyNames):
        (WebKit::ProxyInstance::fieldValue):
        (WebKit::ProxyInstance::setFieldValue):
        * Plugins/Hosted/WebKitPluginClient.defs:
        Route exception string to a global that's checked after calling into plug-in (just like in
        in-process case).

2010-02-05  Kevin Decker  <kdecker@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=34661
        <rdar://problem/7614067> REGRESSION (Safari 4.0-> Safari 4.0.4): NPP_SetWindow no longer sets a clipRect of (0,0,0,0) when it becomes hidden
        
        * Plugins/Hosted/WebHostedNetscapePluginView.mm:
        (-[WebHostedNetscapePluginView updateAndSetWindow]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.
        * Plugins/WebBaseNetscapePluginView.h: Moved superviewsHaveSuperviews to the base class.
        * Plugins/WebBaseNetscapePluginView.mm:
        (-[WebBaseNetscapePluginView superviewsHaveSuperviews]): Added to the base class; extracted from WebNetscapePluginView.
        (-[WebBaseNetscapePluginView shouldClipOutPlugin]): Added new method with code extracted from WebNetscapePluginView.
        * Plugins/WebNetscapePluginView.mm:
        (-[WebNetscapePluginView saveAndSetNewPortStateForUpdate:]): When clipping out NPDrawingModelCoreAnimation plug-ins, provide a zero'd out clipRect.

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

        Rubber-stamped by Dan Bernstein.

        Fix the ability to #include <WebKit/DOMFile.h>.

        * MigrateHeaders.make: Mark DOMBlob.h as a public header since the already-public DOMFile.h depends on it.

2010-02-04  John Sullivan  <sullivan@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=34611
        WebLocalizedString() could use an assertion that it is being called on the main thread

        Reviewed by Tim Hatcher.

        * Misc/WebLocalizableStrings.m: Removed.
        * Misc/WebLocalizableStrings.mm: Copied from mac/Misc/WebLocalizableStrings.m.
        Renamed to use .mm extension so it can include a C++ header.
        (WebLocalizedString):
        Added an assertion that this is being called on the main thread.

2010-02-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        REGRESSION (r53718): When scrolling a tall window by page, the overlap between pages is too big
        https://bugs.webkit.org/show_bug.cgi?id=34371

        * WebView/WebFrameView.mm:
        (-[WebFrameView _verticalPageScrollDistance]): Use Scrollbar methods instead of
        constants, and cap the scroll distance.
        (-[WebFrameView initWithFrame:]): Use Scrollbar::pixelsPerLineStep() instead of
        cScrollbarPixelsPerLineStep.
        (-[WebFrameView _horizontalPageScrollDistance]):Use Scrollbar methods instead of
        constants, and cap the scroll distance.

2010-02-01  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        Provide a way to get page number with layoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=33840

        * Misc/WebCoreStatistics.h:
        * Misc/WebCoreStatistics.mm:
        (-[WebFrame pageNumberForElement:element:pageWidth:]):

2010-01-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig + Oliver Hunt.

        Bug 34346 - With JSC bindings, make processingUserGesture work with events in Isolated Worlds

        Pass processeing user gensture flag to media play/pause methods.

        * WebView/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController setPlaying:]):

2010-02-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7044385> Crash at NetscapePlugInStreamLoader::didReceiveResponse()

        The crash was caused by having two streams with a streamID of 1.

        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::NetscapePluginInstanceProxy): Fixed a typo. Now
        correctly increments m_currentURLRequestID to account for the manual stream.
        (WebKit::NetscapePluginInstanceProxy::disconnectStream): If the stream is the manual stream,
        null it out instead of trying to remove it from the map. Added an assertion.
        (WebKit::NetscapePluginInstanceProxy::loadRequest): Added an assertion.

== Rolled over to ChangeLog-2010-01-29 ==
