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:

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

        Remove the two commands that make en.lproj and copy Localizable.strings.

        Rubber-stamped by Adam Roben.

        * WebKit.vcproj/WebKitLibPostBuild.cmd:

2011-04-18  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Include <WebCore/COMPtr.h> instead of "COMPtr.h"
        https://bugs.webkit.org/show_bug.cgi?id=58744

        * DOMCoreClasses.cpp:
        * DOMHTMLClasses.cpp:
        * WebActionPropertyBag.cpp:
        * WebBackForwardList.cpp:
        * WebCoreSupport/WebGeolocationClient.h:
        * WebDownload.h:
        * WebDropSource.h:
        * WebFrame.cpp:
        * WebHistoryItem.cpp:
        * WebIconDatabase.cpp:
        * WebNavigationData.h:
        * WebPreferences.cpp:
        * WebResource.h:
        * WebURLAuthenticationChallenge.cpp:
        * WebURLAuthenticationChallengeSender.cpp:
        * WebURLAuthenticationChallengeSenderCFNet.cpp:
        * WebURLAuthenticationChallengeSenderCurl.cpp:
        * WebView.h:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CG) to USE(CG)
        https://bugs.webkit.org/show_bug.cgi?id=58729

        * WebFrame.cpp:
        (WebFrame::spoolPages):
        * WebFrame.h:
        * WebPreferences.cpp:
        (WebPreferences::setFontSmoothing):
        (WebPreferences::setFontSmoothingContrast):
        * WebView.cpp:
        (systemParameterChanged):

2011-04-16  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Windows should use WebCore localized strings
        <rdar://problem/9119405>
        https://bugs.webkit.org/show_bug.cgi?id=58733

        * WebCoreSupport/WebEditorClient.cpp:
        (undoNameForEditAction):
        (WebEditorClient::registerCommandForUndo):
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        * WebURLResponse.cpp:
        (CFHTTPMessageCopyLocalizedShortDescriptionForStatusCode):
        (WebURLResponse::localizedStringForStatusCode):
        Change to use WEB_UI_STRING.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        * WebCoreSupport/WebPlatformStrategies.h:
        Remove the localization strategy in favor of using the default one.

2011-04-16  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Rename PLATFORM(CAIRO) to USE(CAIRO)
        https://bugs.webkit.org/show_bug.cgi?id=55192

        * WebFrame.cpp:
        (WebFrame::spoolPages):
        * WebFrame.h:

2011-04-14  Adam Roben  <aroben@apple.com>

        Replace some known-to-fail assertions with FIXMEs

        These assertions get hit during various layout tests. They indicate that we're sometimes
        doing some extra work when a page goes into accelerated compositing mode, but otherwise
        there's no bad effect.

        See <http://webkit.org/b/58539> for more details.

        Rubber-stamped by John Sullivan.

        * WebView.cpp:
        (WebView::paintIntoBackingStore):
        (WebView::paintIntoWindow):
        Replaced assertions with FIXMEs.

2011-04-13  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Allow setting composited backing stores for scrollbars and scroll corners
        https://bugs.webkit.org/show_bug.cgi?id=57202

        Update WebScrollBar to reflect ScrollableArea interface changes.

        * WebScrollBar.h:
        (WebScrollBar::invalidateScrollCornerRect):
        (WebScrollBar::scrollCornerPresent):
        (WebScrollBar::scrollCornerRect):

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.

        * Interfaces/IWebPreferencesPrivate.idl: Added prefs. 
        * Interfaces/WebKit.idl: Touch file to force autogeneration
        * WebPreferenceKeysPrivate.h: Add preference key.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Initialize setting to false.
        (WebPreferences::setLoadsSiteIconsIgnoringImageLoadingPreference): Added setter
        (WebPreferences::loadsSiteIconsIgnoringImageLoadingPreference): Added getter
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Add to settings that get propagated upon changes.

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

        Reviewed by Maciej Stachowiak.

        WebKit2: Cannot use Ctrl-Delete as a custom keyboard shortcut
        https://bugs.webkit.org/show_bug.cgi?id=58265
        <rdar://problem/9221468>

        * WebView.cpp: (WebView::keyDown): Removed special handling of Backspace, which is unnecessary
        now that WebCore implements it.

2011-04-06  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Support Windows 7 Gestures
        https://bugs.webkit.org/show_bug.cgi?id=49824
        <rdar://problem/8689728>
        
        Move WindowsTouch.h from WebKit/win to WebCore/platform/win, so it can be
        used in both WebKit and WebKit2.

        * WebKit.vcproj/WebKit.vcproj: Remove WindowsTouch.h.
        * WebView.cpp: Include WindowsTouch.h from WebCore instead of WebKit.
        * WindowsTouch.h: Removed.

2011-04-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [Cairo] Better separate the concerns of GraphicsContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=55150

        * WebFrame.cpp:
        (hdcFromContext): Modify this method to take PlatformContextCairo
        instead of a cairo_t.
        (WebFrame::spoolPage): Update to reflect new platform context.
        (WebFrame::spoolPages): Ditto.
        * WebFrame.h: Ditto.

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

        * WebCoreSupport/WebEditorClient.h:
        (WebEditorClient::requestCheckingOfString):

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.cpp: (WebView::keyDown): Moved Caps Lock handling from WebKits to WebCore,
        because WebKit shouldn't be smart.

2011-04-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Remove unused AnalyzeWithLargeStack code from Windows build files
        https://bugs.webkit.org/show_bug.cgi?id=57771
        
        This was used for us to build with prefast automatically,
        but it is out-of-date and hasn't been used for some time.
        Removing completely for now.

        * WebKit.vcproj/WebKitLibPreBuild.cmd:

2011-04-01  Adam Roben  <aroben@apple.com>

        Remove the WebView's "this" pointer from its HWND when WM_DESTROY is received

        This will ensure we don't try to process any window messages after the window has been
        destroyed.

        Covered by existing tests.

        Fixes <http://webkit.org/b/55054>.

        Reviewed by Steve Falkenburg and John Sullivan.

        * WebView.cpp:
        (WebView::setIsBeingDestroyed): Moved here from the header file, and added a call to clear
        out the this pointer from the HWND.
        (WebView::WebViewWndProc): Changed a runtime check into an assertion.

        * WebView.h: Moved setIsBeingDestroyed from here to the .cpp file.

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.cpp:
        (WebFrameLoaderClient::dispatchDidReceiveTitle):
        * WebCoreSupport/WebFrameLoaderClient.h:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Share most vsprops between Release and Production builds in releaseproduction.vsprops
        https://bugs.webkit.org/show_bug.cgi?id=57508

        * WebKit.vcproj/InterfacesProduction.vsprops:
        * WebKit.vcproj/InterfacesRelease.vsprops:
        * WebKit.vcproj/InterfacesReleaseCairoCFLite.vsprops:
        * WebKit.vcproj/WebKitGUIDProduction.vsprops:
        * WebKit.vcproj/WebKitGUIDRelease.vsprops:
        * WebKit.vcproj/WebKitGUIDReleaseCairoCFLite.vsprops:
        * WebKit.vcproj/WebKitLibProduction.vsprops:
        * WebKit.vcproj/WebKitLibRelease.vsprops:
        * WebKit.vcproj/WebKitLibReleaseCairoCFLite.vsprops:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Update Windows production build logic for new production configurations
        https://bugs.webkit.org/show_bug.cgi?id=57494

        * WebKit.vcproj/InterfacesProduction.vsprops:
        * WebKit.vcproj/WebKit.make:
        * WebKit.vcproj/WebKitGUIDProduction.vsprops:
        * WebKit.vcproj/WebKitLibProduction.vsprops:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Rename Windows configuration Release_LTCG to Production for clarity
        https://bugs.webkit.org/show_bug.cgi?id=57465

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesProduction.vsprops: Copied from Source/WebKit/win/WebKit.vcproj/InterfacesReleaseLTCG.vsprops.
        * WebKit.vcproj/InterfacesReleaseLTCG.vsprops: Removed.
        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.submit.sln:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKit.vcproj/WebKitGUIDProduction.vsprops: Copied from Source/WebKit/win/WebKit.vcproj/WebKitGUIDReleaseLTCG.vsprops.
        * WebKit.vcproj/WebKitGUIDReleaseLTCG.vsprops: Removed.
        * WebKit.vcproj/WebKitLibProduction.vsprops: Copied from Source/WebKit/win/WebKit.vcproj/WebKitLibReleaseLTCG.vsprops.
        * WebKit.vcproj/WebKitLibReleaseLTCG.vsprops: Removed.

2011-03-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Remove unused GEN_DOMObject files
        https://bugs.webkit.org/show_bug.cgi?id=57370

        * GEN_DOMObject.cpp: Removed.
        * GEN_DOMObject.h: Removed.

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        More build fix.

        * WebCoreSupport/WebPlatformStrategies.h:

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::contextMenuItemTagLookUpInDictionary):

2011-03-29  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Try to fix Windows build.

        * DOMEventsClasses.cpp: Added initguid.h again.

2011-03-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Cleanup includes in WebKit files
        https://bugs.webkit.org/show_bug.cgi?id=57381

        Add missing includes to fix build without precompiled header.
        Also fix paths in #include statements (e.g. WTF -> wtf).

        * AccessibleBase.h:
        * AccessibleDocument.h: Replace using statement with a qualified name.
        * CFDictionaryPropertyBag.h:
        * DOMEventsClasses.cpp:
        * DOMHTMLClasses.h:
        * DefaultDownloadDelegate.cpp:
        * DefaultDownloadDelegate.h:
        * DefaultPolicyDelegate.cpp:
        * DefaultPolicyDelegate.h:
        * WebCoreSupport/EmbeddedWidget.h:
        * WebCoreSupport/WebInspectorDelegate.h:
        * WebDataSource.h:
        * WebDatabaseManager.h:
        * WebElementPropertyBag.h:
        * WebFramePolicyListener.h:
        * WebGeolocationPolicyListener.h:
        * WebHistory.h:
        * WebKitClassFactory.h:
        * WebScriptWorld.h:
        * WebSerializedJSValue.h:
        * WebUserContentURLPattern.h:

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Use per-configuration vsprops in WebKit to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE
        https://bugs.webkit.org/show_bug.cgi?id=57383

        Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from
        InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within
        the IDE. To avoid this, add a separate vsprops file for each project configuration that
        contains the required inherited property sheets.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesDebug.vsprops: Added.
        * WebKit.vcproj/InterfacesDebugAll.vsprops: Added.
        * WebKit.vcproj/InterfacesDebugCairoCFLite.vsprops: Added.
        * WebKit.vcproj/InterfacesRelease.vsprops: Added.
        * WebKit.vcproj/InterfacesReleaseCairoCFLite.vsprops: Added.
        * WebKit.vcproj/InterfacesReleaseLTCG.vsprops: Added.
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKit.vcproj/WebKitGUIDDebug.vsprops: Added.
        * WebKit.vcproj/WebKitGUIDDebugAll.vsprops: Added.
        * WebKit.vcproj/WebKitGUIDDebugCairoCFLite.vsprops: Added.
        * WebKit.vcproj/WebKitGUIDRelease.vsprops: Added.
        * WebKit.vcproj/WebKitGUIDReleaseCairoCFLite.vsprops: Added.
        * WebKit.vcproj/WebKitGUIDReleaseLTCG.vsprops: Added.
        * WebKit.vcproj/WebKitLibDebug.vsprops: Added.
        * WebKit.vcproj/WebKitLibDebugAll.vsprops: Added.
        * WebKit.vcproj/WebKitLibDebugCairoCFLite.vsprops: Added.
        * WebKit.vcproj/WebKitLibRelease.vsprops: Added.
        * WebKit.vcproj/WebKitLibReleaseCairoCFLite.vsprops: Added.
        * WebKit.vcproj/WebKitLibReleaseLTCG.vsprops: Added.

2011-03-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Remove #pragma warning push and pop statements
        https://bugs.webkit.org/show_bug.cgi?id=57198

        We do not need to disable warnings via #pragma since we started
        compiling WebCore with the same compiler warnings flags as WebKit.

        * DOMCSSClasses.cpp:
        * DOMCoreClasses.cpp:
        * DOMEventsClasses.cpp:
        * DOMHTMLClasses.cpp:
        * DefaultDownloadDelegate.cpp:
        * DefaultPolicyDelegate.cpp:
        * MarshallingHelpers.cpp:
        * WebActionPropertyBag.cpp:
        * WebActionPropertyBag.h:
        * WebCache.cpp:
        * WebCoreSupport/WebDragClient.cpp:
        * WebCoreSupport/WebEditorClient.cpp:
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebInspectorClient.cpp:
        * WebDocumentLoader.h:
        * WebDownload.cpp:
        * WebDownloadCFNet.cpp:
        * WebDownloadCurl.cpp:
        * WebElementPropertyBag.cpp:
        * WebError.cpp:
        * WebError.h:
        * WebFrame.cpp:
        * WebFrame.h:
        * WebFramePolicyListener.cpp:
        * WebFramePolicyListener.h:
        * WebHistory.cpp:
        * WebHistoryItem.cpp:
        * WebIconDatabase.cpp:
        * WebIconDatabase.h:
        * WebInspector.cpp:
        * WebJavaScriptCollector.cpp:
        * WebKitGraphics.cpp:
        * WebKitSystemBits.cpp:
        * WebLocalizableStrings.cpp:
        * WebMutableURLRequest.cpp:
        * WebMutableURLRequest.h:
        * WebNodeHighlight.cpp:
        * WebNodeHighlight.h:
        * WebNotificationCenter.cpp:
        * WebResource.cpp:
        * WebResource.h:
        * WebScrollBar.cpp:
        * WebScrollBar.h:
        * WebURLAuthenticationChallenge.cpp:
        * WebURLAuthenticationChallenge.h:
        * WebURLAuthenticationChallengeSender.cpp:
        * WebURLAuthenticationChallengeSenderCFNet.cpp:
        * WebURLAuthenticationChallengeSenderCurl.cpp:
        * WebURLCredential.cpp:
        * WebURLCredential.h:
        * WebURLProtectionSpace.cpp:
        * WebURLProtectionSpace.h:
        * WebURLResponse.cpp:
        * WebURLResponse.h:

2011-03-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix after r82247.

        * WebMutableURLRequest.cpp: The new CertificateCFWin routines
        are not CFNetwork-specific. All CF-based ports can use them.

2011-03-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Use WCHAR instead of TCHAR
        https://bugs.webkit.org/show_bug.cgi?id=57191

        We always use the UNICODE versions of windows functions, so
        the usage of TCHAR makes no sense and mixing them is bad style.

        * DefaultDownloadDelegate.cpp:
        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebContextMenuClient.cpp:
        * WebCoreSupport/WebInspectorClient.cpp:
        * WebKitDLL.cpp:
        * WebNotificationCenter.cpp:
        * WebPreferences.cpp:
        * WebURLResponse.cpp:
        * WebView.cpp:

2011-03-29  Jeff Miller  <jeffm@apple.com>

        Reviewed by Jon Honeycutt.

        Add WebCore::copyCertificateToData() on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57296

        Remove duplicate code that implemented this functionality in WebMutableURLRequest.cpp and use WebCore::copyCertificateToData() instead. 

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setClientCertificate):  Use WebCore::copyCertificateToData().

2011-03-28  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Remove unused DOMCreateInstance files
        https://bugs.webkit.org/show_bug.cgi?id=57193

        * DOMCreateInstance.cpp: Removed.
        * DOMCreateInstance.h: Removed.

2011-03-28  Adele Peterson  <adele@apple.com>

        Build fix.
        
        * WebFrame.cpp: (WebFrame::hasSpellingMarker):
        Call new selectionStartHasMarkerFor method instead of selectionStartHasSpellingMarkerFor.

2011-03-28  Jeff Miller  <jeffm@apple.com>

        Reviewed by Adam Roben.

        Include certificate when sending a WebCore::ResourceError to UI process on Windows
        https://bugs.webkit.org/show_bug.cgi?id=57195
        
        Rename callers of wkGetSSLPeerCertificateData() to use wkGetSSLPeerCertificateDataBytePtr(), since it returns a void*.

        * WebError.cpp:
        (WebError::sslPeerCertificate):
        * WebURLResponse.cpp:
        (WebURLResponse::sslPeerCertificate):

2011-03-28  Darin Adler  <darin@apple.com>

        Set eol-style to native on more files. I noticed the last check-in had an entire file
        changing because of an EOL style change, and setting this property prevents that from
        happening in future. We may want to do this systematically for more of WebKit later.

        * AccessibleBase.cpp: Added property svn:eol-style.
        * AccessibleBase.h: Added property svn:eol-style.
        * AccessibleDocument.cpp: Added property svn:eol-style.
        * AccessibleDocument.h: Added property svn:eol-style.
        * AccessibleImage.cpp: Added property svn:eol-style.
        * AccessibleImage.h: Added property svn:eol-style.
        * COMVariantSetter.h: Added property svn:eol-style.
        * FullscreenVideoController.cpp: Added property svn:eol-style.
        * FullscreenVideoController.h: Added property svn:eol-style.
        * WebCoreSupport/EmbeddedWidget.cpp: Added property svn:eol-style.
        * WebCoreSupport/EmbeddedWidget.h: Added property svn:eol-style.
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp: Added property svn:eol-style.
        * WebCoreSupport/WebDesktopNotificationsDelegate.h: Added property svn:eol-style.
        * WebCoreSupport/WebFrameLoaderClient.cpp: Added property svn:eol-style.
        * WebCoreSupport/WebInspectorDelegate.cpp: Added property svn:eol-style.
        * WebCoreSupport/WebInspectorDelegate.h: Added property svn:eol-style.
        * WebCoreSupport/WebPlatformStrategies.cpp: Added property svn:eol-style.
        * WebCoreSupport/WebPlatformStrategies.h: Added property svn:eol-style.
        * WebCoreSupport/WebPluginHalterClient.cpp: Added property svn:eol-style.
        * WebCoreSupport/WebPluginHalterClient.h: Added property svn:eol-style.

2011-03-28  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix.

        * COMPropertyBag.h: Added missing include.
        * WebKitCOMAPI.h: Ditto.
        * WebCoreSupport/WebFrameLoaderClient.h: Added missing forward declaration.

2011-03-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        WebScrollBar not updating when calling WebScrollBar::setValue.
        <rdar://problem/9143871>

        * WebScrollBar.cpp:
        (WebScrollBar::setValue):
        Call scrollToOffsetWithoutAnimation to actually update the scroll position.

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.

        * WebFrame.cpp:
        (WebFrame::objectContentType):
        * WebFrame.h:

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).

        * WebFrame.cpp:
        (WebFrame::objectContentType):
        * WebFrame.h:

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.

        * WebFrame.cpp:
        (WebFrame::objectContentType):
        * WebFrame.h:

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

        * WebIconDatabase.cpp:
        (WebIconDatabase::startUpIconDatabase):

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:
        * WebIconDatabase.cpp:
        (WebIconDatabase::performImport):
        (WebIconDatabase::didRemoveAllIcons):
        (WebIconDatabase::didImportIconURLForPageURL):
        (WebIconDatabase::didImportIconDataForPageURL):
        (WebIconDatabase::didChangeIconForPageURL):
        (WebIconDatabase::didFinishURLImport):
        * WebIconDatabase.h:

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:
        * WebIconDatabase.cpp:
        (WebIconDatabase::iconForURL):
        (WebIconDatabase::iconURLForURL):
        (WebIconDatabase::hasIconForURL):

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.cpp:
        (WebInspectorClient::saveSessionSetting):
        (WebInspectorClient::loadSessionSetting):
        (WebInspectorFrontendClient::saveSessionSetting):
        (WebInspectorFrontendClient::loadSessionSetting):
        * WebCoreSupport/WebInspectorClient.h:

2011-03-11  Brady Eidson  <beidson@apple.com>

        More Windows build fix for https://bugs.webkit.org/show_bug.cgi?id=56216

        * WebCoreStatistics.cpp:
        * WebIconDatabase.cpp:

2011-03-09  Peter Kasting  <pkasting@google.com>

        Reviewed by Mihai Parparita.

        Unify Windows version checks.
        https://bugs.webkit.org/show_bug.cgi?id=55979

        * WebView.cpp:
        (WebView::standardUserAgentWithApplicationName):
        (webKitVersionString):

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.

        * WebFrame.cpp:
        (WebFrame::dispatchDecidePolicyForResponse):
        * WebFrame.h:

2011-03-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Adopt VersionStamper tool for Windows WebKit DLLs
        https://bugs.webkit.org/show_bug.cgi?id=55784

        Calculate the WebKit version for the useragent via autoversion.h
        instead of reading it back from the DLL.
        
        We now use a tool to stamp the version number onto the Apple WebKit DLLs
        during the post-build step.

        * WebKit.vcproj/WebKit.rc: Removed. This file wasn't used.
        * WebKit.vcproj/WebKitLibCommon.vsprops: Fetch version from a string resource.
        * WebView.cpp:
        (WebView::standardUserAgentWithApplicationName): Use __BUILD_NUMBER_SHORT__ for the version.
        (osVersion): Removed

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.cpp:
        (WebFrameLoaderClient::updateGlobalHistoryItemForPage):
        Get the current history item and update it using WebView::setGlobalHistoryItem.
        
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebView.cpp:
        (WebView::globalHistoryItem):
        (WebView::setGlobalHistoryItem):
        * WebView.h:

2011-03-03  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * WebFrame.cpp:
        (scaleFactor): Update after 77286 to replace right/bottom
        with new maxX/maxY terminology.

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

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::iconPageURLMappingCount):
        (WebCoreStatistics::iconRetainedPageURLCount):
        (WebCoreStatistics::iconRecordCount):
        (WebCoreStatistics::iconsWithDataCount):
        * WebIconDatabase.cpp:
        (WebIconDatabase::init):
        (WebIconDatabase::startUpIconDatabase):
        (WebIconDatabase::iconForURL):
        (WebIconDatabase::retainIconForURL):
        (WebIconDatabase::releaseIconForURL):
        (WebIconDatabase::removeAllIcons):
        (WebIconDatabase::iconURLForURL):
        (WebIconDatabase::isEnabled):
        (WebIconDatabase::setEnabled):
        (WebIconDatabase::hasIconForURL):
        (WebIconDatabase::getOrCreateDefaultIconBitmap):
        * WebKitDLL.cpp:
        (shutDownWebKit):

2011-03-03  Alexey Proskuryakov  <ap@apple.com>

        Removing an include of WebCoreKeyboardUIMode.h that Ive just added. It's already included
        via ChromeClient.h

        * WebCoreSupport/WebChromeClient.h:

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.cpp: (WebChromeClient::keyboardUIMode):
        * WebCoreSupport/WebChromeClient.h:
        Implement keyboardUIMode() instead of tabsToLinks(). No change in functionality, since
        this platform doesn't observe or have full keyboard access state.

2011-03-03  Peter Kasting  <pkasting@google.com>

        Reviewed by James Robinson.

        Drop redundant "Windows; " from the Windows-specific User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54567

        * WebView.cpp:
        (WebView::standardUserAgentWithApplicationName):

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 Windows WebKit1.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createCookiesStrategy):
        (WebPlatformStrategies::notifyCookiesChanged):
        * WebCoreSupport/WebPlatformStrategies.h:

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.

        * WebCoreSupport/WebEditorClient.cpp:
        * WebCoreSupport/WebEditorClient.h:

2011-02-28  Adam Roben  <aroben@apple.com>

        Build TestWebKitAPIInjectedBundle on Windows

        Fixes <http://webkit.org/b/55420> run-api-tests doesn't run injected bundle tests on Windows

        Reviewed by Darin Adler.

        * WebKit.vcproj/WebKit.sln: Added TestWebKitAPIInjectedBundle. Let VS simplify the paths to
        the project files.

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r78789.
        http://trac.webkit.org/changeset/78789
        https://bugs.webkit.org/show_bug.cgi?id=55409

        Incorrect canvas fallback implementation (Requested by
        inferno-sec on #webkit).

        * AccessibleBase.cpp:
        (MSAARole):

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 IWebFramePrivate.
        Touched WebKit.idl to trigger build scripts.

        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/WebKit.idl:
        * WebFrame.cpp:
        (WebFrame::clearOpener):
        * WebFrame.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).

        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/WebKit.idl:
        * WebFrame.cpp:
        * WebFrame.h:

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 IWebFramePrivate.
        Touched WebKit.idl to trigger build scripts.

        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/WebKit.idl:
        * WebFrame.cpp:
        (WebFrame::clearOpener):
        * WebFrame.h:

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.cpp:
        (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

        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/WebKit.idl:
        * WebFrame.cpp:
        * WebFrame.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 IWebFramePrivate.
        Touched WebKit.idl to trigger build scripts.

        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/WebKit.idl:
        * WebFrame.cpp:
        (WebFrame::clearOpener):
        * WebFrame.h:

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename PLATFORM(CF) to USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=53540

        * WebView.cpp:

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.cpp:
        (WebView::standardUserAgentWithApplicationName):

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.cpp:
        (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.

        * WebKitGraphics.cpp:
        (CenterTruncateStringToWidth):
        (RightTruncateStringToWidth):

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.cpp:
        (WebPlatformStrategies::defaultDetailsSummaryText):
        * WebCoreSupport/WebPlatformStrategies.h:

2011-02-16  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Chris Fleizach.

        Add new role for canvas elements.

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

        Test: accessibility/canvas-fallback-content.html

        * AccessibleBase.cpp:
        (MSAARole):

2011-02-15  Kenneth Russell  <kbr@google.com>

        Unreviewed. Remove whitespace-only change from
        http://trac.webkit.org/changeset/78620 (https://bugs.webkit.org/show_bug.cgi?id=54312)
        now that the patch has passed the Windows build bots.

        * Interfaces/WebKit.idl:

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. Includes whitespace-only change to
        WebKit.idl to trigger proper rebuild on bots; will be removed in
        subsequent checkin.

        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebView.cpp:
        (WebView::initWithFrame):
        (WebView::defaultMinimumTimerInterval):
        (WebView::setMinimumTimerInterval):
        * WebView.h:

2011-01-26  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        Refactoring: Extract TextCheckerClient from EditorClient
        https://bugs.webkit.org/show_bug.cgi?id=53213

        * WebCoreSupport/WebEditorClient.h:
        (WebEditorClient::textChecker):

2011-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adam Barth.

        Add EditorClient callbacks to override isDOMPasteAllowed and javaScriptCanAccessClipboard
        https://bugs.webkit.org/show_bug.cgi?id=52417

        Added two callback functions, canCopyCut and canPaste to EditorClient. They are currently
        not implemented.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::canCopyCut): Added.
        (WebEditorClient::canPaste): Added.
        * WebCoreSupport/WebEditorClient.h:

2011-02-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        Need WebKit API to determine whether we have a site icon for a given URL
        https://bugs.webkit.org/show_bug.cgi?id=54400
        
        This patch implements IWebIconDatabase::hasIconForURL which tells us whether or not
        we have a site icon for the given URL.

        * Interfaces/IWebIconDatabase.idl: Added new function.
        * Interfaces/WebKit.idl: Touched to make sure Interfaces rebuilds.
        * WebIconDatabase.cpp:
        (WebIconDatabase::hasIconForURL): Call IconDatabase::iconForPageURL to make sure we
            load the icon from disk, and call iconURLForPageURL to determine whether or not
            we actually have an icon.
        * WebIconDatabase.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

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):

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.cpp:
        (WebInspector::showConsole):
        (WebInspector::toggleProfilingJavaScript):

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-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/8932077> REGRESSION (5.0.3-ToT): United boarding pass has wrong layout when printed
        
        Windows never got patched to pass in the page height to WebCore, so when WebCore's pagination got re-written to depend on this
        value, Windows got broken.  Patch setPrinting to be identical to WebKit1 on OS X and to have it take an extra minimum page height
        argument.

        * WebFrame.cpp:
        (WebFrame::setPrinting):
        (WebFrame::setInPrintingMode):
        * WebFrame.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.cpp:
        (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.cpp:
        (WebDragClient::startDrag):
        * WebCoreSupport/WebDragClient.h:

2011-02-06  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        OwnArraryPtr.h uses deleteOwnedPtr but doesn’t include OwnPtrCommon.h
        https://bugs.webkit.org/show_bug.cgi?id=52867

        * WebHistory.cpp:
        (WebHistory::orderedLastVisitedDays): Calls adoptArrayPtr.
        * WebPreferences.cpp:
        (WebPreferences::copyWebKitPreferencesToCFPreferences): Ditto.

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.cpp:
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorFrontendClient::WebInspectorFrontendClient):
        * WebCoreSupport/WebInspectorClient.h:

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.cpp:
        (WebFrameLoaderClient::didRunInsecureContent):
        * WebCoreSupport/WebFrameLoaderClient.h:

2011-02-02  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        Removal of right()/bottom(), converting to maxX()/maxY().

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::rectOnScreen):
        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::frameRectsChanged):
        * WebFrame.cpp:
        (WebFrame::computePageRects):
        * WebScrollBar.cpp:
        (WebScrollBar::frameRect):
        * WebView.cpp:
        (WebView::addToDirtyRegion):
        (WebView::visibleContentRect):
        (WebView::prepareCandidateWindow):

2011-01-31  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam Roben.

        Fix the clean Windows build.

        * WebKitGraphics.cpp:
        (WebDrawText):

2011-01-28  Jon Honeycutt  <jhoneycutt@apple.com>

        Downloads in WK2 on Windows should write resume data to bundle
        https://bugs.webkit.org/show_bug.cgi?id=53282
        <rdar://problem/8753077>

        Reviewed by Alice Liu.

        * WebDownload.cpp:
        (WebDownload::bundlePathForTargetPath):
        Use the new WebCore::DownloadBundle function.
        (WebDownload::request):

        * WebDownload.h:
        Removed declarations for functions that were moved to a new location.

        * WebDownloadCFNet.cpp:
        (WebDownload::initToResumeWithBundle):
        Use the new WebCore::DownloadBundle function.
        (WebDownload::cancelForResume):
        Fix a leak of the resume data CFDataRef by using adoptCF(). Use the new
        WebCore::DownloadBundle function.

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.cpp:
        (WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added.
        * WebCoreSupport/WebChromeClient.h:

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

        * WebFrame.cpp:
        (WebFrame::url):

2011-01-27  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Roben.

        Fix scrollbars in Safari's Downloads window and Bookmarks view by
        implementing two needed functions from ScrollableArea.

        * WebScrollBar.cpp:
        (WebScrollBar::horizontalScrollbar): Return the WebCore::Scrollbar if
        we are a horizontal scrollbar.
        (WebScrollBar::verticalScrollbar): Return the WebCore::Scrollbar if we
        are a vertical scrollbar.
        * WebScrollBar.h:

2011-01-27  Adam Roben  <aroben@apple.com>

        Trim down #includes in WebView.h

        Rubber-stamped by Steve Falkenburg.

        * WebView.cpp: Moved some #includes here from the header file.

        * WebView.h: Replaced some broader #includes with more specific ones, plus a
        forward-declaration.

2011-01-25  Steve Falkenburg  <sfalken@apple.com>

        Windows production build fix.
        Build correct configuration of Interfaces for Debug_All.

        * WebKit.vcproj/WebKit.submit.sln:

2011-01-25  Steve Falkenburg  <sfalken@apple.com>

        Rubber-stamped by Adam Roben.

        Windows production build fix.
        Use correct environment variable escaping

        * WebKit.vcproj/WebKit.make:

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

        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

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.cpp:
        (WebInspectorFrontendClient::attachWindow):
        (WebInspectorFrontendClient::detachWindow):
        (WebInspectorFrontendClient::showWindowWithoutNotifications):
        * WebCoreSupport/WebInspectorClient.h:

2011-01-24  Adam Roben  <aroben@apple.com>

        Windows Production build fix

        * WebKit.vcproj/WebKit.make: Update for move of WebKit into Source.

2011-01-21  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Introduce FontMetrics abstraction
        https://bugs.webkit.org/show_bug.cgi?id=51456

        * FullscreenVideoController.cpp: Use FontMetrics instead of Font to access the metrics.
        (FullscreenVideoController::draw):
        * WebCoreSupport/WebDragClient.cpp: Ditto.
        (WebDragClient::createDragImageForLink):
        * WebKitGraphics.cpp: Ditto.
        (FontMetrics):

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

        * WebPreferenceKeysPrivate.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2011-01-21  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * WebScrollBar.h:

2011-01-21  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Part 2 of "Cleanup Scrollbar/ScrollbarClient relationship"
        https://bugs.webkit.org/show_bug.cgi?id=52779

        Rename ScrollbarClient -> ScrollableArea.

        * WebScrollBar.cpp:
        (WebScrollBar::scroll):
        * WebScrollBar.h:

2011-01-20  Adam Roben  <aroben@apple.com>

        Update for CACFLayerTreeHost changes

        Fixes <http://webkit.org/b/52852> Flushing layer changes and rendering are intertwined in
        CACFLayerTreeHost, but shouldn't be

        Reviewed by Simon Fraser.

        * WebView.cpp:
        (WebView::paint): Changed to flush layer changes via CACFLayerTreeHost, which will call back
        to our own flushing function if needed.

        * WebView.h: Removed shouldRender, which is no longer used or needed.

2011-01-21  Adam Roben  <aroben@apple.com>

        Update for WKCACFLayerRenderer -> CACFLayerTreeHost rename

        Also renamed WebView::m_layerRenderer to WebView::m_layerTreeHost to match.

        Fixes <http://webkit.org/b/52898> WKCACFLayerRenderer sounds like a render object, but isn't

        Reviewed by Simon Fraser.

        * WebPreferences.cpp:
        * WebView.cpp:
        (WebView::setAcceleratedCompositing): Also made sure to remove our HWND from the layer tree
        host before we get rid of the layer tree host itself.
        * WebView.h:

2011-01-21  Adam Roben  <aroben@apple.com>

        Replace some "sync compositing state" terminology with "flush pending GraphicsLayer changes"

        This seems to be the direction in which our code is moving. I chose "GraphicsLayer" as
        opposed to just "layer" because there are cases where we flush changes to CACFLayers that
        don't have a corresponding GraphicsLayer.

        Fixes <http://webkit.org/b/52894> "Sync compositing state" terminology in
        WKCACFLayerRenderer and friends is confusing

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::scheduleCompositingLayerSync): Updated for WebView changes.

        * WebView.cpp:
        (WebView::paint): Updated for rename.
        (WebView::flushPendingGraphicsLayerChangesSoon): Renamed from scheduleCompositingLayerSync.
        (WebView::notifySyncRequired): Updated for rename.
        (WebView::flushPendingGraphicsLayerChanges): Renamed from syncCompositingState.

        * WebView.h: Did the renames.

2011-01-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Dave Hyatt.

        Cleanup Scrollbar/ScrollbarClient relationship
        https://bugs.webkit.org/show_bug.cgi?id=52779

        * WebScrollBar.cpp:
        (WebScrollBar::WebScrollBar):
        (WebScrollBar::setValue):
        (WebScrollBar::value):
        (WebScrollBar::scroll):
        (WebScrollBar::scrollPosition):
        (WebScrollBar::setScrollOffset):
        * WebScrollBar.h:

2011-01-19  Adam Roben  <aroben@apple.com>

        Update for WKCACFLayerRenderer changes

        Fixes <http://webkit.org/b/52749> WKCACFLayerRenderer should be
        ref-counted

        Reviewed by Simon Fraser.

        * WebView.cpp:
        (WebView::~WebView): Added some assertions to make sure we've gotten rid of our
        compositing-related members. My biggest concern was making sure that m_layerRenderer was
        gone, which would also mean we had nulled out its client pointer.
        (WebView::setAcceleratedCompositing): Changed to call WKCACFLayerRenderer::setClient instead
        of passing the client into create(), and to clear out the client before nulling out
        m_layerRenderer.

        * WebView.h: Changed m_layerRenderer from an OwnPtr to a RefPtr.

2011-01-19  Adam Roben  <aroben@apple.com>

        Teach WebView::scrollBackingStore about compositing mode

        Test:
            compositing/scroll-painted-composited-content.html

        Fixes <http://webkit.org/b/52720> REGRESSION (r75987): Assertion failure in
        WebView::scrollBackingStore when scrolling page with composited content

        Reviewed by Anders Carlsson.

        * WebView.cpp:
        (WebView::scrollBackingStore): Do something sensible (though naive) when in compositing
        mode, rather than incorrectly asserting that this function is never called in that case. For
        now we just repaint the entire scrolled region; someday hopefully we can avoid having to
        repaint the areas that have just been moved.

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.cpp:
        (WebView::syncCompositingState): syncCompositingStateRecursive()
        was renamed to syncCompositingStateIncludingSubframes().

2011-01-17  Adam Roben  <aroben@apple.com>

        Update for WKCACFLayerRenderer changes

        Fixes <http://webkit.org/b/52587> WKCACFLayerRenderer is hard to use

        Reviewed by Chris Marrin.

        * WebView.cpp:
        (WebView::WebViewWndProc): Removed call to layerRendererBecameVisible
        when handling WM_SHOWWINDOW. All this did was try to create the
        renderer, but it had already been created in setAcceleratedCompositing,
        so wasn't needed.
        (WebView::setAcceleratedCompositing): Removed call to createRenderer;
        setHostWindow does this for us now.

        * WebView.h: Removed animationsStarted and layerRendererBecameVisible.

2011-01-17  Adam Roben  <aroben@apple.com>

        Paint directly into a GraphicsLayer when using accelerated compositing

        Before this patch, we were painting into our normal backing store
        HBITMAP, wrapping it in a CGImage, and handing it off to Core
        Animation. This had at least two disadvantages:
           1) The bitmap could be modified while Core Animation was using it.
           2) It introduced extra complexity.

        When entering accelerated compositing mode, WebView now creates a
        GraphicsLayer to draw into. This GraphicsLayer sits between the root
        layer (owned by WKCACFLayerRenderer) and the RenderView's layer. When
        WebView invalidates, it just calls setNeedsDisplayInRect on its
        GraphicsLayer. When WebView paints, it just tells its
        WKCACFLayerRenderer to paint, which will call back to WebView to draw
        into the GraphicsLayer if it has a dirty region. This is very similar
        to the current implementation of LayerBackedDrawingArea in WebKit2.

        Fixes <http://webkit.org/b/52582> WebView should paint directly into a
        GraphicsLayer when in accelerated compositing mode

        Reviewed by Simon Fraser and Chris Marrin.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::attachRootGraphicsLayer):
        (WebChromeClient::scheduleCompositingLayerSync):
        Updated for WebView changes.

        * WebView.cpp:
        (WebView::repaint): When using accelerated compositing, just invalidate
        our backing layer. This matches the behavior of LayerBackedDrawingArea.
        (WebView::deleteBackingStore): Removed accelerated compositing code.
        The WKCACFLayerRenderer doesn't need to know about our backing store
        anymore; we don't use it at all when in accelerated compositing mode.
        (WebView::addToDirtyRegion): When using accelerated compositing, just
        invalidate our backing layer.
        (WebView::scrollBackingStore): Added an assertion that this isn't
        called in accelerated compositing mode.
        (WebView::sizeChanged): Update our backing layer's size, too, and
        invalidate it.
        (WebView::updateBackingStore): Added an assertion that this isn't
        called in accelerated compositing mode.
        (WebView::paint): If we're in accelerated compositing mode, sync our
        compositing state. If we're *still* in accelerated compositing mode,
        just tell our WKCACFLayerRenderer to paint and clear our dirty region.
        (The later changes in this function are just un-indenting code that
        used to be inside an if.)

        (WebView::paintIntoBackingStore):
        (WebView::paintIntoWindow):
        Added assertions that these aren't called in accelerated compositing
        mode.

        (WebView::WebViewWndProc): Updated WM_XP_THEMECHANGED handling for
        removal of setRootLayerNeedsDisplay.
        (WebView::setRootChildLayer): Changed to take a GraphicsLayer. We now
        set the layer as a child of our own backing layer.
        (WebView::scheduleCompositingLayerSync): Just call through to
        WKCACFLayerRenderer.
        (WebView::setAcceleratedCompositing): Create our backing layer and set
        it as the child of WKCACFLayerRenderer's root layer.
        (WebView::notifyAnimationStarted): Added. We never expect this
        GraphicsLayerClient override to be called, as we don't use animations
        on our backing layer.
        (WebView::notifySyncRequired): Added. Just schedule a sync.
        (WebView::paintContents): Added. Just clip and paint!

        (WebView::showDebugBorders):
        (WebView::showRepaintCounter):
        Added. These just call through to Settings.

        (WebView::syncCompositingState): Changed to first update layout, then
        sync state for our backing layer, then sync WebCore's state. This
        matches LayerBackedDrawingArea.

        * WebView.h: WebView now implements the GraphicsLayerClient interface.
        Removed setRootLayerNeedsDisplay; it's been replaced by calling
        setNeedsDisplay on our backing layer and calling
        syncCompositingStateSoon on WKCACFLayerRenderer as needed. Removed
        updateRootLayerContents; that function was used to pass our backing
        store to Core Animation, which we no longer do. Added m_backingLayer.

2011-01-17  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix some headers with missing or misspelled #ifndef guards
        https://bugs.webkit.org/show_bug.cgi?id=52545

        * WebKitStatistics.h:

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.cpp:
        (WebInspector::toggleDebuggingJavaScript):

2011-01-16  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move WebKit into Source
        https://bugs.webkit.org/show_bug.cgi?id=52530

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2011-01-15  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move WebKit2 into Source
        https://bugs.webkit.org/show_bug.cgi?id=52438

        Update reference to WebKit2.

        * WebKit.vcproj/WebKit.sln:

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

        * WebCache.cpp:
        (WebCache::statistics):
        (WebCache::empty):
        (WebCache::setDisabled):
        (WebCache::disabled):
        * WebView.cpp:
        (WebView::setCacheModel):

2011-01-10  Geoffrey Garen  <ggaren@apple.com>

        Try to fix Windows build.

        * WebJavaScriptCollector.cpp: Updated for rename to Heap.*. (Didn't catch
        this one before because it was miscapitalized.)

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.cpp:
        (WebChromeClient::createWindow):

2011-01-07  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move WebCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=52050

        * WebKit.vcproj/WebKit.sln:

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.

        * WebScriptWorld.cpp:
        (WebScriptWorld::unregisterWorld):

2011-01-07  Chris Marrin  <cmarrin@apple.com>

        Rubber-stamped by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Change client API for the fullscreen video controller. It now uses a 
        PlatformCALayerClient so it can use a PlaformCALayer directly. Also
        updated how to connect the layer tree to the view to reflect the updated
        hardware compositing logic.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::LayerClient::LayerClient):
        (FullscreenVideoController::LayerClient::platformCALayerRespondsToLayoutChanges):
        (FullscreenVideoController::LayerClient::platformCALayerAnimationStarted):
        (FullscreenVideoController::LayerClient::platformCALayerContentsOrientation):
        (FullscreenVideoController::LayerClient::platformCALayerPaintContents):
        (FullscreenVideoController::LayerClient::platformCALayerShowDebugBorders):
        (FullscreenVideoController::LayerClient::platformCALayerShowRepaintCounter):
        (FullscreenVideoController::LayerClient::platformCALayerIncrementRepaintCount):
        (FullscreenVideoController::LayerClient::platformCALayerContentsOpaque):
        (FullscreenVideoController::LayerClient::platformCALayerDrawsContent):
        (FullscreenVideoController::LayerClient::platformCALayerLayerDidDisplay):
        (FullscreenVideoController::LayerClient::platformCALayerLayoutSublayersOfLayer):
        (FullscreenVideoController::FullscreenVideoController):
        (FullscreenVideoController::~FullscreenVideoController):
        (FullscreenVideoController::enterFullscreen):
        * FullscreenVideoController.h:
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::attachRootGraphicsLayer):
        (WebChromeClient::scheduleCompositingLayerSync):
        * WebView.cpp:
        (WebView::setRootChildLayer):
        (WebView::animationsStarted):
        (WebView::syncCompositingState):
        * WebView.h:
        (WebView::setRootLayerNeedsDisplay):

2011-01-05  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Debug and Release builds on Windows clobber each other
        https://bugs.webkit.org/show_bug.cgi?id=49185

        Changes the structure of WebKitBuild build products directory so we
        completely separate each build configuration into independent directories.
        
        Although we previously had per-configuration directories for obj, this change adds
        per-configuration directories for bin, lib, obj, and include. Each configuration's
        build products are stored within a directory inside of WebKitBuild.
        
        Most use of $(WebKitOutputDir) in the build files has been replaced by $(ConfigurationBuildDir),
        defined in common.vsprops to be $(WebKitOutputDir)\$(ConfigurationName).

        * WebKit.vcproj/InterfacesCommon.vsprops:
        * WebKit.vcproj/InterfacesPostBuild.cmd:
        * WebKit.vcproj/InterfacesPreBuild.cmd:
        * WebKit.vcproj/WebKit.make:
        * WebKit.vcproj/WebKitGUID.vcproj:
        * WebKit.vcproj/WebKitGUIDCommon.vsprops:
        * WebKit.vcproj/WebKitGUIDPostBuild.cmd:
        * WebKit.vcproj/WebKitGUIDPreBuild.cmd:
        * WebKit.vcproj/WebKitLibCommon.vsprops:
        * WebKit.vcproj/WebKitLibPostBuild.cmd:
        * WebKit.vcproj/WebKitLibPreBuild.cmd:

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 the top of the AX tree.

        * AccessibleDocument.cpp:
        (AccessibleDocument::AccessibleDocument):

2011-01-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move JavaScriptCore to Source
        https://bugs.webkit.org/show_bug.cgi?id=51604

        * WebKit.vcproj/WebKit.sln:
          - Point to JavaScriptCore in its new location.

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.cpp:
        (WebFrameLoaderClient::didSaveToPageCache):
        (WebFrameLoaderClient::didRestoreFromPageCache):
        * WebCoreSupport/WebFrameLoaderClient.h:

2010-12-22  Dan Bernstein  <mitz@apple.com>

        Changed WebKitTools to Tools.

        * WebKit.vcproj/WebKit.sln:

2010-12-14  Adam Roben  <aroben@apple.com>

        Always record the last-set cursor, even when the UI delegate is
        setting the cursor for us

        Prior to r63339, the last-set cursor was recorded in Widget::setCursor.
        r63339 moved that code up to WebChromeClient, but failed to call it
        when the UI delegate was the one setting the cursor.

        Fixes <http://webkit.org/b/45692> <rdar://problem/8423464> REGRESSION
        (r63339): Mouse cursor disappears when holding mouse button down on
        page

        Reviewed by Ada Chan.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::setCursor): After the cursor is set, regardless of
        whether the UI delegate sets it or we set it, record the cursor that
        was just set. That way we'll be able to use the cursor later when
        responding to the WM_SETCURSOR message.

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

        * WebPreferences.cpp: (WebPreferences::initializeDefaultSettings): Changed default to NO.

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 a stub implememntation.

        * WebCoreSupport/WebEditorClient.h:
        (WebEditorClient::requestCheckingOfString):

2010-12-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: refactor AccessibilityRenderObject::doAccessibilityHitTest
        https://bugs.webkit.org/show_bug.cgi?id=50574

        * AccessibleBase.cpp:
        (AccessibleBase::accHitTest):

2010-12-09  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Prep for WebKit2: Context menu support on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50514
        
        Update WebKit for the new CROSS_PLATFORM_CONTEXT_MENUS flag, and define customizeMenu
        instead of getCustomMenuFromDefaultItems.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::customizeMenu): getCustomMenuFromDefaultItems was turned into
            this function, with refactoring using nativeMenu instead of platformDescription.
        (WebContextMenuClient::contextMenuItemSelected):  Use nativeMenu instead of platformDescription.
        * WebCoreSupport/WebContextMenuClient.h:
        * WebView.cpp:
        (WebView::handleContextMenuEvent): Call nativeMenu instead of platformDescription.
        (WebView::performContextMenuAction): Only call itemAtIndex with one argument, no need
            for the second.

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.cpp:
        (WebContextMenuClient::getCustomMenuFromDefaultItems): Get the HitTestResult and ContextMenu from the 
            ContextMenuController (from the page).
        (WebContextMenuClient::contextMenuItemSelected): Get the HitTestResult from the ContextMenuController.
        * WebView.cpp:
        (WebView::handleContextMenuEvent): Ditto.

2010-12-07  Jessie Berlin  <jberlin@apple.com>

        Build fix. Unreviewed.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):
        FrameLoader::urlSelected does not take a SecurityOrigin as a parameter.

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

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle): Pass security origin.

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.

        * WebFrame.cpp:
        (WebFrame::elementWithName): Modified to use FormAssociatedElement
        instead of HTMLFormControlElement.
        (WebFrame::controlsInForm): Ditto.

2010-12-05  Adam Roben  <aroben@apple.com>

        Windows production build fix

        Put spaces after trailing backslashes when setting
        %WebKitVSPropsRedirectionDir%. According to MSDN
        <http://msdn.microsoft.com/en-us/library/2kzfk8c7(v=VS.80).aspx>:

           A backslash ( \ ) followed by a newline character is interpreted as
           a space in the command; use a backslash at the end of a line to
           continue a command onto the next line. NMAKE interprets the
           backslash literally if any other character, including a space or
           tab, follows the backslash.

        * WebKit.vcproj/WebKit.make:

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

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Enable "HyperlinkAuditing" by default.

2010-12-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        WebContextMenuClient::fixMenuReceivedFromOldSafari is no longer needed on Windows
        https://bugs.webkit.org/show_bug.cgi?id=50486
        
        Remove the static fixMenuReceivedFromOldSafari and isPreInspectElementTagSafari methods 
        from WebContextMenuClient. There were there for when WebKit had the Inspect Element context menu
        item, but Safari didn't support it. We don't support that old Safari, so that code can go.

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

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. The moved code is unchanged
        except that requestPermission now takes only one argument (Geolocation*),
        the Frame parameter is retrieved from the Geolocation object and we need to
        call m_webView.get() as it is a COMPtr in GeolocationClient.

        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebGeolocationClient.cpp:
        (WebGeolocationClient::requestPermission):
        * WebCoreSupport/WebGeolocationClient.h:
        (WebGeolocationClient::cancelPermissionRequest):

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>

        Adopted new function signature defined in base class.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::getGuessesForWord):
        * WebCoreSupport/WebEditorClient.h:

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WinCairo build should not use link-time code generation (LTCG)
        https://bugs.webkit.org/show_bug.cgi?id=50353

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        vcproj changes can't be applied cleanly by the Windows EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=50328

        * WebKit.vcproj/Interfaces.vcproj: Modified property svn:eol-style.
        * WebKit.vcproj/InterfacesCommon.vsprops: Added property svn:eol-style.
        * WebKit.vcproj/WebKit.sln: Modified property svn:eol-style.
        * WebKit.vcproj/WebKit.submit.sln: Modified property svn:eol-style.
        * WebKit.vcproj/WebKit.vcproj: Modified property svn:eol-style.
        * WebKit.vcproj/WebKitGUID.vcproj: Modified property svn:eol-style.
        * WebKit.vcproj/WebKitGUIDCommon.vsprops: Added property svn:eol-style.
        * WebKit.vcproj/WebKitLibCommon.vsprops: Added property svn:eol-style.

2010-11-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        All projects on Windows should use cmd files for build events
        https://bugs.webkit.org/show_bug.cgi?id=50213

        * WebKit.vcproj/InterfacesCommon.vsprops:
        * WebKit.vcproj/InterfacesPostBuild.cmd: Added.
        * WebKit.vcproj/InterfacesPreBuild.cmd: Added.
        * WebKit.vcproj/WebKitGUIDCommon.vsprops:
        * WebKit.vcproj/WebKitGUIDPostBuild.cmd: Added.
        * WebKit.vcproj/WebKitGUIDPreBuild.cmd: Added.
        * WebKit.vcproj/WebKitLibCommon.vsprops:
        * WebKit.vcproj/WebKitLibPostBuild.cmd: Added.
        * WebKit.vcproj/WebKitLibPreBuild.cmd: Added.

2010-11-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * WebKit.vcproj/WebKit.vcproj: Update WebKit project to
          use WinCairo.vsprops definition for appropriate build targets.

2010-11-22  Adam Roben  <aroben@apple.com>

        Use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops files

        Apple's Windows build allows placing header files and import libraries for WebKit's
        dependencies (CoreGraphics, CFNetwork, SQLite, etc.) outside the source tree via the
        $WebKitLibrariesDir environment variable. This is both required for production builds and
        convenient for Apple-internal developer builds. Apple's production builds also require that
        WebKit's shared .vsprops files be accessed relative to $WebKitLibrariesDir. In production
        builds, the files are copied into that directory tree by the
        WebKitLibraries/win/tools/WinTools.make file. In Apple-internal developer builds, the
        copying is done by
        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make.

        This .vsprops copying is problematic in one very important case: when a developer updates
        their source tree and then tries to build. Visual Studio only reads .vsprops files when a
        project is first loaded. So, when Visual Studio is first opened after the .vsprops files are
        updated, it reads in the old files that were already residing in $WebKitLibrariesDir. When a
        build is started, JavaScriptCoreGenerated.make copies the new .vsprops files into
        $WebKitLibrariesDir, but Visual Studio will not pick up the changes.  The rest of the build
        will proceed with out-of-date .vsprops files, which will likely result in a build failure.

        To fix this, we now use normal relative paths to access the .vsprops files in the source
        tree rather than in $WebKitLibrariesDir, but prefix those paths with a new environment
        variable, $WebKitVSPropsRedirectionDir. In developer builds, this environment variable is
        unset, so the normal relative paths are used to read the .vsprops files out of the source
        tree directly. In production builds, this environment variable is set to a fake directory
        that will cause the .vsprops files in $WebKitLibrariesDir to be found when the relative path
        is resolved.
        
        For example, JavaScriptCore.vcproj uses this path for FeatureDefines.vsprops:

        $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        In developer builds, where $WebKitVSPropsRedirectionDir is unset, this will point to the
        files in WebKitLibraries\win\tools\vsprops in the source tree. In production builds,
        JavaScriptCore.make sets $WebKitVSPropsRedirectionDir to
        "$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\", so the full path for
        FeatureDefines.vsprops becomes:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        which resolves to:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        (We rely on the fact that Windows doesn't care whether the directories "1", "2", and "3"
        actually exist since they are matched by an equal number of ".." path components.)

        Note that Visual Studio still won't pick up changes made to .vsprops files while Visual
        Studio is open, but that problem hasn't seemed to cause developers many headaches so far.

        Fixes <http://webkit.org/b/49181> Windows build fails mysteriously when .vsprops files are
        updated

        Reviewed by Dave Hyatt.

        * WebKit.vcproj/WebKit.make: Set $WebKitVSPropsRedirectionDir so that production builds can
        find the .vsprops files.

        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:
        Changed to use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops
        files.

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add Debug_Cairo_CFLite and Release_Cairo_CFLite configurations for all vcproj files
        https://bugs.webkit.org/show_bug.cgi?id=49819

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Normalize Cairo/CFLite project/solution configuration names
        https://bugs.webkit.org/show_bug.cgi?id=49818

        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Windows vcproj configuration names should be normalized across projects
        https://bugs.webkit.org/show_bug.cgi?id=49776

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.sln:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Remove leftover Windows Debug_Internal configurations
        https://bugs.webkit.org/show_bug.cgi?id=49758

        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Debug_Internal Windows configuration is unnecessary, should be removed
        https://bugs.webkit.org/show_bug.cgi?id=49753

        * WebKitPrefix.h:

2010-11-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKit Interfaces project should use vsprops file for common build settings
        https://bugs.webkit.org/show_bug.cgi?id=49713
        
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesCommon.vsprops: Added.

2010-11-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
        https://bugs.webkit.org/show_bug.cgi?id=49632

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.make:
        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.submit.sln:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

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.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):

2010-11-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Use vsprops files for common settings in Windows WebKit
        https://bugs.webkit.org/show_bug.cgi?id=49622

        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitCommon.vsprops: Added.

2010-11-16  Steve Falkenburg  <sfalken@apple.com>

        Rubber stamped by Adam Roben.

        Remove unnecessary def file, remove outdated def files from vcproj.

        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKit_debug.def: Removed.

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.cpp: Renamed from WebKit/win/WebCoreSupport/WebGeolocationControllerClient.cpp.
        (WebGeolocationClient::WebGeolocationClient):
        (WebGeolocationClient::geolocationDestroyed):
        (WebGeolocationClient::startUpdating):
        (WebGeolocationClient::stopUpdating):
        (WebGeolocationClient::lastPosition):
        * WebCoreSupport/WebGeolocationClient.h: Renamed from WebKit/win/WebCoreSupport/WebGeolocationControllerClient.h.
        (WebGeolocationClient::setEnableHighAccuracy):
        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::initWithFrame):

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

        * WebKitPrefix.h: Touch it to avoid incremental build failure on Windows.

2010-11-08  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * WebCoreSupport/WebChromeClient.h: Added namespace prefix.

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.cpp:
        (WebChromeClient::focusedFrameChanged):
        * WebCoreSupport/WebChromeClient.h:

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

        * WebCache.cpp:
        (WebCache::statistics):
        * WebFrame.cpp:
        * WebView.cpp:

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

        * WebFrame.cpp:
        (WebFrame::suspendAnimations):
        (WebFrame::resumeAnimations):

2010-11-05  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Anders Carlsson.

        Assertion failure in PluginStream::~PluginStream when running userscripts/user-script-plugin-document.html
        https://bugs.webkit.org/show_bug.cgi?id=48751
        <rdar://problem/8615536>
        
        Always call committedLoad in WebFrameLoaderClient::finishedLoading, even if we have a manual loader. We were
        running into a case where we were trying to load an empty plugin document, which uses a manual loader, and
        PluginStream::didFinishLoading was never being called. The stream was never being stopped, making us fire
        an assert in the PluginStream destructor.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::finishedLoading):

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

        * WebFrame.cpp:
        (WebFrame::suspendAnimations):
        (WebFrame::resumeAnimations):

2010-11-05  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Replace ARRAYSIZE with WTF_ARRAY_LENGTH
        https://bugs.webkit.org/show_bug.cgi?id=48903

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::exceededDatabaseQuota):
        * WebKitDLL.cpp:
        (DllGetClassObject):
        * WebView.cpp:
        (WebView::mouseWheel):

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 Apple Windows port.

        * WebFrame.cpp:
        (WebFrame::name):

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

        Reviewed by Anders Carlsson.

        <rdar://problem/8346191> and https://bugs.webkit.org/show_bug.cgi?id=48868
        Implement IMutableWebRequest::setTimeoutInterval

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setTimeoutInterval):

2010-11-02  Daniel Bates  <dbates@rim.com>

        Reviewed by Martin Robinson.

        Set frame name before appending it to the frame tree in the Apple Windows,
        GTK, and EFL ports
        https://bugs.webkit.org/show_bug.cgi?id=48806

        Make the frame creation process in the Apple Windows-port consistent
        with the Mac, Qt, and Haiku ports. In particular, set the name of
        the new frame before it's appended to the frame tree.

        At this time we cannot test this change since it is being masked by
        HTMLFrameElementBase::setName() <http://trac.webkit.org/browser/trunk/WebCore/html/HTMLFrameElementBase.cpp?rev=70976#L160>.
        We'll be able to test this once we fix bug #6751.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createFrame):

2010-11-01  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Adam Roben.

        Windows: Update resource tracking when moving a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=48364

        * Interfaces/IWebResourceLoadDelegatePrivate2.idl:Added
        Added removeIdentifierForRequest.
        * Interfaces/WebKit.idl:
        Added IWebResourceLoadDelegatePrivate2.idl.
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::transferLoadingResourceFromPage):

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-11-01  Adam Roben  <aroben@apple.com>

        Cancel main resource loads after we hand them off to the media engine

        This is the Windows equivalent of r51104. Clearly this code should be
        moved to a cross-platform location someday.

        Fixes <http://webkit.org/b/48531> <rdar://problem/8606635> Assertion
        failure in DocumentLoader::commitData when loading a media document in
        WebKit1 on Windows

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::committedLoad): Cancel the main resource load
        after handing off the load to the media engine. This code originally
        came from -[WebHTMLRepresentation receivedData:withDataSource:].

        * WebFrame.cpp:
        (WebFrame::shouldFallBack): Don't fall back when handing the resource
        load off to the media engine or a plugin. Added error domain checking
        so that we don't rely on error codes being unique.

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.

        * WebFrame.cpp:
        (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.

        * Interfaces/IWebPreferences.idl:

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 Apple Windows-port to use FrameTree::uniqueName().

        * WebFrame.cpp:
        (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

        * WebBackForwardList.cpp:
        (backForwardListWrappers):
        (WebBackForwardList::WebBackForwardList):
        (WebBackForwardList::createInstance):
        * WebBackForwardList.h:
        * WebView.cpp:
        (WebView::backForwardList):
        Use BackForwardListImpl.

2010-10-29  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebKitPrefix.h: Touched to force a rebuild.

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.cpp:
        (WebFrameLoaderClient::dispatchDidBecomeFrameset):

2010-10-26  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * WebView.cpp: Conditionalize includes for CFNetwork-specific
        Cookie implementation.
        * WebView.h: Conditionalize includes for ACCELERATED_COMPOSITION.
        WinCairo doesn't use CoreAnimation.

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.cpp:
        (WebFrameLoaderClient::transferLoadingResourceFromPage):
        Empty method.
        * WebCoreSupport/WebFrameLoaderClient.h:

2010-10-25  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Replace _countof with WTF_ARRAY_LENGTH
        https://bugs.webkit.org/show_bug.cgi?id=48229

        * WebCoreSupport/WebContextMenuClient.cpp:
        (isPreInspectElementTagSafari):
        * WebView.cpp:
        (WebView::interpretKeyEvent):

2010-10-24  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * Interfaces/WebKit.idl: Touched.

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

        * Interfaces/IWebView.idl: Added WebElementMediaURLKey.
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read): Map WebElementMediaURLKey to absoluteMediaURL().

2010-10-22  Andy Estes  <aestes@apple.com>

        Fix the Windows build.

        * WebCookieManagerCFNet.cpp: Rename CookieStorageWin.h to CookieStorageCFNet.h.
        * WebView.cpp: Ditto.

2010-10-22  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Adam Roben.

        Windows client needs updating when live iframe element is moved between pages
        https://bugs.webkit.org/show_bug.cgi?id=46915

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::didTransferChildFrameToNewDocument):
        Update WebView in WebFrame to match that of the current page.
        * WebFrame.cpp:
        (WebFrame::setWebView):
        Added.
        * WebFrame.h:

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

        Fix windows build.

        * WebCoreSupport/WebChromeClient.h:

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.cpp:
        (WebChromeClient::createWindow):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchCreatePage):
        * WebCoreSupport/WebFrameLoaderClient.h:
        Add NavigationAction parameter.

2010-10-21 MORITA Hajime  <morrita@google.com>

        Unreviewed, touched it to fix the build.

        * Interfaces/WebKit.idl:

2010-10-21  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Win][DRT] should have LayoutTestController.hasSpellingMarker()
        https://bugs.webkit.org/show_bug.cgi?id=47885

        Added IWebFramePrivate::hasSpellingMarker() and impelmented it for
        LayoutTestController.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::hasSpellingMarker):
        * WebFrame.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

        * WebDatabaseManager.cpp:
        (DidModifyOriginData::dispatchToMainThread):
        (DidModifyOriginData::DidModifyOriginData):
        (DidModifyOriginData::dispatchDidModifyOriginOnMainThread):
        (WebDatabaseManager::dispatchDidModifyOrigin):
        (WebDatabaseManager::dispatchDidModifyDatabase):

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.

        * FullscreenVideoController.cpp:
        (HUDButton::draw):
        (HUDSlider::draw):
        (FullscreenVideoController::draw):
        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::createDragImageForLink):
        * WebKitGraphics.cpp:
        (WebDrawText):

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.cpp:
        (WebInspectorClient::openInspectorFrontend):

2010-10-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        FrameLoader doesn't need an explicit userGesture parameter
        https://bugs.webkit.org/show_bug.cgi?id=47777

        Update for the new API.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):

2010-10-15  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION(r69850) Loading apple.com/startpage in WebKit on Windows gets a bad request.
        https://bugs.webkit.org/show_bug.cgi?id=47753
        <rdar://problem/8558242>
        
        VerQueryValue returns a null terminated string, but we need to strip off the null terminating character
        when we turn it into a WebCore string, or else concatenation using this string will break.

        * WebView.cpp:

2010-10-15  Jessie Berlin  <jberlin@apple.com>

        Windows build fix. Unreviewed.

        * WebCoreSupport/WebInspectorClient.cpp:
        Add a missing include.

2010-10-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Replace some String::format() usages by StringConcatenate in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=47714

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::updateWindowTitle):
        * WebView.cpp:
        (WebView::standardUserAgentWithApplicationName):
        (osVersion):

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.cpp:
        (WebInspectorFrontendClient::attachWindow):
        (WebInspectorFrontendClient::detachWindow):
        (WebInspectorFrontendClient::showWindowWithoutNotifications):

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.cpp:

2010-10-12  Adam Roben  <aroben@apple.com>

        Build TestWebKitAPI on Windows

        Fixes <http://webkit.org/b/47552> <rdar://problem/8541708> Make
        TestWebKitAPI work on Windows

        Reviewed by Sam Weinig.

        * WebKit.vcproj/WebKit.sln: Added TestWebKitAPI and
        TestWebKitAPIGenerated and made them build just after
        WebKitTestRunner.

2010-10-11  Shinichiro Hamaji  <hamaji@chromium.org>

        Attempt to fix windows build failure.

        Remove WebIconFetcher from WebKit and IconFetcher from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=47523

        * Interfaces/IWebFramePrivate.idl: s/unused1/unused2/
        * Interfaces/WebKit.idl: Touched.
        * WebFrame.cpp: s/unused1/unused2/
        (WebFrame::unused2):
        * WebFrame.h: s/unused1/unused2/

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.

        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/IWebIconFetcher.idl: Removed.
        * Interfaces/WebKit.idl:
        * WebFrame.cpp:
        (WebFrame::unused1):
        * WebFrame.h:
        * WebIconFetcher.cpp: Removed.
        * WebIconFetcher.h: Removed.
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:

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

        * Interfaces/IWebSerializedJSValuePrivate.idl:
        Because it is taking a void** parameter, getInternalRepresentation must be declared [local].

        * WebSerializedJSValue.cpp:
        (WebSerializedJSValue::getInternalRepresentation):
        * WebSerializedJSValue.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

        * Interfaces/WebKit.idl:
        Generate IWebSerializedJSValuePrivate.
        
        * Interfaces/IWebSerializedJSValuePrivate.idl: Added.
        Because it is taking a void* parameter, setInternalRepresentation must be declared [local].

        * WebKit.vcproj/Interfaces.vcproj:
        Add IWebSerializedJSValue.idl and IWebSerializedJSValuePrivate.idl.

        * WebSerializedJSValue.cpp:
        (WebSerializedJSValue::QueryInterface):
        Since there are now two interfaces that inherit from IUnknown, do not try to cast to
        IUnknown* anymore. Cast to IWebSerializedJSValue* instead.
        (WebSerializedJSValue::setInternalRepresentation):
        Only set the internal representation if it hasn't already been set.
        * WebSerializedJSValue.h:

2010-10-04  Jon Honeycutt  <jhoneycutt@apple.com>

        Prevent an assertion failure when trying to create a protection space
        for file/data URLs.

        Reviewed by Sam Weinig.

        * WebURLProtectionSpace.cpp:
        (WebURLProtectionSpace::initWithHost):
        Remove the ASSERT_NOT_REACHED().

2010-10-05  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction.

        * WebKit.vcproj/WebKit.sln: Turn the QTMovieWin project
        off for WinCairo release builds.  Somehow this was
        incorrectly turned on.

2010-10-01  Mark Rowe  <mrowe@apple.com>

        Build fix.

        Clear the executable bit from a number of source files.

        * WebView.cpp:
        * WebView.h:

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

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin):
        Call stripLeadingAndTrailingHTMLSpaces instead of deprecatedParseURL.

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.cpp:
        (WebFrameLoaderClient::didTransferChildFrameToNewDocument):
        * WebCoreSupport/WebFrameLoaderClient.h:

2010-09-27  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed build fix (win; broken in r68371)

        * WebFrame.cpp: remove include <WebCore/ResourceHandleWin.h>

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.cpp:
        Updating set interval call to use Settings' static version inside
        one time init block.

2010-09-23  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Move hyperlinkAuditingEnabled to IWebPreferencesPrivate.idl
        and touch WebKit.idl

        * Interfaces/IWebPreferences.idl:
        * Interfaces/IWebPreferencesPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2010-09-23  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Look for hyperlinkAuditingEnabled in the right set of preferences.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

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

        * Interfaces/IWebPreferences.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::hyperlinkAuditingEnabled):
        (WebPreferences::setHyperlinkAuditingEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2010-09-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Adam Roben.

        Create one time initialization block for WebView's initWithFrame
        https://bugs.webkit.org/show_bug.cgi?id=46307

        * WebView.cpp: Added one time initialization block for webview code
        that needs only be run once and not for each webview. This is just as
        the mac version WebView.mm does.

2010-09-22  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        [WinCairo] Part 2: Update WebKitTestRunner and DumpRenderTree Build.
        https://bugs.webkit.org/show_bug.cgi?id=46303.

        * WebKit.vcproj/WebKit.sln: Update overall Debug_Cairo and
        Release_Cairo configurations to select appropriate build
        targets for WebKitTestRunner and MiniBrowser.

2010-09-22  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        [WinCairo] Update WebKitTestRunner and DumpRenderTree Build.rt
        https://bugs.webkit.org/show_bug.cgi?id=46303.

        * WebKit.vcproj/WebKit.sln: Update overall Debug_Cairo and
        Release_Cairo configurations to select appropriate build
        targets for InjectionBundle.

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.cpp:
        (WebPlatformStrategies::getPluginInfo):
        * WebCoreSupport/WebPlatformStrategies.h:

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.cpp:
        (WebPlatformStrategies::contextMenuItemTagOpenVideoInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagOpenAudioInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaControls):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaLoop):
        (WebPlatformStrategies::contextMenuItemTagEnterVideoFullscreen):
        (WebPlatformStrategies::contextMenuItemTagMediaPlay):
        (WebPlatformStrategies::contextMenuItemTagMediaPause):
        (WebPlatformStrategies::contextMenuItemTagMediaMute):
        * WebCoreSupport/WebPlatformStrategies.h:

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.cpp:
        (WebView::setZoomMultiplier):
        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.cpp: Added in a call to set the mimimum allowed DOMTimer to 4ms.

2010-09-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Remove scroll and clip layers for WKCACFLayerRenderer
        https://bugs.webkit.org/show_bug.cgi?id=45922

        WKCACFLayerRenderer no longer needs its own layers for managing scrolling
        and clipping, because RenderLayerCompositor provides this functionality.

        * WebView.cpp:
        (WebView::sizeChanged): Moved code that handles the WM_SIZE message
        into this method. Use it to resize the layer renderer.
        (WebView::WebViewWndProc): Call sizeChanged().
        (WebView::updateRootLayerContents): No need to call setScrollFrame() any more.
        (WebView::layerRendererBecameVisible): Move this from the header (no need to be inline).
        * WebView.h:

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

        * WebFrame.cpp:
        (WebFrame::elementDoesAutoComplete): Use isPasswordField.
        (WebFrame::elementIsPassword): Use isPasswordField.

2010-09-14  Ada Chan  <adachan@apple.com>

        Reviewed by Adam Roben.

        Add an IWebFramePrivate API to load string as plain text into the WebFrame.
        https://bugs.webkit.org/show_bug.cgi?id=45782

        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/WebKit.idl: Touch the file.
        * WebFrame.cpp:
        (WebFrame::loadPlainTextString):
        * WebFrame.h:

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.

        * WebFrame.cpp:
        (WebFrame::canShowMIMETypeASHTML): Added.

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

        * WebFrame.cpp:
        (WebFrame::allowsFollowingLink):

2010-09-10  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

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        (WebFrameNetworkingContext::blockedError):
        * WebCoreSupport/WebFrameNetworkingContext.h:

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

        Reviewed by Simon Fraser.

        Movies with track or movie matrices don't display in <video> elements (Safari 5/Windows)
        https://bugs.webkit.org/show_bug.cgi?id=45333
        
        The rootChild layer must be set as flipped, otherwise transformed movies will appear
        incorrectly rotated.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::enterFullscreen):

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

        * WebFrame.cpp:
        * WebFrame.h:
        Remove dead code.

        * WebView.cpp:
        (WebView::WebView):
        (WebView::setZoomMultiplier):
        (WebView::zoomMultiplier):
        (WebView::canMakeTextLarger):
        (WebView::makeTextLarger):
        (WebView::canMakeTextSmaller):
        (WebView::makeTextSmaller):
        (WebView::notifyPreferencesChanged):
        * WebView.h:
        Move tracking of text only zoom here from WebCore.

2010-09-10  Brian Weinstein  <bweinstein@apple.com>

        Windows Build Fix. Fix some fallout from r67238, currentForm is now off of 
        SelectionController instead of frame. Also fix a style issue.

        * WebFrame.cpp:
        (WebFrame::currentForm):

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

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::committedLoad):
        * WebCoreSupport/WebFrameLoaderClient.h:

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.cpp:
        (WebView::selectionRect):
        (WebView::centerSelectionInVisibleArea):
        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.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::receivedData):

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

        Reviewed by Adam Roben.

        Scrollbars fail to render in composited iframes.
        https://bugs.webkit.org/show_bug.cgi?id=45335

        Use LocalWindowsContext when painting scrollbars.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::paintCustomScrollbar):
        (WebChromeClient::paintCustomScrollCorner):

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

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):
        * WebFrame.cpp:
        (WebFrame::selectedString):
        * WebView.cpp:
        (WebView::selectedText):
        (WebView::prepareCandidateWindow):
        (WebView::onIMERequestCharPosition):
        Changed call sites to use editor().

2010-09-08  Peter Kasting  <pkasting@google.com>

        Not reviewed, build fix.

        * WebScrollBar.cpp:
        (WebScrollBar::setScrollOffsetFromAnimation):

2010-09-08  Peter Kasting  <pkasting@google.com>

        Not reviewed, build fix.

        * WebScrollBar.cpp:
        (WebScrollBar::scrollSize):
        (WebScrollBar::setScrollOffsetFromAnimation):

2010-09-08  Peter Kasting  <pkasting@google.com>

        Not reviewed, build fix.

        * WebScrollBar.cpp:
        (WebScrollBar::setValue):
        (WebScrollBar::scrollSize):
        (WebScrollBar::setScrollOffsetFromAnimation):
        * WebScrollBar.h:

2010-09-08  Adam Barth  <abarth@webkit.org>

        Attempted Window build fix.

        * WebDataSource.cpp:
        (WebDataSource::subresourceForURL):

2010-09-08  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Rename DocLoader to CachedResourceLoader because that's what it does.

        * WebDataSource.cpp:

2010-09-07  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Clean up a potential resource leak.
        https://bugs.webkit.org/show_bug.cgi?id=45198

        Several bitmap device context were being created and used,
        and destroyed without returning the context to its original
        state.  This showed up as bitmap leaks in BoundsChecker.

        * FullscreenVideoController.cpp:
        * WebView.cpp:
        (WebView::scrollBackingStore):
        (WebView::paint):

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.

        * WebFrame.cpp:
        (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 Win's specific implementation of NetworkingContext.

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        (WebFrameNetworkingContext::create):
        (WebFrameNetworkingContext::userAgent):
        (WebFrameNetworkingContext::referrer):
        * WebFrame.cpp:
        (WebFrame::createNetworkingContext):
        * WebFrame.h:

2010-09-03  Adam Roben  <aroben@apple.com>

        Attempt to fixing Windows nightlies again

        The fix in r66438 should be sufficient, but we have to touch
        WebKit.idl to force that change to be picked up by the build.

        * Interfaces/WebKit.idl: Touched this file to force a build.

2010-09-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by PavelFeldman.

        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.cpp:
        (WebInspectorFrontendClient::~WebInspectorFrontendClient):
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (WebInspectorFrontendClient::closeWindowWithoutNotifications):
        (WebInspectorFrontendClient::destroyInspectorView):
        * WebCoreSupport/WebInspectorClient.h:

2010-09-01  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebViews should allow their parent windows to handle WM_MOUSEACTIVATE messages.
        https://bugs.webkit.org/show_bug.cgi?id=45047

        * WebView.cpp:
        (WebView::WebViewWndProc):

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.

        * WebFrame.cpp:
        (WebFrame::paintDocumentRectToContext):
        * WebView.cpp:
        (WebView::updateBackingStore):

2010-08-30  Adam Roben  <aroben@apple.com>

        Fix crash on launch on Windows due to changing IWebFramePrivate's
        vtable

        This regressed in r65107.

        Fixes <http://webkit.org/b/44755>.

        Rubber-stamped by Jon Honeycutt.

        * Interfaces/IWebFramePrivate.idl: Moved suspendAnimations and
        resumeAnimations to the end of the interface so that the vtable will
        match what Safari expects.

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.cpp:
        (WebInspectorFrontendClient::~WebInspectorFrontendClient):
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::closeWindowWithoutNotifications):
        (WebInspectorFrontendClient::destroyInspectorView):
        * WebCoreSupport/WebInspectorClient.h:

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.cpp:
        (WebInspectorFrontendClient::~WebInspectorFrontendClient):
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (WebInspectorFrontendClient::closeWindowWithoutNotifications):
        (WebInspectorFrontendClient::destroyInspectorView):
        * WebCoreSupport/WebInspectorClient.h:

2010-08-26  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Revert r66103 since Qt tests are failing.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::~WebInspectorFrontendClient):
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::closeWindowWithoutNotifications):
        (WebInspectorFrontendClient::destroyInspectorView):
        * WebCoreSupport/WebInspectorClient.h:

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.cpp:
        (WebInspectorFrontendClient::~WebInspectorFrontendClient):
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::disconnectFromBackend):
        (WebInspectorFrontendClient::closeWindowWithoutNotifications):
        (WebInspectorFrontendClient::destroyInspectorView):
        * WebCoreSupport/WebInspectorClient.h:

2010-08-24  Ada Chan  <adachan@apple.com>

        Reviewed by Steve Falkenburg.

        <rdar://problem/8185379> Possible null dereference in WebView::canShowMIMEType.
        https://bugs.webkit.org/show_bug.cgi?id=44564

        * WebView.cpp:
        (WebView::canShowMIMEType): Null check m_page->pluginData() since that can return NULL
        if plugins are disabled.

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 Windows port to use DocumentMarkerController.

        No functionality was changed, so no new tests.

        * WebFrame.cpp:
        (WebFrame::unmarkAllMisspellings):
        (WebFrame::unmarkAllBadGrammar):
        * WebView.cpp:
        (WebView::rectsForTextMatches):

2010-08-18  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        Bug 44180 - WebView::paint fails to paint a child WebView of a Layered Window.
        https://bugs.webkit.org/show_bug.cgi?id=44180
        
        Decide to end painting if the m_backingStoreBitmap is null after the call to
        ensureBackingStore() instead of when the rcPaint rect filled by BeginPaint is empty.
        The rcPaint rect filled by BeginPaint is always empty for a child WebView of a Layered 
        Window, even if GetUpdateRect and GetUpdateRgn report a non-empty region that needs
        painting.

        * WebView.cpp:
        (WebView::paint):

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.cpp: Added.
        Empty placeholder for now.
        * WebCoreSupport/WebFrameNetworkingContext.h: Added.
        Placeholder with tentative code that might be changed when landing
        the rest of it.
        * WebKit.vcproj/WebKit.vcproj: Added new files.

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.cpp:
        (WebView::canGoBack): Return false if loads are deferred.
        (WebView::canGoForward): Ditto.

2010-08-16  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed; build fix attempt for Windows.

        * DefaultDownloadDelegate.cpp:

2010-08-12  Jeremy Orlow  <jorlow@chromium.org>

        Revert for now
        https://bugs.webkit.org/show_bug.cgi?id=43794 

        * WebView.cpp:
        (WebView::initWithFrame):

2010-08-12  Jeremy Orlow  <jorlow@chromium.org>

        Build fix.  Matches solutions in qt and mac ports for
        https://bugs.webkit.org/show_bug.cgi?id=43794 

        * WebView.cpp:
        (WebView::initWithFrame):

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Build fix (update more includes)

        * WebKitDLL.h:
        * WebLocalizableStrings.cpp:
        * WebNotificationCenter.cpp:
        * WebPreferences.cpp:

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

        Win specific API

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::suspendAnimations):
        (WebFrame::resumeAnimations):
        * WebFrame.h:

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::).

        * COMVariantSetter.h:
        * MarshallingHelpers.h:
        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebPluginHalterClient.h:
        * WebHistory.h:

2010-08-06  Jessie Berlin  <jberlin@apple.com>

        Roll out http://trac.webkit.org/changeset/64801, which broke the Safari Windows Build.
        Unreviewed.

        * COMVariantSetter.h:
        * MarshallingHelpers.h:
        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebPluginHalterClient.h:
        * WebHistory.h:

2010-08-05  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Jon Honeycutt.

        Bug 43593 - WebView::backingStore should check if m_backingStoreBitmap is NULL.
        https://bugs.webkit.org/show_bug.cgi?id=43593

        * WebView.cpp:
        (WebView::backingStore):
        If m_backingStoreBitmap is NULL, return E_FAIL.

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::).

        * COMVariantSetter.h:
        * MarshallingHelpers.h:
        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebPluginHalterClient.h:
        * WebHistory.h:

2010-08-03  Adam Roben  <aroben@apple.com>

        Turn on PLATFORM_STRATEGIES on Windows

        Fixes <http://webkit.org/b/43431>.

        Reviewed by Anders Carlsson.

        * WebCoreLocalizedStrings.cpp: Removed.
        * WebCoreSupport/WebPlatformStrategies.cpp: Added. Based on the Mac
        equivalent.
        (WebPlatformStrategies::initialize): Creates the singleton instance.
        (WebPlatformStrategies::WebPlatformStrategies): Registers the
        singleton instance as the PlatformStrategies instance for WebCore.

        (WebPlatformStrategies::createPluginStrategy):
        (WebPlatformStrategies::createLocalizationStrategy):
        (WebPlatformStrategies::createVisitedLinkStrategy):
        Return ourselves as the strategy.

        (WebPlatformStrategies::refreshPlugins):
        (WebPlatformStrategies::getPluginInfo):
        Moved code here from WebCore's PluginDataWin.cpp file.

        (WebPlatformStrategies::searchableIndexIntroduction):
        (WebPlatformStrategies::submitButtonDefaultLabel):
        (WebPlatformStrategies::inputElementAltText):
        (WebPlatformStrategies::resetButtonDefaultLabel):
        (WebPlatformStrategies::fileButtonChooseFileLabel):
        (WebPlatformStrategies::fileButtonNoFileSelectedLabel):
        (WebPlatformStrategies::contextMenuItemTagOpenLinkInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagDownloadLinkToDisk):
        (WebPlatformStrategies::contextMenuItemTagCopyLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagOpenImageInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagDownloadImageToDisk):
        (WebPlatformStrategies::contextMenuItemTagCopyImageToClipboard):
        (WebPlatformStrategies::contextMenuItemTagOpenFrameInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagCopy):
        (WebPlatformStrategies::contextMenuItemTagGoBack):
        (WebPlatformStrategies::contextMenuItemTagGoForward):
        (WebPlatformStrategies::contextMenuItemTagStop):
        (WebPlatformStrategies::contextMenuItemTagReload):
        (WebPlatformStrategies::contextMenuItemTagCut):
        (WebPlatformStrategies::contextMenuItemTagPaste):
        (WebPlatformStrategies::contextMenuItemTagNoGuessesFound):
        (WebPlatformStrategies::contextMenuItemTagIgnoreSpelling):
        (WebPlatformStrategies::contextMenuItemTagLearnSpelling):
        (WebPlatformStrategies::contextMenuItemTagSearchWeb):
        (WebPlatformStrategies::contextMenuItemTagLookUpInDictionary):
        (WebPlatformStrategies::contextMenuItemTagOpenLink):
        (WebPlatformStrategies::contextMenuItemTagIgnoreGrammar):
        (WebPlatformStrategies::contextMenuItemTagSpellingMenu):
        (WebPlatformStrategies::contextMenuItemTagCheckSpelling):
        (WebPlatformStrategies::contextMenuItemTagCheckSpellingWhileTyping):
        (WebPlatformStrategies::contextMenuItemTagCheckGrammarWithSpelling):
        (WebPlatformStrategies::contextMenuItemTagFontMenu):
        (WebPlatformStrategies::contextMenuItemTagBold):
        (WebPlatformStrategies::contextMenuItemTagItalic):
        (WebPlatformStrategies::contextMenuItemTagUnderline):
        (WebPlatformStrategies::contextMenuItemTagOutline):
        (WebPlatformStrategies::contextMenuItemTagWritingDirectionMenu):
        (WebPlatformStrategies::contextMenuItemTagTextDirectionMenu):
        (WebPlatformStrategies::contextMenuItemTagDefaultDirection):
        (WebPlatformStrategies::contextMenuItemTagLeftToRight):
        (WebPlatformStrategies::contextMenuItemTagRightToLeft):
        (WebPlatformStrategies::contextMenuItemTagShowSpellingPanel):
        (WebPlatformStrategies::contextMenuItemTagInspectElement):
        (WebPlatformStrategies::searchMenuNoRecentSearchesText):
        (WebPlatformStrategies::searchMenuRecentSearchesText):
        (WebPlatformStrategies::searchMenuClearRecentSearchesText):
        (WebPlatformStrategies::AXWebAreaText):
        (WebPlatformStrategies::AXLinkText):
        (WebPlatformStrategies::AXListMarkerText):
        (WebPlatformStrategies::AXImageMapText):
        (WebPlatformStrategies::AXHeadingText):
        (WebPlatformStrategies::AXDefinitionListTermText):
        (WebPlatformStrategies::AXDefinitionListDefinitionText):
        (WebPlatformStrategies::AXButtonActionVerb):
        (WebPlatformStrategies::AXRadioButtonActionVerb):
        (WebPlatformStrategies::AXTextFieldActionVerb):
        (WebPlatformStrategies::AXCheckedCheckBoxActionVerb):
        (WebPlatformStrategies::AXUncheckedCheckBoxActionVerb):
        (WebPlatformStrategies::AXLinkActionVerb):
        (WebPlatformStrategies::AXMenuListActionVerb):
        (WebPlatformStrategies::AXMenuListPopupActionVerb):
        (WebPlatformStrategies::unknownFileSizeText):
        (WebPlatformStrategies::uploadFileText):
        (WebPlatformStrategies::allFilesText):
        (WebPlatformStrategies::missingPluginText):
        (WebPlatformStrategies::crashedPluginText):
        (WebPlatformStrategies::imageTitle):
        (WebPlatformStrategies::multipleFileUploadText):
        (WebPlatformStrategies::mediaElementLoadingStateText):
        (WebPlatformStrategies::mediaElementLiveBroadcastStateText):
        (WebPlatformStrategies::localizedMediaControlElementString):
        (WebPlatformStrategies::localizedMediaControlElementHelpText):
        (WebPlatformStrategies::localizedMediaTimeDescription):
        (WebPlatformStrategies::validationMessageValueMissingText):
        (WebPlatformStrategies::validationMessageTypeMismatchText):
        (WebPlatformStrategies::validationMessagePatternMismatchText):
        (WebPlatformStrategies::validationMessageTooLongText):
        (WebPlatformStrategies::validationMessageRangeUnderflowText):
        (WebPlatformStrategies::validationMessageRangeOverflowText):
        (WebPlatformStrategies::validationMessageStepMismatchText):
        Moved code here from WebCoreLocalizedStrings.cpp (and slightly cleaned
        it up).

        (WebPlatformStrategies::isLinkVisited):
        (WebPlatformStrategies::addVisitedLink):
        Copied code from WebKit/mac/WebCoreSupport/WebPlatformStrategies.mm.

        * WebCoreSupport/WebPlatformStrategies.h: Added.

        * WebKit.vcproj/WebKit.vcproj: Removed WebCoreLocalizedStrings, added
        WebPlatformStrategies.

        * WebView.cpp:
        (WebView::initWithFrame): Initialize WebPlatformStrategies.

2010-08-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42939
        WebEditorClient::didBeginEditing is never called in WebKit2

        * WebView.cpp: (WebView::WebViewWndProc): Removed a call to setFocusedFrame. WebCore will
        now set it to main frame, and besides, this call should have been before setFocused(), not
        after it. My understanding is that we weren't getting all the same editing delegates on Windows,
        so this change may make WebKit1 on Windows behave more like Mac - but I haven't tested it.

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.cpp:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::createPopupMenu):
        (WebChromeClient::createSearchPopupMenu):
        * WebCoreSupport/WebChromeClient.h:

2010-08-02  Jon Honeycutt  <jhoneycutt@apple.com>

        Move InjectedBundle.vcproj to where the other WebKitTestRunner vcprojs live.

        Reviewed by Sam Weinig.

        * WebKit.vcproj/WebKit.sln:

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.cpp:
        * WebCoreSupport/WebChromeClient.h:
        * WebView.cpp:
        (WebView::mouseWheel):

2010-07-31  Luiz Agostini  <luiz.agostini@openbossa.org>

        Build fix: Windows.

        * WebView.cpp:
        (WebView::mouseWheel):

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.cpp:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::createPopupMenu):
        (WebChromeClient::createSearchPopupMenu):
        * WebCoreSupport/WebChromeClient.h:

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.cpp:
        * WebCoreSupport/WebChromeClient.h:

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.cpp:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::createPopupMenu):
        (WebChromeClient::createSearchPopupMenu):
        * WebCoreSupport/WebChromeClient.h:

2010-07-31  Daniel Bates  <dbates@rim.com>

        Attempt to fix the Windows build after changeset 64409 <http://trac.webkit.org/changeset/64409>.

        * WebFrame.cpp:
        (WebFrame::setPrinting):

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

        * WebFrame.cpp:
        (WebFrame::setPrinting): Updated for changes to Frame::setPrinting(). Passing 0 for the
        page height, which maintains existing behavior.

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

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::reachedApplicationCacheOriginQuota):
        * WebCoreSupport/WebChromeClient.h:

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.cpp:
        (WebView::initWithFrame):

2010-07-27  Steve Block  <steveblock@google.com>

        Reviewed by Alexey Proskuryakov.

        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 Win 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.cpp:
        (WebEditorClient::textDidChangeInTextField):

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.cpp:
        (WebView::registerURLSchemeAsLocal):
        (WebView::registerURLSchemeAsSecure):

2010-07-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKit on Windows should build optionally with an unversioned ICU DLL
        https://bugs.webkit.org/show_bug.cgi?id=42722
        <rdar://problem/8211767> WebKit needs to link against unversioned ICU

        To get the proper value for U_DISABLE_RENAMING into all source files, we force
        the include of ICUVersion.h (our generated header) via the compiler options.

        * WebKit.vcproj/WebKit.vcproj: Add forced include of ICUVersion.h.        

2010-07-21  Adam Roben  <aroben@apple.com>

        Update WebKit.sln for InjectedBundle's Debug_Internal configuration

        Fixes <http://webkit.org/b/42749> InjectedBundle's build
        configurations are screwy

        Reviewed by Darin Adler.

        * WebKit.vcproj/WebKit.sln: Build the Debug_Internal variant of
        InjectedBundle when we're using the Debug_Internal solution
        configuration.

2010-07-21  Adam Roben  <aroben@apple.com>

        Add MiniBrowser to WebKit.sln

        It is the last project to build.

        Fixes <http://webkit.org/b/42747> build-webkit should build
        MiniBrowser

        Reviewed by Darin Adler.

        * WebKit.vcproj/WebKit.sln: Added MiniBrowser, and made it depend on
        WebKitTestRunner.

2010-07-20  Adam Roben  <aroben@apple.com>

        Add WebKitTestRunner and friends to WebKit.sln

        We added these projects to WebKit2.sln in r63585, but removed them
        again in r63600 because WebKitTestRunner required getopt, which
        doesn't exist in WebKitAuxiliaryLibrary. r63700 and r63788 removed the
        use of getopt in WebKitTestRunner, so we can now add it to WebKit.sln
        (which has replaced WebKit2.sln).

        Fixes <http://webkit.org/b/42711> WebKit.sln should build
        WebKitTestRunner

        Reviewed by Steve Falkenburg.

        * WebKit.vcproj/WebKit.sln: Added the following projects to the end of
        the build order (in first-built to last-built order):
        InjectedBundleGenerated, InjectedBundle, WebKitTestRunner. Also
        removed an unnecessary dependency from testapi on WebKit2WebProcess.

2010-07-19  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Roben.

        [Win] Implement LayoutTestController::markerTextForListItem()
        https://bugs.webkit.org/show_bug.cgi?id=37930

        Implements support for markerTextForListItem in the Windows port.

        * DOMCoreClasses.cpp:
        (DOMElement::markerTextForListItem): Added.
        * DOMCoreClasses.h:
        * Interfaces/DOMPrivate.idl: Added declaration for markerTextForListItem().
        * Interfaces/IWebViewPrivate.idl: Added declaration for elementFromJS().
        * Interfaces/WebKit.idl: Touch it to force a rebuild (and for good luck :-)).
        * WebView.cpp:
        (WebView::elementFromJS): Added.
        * WebView.h:

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.cpp:
        (WebEditorClient::willSetInputMethodState):
        * WebCoreSupport/WebEditorClient.h:

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

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::memoryInfoEnabled):
        (WebPreferences::setMemoryInfoEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2010-07-14  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Steve Falkenburg.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42299
        Correct WinCairo build for new WebKit2 project structure.

        * WebKit.vcproj/WebKit.sln:

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.cpp:
        (WebChromeClient::setCursor):
        We now need to grab the native cursor out of the WebCore cursor.

        (WebChromeClient::setLastSetCursorToCurrentCursor):
        Sets the WebView's "last set cursor" to be the current cursor so that
        the cursor is set correctly for plugins.
        * WebCoreSupport/WebChromeClient.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::WebViewWndProc):
        * WebView.h:
        (WebView::setLastCursor):
        Change the "last set cursor" to be stored as a member instead of a global.

2010-07-13  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.
        Make WebKit.sln build WebKit.dll as it used to in the past.
        (sln is updated to include necessary projects)

        * WebKit.vcproj/WebKit.sln:

2010-07-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Windows build fix

        * Interfaces/WebKit.idl: Touched to force a build

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.

        * Interfaces/IWebDataSource.idl:
        * WebDataSource.cpp:
        (WebDataSource::setDeferMainResourceDataLoad):
        * WebDataSource.h:

2010-07-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Alice Liu.

        <rdar://problem/8113038> WebKit1 and WebKit2 should build as a single DLL
        https://bugs.webkit.org/show_bug.cgi?id=40921

        Pre-WebKit2 WebKit now builds into a static library named WebKitLib.lib.
        WebKit.dll now links in WebCore.lib, WebKitLib.lib and WebKit2 code.
        
        This is a first step. We'll likely want to migrate the remainder of
        the non-deprecated WebKit code (strings, DLLMain, resources) into WebKit2.

        * WebKit.vcproj/WebKit.def: Removed.
        * WebKit.vcproj/WebKit.make: Don't fail if WebKit doesn't produce a DLL.
        * WebKit.vcproj/WebKit.vcproj: Build WebKit as a static lib.
        Renamed project name to WebKitLib to avoid confusion and naming conflicts.
        Generate intermediate pdb file for debuggability of static lib.
        Removed DLL-related options.        
        * WebKit.vcproj/deleteButton.png: Removed.
        * WebKit.vcproj/deleteButtonPressed.png: Removed.
        * WebKit.vcproj/fsVideoAudioVolumeHigh.png: Removed.
        * WebKit.vcproj/fsVideoAudioVolumeLow.png: Removed.
        * WebKit.vcproj/fsVideoExitFullscreen.png: Removed.
        * WebKit.vcproj/fsVideoPause.png: Removed.
        * WebKit.vcproj/fsVideoPlay.png: Removed.
        * WebKit.vcproj/missingImage.png: Removed.
        * WebKit.vcproj/nullplugin.png: Removed.
        * WebKit.vcproj/panEastCursor.png: Removed.
        * WebKit.vcproj/panIcon.png: Removed.
        * WebKit.vcproj/panNorthCursor.png: Removed.
        * WebKit.vcproj/panNorthEastCursor.png: Removed.
        * WebKit.vcproj/panNorthWestCursor.png: Removed.
        * WebKit.vcproj/panSouthCursor.png: Removed.
        * WebKit.vcproj/panSouthEastCursor.png: Removed.
        * WebKit.vcproj/panSouthWestCursor.png: Removed.
        * WebKit.vcproj/panWestCursor.png: Removed.
        * WebKit.vcproj/searchCancel.png: Removed.
        * WebKit.vcproj/searchCancelPressed.png: Removed.
        * WebKit.vcproj/searchMagnifier.png: Removed.
        * WebKit.vcproj/searchMagnifierResults.png: Removed.
        * WebKit.vcproj/textAreaResizeCorner.png: Removed.
        * WebKit.vcproj/verticalTextCursor.png: Removed.
        * WebKit.vcproj/zoomInCursor.png: Removed.
        * WebKit.vcproj/zoomOutCursor.png: Removed.

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.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):

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.cpp: (WebChromeClient::shouldMissingPluginMessageBeButton):
        * WebCoreSupport/WebChromeClient.h:

2010-07-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Simon Fraser.

        Rename TestNetscapePlugin.subproj and move platform specific files to subdirectories
        https://bugs.webkit.org/show_bug.cgi?id=41781

        * WebKit.vcproj/WebKit.sln:

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.cpp:
        (WebView::initWithFrame):

2010-07-07  Adam Roben  <aroben@apple.com>

        Windows build fix

        * Interfaces/WebKit.idl: Touched to force a build.

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.

        * Interfaces/IWebUserContentURLPattern.idl: Added matchesURL.
        * Interfaces/IWebView.idl: Touch to force a build.
        * WebUserContentURLPattern.cpp:
        (WebUserContentURLPattern::matchesURL): Added. Calls through to WebCore::UserContentURLPattern::matches.
        * WebUserContentURLPattern.h: Added matchesURL.

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.

        * Interfaces/IWebUIDelegatePrivate.idl:
        Added a new delegate interface, and declare a function
        didPressMissingPluginButton().

        * Interfaces/WebKit.idl:
        Touch this file to force interfaces to be rebuilt.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::missingPluginButtonClicked):
        Get the UI delegate, and query it for IWebUIDelegatePrivate3. Call its
        didPressMissingPluginButton() function.

        * WebCoreSupport/WebChromeClient.h:
        Declare an override of missingPluginButtonClicked().

2010-07-03  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Ojan Vafai.

        Fix issue where a contextmenu event was reporting the wrong target
        if the context menu was shown due to pressing the context menu key
        (or Shift+F10).

        * WebView.cpp:
        (WebView::handleContextMenuEvent):

2010-07-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adele Peterson.

        Provide a WebView preference to disable DNS prefetching on Windows
        https://bugs.webkit.org/show_bug.cgi?id=41504
        <rdar://problem/8151939>

        * Interfaces/IWebPreferencesPrivate.idl: Added isDNSPrefetchingEnabled, setDNSPrefetchingEnabled.
        * Interfaces/WebKit.idl: Touched to force IDL build.
        * WebPreferenceKeysPrivate.h: Added WebKitDNSPrefetchingEnabledPreferenceKey.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Default prefetch to true.
        (WebPreferences::setDNSPrefetchingEnabled): Added.
        (WebPreferences::isDNSPrefetchingEnabled): Added.
        * WebPreferences.h: Added isDNSPrefetchingEnabled, setDNSPrefetchingEnabled.
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Propagate prefetch pref into settings.

2010-06-21  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Windows build fix.

        Update WebFrame to use FrameLoaderStateMachine in
         firstLayoutDone().

        * WebFrame.cpp:
        (WebFrame::firstLayoutDone):

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.cpp:
        (WebView::notifyPreferencesChanged):

2010-06-16  Adam Roben  <aroben@apple.com>

        Add a "forPrinting" boolean parameter to
        IWebFramePrivate::renderTreeAsExternalRepresentation

        Fixes <http://webkit.org/b/40727> Respect
        LayoutTestController::isPrinting on Windows.

        Reviewed by Dan Bernstein.

        * Interfaces/IWebFramePrivate.idl: Renamed the current
        renderTreeAsExternalRepresentation to unused1, and added a new version
        that takes a boolean "forPrinting" parameter.

        * Interfaces/WebKit.idl: Touched to force a build.

        * WebFrame.cpp:
        (WebFrame::renderTreeAsExternalRepresentation): Added a boolean
        "forPrinting" parameter, and used it to tell externalRepresentation
        what kind of behavior to use.

        * WebFrame.h: Renamed the old renderTreeAsExternalRepresentation and
        added the new one.

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.cpp:
        (WebView::shouldClose): Call shouldClose on FrameLoader instead of
        going through Frame.

2010-06-14  Adam Roben  <aroben@apple.com>

        Add WebKitLauncherWin to WebKit.sln

        Fixes <http://webkit.org/b/40583>.

        Reviewed by Darin Adler.

        * WebKit.vcproj/WebKit.sln: Added WebKitLauncherWin.vcproj. It depends
        on WebKitAPITest, so is the last project to build. (Also removed
        QTMovieWin's direct dependency on JavaScriptCore, since it already has
        an indirect dependency on it.)

2010-06-14  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [win] Make windows compile after API changes.

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

        * WebKitGraphics.cpp:
        (WebDrawText):

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.cpp:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::~WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):
        * WebCoreSupport/WebInspectorClient.h:

2010-06-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Reduce FrameView.h includes to speed up build times
        https://bugs.webkit.org/show_bug.cgi?id=40408

        Another fix for Windows.

        * WebView.cpp:

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.cpp:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::~WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):
        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient::frontendClosing):

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.cpp:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::~WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):
        * WebCoreSupport/WebInspectorClient.h:

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.cpp:
        (WebView::notifyPreferencesChanged):

2010-06-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Jon Honeycutt.

        WebFrame::paintDocumentRectToContextAtPoint doesn't paint scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=40034
        <rdar://problem/7799848>

        * WebFrame.cpp:
        (WebFrame::paintScrollViewRectToContextAtPoint): Renamed from paintDocumentRectToContextAtPoint. 
        Call paint() instead of paintContents(). Also move the dirtyRect to counteract the moving that happens in paint().

        Just renaming changes:
        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/IWebViewPrivate.idl:
        * WebFrame.h:
        * WebView.cpp:
        (WebView::paintScrollViewRectToContextAtPoint):
        * WebView.h:

        * Interfaces/WebKit.idl: Touched for rebuild.

2010-05-30  Daniel Bates  <dbates@rim.com>

        Unreviewed, attempt to fix the build after http://trac.webkit.org/changeset/60418.

        * WebFrame.cpp:
        (WebFrame::elementWithName):
        (WebFrame::controlsInForm):

2010-05-22  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adam Roben.

        Full screen doesn't work for video elements
        https://bugs.webkit.org/show_bug.cgi?id=39557
        rdar://problem/8011813
        
        Modified FullscreenVideoController to work with MediaPlayerPrivateFullscreenWindow.  The FullscreenVideoController
        is now MediaPlayerPrivate agnostic..

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::LayoutClient::LayoutClient): New helper class which implements WKCACFLayerLayoutClient.
        (FullscreenVideoController::LayoutClient::layoutSublayersOfLayer):
        (FullscreenVideoController::FullscreenVideoController):
        (FullscreenVideoController::~FullscreenVideoController):
        (FullscreenVideoController::enterFullscreen):
        (FullscreenVideoController::exitFullscreen):
        (FullscreenVideoController::fullscreenClientWndProc): Handle WM_KEYDOWN.
        (FullscreenVideoController::createHUDWindow):
        (FullscreenVideoController::hudWndProc):  Handle WM_KEYDOWN.
        (FullscreenVideoController::onChar):
        (FullscreenVideoController::onKeyDown):  New function: handles the VK_ESCAPE case more reliably than WM_CHAR.
        * FullscreenVideoController.h:
        * WebView.h: 
        (WebView::viewWindow): Added a simple viewWindow() accessor.

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

        * WebDatabaseManager.cpp:
        (WebKitInitializeWebDatabasesIfNecessary): Call initializeTracker() instead of trying to set the path on
          an already created tracker that already has its origins populated.
        * WebDatabaseManager.h:

        * WebView.cpp:
        (WebView::initWithFrame): Call a renamed method instead.

2010-05-25  Ada Chan  <adachan@apple.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=39651
        
        Make m_closeWindowTimer a SuspendableTimer, so it is properly suspended
        when page loading is deferred.

        * WebView.cpp:
        (WebView::WebView): m_closeWindowTimer is now a pointer to a SuspendableTimer.
        (WindowCloseTimer::create):
        (WindowCloseTimer::WindowCloseTimer):
        (WindowCloseTimer::contextDestroyed): Make sure we delete the WindowCloseTimer in the end.
        (WindowCloseTimer::fired):
        (WebView::closeWindowSoon):
        (WebView::closeWindowTimerFired):
        (WebView::notifyPreferencesChanged): Can just check for the existence m_closeWindowTimer, since
        we only create it when we need to start the timer.
        * WebView.h:

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

        * WebFrame.cpp:
        (WebFrame::setTextSizeMultiplier): Call function on FrameView.
        * WebView.cpp:
        (WebView::setZoomMultiplier): Ditto.

2010-05-24  Anders Carlsson  <andersca@apple.com>

        Yet another Windows build fix.
        
        * WebView.cpp:
        (WebView::canShowMIMEType):
        Use the right capitalizatinon of 'MIME' (which also happens to be incorrect according to our guidelines).

2010-05-24  Anders Carlsson  <andersca@apple.com>

        Another Windows build fix.

        * WebView.cpp:
        Don't include PlugInInfoStore.h, instead include PluginData.h

2010-05-24  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * WebView.cpp:
        (WebView::canShowMIMEType):

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.cpp:
        (WebView::initWithFrame):

2010-05-20  Simon Fraser  <simon.fraser@apple.com>

        Build fix, no review.

        Fix the non-accelerated-compositing Windows build with some
        #if USE(ACCELERATED_COMPOSITING) loving.

        * WebView.cpp:
        * WebView.h:

2010-05-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        Avoid flushing CA layers when a layout is pending
        https://bugs.webkit.org/show_bug.cgi?id=39463

        <rdar://problem/7999463>

        Avoid rendering the compositing layers to the screen if there's a layout pending,
        since the layer tree not in a state that should be presented to the user.
        
        This fixes flashes in some types of content that dynamically add and remove layers.

        Have the WebView implement WKCACFLayerRendererClient so that the
        WKCACFLayerRenderer can ask whether it's a good time to render. If the FrameView
        has a layout pending, say no.

        * WebView.h: 
        * WebView.cpp:
        (WebView::setAcceleratedCompositing):
        (WebView::shouldRender):

2010-05-18  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        [WinCairo] Correct scaling for print preview
        https://bugs.webkit.org/show_bug.cgi?id=39329

        Cairo does not properly deal with Windows HDCs that have been
        scaled using MM_ANISOTROPIC mapping mode, and a WindowExt and
        ViewportExt setting.
        (see http://bugs.freedesktop.org/show_bug.cgi?id=28161)

        Instead, reset the HDC's WorldTransform to be unscaled, then
        scale the cairo context to the desired scaling, and perform
        the drawing operation.

        * WebFrame.cpp:
        (WebFrame::drawHeader): Use pre-positioned context to simplify 
          this method.
        (WebFrame::drawFooter): Use pre-positioned context to simplify
          this method.
        (WebFrame::spoolPage): Revise scaling logic to turn off HDC
          scaling, and scale using only Cairo.  Revert scaling at end
          so that user-defined GDI-based routines (e.g., header/footer)
          will draw in the right position.
        (WebFrame::spoolPages): Identify print preview case, and
          retrieve scaling factors from preview context.  Set the
          Cairo context to use these factors during the spoolPage
          operation.

2010-05-20  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Touch WebKit.idl to ensure that interfaces rebuild.

        * Interfaces/WebKit.idl: Touched.

2010-05-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Roben.

        Fix the Windows build and move new IDL declarations to the bottom of the file.

        * Interfaces/IWebPreferences.idl: Move new API to the bottom of the IDL file to prevent vtable mismatch.
        * WebPreferences.cpp: 
        (WebPreferences::setEditingBehavior): Change the type of the parameter to setEditingBehavior to the proper type.

2010-05-20  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Fix the Windows build.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Change behavior to 'editingBehavior'.

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

        Expose the EditingBehavior setting in the Windows API.

        * Interfaces/IWebPreferences.idl: Add the API point for setting the editing behavior.
        * WebPreferenceKeysPrivate.h: Add a key for the editing behavior setting.
        * WebPreferences.cpp:
        (WebPreferences::editingBehavior): Added.
        (WebPreferences::setEditingBehavior): Added.
        * WebPreferences.h: Add method declarations.
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Update the WebCore setting based on the WebPreferences setting.

2010-05-20  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Eric Seidel.

        Modified FrameLoader::urlSelected() to accept a KURL instead of a
        ResourceRequest.

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

        Since ResourceRequest has non-explicit single-parameter constructors for
        String and KURL, urlSelected() previously accepted any of String, KURL,
        and ResourceRequest.  This revision changes urlSelected() to accept only
        a KURL to make the API tighter and easier to refactor.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):
          - Updated the call to urlSelected().

2010-05-13  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/7982652>

        Allow reporting exceptions that occur when using JavaScriptCore APIs to the Web Inspector.

        * Interfaces/IWebViewPrivate.idl: Add a reportException function off of IWebViewPrivate.
        * Interfaces/WebKit.idl: Touch WebKit.idl to make sure Interfaces rebuild.
        * WebView.cpp:
        (WebView::reportException): Make sure the function was called with a context from a WebView, and call
            WebCore::reportException.
        * WebView.h:

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.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::movie):

2010-05-11  Jer Noble  <jer.noble@apple.com>

        No Review.

        Fix build error: The QTMovieWin project is dependent on the JavaScriptCore project.

        * WebKit.vcproj/WebKit.sln:

2010-05-11  Alice Liu  <alice.liu@apple.com>

        Rubber-stamped by Gavin Barraclough.

        Fix build error when enabling debugging block in WebKit win painting code

        * WebView.cpp:
        (WebView::paintIntoBackingStore):

2010-05-11  Alice Liu  <alice.liu@apple.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=38937        
        W7 window preview paints content at the wrong location

        * WebFrame.cpp:
        (WebFrame::paintDocumentRectToContext): Revert r58895
        (WebFrame::paintDocumentRectToContextAtPoint): Added

        * Interfaces/IWebFramePrivate.idl: Added paintDocumentRectToContextAtPoint
        * Interfaces/IWebViewPrivate.idl: ditto
        * Interfaces/WebKit.idl: touch to rebuild
        * WebFrame.h: ditto
        * WebView.cpp: ditto
        (WebView::paintDocumentRectToContextAtPoint): ditto
        * WebView.h: ditto

2010-05-07  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adele Peterson.

        Safari pegs CPU and drops tons of frames using HTML5 Vimeo player
        https://bugs.webkit.org/show_bug.cgi?id=34005
        
        QTMovieWin is now QTMovieGWorld.  
        * FullscreenVideoController.cpp:
        (FullscreenVideoController::movie):
        * FullscreenVideoController.h:

2010-05-06  Adam Roben  <aroben@apple.com>

        Bail out of WebView::paint when there's nothing to paint

        Fixes <http://webkit.org/b/38670> <rdar://problem/7947105> REGRESSION
        (r58067): Crash in WebView::paint when Web Inspector is docked and
        window is resized so small that WebView disappears

        When the WebView is 0-sized, ensureBackingStore() bails out without
        creating a bitmap, leaving m_backingStoreBitmap null. Before r58067,
        m_backingStoreBitmap was an HBITMAP, so we were happily passing along
        a null HBITMAP to various Windows APIs. These calls would fail but not
        crash. r58067 changed m_backingStoreBitmap to a RefCountedHBITMAP, and
        dereferencing a null RefCountedHBITMAP* of course crashes.

        Reviewed by Steve Falkenburg.

        * WebView.cpp:
        (WebView::paint): Bail if the rect to paint is empty.

2010-05-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebFrame::paintDocumentRectToContext paints content at the wrong location
        https://bugs.webkit.org/show_bug.cgi?id=38651

        * WebFrame.cpp:
        (WebFrame::paintDocumentRectToContext):

2010-05-05  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Darin Fisher.

        Update setFocus for the new boolean argument; no behavioral change.

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

        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::setFocus):
        * WebCoreSupport/EmbeddedWidget.h:

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

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::javaScriptCanAccessClipboard):
        (WebPreferences::setJavaScriptCanAccessClipboard):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

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.)

        * WebFrame.h:

2010-04-30  Jon Honeycutt  <jhoneycutt@apple.com>

        Caret may fail to blink if a focus handler brings up a modal dialog 
        https://bugs.webkit.org/show_bug.cgi?id=38372

        Reviewed by Darin Adler.

        * WebView.cpp:
        (WebView::handleMouseEvent):
        If the message is WM_CANCELMODE, which indicates that we our capturing
        of mouse events has been cancelled, tell the EventHandler.
        It's possible to re-enter this function if handling a mouse event allows
        the message loop to run; moved up the call to setMouseActivated(), so
        that if we do re-enter this function, the later mouse event will not be
        considered as activating the window.
        (WebView::WebViewWndProc):
        Handle WM_CANCELMODE by calling handleMouseEvent().

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.

        * WebKit.vcproj/WebKit.vcproj:

2010-04-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for <rdar://problem/7474349>

        Add a synchronous display mechanism for WKCACFLayerRenderer. 

        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::updateRootLayerContents):
        (WebView::nextDisplayIsSynchronous):
        * WebView.h:

2010-04-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Maciej Stachowiak.

        WebView drawing code may access null backing store dirty region
        https://bugs.webkit.org/show_bug.cgi?id=38245
        <rdar://problem/7916101> REGRESSION (r58067): All loaded pages fail to display after running iBench HTML test (intermittent)
        
        * WebView.cpp:
        (WebView::updateBackingStore): Add null check for m_backingStoreDirtyRegion.

2010-04-27  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7911140> Hitting the "delete" key goes back twice

        Reviewed by Maciej Stachowiak.

        * WebView.cpp:
        (WebView::keyDown):
        Return true if we navigated back or forward from the key event to
        prevent the event from being propagated further.

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

        * WebKitClassFactory.cpp:
        (WebKitClassFactory::WebKitClassFactory): Add call to initializeMainThread.
        * WebView.cpp:
        (WebView::WebView): Ditto.

2010-04-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspector client shouldn't check if it can be opened
        docked if it is already in that state.

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

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::WebInspectorFrontendClient):
        (WebInspectorFrontendClient::showWindowWithoutNotifications):
        * WebCoreSupport/WebInspectorClient.h:

2010-04-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Sam Weinig.

        Typo in Geolocation code causes crashes when updates are stopped
        https://bugs.webkit.org/show_bug.cgi?id=38089
        <rdar://problem/7904104> Crash closing geolocation tab after allowing to use geolocation

        * WebCoreSupport/WebGeolocationControllerClient.cpp:
        (WebGeolocationControllerClient::stopUpdating): Call unregister instead of register.

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

        Rubber stamped by Steve Falkenburg.

        Roll out http://trac.webkit.org/changeset/55385.

        <rdar://problem/7884444>

        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):

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

        * Interfaces/IWebFrameLoadDelegatePrivate2.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidChangeIcons):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        (WebFrame::didChangeIcons):
        * WebFrame.h:

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.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

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

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::javaScriptCanAccessClipboard):
        (WebPreferences::setJavaScriptCanAccessClipboard):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2010-04-21  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        Reference count WebView's backing store bitmap to prevent
        deleteBackingStore() from freeing the bitmap while it is still being
        referenced by Core Animation.

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

        * WebView.cpp:
        (WebView::ensureBackingStore):
        (WebView::addToDirtyRegion):
        (WebView::scrollBackingStore):
        (WebView::updateBackingStore):
        (WebView::paint):
        (WebView::backingStore):
        (releaseBackingStoreCallback): deref m_backingStoreBitmap once Core
        Animation has dropeed its reference to the memory.
        (WebView::updateRootLayerContents): ref m_backingStoreBitmap before
        passing the memory to Core Animation to prevent deleteBackingStore()
        from freeing it while it is still referenced by CA.
        * WebView.h: Make m_backingStoreBitmap a RefCountedGDIHandle<HBITMAP>,
        and make m_backingStoreDirtyRegion a RefCountedGDIHandle<HRGN>.

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.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::receivedData):

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.cpp:
        (WebChromeClient::chooseIconForFiles):
        * WebCoreSupport/WebChromeClient.h:

2010-04-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Windows build fix).

        * WebFrame.cpp:
        (WebFrame::stringByEvaluatingJavaScriptInScriptWorld):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2010-04-16  Adam Roben  <aroben@apple.com>

        Make it possible for clients to instantiate a WebUserContentURLPattern

        Reviewed by Tim Hatcher.

        * ForEachCoClass.h: Added WebUserContentURLPattern to the FOR_EACH_COCLASS macro, which
        lists all our instantiatable classes.

        * WebKitClassFactory.cpp: Added a now-required #include.

2010-04-15  Adam Roben  <aroben@apple.com>

        Expose UserContentURLPattern as WebKit SPI

        Fixes <http://webkit.org/b/37354>.

        Reviewed by Tim Hatcher.

        * Interfaces/IWebUserContentURLPattern.idl: Added.

        * Interfaces/WebKit.idl: Added WebUserContentURLPattern.

        * WebKit.vcproj/Interfaces.vcproj: Added IWebUserContentURLPattern.

        * WebKit.vcproj/WebKit.vcproj: Added WebUserContentURLPattern.

        * WebUserContentURLPattern.cpp: Added.
        (WebUserContentURLPattern::WebUserContentURLPattern):
        (WebUserContentURLPattern::~WebUserContentURLPattern):
        (WebUserContentURLPattern::createInstance):
        (WebUserContentURLPattern::AddRef):
        (WebUserContentURLPattern::Release):
        (WebUserContentURLPattern::QueryInterface):
        Standard COM implementations.

        (WebUserContentURLPattern::parse): Parse the string into a
        UserContentURLPattern and store it.

        (WebUserContentURLPattern::isValid):
        (WebUserContentURLPattern::scheme):
        (WebUserContentURLPattern::host):
        (WebUserContentURLPattern::matchesSubdomains):
        Call through to UserContentURLPattern.

        * WebUserContentURLPattern.h: Added.

2010-04-14  Adam Roben  <aroben@apple.com>

        Expose DOMWrapperWorld::unregisterWorld as WebKit SPI on Windows

        Fixes <http://webkit.org/b/37619>.

        Reviewed by Steve Falkenburg.

        * Interfaces/IWebScriptWorld.idl: Added unregisterWorld.

        * Interfaces/WebKit.idl: Touched to force a build.

        * WebScriptWorld.cpp:
        (WebScriptWorld::unregisterWorld):
        * WebScriptWorld.h:
        Added. Just calls through to DOMWrapperWorld::unregisterWorld.

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.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::removeOriginAccessWhitelistEntry): Call SecurityOrigin::removeOriginAccessWhitelistEntry.
        * WebView.h: Added removeOriginAccessWhitelistEntry.

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.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::addOriginAccessWhitelistEntry):
        (WebView::resetOriginAccessWhitelists):
        * WebView.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).

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::receivedData):

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.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::receivedData):

2010-04-09  Adam Roben  <aroben@apple.com>

        Windows Debug/Release build fix after r57244

        * WebKit.vcproj/WebKit.vcproj: Don't delay-load QuartzCore.dll or
        QuartzCoreInterface.dll in any configurations. r57244 made this change
        only for Debug_Internal.

2010-04-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        WebView::isLoading should null check m_mainFrame
        https://bugs.webkit.org/show_bug.cgi?id=37294

        * WebView.cpp:
        (WebView::isLoading):

2010-04-07  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Steve Falkenburg.

        Remove QuartzCoreInterface from the build
        
        No longer needed since QuartzCore.dll is now included in  the latest Safari release (4.0.5).

        * WebKit.vcproj/WebKit.vcproj:Removed delay load for QuartzCore and QuartzCoreInterface

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.cpp:
        * WebCoreSupport/WebFrameLoaderClient.h:

2010-04-05  Peter Nelson  <charn.opcode@gmail.com>

        Reviewed by Eric Seidel.

        Fixed style errors in DOMCoreClasses.h to bring it up to scratch
        for https://bugs.webkit.org/show_bug.cgi?id=34979.

        * DOMCoreClasses.h:
        (DOMObject::throwException):
        (DOMObject::callWebScriptMethod):
        (DOMObject::evaluateWebScript):
        (DOMObject::removeWebScriptKey):
        (DOMObject::stringRepresentation):
        (DOMObject::webScriptValueAtIndex):
        (DOMObject::setWebScriptValueAtIndex):
        (DOMObject::setException):
        (DOMNodeList::throwException):
        (DOMNodeList::callWebScriptMethod):
        (DOMNodeList::evaluateWebScript):
        (DOMNodeList::removeWebScriptKey):
        (DOMNodeList::stringRepresentation):
        (DOMNodeList::webScriptValueAtIndex):
        (DOMNodeList::setWebScriptValueAtIndex):
        (DOMNodeList::setException):
        (DOMDocument::throwException):
        (DOMDocument::callWebScriptMethod):
        (DOMDocument::evaluateWebScript):
        (DOMDocument::removeWebScriptKey):
        (DOMDocument::stringRepresentation):
        (DOMDocument::webScriptValueAtIndex):
        (DOMDocument::setWebScriptValueAtIndex):
        (DOMDocument::setException):
        (DOMDocument::nodeName):
        (DOMDocument::nodeValue):
        (DOMDocument::setNodeValue):
        (DOMDocument::nodeType):
        (DOMDocument::parentNode):
        (DOMDocument::childNodes):
        (DOMDocument::firstChild):
        (DOMDocument::lastChild):
        (DOMDocument::previousSibling):
        (DOMDocument::nextSibling):
        (DOMDocument::attributes):
        (DOMDocument::ownerDocument):
        (DOMDocument::insertBefore):
        (DOMDocument::replaceChild):
        (DOMDocument::removeChild):
        (DOMDocument::appendChild):
        (DOMDocument::hasChildNodes):
        (DOMDocument::cloneNode):
        (DOMDocument::isSupported):
        (DOMDocument::namespaceURI):
        (DOMDocument::prefix):
        (DOMDocument::setPrefix):
        (DOMDocument::localName):
        (DOMDocument::hasAttributes):
        (DOMDocument::isSameNode):
        (DOMDocument::isEqualNode):
        (DOMDocument::textContent):
        (DOMDocument::setTextContent):
        (DOMElement::throwException):
        (DOMElement::callWebScriptMethod):
        (DOMElement::evaluateWebScript):
        (DOMElement::removeWebScriptKey):
        (DOMElement::stringRepresentation):
        (DOMElement::webScriptValueAtIndex):
        (DOMElement::setWebScriptValueAtIndex):
        (DOMElement::setException):
        (DOMElement::nodeName):
        (DOMElement::nodeValue):
        (DOMElement::setNodeValue):
        (DOMElement::nodeType):
        (DOMElement::parentNode):
        (DOMElement::childNodes):
        (DOMElement::firstChild):
        (DOMElement::lastChild):
        (DOMElement::previousSibling):
        (DOMElement::nextSibling):
        (DOMElement::attributes):
        (DOMElement::ownerDocument):
        (DOMElement::insertBefore):
        (DOMElement::replaceChild):
        (DOMElement::removeChild):
        (DOMElement::appendChild):
        (DOMElement::hasChildNodes):
        (DOMElement::cloneNode):
        (DOMElement::isSupported):
        (DOMElement::namespaceURI):
        (DOMElement::prefix):
        (DOMElement::setPrefix):
        (DOMElement::localName):
        (DOMElement::hasAttributes):
        (DOMElement::isSameNode):
        (DOMElement::isEqualNode):
        (DOMElement::textContent):
        (DOMElement::setTextContent):

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

        * WebCoreLocalizedStrings.cpp: (WebCore::crashedPluginText): Added a stub string for plug-in
        failure.

2010-04-02  Rafael Weinstein  <rafaelw@chromium.org>

        Reviewed by Adam Barth.

        Clean up unused calls after changes to checkPermission and requestPermission argument lists.

        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::requestPermission):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

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 Windows. It plumbs the
        call from WebCore to DRT.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:WebKit (Windows) side of plumbing
        (WebFrame::layerTreeAsText):
        * WebFrame.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

        * WebDownload.cpp:
        * WebDownloadCFNet.cpp:
        * WebDownloadCurl.cpp:
        * WebHistoryItem.cpp:
        * WebLocalizableStrings.cpp:
        * WebMutableURLRequest.cpp:
        * WebPreferences.cpp:
        (WebPreferences::migrateWebKitPreferencesToCFPreferences):
        * WebView.cpp:

2010-03-30  Adam Roben  <aroben@apple.com>

        Windows build fix

        * Interfaces/WebKit.idl: Touched this to force a build.

2010-03-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adele Peterson.

        Default value of accelerated compositing should be false for Windows
        https://bugs.webkit.org/show_bug.cgi?id=36805

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):

2010-03-29  Rafael Weinstein  <rafaelw@chromium.org>

        Reviewed by Adam Barth.

        Change NotificationPresenter::checkPermission() to take the source frames full KURL,
        rather than its SecurityOrigin. This will aid chromium in having more fine grained
        permissions to control notification spam.

        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::checkPermission):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

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.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::isFrameFlatteningEnabled):
        (WebPreferences::setFrameFlatteningEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2010-03-24  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7780798> Missing plug-ins should be represented by text
        only, instead of lego block

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

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):
        Return 0 if we failed to initialize the plug-in, which causes the new
        "missing plug-in" text to draw.

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.cpp:
        (WebChromeClient::chooseIconForFiles):
        * WebCoreSupport/WebChromeClient.h:

2010-03-22  Darin Adler  <darin@apple.com>

        * WebCoreLocalizedStrings.cpp:
        (WebCore::missingPluginText): Fixed localization helper text to match the same
        string from Mac WebKit.

2010-03-22  Kevin Decker  <kdecker@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=36328
        
        * WebCoreLocalizedStrings.cpp:
        (WebCore::missingPluginText): Added.

2010-03-17  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Missing support for showing compositing layers borders and repaint count on Windows.
        <rdar://problem/7760736>
        <https://bugs.webkit.org/show_bug.cgi?id=36197>

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::showDebugBorders):
        (WebPreferences::setShowDebugBorders):
        (WebPreferences::showRepaintCounter):
        (WebPreferences::setShowRepaintCounter):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

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.cpp:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::~WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorClient::highlight):
        (WebInspectorClient::hideHighlight):
        (WebInspectorClient::updateHighlight):
        (WebInspectorFrontendClient::WebInspectorFrontendClient):
        (WebInspectorFrontendClient::~WebInspectorFrontendClient):
        (WebInspectorFrontendClient::frontendLoaded):
        (WebInspectorFrontendClient::localizedStringsURL):
        (WebInspectorFrontendClient::hiddenPanels):
        (WebInspectorFrontendClient::bringToFront):
        (WebInspectorFrontendClient::closeWindow):
        (WebInspectorFrontendClient::attachWindow):
        (WebInspectorFrontendClient::detachWindow):
        (WebInspectorFrontendClient::setAttachedWindowHeight):
        (WebInspectorFrontendClient::inspectedURLChanged):
        (WebInspectorFrontendClient::closeWindowWithoutNotifications):
        (WebInspectorFrontendClient::showWindowWithoutNotifications):
        (WebInspectorFrontendClient::destroyInspectorView):
        (WebInspectorFrontendClient::updateWindowTitle):
        (WebInspectorFrontendClient::onGetMinMaxInfo):
        (WebInspectorFrontendClient::onSize):
        (WebInspectorFrontendClient::onClose):
        (WebInspectorFrontendClient::onSetFocus):
        (WebInspectorFrontendClient::onWebViewWindowPosChanging):
        (WebInspectorWndProc):
        (WebInspectorFrontendClient::windowReceivedMessage):
        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient::frontendClosing):
        * WebInspector.cpp:
        (WebInspector::attach):
        (WebInspector::detach):

2010-03-14  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebKit part of removing support for legacy versions of Core Graphics

        * WebKitClassFactory.cpp:
        (WebKitClassFactory::WebKitClassFactory): Removed call to populateFontDatabase().
        * WebKitGraphics.cpp:
        (makeFont): Ditto.
        * WebTextRenderer.cpp:
        (WebTextRenderer::registerPrivateFont): Removed call to wkAddFontsAtPath().

2010-03-12  Enrica Casucci  <enrica@apple.com>

        Fixed broken build on Windows.
        Added contditional compilation for accelerated compositing.

        * WebView.cpp:
        (WebView::deleteBackingStore):
        (WebView::addToDirtyRegion):
        (WebView::updateBackingStore):

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."

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::onMouseDown):
        (FullscreenVideoController::onMouseMove):
        (FullscreenVideoController::onMouseUp):
        * FullscreenVideoController.h:
        (FullscreenVideoController::fullscreenToHUDCoordinates):

2010-03-12  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adam Roben.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=33739 Fullscreen 
        video HUD stays on top when switching to another window (e.g. via 
        Alt-Tab)
        -and corresponding-
        <rdar://problem/7547574>

        The HUD was always on top because it had the WS_EX_TOPMOST style. 
        So I removed the style and made m_videoWindow the owner of 
        m_hudWindow. This keeps m_hudWindow on top only when m_videoWindow 
        is the focused window.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::exitFullscreen): ASSERT that movie()->exitFullscreen() also destroyed the hud.
        (FullscreenVideoController::createHUDWindow):

2010-03-12  Enrica Casucci  <enrica@apple.com>

        Reviewed by Simon Fraser.

        Content of 3D tests appears at the bottom right corner sometimes.
        <rdar://problem/7556244>
        <https://bugs.webkit.org/show_bug.cgi?id=36027>

        See detailed comments in WebCore/ChangeLog.

        * WebView.cpp:
        (WebView::deleteBackingStore): Reset the dirty flag when deleting the backing store.
        (WebView::addToDirtyRegion): Set the dirty flag when adding dirty rectangles to the
        backing store dirty region.
        (WebView::updateBackingStore): Reset the dirty flag after painting into the backing store.
        (WebView::setAcceleratedCompositing): Removed unnecessary call to updateRootLayerContents.
        (WebView::updateRootLayerContents): Changed the way we pass parameters to setScrollFrame.
        We are passing width and height of the view content together with the offset for the scrolling.
        It was confusing to pass it all as a rectangle, when it is not a rectangle.
        
2010-03-11  Aaron Boodman  <aa@chromium.org>

        Kill WebDocument::applicationID() (part 1).

        Modify interface to WebCore::NotificationPresenter::checkPermission()
        and remove implementation of WebDocument::applicationID(). Breaking
        API changes will be in a subsequent change.
        https://bugs.webkit.org/show_bug.cgi?id=35846

        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::checkPermission):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

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.cpp:
        * WebCoreSupport/WebChromeClient.h:

2010-03-10  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        The build fix for my patch on bug #35763 wasn't quite right--it removed
        the call entirely, instead of replacing it with the new API.  This adds
        the call to Database::setIsAvailable.

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

        * WebView.cpp: Added a call to Database::setIsAvailable where change 55667 removed the old Settings API call <http://trac.webkit.org/changeset/55667>.
        (WebView::notifyPreferencesChanged):

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>

        * WebFrame.cpp:
        (WebFrame::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.cpp:
        (WebInspectorClient::attachWindow): Use the InspectorController:: copy of the should attach settings key.
        (WebInspectorClient::detachWindow): Ditto.
        (WebInspectorClient::showWindowWithoutNotifications): Ditto.

2010-03-09  John Sullivan  <sullivan@apple.com>

        Fixed localized string key collision. update-webkit-localized-strings now
        runs without errors.

        Reviewed by Adam Roben.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::AXMenuListPopupActionVerb):
        Used LPCTSTR_UI_STRING_KEY for the 2nd use of "press".

2010-03-08  Adam Treat  <atreat@rim.com>

        Unreviewed build fix for Windows.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::invalidateContents):

2010-03-02  Adam Treat  <atreat@rim.com>

        Reviewed by Dave Hyatt.

        Adapt the win port to the refactoring of repaint methods.

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

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::invalidateContents):
        (WebChromeClient::invalidateWindow):
        (WebChromeClient::invalidateContentsAndWindow):
        (WebChromeClient::invalidateContentsForSlowScroll):
        * WebCoreSupport/WebChromeClient.h:

2010-03-08  Daniel Bates  <dbates@rim.com>

        Unreviewed, build fix.

        Attempt to fix the Windows builds by applying the corresponding change
        made in bug #35763 <https://bugs.webkit.org/show_bug.cgi?id=35763>.

        * WebView.cpp: Removed call to settings->setDatabasesEnabled since this
        setting no longer exists following changeset 55666 <http://trac.webkit.org/changeset/55666>.
        (WebView::notifyPreferencesChanged):

2010-03-07  Mark Rowe  <mrowe@apple.com>

        Windows build fix.

        * WebKitPrefix.h: Include CoreFoundation/CoreFoundation.h from the Windows prefix header
        since some WebCore headers rely on the types declared within being available via the prefix
        header.

2010-03-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Got rid of platformLayer use in WebView.
        https://bugs.webkit.org/show_bug.cgi?id=35798
        
        WKCACFLayer no longer depends on GraphicsLayer, so I got rid of
        that dependency on WebView. Now WebChromeClient casts platformLayer
        to WKCACFLayer which will always be the case on Windows.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::attachRootGraphicsLayer):
        * WebView.cpp:
        (WebView::setRootChildLayer):
        * WebView.h:

2010-03-04  Beth Dakin  <bdakin@apple.com>

        Reviewed by Anders Carlsson.

        WebCore::Page::setInstanceHandle() is now just 
        WebCore::setInstanceHandle()

        * WebKitDLL.cpp:
        (DllMain):

2010-03-03  Alice Liu  <alice.liu@apple.com>

        Reviewed by Jon Honeycutt.

        Add a way to get an iframe's content frame

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):
        Added case for DOMHTMLIFrameElement
        * DOMHTMLClasses.cpp:
        Adding the few DOMHTMLIFrameElement functions definitions that have 
        distinct implementations (all others just call parent implementation)
        (DOMHTMLIFrameElement::QueryInterface):
        (DOMHTMLIFrameElement::contentFrame):
        * DOMHTMLClasses.h:
        Most of these function declarations have definitions that just call the parent implementation
        (DOMHTMLIFrameElement::DOMHTMLIFrameElement):
        (DOMHTMLIFrameElement::AddRef):
        (DOMHTMLIFrameElement::Release):
        (DOMHTMLIFrameElement::throwException):
        (DOMHTMLIFrameElement::callWebScriptMethod):
        (DOMHTMLIFrameElement::evaluateWebScript):
        (DOMHTMLIFrameElement::removeWebScriptKey):
        (DOMHTMLIFrameElement::stringRepresentation):
        (DOMHTMLIFrameElement::webScriptValueAtIndex):
        (DOMHTMLIFrameElement::setWebScriptValueAtIndex):
        (DOMHTMLIFrameElement::setException):
        (DOMHTMLIFrameElement::nodeName):
        (DOMHTMLIFrameElement::nodeValue):
        (DOMHTMLIFrameElement::setNodeValue):
        (DOMHTMLIFrameElement::nodeType):
        (DOMHTMLIFrameElement::parentNode):
        (DOMHTMLIFrameElement::childNodes):
        (DOMHTMLIFrameElement::firstChild):
        (DOMHTMLIFrameElement::lastChild):
        (DOMHTMLIFrameElement::previousSibling):
        (DOMHTMLIFrameElement::nextSibling):
        (DOMHTMLIFrameElement::attributes):
        (DOMHTMLIFrameElement::ownerDocument):
        (DOMHTMLIFrameElement::insertBefore):
        (DOMHTMLIFrameElement::replaceChild):
        (DOMHTMLIFrameElement::removeChild):
        (DOMHTMLIFrameElement::appendChild):
        (DOMHTMLIFrameElement::hasChildNodes):
        (DOMHTMLIFrameElement::cloneNode):
        (DOMHTMLIFrameElement::normalize):
        (DOMHTMLIFrameElement::isSupported):
        (DOMHTMLIFrameElement::namespaceURI):
        (DOMHTMLIFrameElement::prefix):
        (DOMHTMLIFrameElement::setPrefix):
        (DOMHTMLIFrameElement::localName):
        (DOMHTMLIFrameElement::hasAttributes):
        (DOMHTMLIFrameElement::isSameNode):
        (DOMHTMLIFrameElement::isEqualNode):
        (DOMHTMLIFrameElement::textContent):
        (DOMHTMLIFrameElement::setTextContent):
        (DOMHTMLIFrameElement::tagName):
        (DOMHTMLIFrameElement::getAttribute):
        (DOMHTMLIFrameElement::setAttribute):
        (DOMHTMLIFrameElement::removeAttribute):
        (DOMHTMLIFrameElement::getAttributeNode):
        (DOMHTMLIFrameElement::setAttributeNode):
        (DOMHTMLIFrameElement::removeAttributeNode):
        (DOMHTMLIFrameElement::getElementsByTagName):
        (DOMHTMLIFrameElement::getAttributeNS):
        (DOMHTMLIFrameElement::setAttributeNS):
        (DOMHTMLIFrameElement::removeAttributeNS):
        (DOMHTMLIFrameElement::getAttributeNodeNS):
        (DOMHTMLIFrameElement::setAttributeNodeNS):
        (DOMHTMLIFrameElement::getElementsByTagNameNS):
        (DOMHTMLIFrameElement::hasAttribute):
        (DOMHTMLIFrameElement::hasAttributeNS):
        (DOMHTMLIFrameElement::focus):
        (DOMHTMLIFrameElement::blur):
        (DOMHTMLIFrameElement::idName):
        (DOMHTMLIFrameElement::setIdName):
        (DOMHTMLIFrameElement::title):
        (DOMHTMLIFrameElement::setTitle):
        (DOMHTMLIFrameElement::lang):
        (DOMHTMLIFrameElement::setLang):
        (DOMHTMLIFrameElement::dir):
        (DOMHTMLIFrameElement::setDir):
        (DOMHTMLIFrameElement::className):
        (DOMHTMLIFrameElement::setClassName):
        (DOMHTMLIFrameElement::innerHTML):
        (DOMHTMLIFrameElement::setInnerHTML):
        (DOMHTMLIFrameElement::innerText):
        (DOMHTMLIFrameElement::setInnerText):
        * Interfaces/DOMHTML.idl:
        Added IDOMHTMLIFrameElement interface

2010-03-03  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Export acceleratedCompositing flag in IWebPreferences.
        https://bugs.webkit.org/show_bug.cgi?id=35610

        * Interfaces/IWebPreferences.idl:

2010-03-02  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        Tiny WebKit portion of fix for <rdar://problem/7485289> WebKit 
        crashes on systems that don't support CoreAnimation

        setHostWindow() no longer calls createRenderer(), so now that has 
        to be called manually.

        * WebView.cpp:
        (WebView::setAcceleratedCompositing):

2010-03-02  Adam Roben  <aroben@apple.com>

        Add IWebViewPrivate::registerURLSchemeAsSecure

        Fixes <http://webkit.org/b/35580> <rdar://problem/7706407> Expose
        SecurityOrigin::registerURLSchemeAsSecure as WebKit SPI

        Reviewed by Tim Hatcher.

        * Interfaces/WebKit.idl: Touched to force a build.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::registerURLSchemeAsSecure):
        * WebView.h:
        Added. Calls through to SecurityOrigin::registerURLSchemeAsSecure.

2010-03-01  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove Windows line endings from some files.

        Rubber-stamped by Alice Liu.

        * Interfaces/IWebEmbeddedView.idl:

        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::create):
        (EmbeddedWidget::~EmbeddedWidget):
        (EmbeddedWidget::createWindow):
        (EmbeddedWidget::invalidateRect):
        (EmbeddedWidget::setFrameRect):
        (EmbeddedWidget::frameRectsChanged):
        (EmbeddedWidget::setFocus):
        (EmbeddedWidget::show):
        (EmbeddedWidget::hide):
        (EmbeddedWidget::windowClipRect):
        (EmbeddedWidget::setParent):
        (EmbeddedWidget::attachToWindow):
        (EmbeddedWidget::detachFromWindow):
        (EmbeddedWidget::didReceiveResponse):
        (EmbeddedWidget::didReceiveData):
        (EmbeddedWidget::didFinishLoading):
        (EmbeddedWidget::didFail):

        * WebCoreSupport/EmbeddedWidget.h:
        (EmbeddedWidget::EmbeddedWidget):

2010-03-01  Jon Honeycutt  <jhoneycutt@apple.com>

        Some WebKit DOMNode API is unimplemented.
        https://bugs.webkit.org/show_bug.cgi?id=35554

        Reviewed by Alice Liu.

        * DOMCoreClasses.cpp:
        (DOMNode::nextSibling):
        Create a DOMNode to wrap m_node's next sibling, and assign it to the
        out param 'result'.
        (DOMNode::insertBefore):
        Query for the DOMNode for newChild, and return early if we fail. Query
        refChild for DOMNode. Call insertBefore(), passing the newChild's
        WebCore node and refChild's WebCore node (if refChild is non-null). If
        we successfully insert the child, fill the result out param with
        newChild, ref it, and return S_OK. Otherwise, return E_FAIL.
        (DOMNode::removeChild):
        Query oldChild for DOMNode. If we fail, return E_FAIL. Call
        removeChild(), passing the node's WebCore node. If this fails, return
        E_FAIL. Otherwise, fill the result out param with oldChild, ref it, and
        return S_OK.

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

        * WebFrame.cpp:
        (WebFrame::setTextSizeMultiplier):
        * WebView.cpp:
        (WebView::setZoomMultiplier):
        (WebView::zoomMultiplier):
        (WebView::canMakeTextLarger):
        (WebView::makeTextLarger):
        (WebView::canMakeTextSmaller):
        (WebView::makeTextSmaller):
        (WebView::notifyPreferencesChanged):

2010-02-26  Jon Honeycutt  <jhoneycutt@apple.com>

        <rdar://problem/7703368> IWebUIDelegatePrivate::embeddedViewWithArguments
        is passed wrong arguments

        Reviewed by Adam Roben.

        * Interfaces/IWebUIDelegatePrivate.idl:
        Update copyright strings. Added a new key for the plug-in source URL.

        * Interfaces/WebKit.idl:
        Update copyright strings.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):
        Pass the URL of the plug-in as the source URL. Pass the document's
        base URI for the base URL.

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.cpp:
        (WebInspectorClient::showWindowWithoutNotifications): Swap the order of the "should attach?" check
          to get the expected behavior.

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  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        WebKit on Windows should pick up system setting changes without requiring explicit API calls
        https://bugs.webkit.org/show_bug.cgi?id=35269

        * WebKit.vcproj/WebKit.def: Removed WebKitSystemParameterChanged.
        * WebKit.vcproj/WebKit_debug.def: Removed WebKitSystemParameterChanged.
        * WebKitGraphics.cpp: Removed WebKitSystemParameterChanged.
        * WebKitGraphics.h: Removed WebKitSystemParameterChanged.
        * WebView.cpp:
        (systemParameterChanged): Call through to wkSystemFontSmoothingChanged for font changes.
        (WebView::windowReceivedMessage): Pick up WM_SETTINGCHANGE from windowReceivedMessage.

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.cpp:
        (WebInspectorClient::showWindowWithoutNotifications): No matter the preference, don't open the inspector 
          window attached if WebCore says it shouldn't be attached.

2010-02-17  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        WebKit on Windows needs a mechanism to listen for WM_SETTINGCHANGED messages
        https://bugs.webkit.org/show_bug.cgi?id=35076

        * WebKit.vcproj/WebKit.def: Added WebKitSystemParameterChanged.
        * WebKit.vcproj/WebKit_debug.def: Added WebKitSystemParameterChanged.
        * WebKitGraphics.cpp:
        (WebKitSystemParameterChanged): Call through to wkSystemFontSmoothingChanged for font smoothing changes.
        * WebKitGraphics.h: Added WebKitSystemParameterChanged.

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.cpp:
        (WebFrameLoaderClient::didTransferChildFrameToNewDocument):
        Added empty implementation of a new virtual method.

        * WebCoreSupport/WebFrameLoaderClient.h:

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.cpp:
        (WebChromeClient::iconForFiles):
        * WebCoreSupport/WebChromeClient.h:

2010-02-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed. Touch WebKit.idl to fix the build.

        [Win] Implement test functions for printing
        https://bugs.webkit.org/show_bug.cgi?id=34570

        * Interfaces/WebKit.idl:

2010-02-17  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Win] Implement test functions for printing
        https://bugs.webkit.org/show_bug.cgi?id=34570

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::pageNumberForElementById):
        (WebFrame::numberOfPages):
        * WebFrame.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.cpp:
        (WebView::setCanStartPlugins): Change to call setCanStartMedia.
        In a later patch we can change the of the public function in the IDL file too,
        but for now this should be enough.

2010-02-15  Adam Roben  <aroben@apple.com>

        Add IWebFramePrivate::visibleContentRect

        Fixes <http://webkit.org/b/34956> Add API to get a WebFrame's visible
        content rect

        Reviewed by Jon Honeycutt.

        * Interfaces/IWebFramePrivate.idl: Added visibleContentRect.

        * Interfaces/WebKit.idl: Touched to force a build.

        * WebFrame.cpp:
        (WebFrame::visibleContentRect):
        * WebFrame.h:
        Added. Calls through to FrameView::visibleContentRect.

2010-02-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        onmouseout fired when moving over tooltip on Windows
        https://bugs.webkit.org/show_bug.cgi?id=16794
        <rdar://5762038>.
        
        Add WS_EX_TRANSPARENT to out tooltip HWND so it isn't subject to hit testing, and when
        you mouse over the tooltip, it doesn't send a mouseout to the web content.

        * WebView.cpp:
        (WebView::initializeToolTipWindow): Add WS_EX_TRANSPARENT.

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 Windows port.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::isFrameSetFlatteningEnabled):
        (WebPreferences::setFrameSetFlatteningEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2010-02-10  Adam Roben  <aroben@apple.com>

        Remove unnecessary #include of shfolder.h

        shfolder.h has been deprecated in newer versions of the Windows SDK.

        Fixes <http://webkit.org/b/34803> WebPreferences.cpp fails to compile
        under VS2010 RC due to #include of shfolder.h.

        Reviewed by Darin Adler.

        * WebPreferences.cpp: Removed #include.

2010-02-08  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Adler.

        onbeforeunload not called at window close + frame or iframe focused
        https://bugs.webkit.org/show_bug.cgi?id=27481
        
        Chromium and WebKit on Windows will now fire beforeunload handlers
        even if an inner frame is focused.  

        Layout tests aren't able to test this bug, since it requires closing
        the actual browser window, not calling window.close().  Instead,
        test with WebCore/manual-tests/onbeforeunload-focused-iframe.html.

        * WebView.cpp:
        (WebView::shouldClose):

2010-02-08  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Include header position in World Transform used for plugin positioning.
        https://bugs.webkit.org/show_bug.cgi?id=34709

        * WebFrame.cpp:
        (WebFrame::spoolPage): Correct WinCairo plugin print positioning to
          account for header size.  Existing code ignored this, causing
          plugins to overlay other elements.

2010-02-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Jon Honeycutt.

        https://bugs.webkit.org/show_bug.cgi?id=34612 " MSAA: accSelect returns error 
        codes for most elements that arent listbox or menupopup related"
        <rdar://problem/7436861>

        * AccessibleBase.cpp:
        (AccessibleBase::accSelect):
        - Stop sending E_INVALIDARG for elements that request TAKE_SELECTION that 
          aren't beneath listboxes or menupopups.  This was too restrictive since 
          any element can be selectable.
        - Correct the misinterpretation of MSDN's stipulation of situations involving 
          adding, removing, and extending selection on single-select elements

2010-02-04  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Properly handle margin settings when printing Plugins in WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=34613

        * WebFrame.cpp:
        (WebFrame::spoolPage): Adjust the GraphicsContext passed to the
          paintContents method so that the World Transform is properly
          positioned to account for margin settings at the time that
          PluginViewWin.cpp processes the drawing operations.

2010-02-04  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Properly handle margin settings in WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=34545

        * WebFrame.cpp:
        (scaleFactor): Require the margin information as an input
          parameter, and use them when computing the scaling factor.
        (WebFrame::drawHeader): Pass margin size to scaleFactor.
        (WebFrame::drawFooter): Pass margin size to scaleFactor.
        (WebFrame::spoolPage):
          1. Pass margin size to scaleFactor.
          2. Recognize that the return value of printerMarginRect is
             already in device units, and therefore scale it so that
             the Cairo drawing is correct.
          3. Remove scaling call for margins in GDI code, as it is
             already in scaled units.

2010-02-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        Scroll does not work with IBM Thinkpad.
        <https://bugs.webkit.org/show_bug.cgi?id=14227>
        <rdar://7142545>
        
        When initializing the WebView, add two scrollbar Windows inside of
        our WebView, to allow it to receive WM_VSCROLL and WM_HSCROLL events.
        (similar to what Firefox did in: <https://bugzilla.mozilla.org/show_bug.cgi?id=507222>.
        
        Only do this if the user has installed some kind of Trackpoint driver, using an algorithm
        like <https://bugzilla.mozilla.org/show_bug.cgi?id=514927>.
        
        Also, add code to handle WM_HSCROLL and WM_VSCROLL messages to scroll
        the WebView.

        * WebView.cpp:
        (WebView::verticalScroll): Handle the WM_VSCROLL messages, and scroll up and down
            by lines or pages.
        (WebView::horizontalScroll): Handle the WM_HSCROLL messages, and scroll left or right
            by lines or pages.
        (WebView::WebViewWndProc): Add cases for WM_VSCROLL and WM_HSCROLL.
        (WebView::initWithFrame): Call shouldInitializeTrackPointHack, and if we should, create
            vertical and horizontal scrollbars to receive WM_VSCROLL and WM_HSCROLL messages.
        (WebView::shouldInitializeTrackPointHack): Check if there is a registry key for
            the some kind of IBM Trackpoint driver.
        * WebView.h:

2010-02-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Copyright year updating for Windows version resources should be automatic
        https://bugs.webkit.org/show_bug.cgi?id=34503

        * WebKit.vcproj/WebKit.rc:

2010-02-02  Adam Roben  <aroben@apple.com>

        Stop copying WebCore's IDL files from SRCROOT to OBJROOT

        WebKit doesn't use these anymore (as of r52921).

        Part of Bug 34496: Clean up WebCore's IDL/script copying
        <https://bugs.webkit.org/show_bug.cgi?id=34496>

        Reviewed by Steve Falkenburg.

        * WebKit.vcproj/WebKit.make:

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.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::play):
        (FullscreenVideoController::pause):

2010-01-29  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Drag and Drop: Windows uses "stop" sign as cursor when dragging
        https://bugs.webkit.org/show_bug.cgi?id=34305
        <rdar://problem/7589672>
        
        Add a preference in WebKit (that defaults to false), for whether or not
        we should show the custom cursors during drag and drop. However, this is
        currently only used on Windows, and only used to hide the "drop not allowed"
        icon inside the WebView is the preference is set to true.

        This will be off by default, so no change in behavior.

        * Interfaces/IWebPreferencesPrivate.idl: Added new functions.
        * Interfaces/WebKit.idl: Touched to force Interfaces build.
        * WebDropSource.cpp:
        (WebDropSource::GiveFeedback): Implementation of conditional showing cursor
            logic.
        * WebPreferenceKeysPrivate.h: Added new preference key.
        * WebPreferences.cpp: Added new functions.
        (WebPreferences::setCustomDragCursorsEnabled):
        (WebPreferences::customDragCursorsEnabled):
        * WebPreferences.h: Added new functions.

2010-01-28  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Crash when posting a notification for a detached object

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

        Reviewed by Darin Adler.

        * AccessibleBase.cpp:
        (AccessibleBase::QueryService):
        If an unrecognized service ID is passed, return early. Otherwise, return
        the result of QueryInterface.
        (AccessibleBase::QueryInterface):
        Add static_casts. Check for new UUIDs.
        (AccessibleBase::isSameObject):
        Query the object for AccessibleBase. Return whether the pointers or the
        wrapped objects match.

        * AccessibleBase.h:
        Give the class a UUID so we can query for it in isSameObject(). Inherit
        from IAccessibleComparable; inherit from IServiceProvider so clients can
        use QueryService to query for a custom interface.

        * Interfaces/AccessibleComparable.idl: Added. Declares a function that
        can be called to compare to accessible objects.

        * Interfaces/WebKit.idl:
        Include the new IDL.

        * WebKit.vcproj/Interfaces.vcproj:
        Add the new IDL to the project.

2010-01-27  Aaron Boodman  <aa@chromium.org>

        Expand NotificationCenter::checkPermission() interface.
        It now passes the full URL instead of just the origin.

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

        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::checkPermission):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

2010-01-27  Adam Roben  <aroben@apple.com>

        Make it possible to instantiate WebSerializedJSValue using
        WebKitCreateInstance

        Reviewed by Dave Hyatt.

        * ForEachCoClass.h:
        * WebKitClassFactory.cpp:
        Added WebSerializedJSValue.

2010-01-26  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver Hunt.

        Windows build references non-existent include paths
        https://bugs.webkit.org/show_bug.cgi?id=34175

        * WebKit.vcproj/WebKit.vcproj:

2010-01-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Simon Fraser.

        A WebGeolocationControllerClient is leaked for every WebView
        https://bugs.webkit.org/show_bug.cgi?id=34145

        * WebCoreSupport/WebGeolocationControllerClient.cpp:
        (WebGeolocationControllerClient::geolocationDestroyed): Added.
        * WebCoreSupport/WebGeolocationControllerClient.h:

2010-01-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Maciej Stachowiak.

        <rdar://problem/7569820> svg/custom/text-zoom.xhtml fails on Windows
        https://bugs.webkit.org/show_bug.cgi?id=34006

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Added WebKitZoomsTextOnlyPreferenceKey
        with a default value of true.

2010-01-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Sam Weinig.

        Add missing implementation for WebGeolocationPosition::initWithTimestamp.

        * WebGeolocationPosition.cpp:
        (WebGeolocationPosition::initWithTimestamp): Implemented.

2010-01-20  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: accSelect() is not implemented

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

        Reviewed by Darin Adler.

        * AccessibleBase.cpp:
        (AccessibleBase::accSelect):
        If there is an invalid combination of state flags, return early. If the
        caller passed the "take focus" flag, focus the object. If the "take
        selection" flag was passed, check whether the parent object is an
        AccessibilityListBox; if so, call the object's setSelectedChildren()
        function. If the parent is an AccessibilityMenuListPopup, call the
        child object's setSelected() function. Otherwise, if the parent is some
        other, unsupported object, return early.
        If the selection flags include "add", "remove", or "extend" selection,
        and the parent object is not multi-selectable, return early. Otherwise,
        set or unset the child's selected flag based on the passed flag.

2010-01-20  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler and Adam Roben.

        Feature defines are difficult to maintain on Windows builds
        https://bugs.webkit.org/show_bug.cgi?id=33883

        FeatureDefines.vsprops are now maintained in a way similar to
        Configurations/FeatureDefines.xcconfig, with the added advantage
        of having a single FeatureDefines file across all projects.

        * WebKit.vcproj/Interfaces.vcproj: Add FeatureDefines.vsprops inherited property sheet.
        * WebKit.vcproj/WebKit.sln: Set up Cairo configuration for WebCoreGenerated.
        * WebKit.vcproj/WebKit.vcproj: Remove ENABLE_ preprocessor definitions.
        Add FeatureDefines.vsprops inherited property sheet.
        * WebKit.vcproj/WebKitGUID.vcproj: Add FeatureDefines.vsprops inherited property sheet.

2010-01-17  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: The child <option> elements of a non-multiple <select> are not
        exposed

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

        Reviewed by Alice Liu.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accState):
        If the object is invisible, set the invisible state flag. If the object
        is collapsed, set the collapsed state. If the object is a combo box,
        set the has popup flag, and if it's not collapsed, set the expanded
        flag.
        (MSAARole):
        Add new WebCore to MSAA role mappings.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::AXMenuListActionVerb):
        Return the action verb that Firefox uses for <select> elements with
        popups.
        (WebCore::AXMenuListPopupActionVerb):
        Return the verb that Firefox uses for a popup list.

2010-01-19  John Sullivan  <sullivan@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=33854
        Would like a variant of WebHTMLRepresentation's searchForLabelsBeforeElement that returns 
        more info about where the result was found

        Reviewed by Darin Adler

        * Interfaces/IWebHTMLRepresentation.idl:
        Created variant of searchForLabels that includes additional in/out parameters resultDistance and resultIsInCellAbove.
        
        * Interfaces/WebKit.idl:
        Touched in order to get other idl change to propagate correctly.

        * WebHTMLRepresentation.cpp:
        (WebHTMLRepresentation::deprecatedSearchForLabels):
        Renamed since iDL doesn't support two functions with the same name but different signatures.
        (WebHTMLRepresentation::searchForLabels):
        Implemented variant of searchForLabels that includes additional in/out parameters resultDistance and resultIsInCellAbove.

        * WebHTMLRepresentation.h:
        Declared variant of searchForLabels that includes additional in/out parameters resultDistance and resultIsInCellAbove.

2010-01-19  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebScriptWorld.cpp: Added missing #include.

2010-01-19  Dave Hyatt  <hyatt@apple.com>

        Build bustage fix. Make sure the newly added scriptWorldForGlobalContext function is [local] in the IDL.

        * Interfaces/IWebScriptWorld.idl:

2010-01-19  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add an API to obtain a WebScriptWorld from a JSGlobalContextRef.

        * Interfaces/IWebScriptWorld.idl:
        * WebScriptWorld.cpp:
        (WebScriptWorld::scriptWorldForGlobalContext):
        * WebScriptWorld.h:

2010-01-18  Adam Roben  <aroben@apple.com>

        Add IWebViewPrivate::setDomainRelaxationForbiddenForURLScheme

        WebKit/win part of fixing <http://webkit.org/b/33806>
        <rdar://problem/7552837> Would like API to disallow setting of
        document.domain for pages with certain URL schemes

        Reviewed by Sam Weinig.

        * Interfaces/IWebViewPrivate.idl: Added
        setDomainRelaxationForbiddenForURLScheme.

        * Interfaces/WebKit.idl: Touched to force a build.

        * WebView.cpp:
        (WebView::setDomainRelaxationForbiddenForURLScheme):
        * WebView.h:
        Added. Calls through to SecurityOrigin.

2010-01-18  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Use new setScrollFrame API
        https://bugs.webkit.org/show_bug.cgi?id=32279

        * WebView.cpp:
        (WebView::updateRootLayerContents):

2010-01-15  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Screen rect for <option> elements is always the zero rect

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

        Reviewed by Oliver Hunt.

        * AccessibleBase.cpp:
        (AccessibleBase::accLocation):
        Use elementRect() rather than boundingBoxRect(), which
        AccessibilityListBoxOption overrides.

2010-01-15  Jon Honeycutt  <jhoneycutt@apple.com>

        get_accParent should try to retrieve parent AccessibilityObject, before
        calling upon window

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

        Reviewed by Darin Adler.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accParent):
        If the object has a parent object, return it. If not, return the
        accessible for the WebView window.

2010-01-12  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: selected, selectable, extended selectable, and multiple
        selectable states are not reported

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

        Reviewed by Darin Adler.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accState):
        Remove the call to isMultiSelect(). Call the correctly-named
        isMultiSelectable(), and if it returns true, set both the "extended
        selectable" and "multiple selectable" states. Check whether the object
        is selected or selectable, and report those states.

2010-01-13  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add additional Geolocation interfaces in WebKit for Windows.

        * Interfaces/IWebGeolocationPolicyListener.idl: Added.
        * Interfaces/IWebUIDelegatePrivate.idl: Add decidePolicyForGeolocationRequest to IWebUIDelegatePrivate2.
        Append since this version hasn't shipped.
        * Interfaces/WebKit.idl: Add include of IWebGeolocationPolicyListener.idl.
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::requestGeolocationPermissionForFrame): Call into decidePolicyForGeolocationRequest.
        * WebCoreSupport/WebGeolocationControllerClient.cpp:
        (WebGeolocationControllerClient::WebGeolocationControllerClient): Moved *.
        * WebGeolocationPolicyListener.cpp: Added.
        * WebGeolocationPolicyListener.h: Added.
        * WebKit.vcproj/Interfaces.vcproj: Added IWebGeolocationPolicyListener.
        * WebKit.vcproj/WebKit.vcproj: Added WebGeolocationPolicyListener, WebGeolocationPolicyListener.
        * WebView.cpp:
        (WebView::setGeolocationProvider): Removed extraneous STDMETHODCALLTYPE.
        (WebView::geolocationProvider): Removed extraneous STDMETHODCALLTYPE.
        (WebView::geolocationDidChangePosition): Removed extraneous STDMETHODCALLTYPE.
        (WebView::geolocationDidFailWithError): Removed extraneous STDMETHODCALLTYPE.

2010-01-12  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben, Sam Weinig.

        Add Geolocation interfaces in WebKit for Windows.

        * ForEachCoClass.h: Added WebGeolocationPosition.
        * Interfaces/IWebError.idl:
        * Interfaces/IWebGeolocationPosition.idl: Added.
        * Interfaces/IWebGeolocationProvider.idl: Added.
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebGeolocationControllerClient.cpp: Added.
        (WebGeolocationControllerClient::WebGeolocationControllerClient):
        (WebGeolocationControllerClient::startUpdating):
        (WebGeolocationControllerClient::stopUpdating):
        (WebGeolocationControllerClient::lastPosition):
        * WebCoreSupport/WebGeolocationControllerClient.h: Added.
        * WebGeolocationPosition.cpp: Added IWebGeolocationPosition implementation.
        * WebGeolocationPosition.h: Added IWebGeolocationPosition implementation.
        * WebKit.vcproj/Interfaces.vcproj: Added IWebGeolocationPosition.idl, IWebGeolocationProvider.idl,
        relocated JavaScriptCoreAPITypes.idl, WebScrollbarTypes.idl
        * WebKit.vcproj/WebKit.vcproj: Added WebGeolocationPosition.h/.cpp, WebGeolocationControllerClient.h/cpp,        
        * WebKitClassFactory.cpp: Add WebGeolocationPosition include.
        * WebView.cpp:
        (WebView::initWithFrame): Create WebGeolocationControllerClient if Geolocation is enabled.
        (WebView::setGeolocationProvider): Added Geolocation-specific method.
        (WebView::geolocationProvider): Added Geolocation-specific method.
        (WebView::geolocationDidChangePosition): Added Geolocation-specific method.
        (WebView::geolocationDidFailWithError): Added Geolocation-specific method.
        * WebView.h: Added setGeolocationProvider, geolocationProvider, geolocationDidChangePosition, geolocationDidFailWithError.

2010-01-11  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility role of <select multiple> elements is wrong

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

        Reviewed by Darin Adler.

        * AccessibleBase.cpp:
        (MSAARole):
        Map the WebCore::ListBox and WebCore::ListBoxOption roles to the MSAA
        "list" and "list item" roles.

2010-01-08  Brent Fulgham  <bfulgham@webkit.org>

        Build fix, no review.

        Protect video control logic inside ENABLE(VIDEO).

        * WebView.cpp:
        (WebView::enterFullscreenForNode):
        (WebView::exitFullscreen):
        * WebView.h:

2010-01-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Implement full-screen video for Windows
        https://bugs.webkit.org/show_bug.cgi?id=31318
        
        This adds a full-screen controller, FullscreenVideoController, 
        which manages going in and out of full-screen. The actual 
        full-screen window is created and managed by logic added 
        to QTMovieWin. FullscreenVideoController also creates and
        manages a HUD. The HUD renders and manages events to
        control the playing video. Movie controller events go to 
        FullscreenVideoController which then sends them to HTMLMediaElement, 
        which is passed to the controller by WebView, which gets the call 
        to go into full-screen mode from HTMLMediaElement via 
        ChromeClient.
        
        I've also updated the icons so the related sets (Play/Pause and
        volume high/volume low/exit fullscreen) are the same size. This 
        allows me to position them using common code.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::supportsFullscreenForNode):
        (WebChromeClient::enterFullscreenForNode):
        (WebChromeClient::exitFullscreenForNode):
        * WebCoreSupport/WebChromeClient.h:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/fsVideoAudioVolumeHigh.png:
        * WebKit.vcproj/fsVideoAudioVolumeLow.png:
        * WebKit.vcproj/fsVideoExitFullscreen.png:
        * WebKit.vcproj/fsVideoPause.png:
        * WebKit.vcproj/fsVideoPlay.png:
        * WebKitDLL.cpp:
        (loadResourceIntoBuffer):
        * FullscreenVideoController.cpp: Added.
        * FullscreenVideoController.h: Added.
        * WebView.cpp:
        (WebView::enterFullscreenForNode):
        (WebView::exitFullscreen):
        * WebView.h:

2010-01-08  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed correction. 

        Accidentally left unnecessary modification to hdcFromContext
        in when landing r52995.

        * WebFrame.cpp:
        (hdcFromContext): Back out unneeded modification.

2010-01-08  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Use correct cairo surface data type for handling print operations.
        https://bugs.webkit.org/show_bug.cgi?id=33022.

        * WebFrame.cpp:
        (scaleFactor): Handle 'scale = 0' case.
        (WebFrame::spoolPage): Use scaleFactor helper function.  Account for
         margin size in region passed to header/footer routines.
        (WebFrame::spoolPages): Properly clean up Cairo surface.

2010-01-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Maciej Stachowiak.

        Remove COM code generation files.
        https://bugs.webkit.org/show_bug.cgi?id=32854

        * WebKit.vcproj/DerivedSources.make: Removed.
        * WebKit.vcproj/build-generated-files.sh: Removed.

2010-01-05  Adam Roben  <aroben@apple.com>

        Make IWebView::close and destroying a WebView's HWND optional for
        WebKit clients

        WebView will now take care of these operations itself when its last
        reference is released, if they haven't already been done.

        IWebView::close now also destroys the WebView's HWND. All WebKit
        clients were already performing these operations in succession anyway,
        or were attempting to by calling IWebView::close then destroying the
        WebView's host window (which actually resulted in the WebView's HWND
        leaking, and the crash in the below bug).

        Fixes <rdar://problem/7374218> <http://webkit.org/b/32827> Crash when
        calling IWebView::close, then releasing the WebView, without calling
        DestroyWindow

        Fixes a few WebViewDestruction tests, too.

        Reviewed by Steve Falkenburg.

        * WebView.cpp:
        (WebView::~WebView): Don't try to destroy m_viewWindow here. That
        should already have happened. Assert that this is the case.
        (WebView::close): If m_viewWindow isn't already being destroyed,
        destroy it now. Moved the call to revokeDragDrop() here from our
        WM_DESTROY handler because it needs to be done before m_viewWindow is
        nulled out.
        (WebView::WebViewWndProc): Removed call to revokeDragDrop() that
        close() now performs.
        (WebView::Release): If our last reference is being released, call
        close() so that clients don't have to. (It's harmless to call close()
        multiple times.) We do this here instead of in the destructor because
        close() can cause AddRef() and Release() to be called, and calling
        those from within the destructor leads to double-destruction.
        (WebView::setHostWindow): Removed an unnecessary (and now harmful)
        null-check.
        (WebView::revokeDragDrop): Changed an assertion into a run-time check,
        since this will now sometimes be called when m_viewWindow hasn't been
        created yet. Changed the IsWindow call to a null-check because we
        never hold onto a destroyed m_viewWindow.
        (WebView::windowAncestryDidChange): If we don't have a view window,
        stop tracking changes to our parent's active state.

2010-01-05  Adam Roben  <aroben@apple.com>

        Make it safe to call IWebView::close when IWebView::initWithFrame
        hasn't been called

        Part of <rdar://problem/7374218> <http://webkit.org/b/32827> Crash
        when IWebView::close, then releasing the WebView, without calling
        DestroyWindow

        Reviewed by Steve Falkenburg.

        * WebView.cpp:
        (WebView::close): Null-check m_page and m_preferences before using
        them. They will be null if initWithFrame was never called.

2010-01-05  Adam Roben  <aroben@apple.com>

        Add assertions to catch double-destruction of WebViews earlier

        I basically copied the m_deletionHasBegun logic from WTF::RefCounted.

        Fixes <http://webkit.org/b/33219>.

        Reviewed by Darin Adler.

        * WebView.cpp:
        (WebView::WebView): Initialize m_deletionHasBegun
        (WebView::AddRef): Assert that deletion hasn't already begun.
        (WebView::Release): Assert that deletion hasn't already begun, then
        record when deletion *does* begin.

        * WebView.h: Added m_deletionHasBegun.

2010-01-05  Adam Roben  <aroben@apple.com>

        Remove dead code in WebViewWndProc

        Fixes <http://webkit.org/b/33218>.

        Reviewed by Darin Adler.

        * WebView.cpp:
        (WebView::WebViewWndProc): Removed a redundant isBeingDestroyed check.
        We bail out much earlier in this function if isBeingDestroyed is true.

2010-01-04  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility role of <select> elements is wrong

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

        Reviewed by Sam Weinig.

        * AccessibleBase.cpp:
        (MSAARole):
        Map WebCore::PopUpButtonRole to MSAA's ROLE_SYSTEM_COMBOBOX.

2010-01-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33181
        The first letter is not removed properly from inline input hole

        * WebView.cpp: (WebView::onIMEEndComposition): If composition is ended before it was
        confirmed, cancel it.

2010-01-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33161
        Assertion failure in WebView when using Chinese Simplified IME

        * WebView.cpp: (WebView::onIMERequestCharPosition): Changed the assertion into release mode
        check. We can't make assertions about arguments passed from outside WebKit.

2010-01-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=33157
        Implement TextInput logging channel on Windows

        * WebKitLogging.cpp: (WebKitInitializeLoggingChannelsIfNecessary):
        * WebKitLogging.h:
        Added a TextInput channel in place of unused Network one.

        * WebView.cpp:
        (WebView::WebViewWndProc): Changed onIMERequest to return result directly. We never forward
        it to DefWindowProc, so there is no need to return an unused boolean result for "handled".
        (WebView::onIMEStartComposition): Added logging.
        (imeCompositionArgumentNames): A helper function for detailed logging in onIMEComposition.
        (imeNotificationName): A helper function for detailed logging in onIMENotify.
        (imeRequestName): A helper function for detailed logging in onIMERequest.
        (WebView::onIMEComposition): Added logging.
        (WebView::onIMEEndComposition): Ditto.
        (WebView::onIMEChar): Ditto.
        (WebView::onIMENotify): Ditto.
        (WebView::onIMERequestCharPosition): Changed to return result directly.
        (WebView::onIMERequestReconvertString): Ditto.
        (WebView::onIMERequest): Changed to return result directly. Added logging.
        (WebView::onIMESelect): Added logging.
        (WebView::onIMESetContext): Added logging.

        * WebView.h: onIMERequest functions now return result directly.


2010-01-04  Adam Roben  <aroben@apple.com>

        Add WebKitAPITest

        Fixes <http://webkit.org/b/33167>.

        Reviewed by Sam Weinig.

        * WebKit.vcproj/WebKit.sln: Added WebKitAPITest.vcproj. It builds just
        after DumpRenderTree.vcproj.

2010-01-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan and Mark Rowe.

        Updated copyright string

        * WebKit.vcproj/WebKit.rc:

2009-12-22  Darin Adler  <darin@apple.com>

        Another try at fixing Windows build.

        * WebKitPrefix.cpp: Touch it.

2009-12-22  Darin Adler  <darin@apple.com>

        Reviewed by Mark Rowe.

        Turn off datagrid by default, at least for all platforms Apple ships.
        The datagrid implementation isn't ready for general web use yet.

        * WebKit.vcproj/WebKit.vcproj: Turn off datagrid by default.

2009-12-21  Adam Roben  <aroben@apple.com>

        Fix non-ACCELERATED_COMPOSITING builds

        * WebPreferences.cpp:
        (WebPreferences::acceleratedCompositingEnabled): Guard use of
        WKCACFLayerRenderer with USE(ACCELERATED_COMPOSITING).

2009-12-18  Adam Roben  <aroben@apple.com>

        Add IWebPreferencesPrivate::[set]AcceleratedCompositingEnabled

        Fixes <http://webkit.org/b/32745>.

        Reviewed by Ada Chan.

        * Interfaces/IWebPreferencesPrivate.idl: Added
        [set]AcceleratedCompositingEnabled.

        * Interfaces/WebKit.idl: Touched to force a build.

        * WebPreferenceKeysPrivate.h: Added
        WebKitAcceleratedCompositingEnabledPreferenceKey.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Make accelerated
        compositing be on by default.
        (WebPreferences::setAcceleratedCompositingEnabled): Store the new
        value.
        (WebPreferences::acceleratedCompositingEnabled): If accelerated
        compositing isn't available, return false. Otherwise, return the value
        stored in preferences.

        * WebPreferences.h: Added [set]AcceleratedCompositingAvailable.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Just pass the value from
        WebPreferences on down.

2009-12-17  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility role of list items is wrong

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

        Reviewed by Adam Roben.

        * AccessibleBase.cpp:
        (MSAARole):
        Make the WebCore list item role map to the MSAA list item role.

2009-12-17  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility role of list markers is wrong

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

        Reviewed by Adam Roben.

        * AccessibleBase.cpp:
        (MSAARole):
        Make the WebCore list marker role map to the MSAA static text role.

2009-12-18  Adam Roben  <aroben@apple.com>

        Add #includes needed after WebCore clean-up

        Rubber-stamped by Anders Carlsson.

        Fixes <http://webkit.org/b/32718>.

        * WebCoreSupport/WebContextMenuClient.cpp:
        * WebDataSource.cpp:
        * WebHTMLRepresentation.cpp:
        * WebView.cpp:
        * WebView.h:

2009-12-17  Benjamin Otte  <otte@gnome.org>

        Reviewed by Adam Roben.

        Don't include all JSC headers everywhere
        https://bugs.webkit.org/show_bug.cgi?id=32663

        * WebCoreLocalizedStrings.cpp: Added now-needed #include of
        MathExtras.h.

2009-12-17  Adam Roben  <aroben@apple.com>

        Remove WebKit.sln's Debug_All and Debug_Internal configurations

        These configurations aren't buildable by people outside of Apple, and
        Apple doesn't use this solution file.

        Fixes <http://webkit.org/b/31000> Windows WebKit Build Configuration
        should default to Debug instead of Debug_all.

        Rubber-stamped by Dan Bernstein.

        * WebKit.vcproj/WebKit.sln:

2009-12-16  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility role of text nodes is wrong

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

        Reviewed by Alice Liu.

        * AccessibleBase.cpp:
        (MSAARole):
        If the role is WebCore::EditableTextRole, return ROLE_SYSTEM_TEXT.
        (AccessibleBase::role):
        Call roleValueForMSAA().

2009-12-14  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Provide working printing support for WinCairo port.

        * WebFrame.cpp:
        (WebFrame::spoolPage): Conditionalize initialization of
          PlatformGraphicsContext handling for CG vs. Cairo.
        (scaleFactor): Add helper function.
        (hdcFromContext): Add helper function.
        (WebFrame::drawHeader): Correct Cairo variation.
        (WebFrame::drawFooter): Correct Cairo variation.
        (WebFrame::spoolPages): Correct Cairo variation.

2009-12-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=32499
        Add client based Geolocation provider

        Add first cut of a client based Geolocation provider. This is guarded by
        ENABLE(CLIENT_BASED_GEOLOCATION) and is off by default for now. This adds a
        GeolocationControllerClient interface that no-one currently implements,
        but will in a subsequent patch.

        * WebView.cpp:
        (WebView::initWithFrame):

2009-12-14  Adam Roben  <aroben@apple.com>

        Change IWebFramePrivate's vtable to be compatible with Safari 4.0.4

        Reviewed by Steve Falkenburg.

        Fixes <http://webkit.org/b/32433> REGRESSION (r51567): Right click on
        a link element crashes WebKit nightly

        * Interfaces/IWebFramePrivate.idl: Moved pauseSVGAnimation to the end
        of the interface so the vtable that Safari 4.0.4 sees is unchanged.

2009-12-14  Adam Roben  <aroben@apple.com>

        Build fix

        * WebKit.vcproj/WebKit.vcproj: Added $(DXSDK_DIR)\Lib\x86 to the
        libpath for all non-Cairo configurations (it was missing from most of
        them).

2009-12-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Jon Honeycutt.

        Added icons for full-screen video on Windows
        https://bugs.webkit.org/show_bug.cgi?id=31318

        * WebKit.vcproj/WebKit.rc:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/fsVideoAudioVolumeHigh.png: Added.
        * WebKit.vcproj/fsVideoAudioVolumeLow.png: Added.
        * WebKit.vcproj/fsVideoExitFullscreen.png: Added.
        * WebKit.vcproj/fsVideoPause.png: Added.
        * WebKit.vcproj/fsVideoPlay.png: Added.
        * WebKit.vcproj/resource.h:

2009-12-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Delay load DLLs for accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=31856
        
        If the DLLs (d3d9 and QuartzCore). are not present it
        turns off accelerated compositing and avoids calling 
        any of the functions in the DLLs.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2009-12-10  Jon Honeycutt  <jhoneycutt@apple.com>

        Pass more information about a plug-in to the PluginHalterDelegate

        Reviewed by Adam Roben.

        * Interfaces/IWebPluginHalterDelegate.idl:
        Add new parameters.

        * WebCoreSupport/WebPluginHalterClient.cpp:
        (WebPluginHalterClient::shouldHaltPlugin):
        Update for new parameters. Pass them when making the delegate call.

        * WebCoreSupport/WebPluginHalterClient.h:
        Update for new parameters.

2009-12-09  Brent Fulgham  <bfulgham@webkit.org>

        Revert incorrect commit-box update r51911.
        It mistakenly set the selectAll implementation in the
        deslectAll method. 

        * WebFrame.cpp:
        (WebFrame::deselectAll):

2009-12-09  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Darin Adler.

        Provide an implementation for 'selectAll'
        https://bugs.webkit.org/show_bug.cgi?id=32296

        * WebFrame.cpp:
        (WebFrame::selectAll): Implement "SelectAll" command.

2009-12-09  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Darin Adler.

        Provide an implementation for 'selectAll'
        https://bugs.webkit.org/show_bug.cgi?id=32296

        * WebFrame.cpp:
        (WebFrame::selectAll): Implement "SelectAll" command.

2009-12-08  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Delay load DLLs for accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=31856
        
        If the DLLs (d3d9 and QuartzCore). are not present it
        turns off accelerated compositing and avoids calling 
        any of the functions in the DLLs.

        * WebView.cpp:
        * WebView.h:

2009-12-08  Adam Roben  <aroben@apple.com>

        Windows build fix

        * Interfaces/WebKit.idl: Touched this to force Interfaces.vcproj to rebuild.

2009-12-08  John Sullivan  <sullivan@apple.com>

        Reviewed by Dan Bernstein

        Split two-clause assertions into two separate assertions.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::isTextField):
        Split a two-clause assertion into two separate assertions.
        (DOMHTMLInputElement::rectOnScreen):
        Added the two assertions here that all other functions in this group shared.
        (DOMHTMLInputElement::selectedRange):
        Split a two-clause assertion into two separate assertions.
        (DOMHTMLInputElement::setAutofilled):
        Split a two-clause assertion into two separate assertions.
        (DOMHTMLInputElement::isAutofilled):
        Split a two-clause assertion into two separate assertions.

2009-12-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Rubber-stamped by Maciej Stachowiak.

        Turn on (SVG) Filters for Win.
        https://bugs.webkit.org/show_bug.cgi?id=32224

        * WebKit.vcproj/WebKit.vcproj:

2009-12-08  John Sullivan  <sullivan@apple.com>

        Add isAutofilled getter to match existing setter.

        Reviewed by Ada Chan.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::isAutofilled):
        Implemented new cover function.
        
        * DOMHTMLClasses.h:
        Declared new cover function.
        
        * Interfaces/DOMPrivate.idl:
        Declared new interface.

2009-12-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Windows build fix part III).

        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2009-12-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Windows build fix part II).

        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2009-12-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/7214236> and http://webkit.org/b/32052 - Implement HTML5 state object history API

        * Interfaces/IWebFrameLoadDelegatePrivate2.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidPushStateWithinPage):
        (WebFrameLoaderClient::dispatchDidReplaceStateWithinPage):
        (WebFrameLoaderClient::dispatchDidPopStateWithinPage):
        * WebCoreSupport/WebFrameLoaderClient.h:

2009-12-03  Pavel Feldman  <pfeldman@dhcp-172-28-174-220.spb.corp.google.com>

        Reviewed by Timothy Hatcher.

        Web Inspector: Simplify the settings support in inspector controller.

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

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::attachWindow):
        (WebInspectorClient::detachWindow):
        (WebInspectorClient::showWindowWithoutNotifications):
        * WebCoreSupport/WebInspectorClient.h:

2009-12-03  Ben Murdoch  <benm@google.com>

        Reviewed by Brady Eidson.

        [Android] The FrameLoaderClient is unaware of BackForwardList changes.
        https://bugs.webkit.org/show_bug.cgi?id=31914

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidAddBackForwardItem): Add an empty implementation. Method added to FrameLoaderClient by Android (see bug).
        (WebFrameLoaderClient::dispatchDidRemoveBackForwardItem): ditto.
        (WebFrameLoaderClient::dispatchDidChangeBackForwardIndex): ditto.
        * WebCoreSupport/WebFrameLoaderClient.h:

2009-12-02  Timothy Hatcher  <timothy@apple.com>

        Move setValueForUser to the end of the DOMHTMLInputElement interface
        so it is fine for binary compatibility.

        Directed by Steve Falkenburg.

        * Interfaces/DOMHTML.idl:

2009-12-02  Timothy Hatcher  <timothy@apple.com>

        Expose setValueForUser for the COM DOMHTMLInputElement.

        <rdar://problem/6760590> Would like a way to detect a login form AutoFill from JavaScript

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::setValueForUser):
        * Interfaces/DOMHTML.idl:

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Try to fix windows build.

        * WebFrame.cpp:

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Simon Fraser.

        Add SVG animation test framework with 'snapshot' functionality
        https://bugs.webkit.org/show_bug.cgi?id=31897

        Add API used by the new 'sampleSVGAnimationForElementAtTime' DRT method,
        forwarding the call to SVGDocumentExtensions, if SVG is enabled.

        Implemented just like the existing pauseAnimation* methods for CSS animations.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::pauseSVGAnimation):
        * WebFrame.h:

2009-11-30  Adam Roben  <aroben@apple.com>

        Fix double-free of BSTRs passed to WebNavigationData::createInstance

        WebFrameLoaderClient::updateGlobalHistory was converting
        WebCore::Strings to WebCore::BStrings, then passing them to
        WebNavigationData::createInstance. But the latter function takes BSTR
        parameters and adopts them into WebCore::BStrings. So the end result
        was that two WebCore::BStrings would end up freeing each underlying
        BSTR.

        The fix is to only convert to WebCore::BString inside
        WebNavigationData.

        Fixes <http://webkit.org/b/31998> <rdar://problem/7383452> REGRESSION
        (r49564): Crash in updateGlobalHistory when running Javascript iBench
        test

        I couldn't find a way to reproduce this in DumpRenderTree.

        Reviewed by Steve Falkenburg.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory): Pass WebCore::Strings to
        WebNavigationData::createInstance.

        * WebNavigationData.cpp:
        (WebNavigationData::WebNavigationData):
        (WebNavigationData::createInstance):
        * WebNavigationData.h:
        Changed to take const WebCore::String&s instead of BSTRs and to
        convert the Strings to BStrings at this level.

2009-11-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WebKit clients that don't implement didClearWindowObjectForFrameInScriptWorld should fall back to didClearWindowObject
        https://bugs.webkit.org/show_bug.cgi?id=31986

        * WebFrame.cpp:
        (WebFrame::dispatchDidClearWindowObjectInWorld): Fall back if E_NOTIMPL returned.

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Another Windows build fix
        
        Got rid of d3d.lib and d3dx9.lib dependency. Not needed until
        we turn on ACCELERATED_COMPOSITING

        * WebKit.vcproj/WebKit.vcproj:

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Fixed Windows build
        
        Got rid of QuartzCore.lib dependency. Not needed until
        we turn on ACCELERATED_COMPOSITING

        * WebKit.vcproj/WebKit.vcproj:

2009-11-24  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Implement accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=27314
        
        This is the WebKit side of the implementation. It plumbs the root layer
        from WebCore. It also makes changes to WebView which places the 
        backing store of the page into the root compositing layer so it is 
        properly composited with all the other layers. This deals with resizing, 
        scrolling, and incremental repaint of the page.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::attachRootGraphicsLayer):
        (WebChromeClient::scheduleCompositingLayerSync):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::setNeedsOneShotDrawingSynchronization):
        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::close):
        (WebView::repaint):
        (WebView::scrollBackingStore):
        (WebView::paint):
        (WebViewWndProc):
        (WebView::setRootChildLayer):
        (WebView::setAcceleratedCompositing):
        (WebView::setRootLayerContents):
        * WebView.h:
        (WebView::isAcceleratedCompositing):
        (WebView::resizeLayerWindow):
        (WebView::layerWindowBecameVisible):
        (WebView::setRootLayerNeedsDisplay):

2009-11-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Include "config.h" to meet Coding Style Guidelines
        https://bugs.webkit.org/show_bug.cgi?id=31792

        * GEN_DOMObject.cpp:
        * WebScriptObject.cpp:

2009-11-21  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix. Unreviewed.

        * Interfaces/IWebSerializedJSValue.idl:

2009-11-20  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMElement::tagName() is unimplemented

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

        Reviewed by Darin Adler.

        * DOMCoreClasses.cpp:
        (DOMElement::tagName):
        Create a BString from the element's tag name, and release its BSTR
        into result.

2009-11-20  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMNode::childNodes() is unimplemented

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

        Reviewed by Darin Adler.

        * DOMCoreClasses.cpp:
        (DOMNode::childNodes):
        Create a DOMNodeList from the node's child nodes.

2009-11-20  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Jon Honeycutt.

        Change WebSerializedJSValue on Windows to have a zero-argument createInstance call.  Move the
        serialization into a separate serialize() function that can be called after the object has been
        created.

        Fix a typo in serialize() caused when fixing build bustage (put a ! back in).

        * Interfaces/IWebSerializedJSValue.idl:
        * WebSerializedJSValue.cpp:
        (WebSerializedJSValue::WebSerializedJSValue):
        (WebSerializedJSValue::createInstance):
        (WebSerializedJSValue::serialize):
        (WebSerializedJSValue::deserialize):
        * WebSerializedJSValue.h:

2009-11-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Dave Hyatt.

        Another go at the Windows Build Fix - this is a couple steps of it,
        so a little more involved than most build fixes.

        * Interfaces/IWebSerializedJSValue.idl:
        * Interfaces/JavaScriptCoreAPITypes.idl:
        * WebKit.vcproj/Interfaces.vcproj:
        * WebSerializedJSValue.cpp:
        (WebSerializedJSValue::deserialize):
        * WebSerializedJSValue.h:

2009-11-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Dave Hyatt.

        Build fix for Windows - only declare JSContextRef once, instead
        of in two different idl files. Create a new file to hold the
        definition of JSContextRef.

        * Interfaces/IWebFrameLoadDelegate.idl:
        * Interfaces/IWebSerializedJSValue.idl:
        * Interfaces/JavaScriptCoreAPITypes.idl: Added.
        * Interfaces/WebKit.idl:
        * WebKit.vcproj/Interfaces.vcproj:

2009-11-20  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Oliver Hunt and Jon Honeycutt.

        Add support for WebSerializedJSValue to WebKit.  This object wraps the SerializedScriptValue functionality in WebCore
        and exposes the ability to do JS value serialization/deserialization to WebKit clients.

        * Interfaces/IWebSerializedJSValue.idl: Added.
        * Interfaces/WebKit.idl:
        * WebKit.vcproj/WebKit.vcproj:
        * WebSerializedJSValue.cpp: Added.
        (WebSerializedJSValue::WebSerializedJSValue):
        (WebSerializedJSValue::~WebSerializedJSValue):
        (WebSerializedJSValue::createInstance):
        (WebSerializedJSValue::AddRef):
        (WebSerializedJSValue::Release):
        (WebSerializedJSValue::QueryInterface):
        (WebSerializedJSValue::deserialize):
        * WebSerializedJSValue.h: Added.

2009-11-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=31690
        Make SocketStreamHandleCFNet work on Windows

        * WebDownloadCFNet.cpp:
        (WebDownload::init):
        (WebDownload::initWithRequest):
        (WebDownload::initToResumeWithBundle):
        Update for loaderRunLoop() now being in its own header.

2009-11-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/7035231>
        Support closed caption in <video> element

        * WebCoreLocalizedStrings.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
            Add accessibility help strings for media controller closed caption button.

2009-11-18  Michelangelo De Simone  <micdesim@gmail.com>

        Reviewed by Darin Adler.

        Fix for <https://bugs.webkit.org/show_bug.cgi?id=27959>.
        Support for validationMessage attribute, as per HTML5 specs.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):

2009-11-18  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

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

        Changes associated with renaming RenderTextControl::isUserEdited.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::isUserEdited): Formerly named isUserEdited.
        (DOMHTMLTextAreaElement::isUserEdited): Ditto.

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        Implement DOMHTMLInputElement::replaceCharactersInRange().

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

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::replaceCharactersInRange):
        Get the text of the input field. Replace the given range with the
        replacement text, and set this new string as the input element's value.
        Select from index to the end of the field. This matches the
        implementation in the Obj-C bindings.

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMHTMLOptionElement is missing some functionality.

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

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLOptionElement::text):
        Cast m_element to an HTMLOptionElement, and call its text() function.
        (DOMHTMLOptionElement::label):
        Ditto, for label().

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMHTMLSelectElement is missing some implementation.

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

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLSelectElement::options):
        Cast m_element to an HTMLSelectElement. If it has no options, return
        E_FAIL. Otherwise, create a DOMHTMLOptionsCollection to wrap the
        options, and return it.
        (DOMHTMLSelectElement::activateItemAtIndex):
        If the index is out of bounds, return E_FAIL. Otherwise, select the
        item.

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMHTMLOptionsCollection is missing some implementation.

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

        Reviewed by Dan Bernstein.

        * DOMHTMLClasses.cpp:
        (DOMHTMLOptionsCollection::DOMHTMLOptionsCollection):
        Initialize m_collection.
        (DOMHTMLOptionsCollection::createInstance):
        Create a DOMHTMLOptionsCollection. If we fail to query for
        IDOMHTMLOptionsCollection, delete it, and return 0. Otherwise, return
        the result.
        (DOMHTMLOptionsCollection::length):
        (DOMHTMLOptionsCollection::item):
        Create a DOMNode for the WebCore Node. If this is 0, return E_FAIL.
        (DOMHTMLOptionsCollection::namedItem):
        Correct the signature of this function.

        * DOMHTMLClasses.h:
        Declare DOMHTMLOptionsCollection::createInstance(). Correct the
        signature of namedItem() to match IDOMHTMLOptionsCollection. Add a
        member to DOMHTMLOptionsCollection to hold the WebCore object.

2009-11-12  Jon Honeycutt  <jhoneycutt@apple.com>

        DOMHTMLInputElement::rectOnScreen() returns the wrong rect

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

        Reviewed by Darin Adler.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::rectOnScreen):
        Return the rect on screen, not the rect in the window.

2009-11-17  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by NOBODY - Build Fix.

        Correct build error in Debug_Cairo target after @49705.

        * WebKit.vcproj/WebKit.vcproj: Revise JavaScriptCore.lib
          dependency to have proper "_debug" suffix needed by
          the Debug_Cairo target.

2009-11-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by NOBODY - Build Fix.

        Touch files to try to fix the build.

        * Interfaces/IWebInspector.idl:
        * Interfaces/WebKit.idl:
        * WebKit.vcproj/Interfaces.vcproj:

2009-11-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make DRT show web inspector for tests in inspector/ folder.
        - Updated DRT to show/close inspector for all tests under /inspector
        - Introduced LayoutTestController::setTimelineProfilingEnabled and
          WebInspector::setTimelineProfilingEnabled beside setJavaScriptProfilingEnabled
        - Removed reload on each inspector test
        - Renamed fast/inspector to fast/inspector-support in order not to trigger
        inspector for those.
        - Reimplemented timeline tests in order to get rid of reload there.
        - Moved tests that don't require harness into the fast group.

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

        * Interfaces/IWebInspector.idl:
        * WebInspector.cpp:
        (WebInspector::isTimelineProfilingEnabled):
        (WebInspector::setTimelineProfilingEnabled):
        * WebInspector.h:

2009-11-13  Adam Roben  <aroben@apple.com>

        Build fix

        * Interfaces/WebKit.idl: Touch this to force interfaces to rebuild.

2009-11-13  Adam Roben  <aroben@apple.com>

        Tell the WebFrameLoadDelegate when window objects in isolated worlds
        are cleared

        Fixes <http://webkit.org/b/31124>.

        Reviewed by Dave Hyatt.

        * Interfaces/IWebFrameLoadDelegatePrivate2.idl: Added
        didClearWindowObjectForFrameInScriptWorld.

        * WebFrame.cpp:
        (WebFrame::dispatchDidClearWindowObjectInWorld):
        * WebFrame.h:
        Replaced windowObjectCleared with this function. If the delegate
        implements IWebFrameLoadDelegatePrivate2, call
        didClearWindowObjectForFrameInScriptWorld. Otherwise, if the passed-in
        world is the mainThreadNormalWorld(), call
        didClearWindowObjectForFrame.

        * WebScriptWorld.cpp:
        (allWorlds): Added. Returns a HashMap of all the WebScriptWorlds in
        existence.
        (WebScriptWorld::WebScriptWorld): Add ourselves to allWorlds().
        (WebScriptWorld::~WebScriptWorld): Remove ourselves from allWorlds().
        (WebScriptWorld::standardWorld): Added this non-COM getter for the
        standard world, which the COM getter now calls through to.
        (WebScriptWorld::findOrCreateWorld): Added. Returns the existing
        WebScriptWorld for this DOMWrapperWorld, or a new one if one doesn't
        already exist.

        * WebScriptWorld.h: Added new standardWorld overload, made one
        overload of createInstance private, and added findOrCreateWorld.

2009-11-13  Adam Roben  <aroben@apple.com>

        Build fix

        * Interfaces/WebKit.idl: Un-sort the #includes again. Apparently they
        are order-dependent!

2009-11-13  Adam Roben  <aroben@apple.com>

        Touch WebKit.idl to fix the Windows build

        * Interfaces/WebKit.idl: Sorted #includes.

2009-11-13  Adam Roben  <aroben@apple.com>

        Finish replacing worldIDs with world objects

        The only remaining use of worldIDs was in a method only used by DRT
        for the isolated worlds tests.

        Fixes <http://webkit.org/b/31414> Replace worldIDs with world objects

        Reviewed by Mark Rowe.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::stringByEvaluatingJavaScriptInScriptWorld):
        * WebFrame.h:
        Renamed from stringByEvaluatingJavaScriptInIsolatedWorld. Now takes an
        IWebScriptWorld instead of a worldID, so we don't need to maintain a
        map of worldID -> world anymore.

2009-11-12  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        externalRepresentation should take Frame as the argument
        https://bugs.webkit.org/show_bug.cgi?id=31393

        No new tests as this is just a refactoring.

        * WebFrame.cpp:
        (WebFrame::renderTreeAsExternalRepresentation):

2009-11-12  Adam Roben  <aroben@apple.com>

        Replace worldIDs with world objects

        WebScriptWorld is the new object that represents a world.  The only
        place worldID is still used is in
        IWebFramePrivate::stringByEvaluatingJavaScriptInIsolatedWorld, but
        that will change soon.

        Part of <http://webkit.org/b/31414> Implement new SPI for dealing with
        user scripts/stylesheets and isolated worlds

        Reviewed by Sam Weinig.

        * ForEachCoClass.h: Added WebScriptWorld.

        * Interfaces/IWebFramePrivate.idl: Replaced contextForWorldID with
        contextForWorld.

        * Interfaces/IWebScriptWorld.idl: Added.

        * Interfaces/IWebViewPrivate.idl: Changed the user script/stylesheet
        functions to take an IWebScriptWorld instead of a worldID.

        * Interfaces/WebKit.idl: Added WebScriptWorld.

        * WebFrame.cpp:
        (WebFrame::contextForWorld): Renamed from contextForWorldID. Now takes
        an IWebScriptWorld.
        (WebFrame::stringByEvaluatingJavaScriptInIsolatedWorld): Moved the
        bizarre world caching/creation logic that DRT depends on here from the
        findWorld function in ScriptController.cpp. Updated to use
        ScriptController::executeScriptInWorld instead of
        ScriptController::executeScriptInIsolatedWorld.

        * WebFrame.h: Replaced contextForWorldID with contextForWorld.

        * WebScriptWorld.cpp: Added.
        (WebScriptWorld::WebScriptWorld):
        (WebScriptWorld::~WebScriptWorld):
        (WebScriptWorld::createInstance):
        (WebScriptWorld::AddRef):
        (WebScriptWorld::Release):
        (WebScriptWorld::QueryInterface):
        Standard COM class implementations.

        (WebScriptWorld::standardWorld): Returns a shared instance that represents
        WebCore's mainThreadNormalWorld().

        * WebScriptWorld.h: Added.
        (WebScriptWorld::world): Simple getter.

        * WebKit.vcproj/Interfaces.vcproj: Added IWebScriptWorld.idl.

        * WebKit.vcproj/WebKit.vcproj: Added WebScriptWorld.

        * WebKitClassFactory.cpp: Added WebScriptWorld.

        * WebView.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserScriptFromGroup):
        (WebView::removeUserStyleSheetFromGroup):
        (WebView::removeUserScriptsFromGroup):
        (WebView::removeUserStyleSheetsFromGroup):
        * WebView.h:
        Changed these functions to take an IWebScriptWorld instead of a worldID.

2009-11-12  Adam Roben  <aroben@apple.com>

        Small clean-up in WebView's user content functions

        Preparation for <http://webkit.org/b/31414> Implement new SPI for
        dealing with user scripts/stylesheets and isolated worlds

        Reviewed by Dave Hyatt.

        * WebView.cpp:
        (toString):
        (toKURL):
        Added these helper functions to convert BSTRs to WebCore types.

        (toStringVector):
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserScriptFromGroup):
        (WebView::removeUserStyleSheetFromGroup):
        (WebView::removeUserScriptsFromGroup):
        (WebView::removeUserStyleSheetsFromGroup):
        (WebView::removeAllUserContentFromGroup):
        Use the new helper functions.

2009-11-11  Beth Dakin  <bdakin@apple.com>

        Build fix. No review needed.

        * WebKitGraphics.cpp:
        (WebDrawText):

2009-11-10  Daniel Bates  <dbates@webkit.org>

        Reviewed by Oliver Hunt.

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

        Modified WebDropSource::QueryContinueDrag so as to not call EventHandler::dragSourceMovedTo.

        * WebDropSource.cpp:
        (WebDropSource::QueryContinueDrag): Removed call to EventHandler::dragSourceMovedTo.

2009-11-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=31312
        Decouple authentication panel callbacks from ResourceHandle

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::initWithAuthenticationChallenge):
        (WebURLAuthenticationChallenge::sender):
        * WebURLAuthenticationChallengeSender.cpp:
        (WebURLAuthenticationChallengeSender::WebURLAuthenticationChallengeSender):
        (WebURLAuthenticationChallengeSender::createInstance):
        (WebURLAuthenticationChallengeSender::authenticationClient):
        * WebURLAuthenticationChallengeSender.h:
        * WebURLAuthenticationChallengeSenderCFNet.cpp:
        (WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge):
        (WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge):
        (WebURLAuthenticationChallengeSender::useCredential):
        Adjusted for WebCore changes.

2009-11-10  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by NOBODY - Build Fix.

        Updated fillRoundedRect to take a ColorSpace argument.

        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::createDragImageForLink):

2009-11-08  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Holger Freyther.

        ResourceRequest to be class instead of struct
        https://bugs.webkit.org/show_bug.cgi?id=30670

        Started as a compilation fix for Symbian where the compiler makes a distinction between
        class and struct in function argument signatures.
        Changed forward declaration of ResourceRequest to have class in the forward
        declaration instead of struct.

        * WebDownload.h:

2009-11-05  Adam Roben  <aroben@apple.com>

        Make CFDictionaryPropertyBag::createInstance return a COMPtr

        I also cleaned up CFDictionaryPropertyBag's class declaration a little
        while I was at it.

        Part of <http://webkit.org/b/25294> <rdar://problem/6803127> All
        WebKit/win classes should return COMPtrs from their static constructor
        members

        Reviewed by Steve Falkenburg.

        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::CFDictionaryPropertyBag): Changed to
        initialize m_refCount to 0. m_refCount gets increased to 1 by
        createInstance.
        (CFDictionaryPropertyBag::createInstance): Changed to return a COMPtr.

        * CFDictionaryPropertyBag.h:
          - Updated copyright years
          - Fixed header guard to match current style
          - Replaced #include of CoreFoundation.h with forward-declaration of
            CFMutableDictionaryRef
          - Added #include of COMPtr.h
          - Fixed opening brace placement in class declaration
          - Made createInstance return a COMPtr
          - Made constructor/destructor private
          - Made QueryInterface and IPropertyBag functions private
          - Removed unnecessary parameter names and MIDL comments

        * WebCache.cpp:
        (WebCache::statistics): Updated for change to
        CFDictionaryPropertyBag::createInstance. Now uses releaseRef to place
        the IPropertyBag pointers into the s array.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin):
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::dispatchDidModifyDatabase):
        * WebFrame.cpp:
        (WebFrame::createJavaAppletWidget):
        Updated for change to CFDictionaryPropertyBag::createInstance.

        * WebHistory.cpp: Removed releaseUserInfo, which is no longer needed.
        That function was also doing an unnecessary call to setDictionary(0).
        (createUserInfoFromArray):
        (createUserInfoFromHistoryItem):
        Changed to return COMPtr.

        (WebHistory::loadFromURL): Updated for change to
        CFDictionaryPropertyBag::createInstance.

        (WebHistory::removeAllItems): Updated for change to
        CFDictionaryPropertyBag::createInstance, which fixed a leak! We had
        forgotten to call releaseUserInfo here.

        (WebHistory::removeItem):
        (WebHistory::addItem):
        (WebHistory::visitedURL):
        * WebIconDatabase.cpp:
        (postDidAddIconNotification):
        Updated for change to CFDictionaryPropertyBag::createInstance.

        * WebKitClassFactory.cpp:
        (releaseRefFromCreateInstance): Added this overloaded function
        template to abstract away the difference between createInstance
        functions that return a ref'd pointer and createInstance functions
        that return a COMPtr.
        (WebKitClassFactory::CreateInstance): Changed to use
        releaseRefFromCreateInstance.

2009-11-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        WebActionModifierFlagsKey should return an unsigned, because
        flags imply a bitmask, and that is what other classes expect from
        it.

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read):

2009-11-02  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by John Sullivan and Mark Rowe.

        <rdar://problem/7356733> Voiceover does not read correct media controller time values

        * WebCoreLocalizedStrings.cpp:
        (WebCore::localizedMediaTimeDescription):

2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility of headings is not correct

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

        Reviewed by Alice Liu.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accDescription):
        Call the object's descriptionForMSAA(). Moved the comment to the
        WebCore file.
        (AccessibleBase::get_accRole):
        If the object has a string role, return that. Otherwise, return the
        integer role.

        * AccessibleBase.h:
        Removed description(), as this was moved to WebCore.

2009-10-29  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Accessibility of links is wrong

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

        Reviewed by Darin Adler.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accState):
        Check whether the element is linked, instead of whether the node is an
        anchor, so the child "linkable" elements of anchor elements will also
        be "linked".
        (AccessibleBase::name):
        Return the name for MSAA.
        (AccessibleBase::value):
        Return the string value for MSAA.

2009-10-30  Evan Stade  <estade@chromium.org>

        Reviewed by David Levin.

        Notify the chrome when the focused node has changed.
        https://bugs.webkit.org/show_bug.cgi?id=30832

        Added stub implementation for new ChromeClient function.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::focusedNodeChanged):
        * WebCoreSupport/WebChromeClient.h:

2009-10-30  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Eric Seidel.

        Remove ENABLE_RUBY guards as discussed with Dave Hyatt and Maciej Stachowiak.

        Bug 28420 -  Implement HTML5 <ruby> rendering
        (https://bugs.webkit.org/show_bug.cgi?id=28420)

        No new tests (no functional change).

        * WebKit.vcproj/WebKit.vcproj:

2009-10-29  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        <http://webkit.org/b/30938> REGRESSION(r50233): Windows nightlies crash on launch due to changes
        to IWebFramePrivate vtable ordering

        * Interfaces/IWebFramePrivate.idl: Move the newly-added method to the end of the interface so that
        it doesn't affect the ordering of the vtable.

2009-10-28  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Sam "Horatio" Weinig.

        Should not generate/build COM DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=30880

        * Interfaces/WebKit.idl: Remove generated interfaces.
        * WebKit.vcproj/InterfacesGenerated.vcproj: Removed.
        * WebKit.vcproj/WebKit.sln: Remove InterfacesGenerated.vcproj.
        * WebKit.vcproj/WebKit.submit.sln: Remove InterfacesGenerated.vcproj.
        * WebKit.vcproj/WebKit.vcproj: Remove generated interfaces.

2009-10-27  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Provide a way to get counter values with layoutTestContoller
        https://bugs.webkit.org/show_bug.cgi?id=30555

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::counterValueForElementById):
        * WebFrame.h:

2009-10-28  Joe Mason  <jmason@rim.com>

        Reviewed by Adam Treat.

        Call the shared FrameLoader::defaultObjectContentType instead of
        copying code into FrameLoaderClient::objectContentType.  This causes no
        behavioural change.

        * WebFrame.cpp:
        (WebFrame::objectContentType):

2009-10-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Speculative build-fix for WebElementPropertyBag.cpp

        * WebElementPropertyBag.cpp: Include RenderObject.h

2009-10-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Fraser.

        Change HitTestResult methods to use (3d) transformation aware methods
        https://bugs.webkit.org/show_bug.cgi?id=27347

        The HitTestResult::boundingBox method was removed. The
        RenderObject must be used directly. In contrast to the
        old HitTestResult::boundingBox method this code must use
        a (3d) transformation aware method to not run into an
        assert in SVGRenderBase::mapLocalToContainer.

        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read): Replace HitTestResult::boundingBox()

2009-10-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Make .rc files compile on Windows without depending on MFC headers
        https://bugs.webkit.org/show_bug.cgi?id=30750

        * WebKit.vcproj/WebKit.rc: Use winresrc.h because it exists even 
        when MFC is not installed, and is all that's needed here.

2009-10-26  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Darin Adler.

        Rollout r50041-50043.  The HTML5 spec changed to make HTMLOptionsCollection
        inherit from HTMLCollection.

        * DOMCreateInstance.cpp:

2009-10-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        Add contextForWorldID to the IWebFramePrivate interface.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.h:

2009-10-25  Sam Weinig  <sam@webkit.org>

        Another try at fixing windows.

        * DOMCreateInstance.cpp:

2009-10-25  Sam Weinig  <sam@webkit.org>

        Touch WebKit.idl in an effort to try and regenerate the COM bindings.

        * Interfaces/WebKit.idl:

2009-10-23  Mark Rowe  <mrowe@apple.com>

        Build fix.  Include config.h before including other files.

        * AccessibleImage.cpp:

2009-10-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30729
        Provide private API to request the global context for a specific world.
        Used to initialize parameters on the global object.

        * WebFrame.cpp:
        (WebFrame::contextForWorldID):
        * WebFrame.h:

2009-10-23  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by John Sullivan.

        Pan-scrolling pointer shows up in other tabs or windows, can't "fix" it.
        <http://webkit.org/b/30732> and <rdar://7332018>.
        
        Turns off pan-scrolling on a WebView when it is about to lose focus.

        * WebView.cpp:
        (WebViewWndProc):

2009-10-23  Jon Honeycutt  <jhoneycutt@apple.com>

        MSAA: Name for image elements should use alt attribute text

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

        Reviewed by Alice Liu.

        * AccessibleBase.cpp:
        (AccessibleBase::createInstance):
        If the AccessibilityObject is an image, return an AccessibleImage.

        * AccessibleImage.cpp: Added.
        (AccessibleImage::AccessibleImage):
        Call the base constructor.
        (AccessibleImage::name):
        If the object is not an AccessibilityRenderObject, return the base's
        name(). Look first for an ARIA "labeled-by" attribute, then look for an
        alternate text attribute. Fall back to the base's name().

        * AccessibleImage.h: Added.
        (AccessibleImage::~AccessibleImage):

        * WebKit.vcproj/WebKit.vcproj:
        Add AccessibleImage to the project.

2009-10-23  Sam Weinig  <sam@webkit.org>

        Try and fix the windows build.

        * Interfaces/WebKit.idl:

2009-10-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=30696
        Update to incorporate support for IsolatedWorlds in JSC bindings.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::globalContext):
        (WebFrame::windowObjectCleared):
        (WebFrame::stringByEvaluatingJavaScriptInIsolatedWorld):
        * WebFrame.h:

2009-10-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Removed WebSocket runtime settings.
        https://bugs.webkit.org/show_bug.cgi?id=29896

        WebSocket runtime configuration is supported by chromium/v8 only.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::experimentalNotificationsEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2009-10-19  Adam Roben  <aroben@apple.com>

        Fix crashes/assertions when calling WebLocalizedString from multiple
        threads concurrently

        Fixes <http://webkit.org/b/30534> WebLocalizedString asserts if called
        from multiple threads concurrently

        Reviewed by John Sullivan.

        * WebLocalizableStrings.cpp:
        (mainBundleLocStringsMutex):
        (frameworkLocStringsMutex):
        Added these new getters.

        (findCachedString):
        (cacheString):
        Lock the relevant mutex before accessing each string map. Otherwise
        bad things could happen if two threads end up here at the same time.

2009-10-19  Adam Roben  <aroben@apple.com>

        Get rid of a few static initializers/exit-time destructors in
        WebLocalizableStrings

        Reviewed by Dan Bernstein.

        * WebLocalizableStrings.cpp:
        (mainBundleLocStrings):
        (frameworkLocStrings):
        Added these functions instead of file-scope variables.

        (findCachedString):
        (cacheString):
        Updated to use the new functions.

2009-10-19  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Update call to FrameLoader::urlSelected().

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):

2009-10-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=30456
        Fixes for new Debug_All Windows build configuration.

        * WebKitClassFactory.cpp: Use new DEBUG_ALL preprocessor define for library naming.

2009-10-16  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to determine whether a plug-in has ever been halted.

        Part of <rdar://problem/7312158>.

        Reviewed by Dan Bernstein.

        * Interfaces/IWebViewPrivate.idl:
        Add hasPluginForNodeBeenHalted().

        * WebView.cpp:
        (pluginViewForNode):
        Code factored out of isNodeHaltedPlugin().
        (WebView::isNodeHaltedPlugin):
        Remove STDMETHODCALLTYPE, as it has no use at the definition. Use
        pluginViewForNode().
        (WebView::restartHaltedPluginForNode):
        Ditto.
        (WebView::hasPluginForNodeBeenHalted):
        Get the PluginView for the given node. Return the result of
        PluginView::hasBeenHalted().

        * WebView.h:
        Declare hasPluginForNodeBeenHalted().

2009-10-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add a Debug_All configuration to build entire stack as debug.
        Change Debug_Internal to:
        - stop using _debug suffix for all WebKit/Safari binaries
        - not use _debug as a DLL naming suffix
        - use non-debug C runtime lib.

        * WebKit.vcproj/InterfacesGenerated.vcproj: Renamed single configuration from "Release" to "all".
        * WebKit.vcproj/WebKit.make: Debug build in makefile should build Debug_All.
        * WebKit.vcproj/WebKit.sln: Add Debug_All configuration.
        * WebKit.vcproj/WebKit.submit.sln: Add Debug_All configuration.
        * WebKit.vcproj/WebKit.vcproj:
        Remove extraneous OutputDirectory/IntermediateDirectory in Debug_Cairo.
        Add Debug_All configuration.
        * WebKit.vcproj/WebKitGUID.vcproj: Add Debug_All configuration.

2009-10-15  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to restart a halted plug-in.

        Part of <rdar://problem/7273354> Halted plug-ins should restart on
        mouseover

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

        Reviewed by Kevin Decker.

        * Interfaces/IWebViewPrivate.idl:
        Add restartHaltedPluginForNode().

        * WebView.cpp:
        (WebView::restartHaltedPluginForNode):
        From the IDOMNode, query for the DOMNode. From the DOMNode, get the
        WebCore::Node. Get the node's renderer, and check whether it is a
        RenderWidget. If so, get its Widget, and check whether it's a
        PluginView. If so, call PluginView::restart().

        * WebView.h:
        Declare restartHaltedPluginForNode().

2009-10-14  Jon Honeycutt  <jhoneycutt@apple.com>

        Add SPI to determine whether a node is a halted plug-in.

        Part of <rdar://problem/7273354> Halted plug-ins should restart on
        mouseover

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

        Reviewed by Darin Adler.

        * Interfaces/IWebViewPrivate.idl:
        Add isNodehaltedPlugin().

        * WebView.cpp:
        (WebView::isNodeHaltedPlugin):
        From the IDOMNode, query for the DOMNode. From the DOMNode, get the
        WebCore::Node. Get the node's renderer, and check whether it is a
        RenderWidget. If so, get its Widget, and check whether it's a
        PluginView. If so, return the result of PluginView::isHalted().

        * WebView.h:
        Declare isNodeHaltedPlugin().

2009-10-15  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=24731
        And
        rdar://problem/5015961
        
        Implements support for DHTML drag-and-drop operations (i.e. ondragstart, ondragend)
        in the Windows build so that it conforms to the Mac OS X build. Hence, dropEffect is
        correctly set.
        
        The WebView and WebDropSource drag-and-drop functions, as called by function
        DoDragDrop in its event loop, neither used the drop effect as specified by
        event.dataTransfer.dropEffect nor respected event.dataTransfer.effectsAllowed.
        Instead, these functions defaulted to some hardcoded drop effect and set of
        allowed drop effects, respectively.

        Tests: fast/events/drag-and-drop.html

        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::startDrag):
        * WebDropSource.cpp:
        (WebDropSource::QueryContinueDrag): Moved call to EventHandler::dragSourceEndedAt
        into method WebDragClient::startDrag.
        * WebDropSource.h:
        * WebView.cpp:
        (WebView::keyStateToDragOperation): Fixes <rdar://problem/5015961>. Determines
        appropriate drop effect from state of keyboard and allowed effects
        m_page->dragController()->sourceDragOperation().
        (WebView::DragEnter):
        (WebView::DragOver):
        (WebView::Drop):
        * WebView.h:

2009-10-14  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebKit.vcproj/Interfaces.vcproj: Exclude IWebHistoryDelegate and
        IWebNavigationData from the build (they get #imported via WebKit.idl).

2009-10-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        WebKit Win API should provide a delegate interface for global history.
        https://bugs.webkit.org/show_bug.cgi?id=29905

        -Add IWebHistoryDelegate for clients to implement.
        -Add (I)WebNavigationData for the history delegate's use.
        -When it exists, call the history delegate instead of using WebHistory.
        
        * Interfaces/IWebHistoryDelegate.idl: Added.
        * Interfaces/IWebHistoryPrivate.idl:
        * Interfaces/IWebNavigationData.idl: Added.
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::populateVisitedLinks):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebFrameLoaderClient::setTitle):
 
         * WebView.cpp:
        (WebView::close):
        (WebView::mainFrameURL):
        (WebView::setHistoryDelegate):
        (WebView::historyDelegate):
        (WebView::addVisitedLinks):
        * WebView.h:
        
        * WebHistory.cpp:
        (WebHistory::setVisitedLinkTrackingEnabled):
        (WebHistory::removeAllVisitedLinks):
        * WebHistory.h:

        * WebNavigationData.cpp: Added.
        (WebNavigationData::QueryInterface):
        (WebNavigationData::AddRef):
        (WebNavigationData::Release):
        (WebNavigationData::WebNavigationData):
        (WebNavigationData::~WebNavigationData):
        (WebNavigationData::createInstance):
        (WebNavigationData::url):
        (WebNavigationData::title):
        (WebNavigationData::originalRequest):
        (WebNavigationData::response):
        (WebNavigationData::hasSubstituteData):
        (WebNavigationData::clientRedirectSource):
        * WebNavigationData.h: Added.

2009-10-13  Dave Hyatt  <hyatt@apple.com>

        Fix more WebView bustage.

        * WebView.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserScriptsFromGroup):
        (WebView::removeUserStyleSheetsFromGroup):

2009-10-13  Dave Hyatt  <hyatt@apple.com>

        Fix build bustage on Windows.

        * WebView.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserScriptsFromGroup):
        (WebView::removeUserStyleSheetsFromGroup):

2009-10-13  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben..

        Split removal functions for user scripts and stylehseets based on type.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::removeUserScriptFromGroup):
        (WebView::removeUserStyleSheetFromGroup):
        * WebView.h:

2009-10-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Factor HistoryController out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30246

        Update API call.

        * WebView.cpp:
        (WebView::loadBackForwardListFromOtherView):

2009-10-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Remove the WebKitPluginHalterEnabledPreferenceKey in favor of checking
        for the existence of a PluginHalterDelegate.

        Reviewed by Dan Bernstein.

        * Interfaces/IWebPreferencesPrivate.idl:
        Remove the getter and setter.

        * WebCoreSupport/WebPluginHalterClient.cpp:
        (WebPluginHalterClient::enabled):
        Return true if the delegate exists.

        * WebCoreSupport/WebPluginHalterClient.h:
        Declare implementation of enabled().

        * WebPreferenceKeysPrivate.h:
        Removed the pref key.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        Removed initialization of the pref.

        * WebPreferences.h:
        Removed declaration of the getter/setter.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged):
        Don't propagate the pref.

2009-10-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move executeScript from FrameLoader to ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=30200

        Update API call.

        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2009-10-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove the shouldLoadMediaElementURL implementation.

        * Interfaces/IWebPolicyDelegatePrivate.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldUsePluginDocument):
        * WebCoreSupport/WebFrameLoaderClient.h:

2009-10-08  Adam Roben  <aroben@apple.com>

        Make IWebInspectorPrivate be accessed in a more standard way

        IWebViewPrivate::inspectorPrivate has been removed. Callers should
        instead use IWebViewPrivate::inspector and then use QueryInterface to
        get the IWebInspectorPrivate interface. This matches how our other COM
        classes work.

        Fixes <http://webkit.org/b/30215> Make IWebInspectorPrivate be
        accessed in a more standard way

        Reviewed by John Sullivan and Tim Hatcher.

        * Interfaces/IWebViewPrivate.idl: Removed inspectorPrivate.

        * WebInspector.cpp:
        (WebInspector::QueryInterface): Support querying to
        IWebInspectorPrivate.

        * WebView.cpp:
        * WebView.h:
        Removed inspectorPrivate.

2009-10-08  Adam Roben  <aroben@apple.com>

        Move the new IWebViewPrivate::inspectorPrivate function after all
        functions that existed when Safari 4.0.3 was released

        Fixes <http://webkit.org/b/30085> REGRESSION (r49091): run-safari
        crashes in Safari.dll

        Reviewed by John Sullivan.

        * Interfaces/IWebViewPrivate.idl: Moved inspectorPrivate to the end of
        the interface, so it won't modify the vtable that Safari 4.0.3 sees.

2009-10-07  Adam Roben  <aroben@apple.com>

        Expose origin whitelisting in the WebKit API on Windows

        Fixes <http://webkit.org/b/30185>.

        Reviewed by Eric Seidel.

        * Interfaces/IWebViewPrivate.idl: Added whiteListAccessFromOrigin and
        resetOriginAccessWhiteLists, to match the Mac SPI.

        * WebView.cpp:
        (WebView::whiteListAccessFromOrigin):
        (WebView::resetOriginAccessWhiteLists):
        * WebView.h:
        Added. These just call through to SecurityOrigin.

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

        Reviewed by Darin Adler.

        Factor PolicyChecker out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=30155

        Move the policy callback to the policy object.

        * WebFrame.cpp:
        (WebFrame::dispatchWillSubmitForm):
        (WebFrame::receivedPolicyDecision):
        (WebFrame::dispatchDecidePolicyForMIMEType):
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchDecidePolicyForNavigationAction):

2009-10-07  Daniel Bates  <dbates@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30102
        And
        <rdar://problem/5015957>
        
        Fixes an issue (in the Windows build) where the cursor does not change to the
        not-allowed cursor when the drag-and-drop operation is not allowed.
        
        The allowed effects in WebDragClient::startDrag are hard-coded to be 
        DROPEFFECT_COPY | DROPEFFECT_LINK | DROPEFFECT_MOVE. Instead, the list of 
        allowed drop effects should be determined by the allowed operations of the
        drag source.
        
        We cannot test this using DRT because DRT looks at the programmatic drop 
        cursor and until bug #24731 is fixed this value is hard-coded to DragOperationCopy.
        That is, there is a discrepancy in the Windows build between the Windows API-based 
        drop effect and the WebKit drop effect. Because DRT cannot read the screen buffer 
        to determine the cursor, a manual test is needed.

        * WebCoreSupport/WebDragClient.cpp:
        (draggingSourceOperationMaskToDragCursors): Added method.
        (WebDragClient::startDrag):

2009-10-07  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=30176
        <rdar://problem/7281553> Extra information in UA causes problems with gmail
        
        * WebKit.vcproj/WebKit.rc: Restore PRODUCTVERSION to build number only. Remove extra space.

2009-10-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: default to an attached inspector window on Windows (as on Mac).

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

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::showWindowWithoutNotifications):

2009-10-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move FrameLoader::canLoad to SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=30111

        * WebFrame.cpp:
        (WebFrame::allowsFollowingLink):

2009-10-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: close inspector client view on
        InspectorController::close API call.

        In order to run batch web inspector layout tests (and not affect 
        subsequent tests) we should close inspector client's view upon
        InspectorController::close API call.

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

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::createPage):

2009-10-06  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (windows build fix).

        Speculative build fix for windows (due to r49160).

        * WebDownloadCFNet.cpp:
        (WebDownload::initToResumeWithBundle):
        * WebIconDatabase.cpp:
        (WebIconDatabase::dispatchDidAddIconForPageURL):

2009-10-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: add testing harness for Web Inspector.

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

        * Interfaces/IWebInspectorPrivate.idl: Added.
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebInspector.cpp:
        (WebInspector::evaluateInFrontend):
        * WebInspector.h:
        * WebView.cpp:
        (WebView::inspectorPrivate):
        * WebView.h:

2009-10-02  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add support for blacklist patterns to user stylesheets and scripts in addition to whitelist patterns.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (toStringVector):
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        * WebView.h:

2009-10-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Mark Rowe.

        <https://bugs.webkit.org/show_bug.cgi?id=29989>
        Safari version number shouldn't be exposed in WebKit code
        
        For a WebKit version of 532.3.4:
        Product version is: 5.32.3.4 (was 4.0.3.0)
        File version is: 5.32.3.4 (was 4.532.3.4)

        * WebKit.vcproj/WebKit.rc:

2009-09-30  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix for <rdar://problem/7259706>
        Need WebKit API or SPI on Mac and Windows to test whether it's safe to load a page in a new tab/window

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::allowsFollowingLink):
        * WebFrame.h:

2009-09-30  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Add the ability to remove user stylesheets and scripts by URL.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::removeUserContentWithURLFromGroup):
        * WebView.h:

2009-09-29  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Add support for run-time flag for 3D canvas
        https://bugs.webkit.org/show_bug.cgi?id=29826

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Enable experimental WebGL
        flag when 3D_CANVAS is enabled in the build.

2009-09-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Sam Weinig.

        Onclick not fired for an element copied with cloneContents() or cloneNode()
        https://bugs.webkit.org/show_bug.cgi?id=25130

        * DOMCreateInstance.cpp: GEN_DOMEventListener is a pure interface now.

        * WebKit.vcproj/WebKit.vcproj: Removed GEN_DOMEventListener.cpp.

2009-09-28  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        Add experimentalWebSocketsEnabled in WebPreferences.
        https://bugs.webkit.org/show_bug.cgi?id=28941

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::setExperimentalWebSocketsEnabled):
        (WebPreferences::experimentalWebSocketsEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):
        (core):

2009-09-25  Darin Adler  <darin@apple.com>

        Reviewed by Steve Falkenburg.

        Speed up access to history items by caching date computation.

        * History/WebHistory.mm:
        (getDayBoundaries): Refactored from timeIntervalForBeginningOfDay.
        Returns the beginning of the day that the passed time is within and
        the beginning of the next day.
        (beginningOfDay): Added. Uses getDayBoundaries so it can be fast for
        multiple dates within the same day, which is the common case.
        (dateKey): Added. Calls beginningOfDay and converts to an integer.
        (WebHistory::findKey): Changed to call dateKey instead of
        timeIntervalForBeginningOfDay.

2009-09-25  Adam Roben  <aroben@apple.com>

        Add SPI to invalidate a WebView's backing store

        This is useful in conjunction with
        IWebUIDelegatePrivate2::drawBackground. This provides a way for the UI
        delegate to force WebView to get its background redrawn.

        Fixes <http://webkit.org/b/29737> Need SPI to invalidate a WebView's
        backing store

        Reviewed by Anders Carlsson.

        * Interfaces/IWebViewPrivate.idl: Added invalidateBackingStore.
        * WebView.cpp:
        (WebView::invalidateBackingStore): If rect is 0, invalidate our whole
        client rect. Otherwise invalidate the intersection of rect with our
        client rect.
        * WebView.h:

2009-09-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Add a mechanism for automatically halting plug-ins.

        Reviewed by Oliver Hunt.

        * Interfaces/IWebPluginHalterDelegate.idl: Added. Defines an interface
        for a delegate that determines whether plug-ins should be halted.

        * Interfaces/IWebPreferencesPrivate.idl:
        Declare functions to get and set the enabled state of the plug-in
        halter and the plug-in allowed run time.

        * Interfaces/IWebViewPrivate.idl:
        Declare functions to get and set the IWebPluginHalterDelegate.

        * Interfaces/WebKit.idl:

        * WebCoreSupport/WebPluginHalterClient.cpp: Added.
        (WebPluginHalterClient::WebPluginHalterClient):
        (WebPluginHalterClient::shouldHaltPlugin):
        Get the IWebPluginHalterDelegate for the WebView. Create a WebKit
        DOMNode for the WebCore Node. Call the delegate's shouldHaltPlugin().
        If the call fails, return false. Otherwise, return the result of the
        call.

        * WebCoreSupport/WebPluginHalterClient.h: Added.

        * WebKit.vcproj/Interfaces.vcproj:
        Add IWebPluginHalterDelegate.idl.

        * WebKit.vcproj/WebKit.vcproj:
        Add WebPluginHalterClient.{h,cpp}.

        * WebPreferenceKeysPrivate.h:
        Define WebKitPluginHalterEnabledPreferenceKey and
        WebKitPluginAllowedRunTimePreferenceKey.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        Leave plug-in halting disabled by default. Set the default value for
        the plug-in allowed run time to the max value of an unsigned int.
        (WebPreferences::setPluginHalterEnabled):
        (WebPreferences::pluginHalterEnabled):
        (WebPreferences::setPluginAllowedRunTime):
        (WebPreferences::pluginAllowedRunTime):

        * WebPreferences.h:

        * WebView.cpp:
        (WebView::close):
        Clear the IWebPluginHalterDelegate.
        (WebView::initWithFrame):
        Pass a WebPluginHalterClient when creating the Page.
        (WebView::notifyPreferencesChanged):
        Set the new settings when the preferences changed notification is
        received.
        (WebView::setPluginHalterDelegate):
        (WebView::pluginHalterDelegate):

        * WebView.h:
        Declare overrides of setPluginHalterDelegate() and
        pluginHalterDelegate(). Added a member to track the
        IWebPluginHalterDelegate.

2009-09-14  John Gregg  <johnnyg@google.com>

        Reviewed by Eric Seidel.

        Enable switch for notifications (experimental) in Page Settings
        https://bugs.webkit.org/show_bug.cgi?id=28930

        Adds support for the experimentalNotificationsEnabled flag in Settings through
        WebPreferencesPrivate interface.  Also cleans up some issues accessing the
        notification delegate through DumpRenderTree.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::hasNotificationDelegate):
        (WebDesktopNotificationsDelegate::notificationDelegate):
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::setExperimentalNotificationsEnabled):
        (WebPreferences::experimentalNotificationsEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2009-09-23  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/7243354> 
        REGRESSION(48580-48636): Crash clicking embedded QT preview button on apple.com/trailers
        
        Check for a null IWebPolicyDelegatePrivate.
        
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldLoadMediaElementURL):

2009-09-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Remove accidentally left in declaration of reloadFromOrigin in IWebFramePrivate.idl

        * Interfaces/IWebFramePrivate.idl:

2009-09-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg.

        Fix for <rdar://problem/6451745>
        Windows WebKit needs to implement reloadFromOrigin()

        * Interfaces/IWebFrame.idl:
        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/IWebView.idl:
        * WebFrame.cpp:
        (WebFrame::reloadFromOrigin):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::reloadFromOrigin):
        * WebView.h:

2009-09-22  Adam Roben  <aroben@apple.com>

        Manage refcounts correctly in DefaultDownloadDelegate::willSendRequest

        Fixes <http://webkit.org/b/29650> Crash in
        WebDownload::willSendRequest when using DefaultDownloadDelegate

        Reviewed by Brady Eidson.

        * DefaultDownloadDelegate.cpp:
        (DefaultDownloadDelegate::willSendRequest): Call AddRef() on the
        object we're returning via the finalRequest out-parameter.

2009-09-21  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/7135588> HTMLMediaElement should ask WebPolicyLoadDelegate before loading resource

        Implement WebFrameLoaderClient::shouldLoadMediaElementURL and have it call the new private policy
        delegate method.
        
        * Interfaces/IWebPolicyDelegatePrivate.idl: Added.
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldLoadMediaElementURL):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebKit.vcproj/Interfaces.vcproj:

2009-09-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Make PlatformWindow return something else than PlatformWidget
        https://bugs.webkit.org/show_bug.cgi?id=29085

        Reflect the rename of platformWindow and it's return type.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accParent):
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::platformPageClient):
        * WebCoreSupport/WebChromeClient.h:

2009-09-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Remove assertions that were being hit by calls to
        m_verticalScrollbar->invalidate(). These assertions were valid,
        but they were causing tests to fail, so replacing with a FIXME 
        until we can find out the real cause/solution that is being tracked 
        by http://webkit.org/b/29350.

        * WebView.cpp:
        (WebView::addToDirtyRegion):
        (WebView::paintIntoBackingStore):

2009-09-17  Ada Chan  <adachan@apple.com>

        Post WebViewDidChangeSelectionNotification when the text selection changes.

        Fixes <http://webkit.org/b/29321>

        Reviewed by Adam Roben.

        * Interfaces/IWebView.idl:
        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::respondToChangedSelection):

2009-09-17  Adam Roben  <aroben@apple.com>

        Fix a crash when a WebView's HWND is destroyed before IWebView::close
        is called

        WebView's HWND was being sent a WM_TIMER message after the WebView was
        destroyed. This normally isn't possible (we call DestroyWindow inside
        WebView's destructor to ensure the HWND doesn't outlive the WebView),
        but r48060 changed WebView to call SetParent(m_viewWindow,
        HWND_MESSAGE) while handling WM_DESTROY, and apparently this puts the
        HWND into some weird half-destroyed state where it can still receive
        WM_TIMER messages.

        Fixes <http://webkit.org/b/29337> <rdar://problem/7209897> REGRESSION
        (r48060): unrepro but frequent crash in WebViewWndProc

        Reviewed by Steve Falkenburg.

        * WebView.cpp:
        (WebViewWndProc): When handling WM_DESTROY, call setIsBeingDestroyed()
        before calling close(). This allows setHostWindow to detect that we're
        handling WM_DESTROY. No other code in close() cared whether
        isBeingDestroyed() was true or not.
        (WebView::setHostWindow): If our host window is being set to 0 and
        we're being destroyed, don't become a message-only window. Doing this
        while handling WM_DESTROY seems to lead to crashes.

2009-09-16  Adam Roben  <aroben@apple.com>

        Add a UI delegate callback to let the delegate draw a WebView's
        background

        Fixes <http://webkit.org/b/29315>.

        Reviewed by Dave Hyatt.

        * Interfaces/IWebUIDelegatePrivate.idl: Added
        IWebUIDelegatePrivate2::drawBackground.

        * WebView.cpp:
        (WebView::paintIntoBackingStore): After clearing or filling with
        white, let the delegate draw whatever background it wants. Also added
        an assertion that the dirty rect is within our bounds.

2009-09-16  Adam Roben  <aroben@apple.com>

        Prevent WebView from painting over sibling windows

        Fixes <http://webkit.org/b/29300> <rdar://problem/7227960> WebView can
        paint over sibling windows

        Reviewed by Darin Adler.

        * WebView.cpp:
        (WebView::initWithFrame): Create the WebView's HWND with the
        WS_CLIPSIBLINGS style.

2009-09-14  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Safari 4 cannot be used to update firmware on Linksys routers.
        <rdar://problem/7174050> and https://bugs.webkit.org/show_bug.cgi?id=29160

        Adopt the new WebCore::CredentialStorage in WebKit/Win.

        * WebDownloadCFNet.cpp:
        (WebDownload::didReceiveAuthenticationChallenge):

2009-09-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Dan Bernstein.

        Properly propagate preference from WebPreferences to WebCore::Settings.
        https://bugs.webkit.org/show_bug.cgi?id=29192

        * WebView.cpp:
        (WebView::initWithFrame): Apply setting when creating a new WebView.
        (WebView::notifyPreferencesChanged): Apply setting when preferences change.

2009-09-11  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Allow WebKit clients to opt out of high resolution timers on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=29192

        * Interfaces/IWebPreferencesPrivate.idl: Added getter/setter.
        Put this just after last 4.0.3 method for future merging.
        * Interfaces/WebKit.idl: Touched to force a rebuild.
        * WebPreferenceKeysPrivate.h: Added prefs key for high res timers.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Initialize high res timers to enabled.
        (WebPreferences::setShouldUseHighResolutionTimers): Added.
        (WebPreferences::shouldUseHighResolutionTimers): Added.
        * WebPreferences.h: Added getter/setter.

2009-09-11  Adam Roben  <aroben@apple.com>

        Get user script/stylesheet tests running on Windows

        Fixes <http://webkit.org/b/29181> User script/stylesheet tests are
        skipped on Windows

        Reviewed by John Sullivan.

        * Interfaces/IWebViewPrivate.idl: Added addUserScriptToGroup,
        addUserStyleSheetToGroup, removeUserContentFromGroup,
        removeAllUserContentFromGropu to match the Mac SPI.

        * WebView.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserContentFromGroup):
        (WebView::removeAllUserContentFromGroup):
        * WebView.h:
        Added. Implementation was based on similar methods in WebView.mm.

2009-09-11  Jon Honeycutt  <jhoneycutt@apple.com>

        Fix crash on launch on Windows.

        Rubber-stamped by Mark Rowe.

        * WebKit.vcproj/WebKit.vcproj:
        Define ENABLE_WEB_SOCKETS for all configurations.

2009-09-07  Drew Wilson  <atwilson@google.com>

        Reviewed by David Levin.

        Enable SHARED_WORKERS by default.
        https://bugs.webkit.org/show_bug.cgi?id=28959

        * WebKit.vcproj/WebKit.vcproj:

2009-09-04  Adam Roben  <aroben@apple.com>

        Make WebView function without a parent window

        When WebView has no parent window, it becomes a message-only window,
        which hides it from the screen and prevents it from appearing on the
        taskbar.

        Fixes <http://webkit.org/b/28971> <rdar://problem/4976998>
        WebView::initWithFrame fails if there's no host window

        Reviewed by Dave Hyatt.

        * WebView.cpp:
        (WebView::initWithFrame): m_hostWindow is null, use HWND_MESSAGE as
        our parent window, which will make us a message-only window.
        (WebView::setHostWindow): If he new host window is null, use
        HWND_MESSAGE as our parent window, which will make us a message-only
        window.

2009-09-04  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt at a build fix.

        Added missing include.

        * WebCoreSupport/WebFrameLoaderClient.cpp:

2009-09-04  Adam Barth  <abarth@webkit.org>

        Unreviewed attempt at a build fix.

        Fix typo of IWebFrameLoadDelegatePrivate2 and make
        IWebFrameLoadDelegatePrivate inherit from IWebFrameLoadDelegatePrivate
        as requestd by Adam Roben.

        * Interfaces/IWebFrameLoadDelegatePrivate2.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):

2009-09-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

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

        Plumb mixed content notifications to IWebFrameLoadDelegatePrivate.

        * Interfaces/IWebFrameLoadDelegatePrivate2.idl: Added.
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):
        * WebKit.vcproj/Interfaces.vcproj:

2009-09-03  Adam Barth  <abarth@webkit.org>

        Reviewed by eric@webkit.org.

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

        Stub implementations of mixed content methods of FrameLoaderClient. 

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::didDisplayInsecureContent):
        (WebFrameLoaderClient::didRunInsecureContent):
        * WebCoreSupport/WebFrameLoaderClient.h:

2009-09-01  Adam Roben  <aroben@apple.com>

        Post a notification when a WebView is closing

        This is useful for situations where some code wants to react to the
        WebView closing but isn't in charge of the WebView and can't otherwise
        be notified. This notification could replace
        IWebUIDelegatePrivate::webViewClosing if we decide that the
        notification system isn't too burdensome.

        <http://webkit.org/b/28875>

        Reviewed by John Sullivan.

        * Interfaces/IWebViewPrivate.idl: Added the
        WebViewWillCloseNotification string constant.
        * WebKit.vcproj/WebKit.vcproj: Link against comsuppw.lib in all
        configurations so that we can use _bstr_t.
        * WebView.cpp:
        (WebView::close): Post the WebViewWillCloseNotification.

2009-08-31  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=28852
        Rename KURL single argument constructor to avoid confusion

        * WebURLResponse.cpp: (WebURLResponse::createInstance): Adapt to the change.

2009-08-20  Adam Roben  <aroben@apple.com>

        Give WebKit clients access to the window features specified in
        window.open

        Reviewed by Steve Falkenburg.

        * COMVariantSetter.h: Added COMVariantSetters for bool and float.

        * Interfaces/IWebUIDelegatePrivate.idl: Added IWebUIDelegatePrivate2,
        which contains a new version of createWebViewWithRequest that also
        passes the window features as an IPropertyBag. This is analagous to
        the -createWebViewWithRequest:windowFeatures: method added to
        WebUIDelegate on Mac in r27452. Also added key strings for use with
        the window features property bag.

        * WebCoreSupport/WebChromeClient.cpp:
        (createWindowFeaturesPropertyBag): Added this helper function to turn
        a WebCore::WindowFeatures into an IPropertyBag for passing to WebKit
        clients.
        (WebChromeClient::createWindow): If the UI delegate implements
        IWebUIDelegatePrivate2, call the new createWebViewWithRequest function
        that takes a window features property bag. If the delegate doesn't
        implement the new function, fall back to the old functions.

2009-08-20  Adam Roben  <aroben@apple.com>

        A little clean-up in WebChromeClient::createWindow

        Reviewed by Steve Falkenburg.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::createWindow): Refactored to share more code between
        the dialog and non-dialog cases.

2009-08-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25889
        [GTK] scrollbar policy for main frame is not implementable

        Add empty implementation for new ChromeClient method.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::scrollbarsModeDidChange):

2009-08-27  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Modify Release_Cairo target to build testapi using the
        Release_CFLite target so that the correct CoreFoundation
        (in this case, CFLite.dll) is linked.

        * WebKit.vcproj/WebKit.sln:

2009-08-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Oliver Hunt.

        Don't let local files access web URLs
        https://bugs.webkit.org/show_bug.cgi?id=28480

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):

2009-08-26  David Levin  <levin@chromium.org>

        Reviewed by Darin Fisher.

        ResourceRequestBase::*[Aa]llowHTTPCookies shouldn't mention http.
        https://bugs.webkit.org/show_bug.cgi?id=28735

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setHTTPShouldHandleCookies):

2009-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        <video> and <audio> controller should be accessible
        https://bugs.webkit.org/show_bug.cgi?id=28081

        * WebCoreLocalizedStrings.cpp:
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):
            New.

2009-08-25  Brent Fulgham  <bfulgham@webkit.org>

        Build fix for Windows.

        Revise Debug_Cairo build target to build testapi, jsc, WinLauncher,
        DumpRenderTree, and TestNetscapeAPI using WinCairo debug build
        settings so they link against the proper libraries.

        * WebKit.vcproj/WebKit.sln:

2009-08-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Roben.

        PLATFORM(CFNETWORK) should be USE(CFNETWORK).
        https://bugs.webkit.org/show_bug.cgi?id=28713

        Also, moved the #if header section after the other #includes.

        * WebError.cpp:
        (WebError::localizedDescription):

2009-08-24  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Steve Falkenburg.

        Revise CFLite Debug build to emit DLL's with _debug label.
        https://bugs.webkit.org/show_bug.cgi?id=28695.

        * WebKit.vcproj/WebKit.vcproj: Modify Debug_Cairo target to
          inherit from new debug_wincairo property sheet, instead of
          the current debug sheet. 

2009-08-22  Adam Barth  <abarth@webkit.org>

        Revert 47684.  We're going to do this later once clients have had a
        chance to opt into the setting they like.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):

2009-08-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't let local files access web URLs
        https://bugs.webkit.org/show_bug.cgi?id=28480

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):

2009-08-20  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <http://webkit.org/b/27850>. Panning by emulating Mouse Wheel Events breaks Google Maps.
        
        Switched to using RenderLayer::scrollByRecursively instead of emulating a mouse wheel,
        and switched to handling the hit testing in WebView from doing it as part of the mouse wheel event.
        One downside of this fix is that panning will not jump out of frames anymore (same behavior as pan-scrolling), but
        this is tracked in <http://webkit.org/b/28237>.

        * WebView.cpp:
        (WebView::gestureNotify): Added hit testing here to figure out the node the user started the gesture on.
        (WebView::gesture): Switched from emulating mouse wheel events for panning to calling RenderLayer::scrollByRecursively.
        * WebView.h:

2009-08-18  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Oliver Hunt.

        Fix of <https://bugs.webkit.org/show_bug.cgi?id=28326> DRT on Windows doesn't support 
        LayoutTestController::setQuota or print a callback on UIDelegate::exceededDatabaseQuota.
        
        Added a setQuota interface method to IWebDatabaseManager and implemented it.

        * Interfaces/IWebDatabaseManager.idl:
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::setQuota):
        * WebDatabaseManager.h:

2009-08-18  Drew Wilson  <atwilson@google.com>

        Unreviewed (build break).

        Added missing include for WebWorkersPrivate.h.

        * WebKitClassFactory.cpp:

2009-08-18  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28415
        Set svn:eol-style CRLF on all .sln and .vcproj files that don't already
        have it.

        * WebKit.vcproj/InterfacesGenerated.vcproj:

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by Eric Seidel.

        Need to extend DumpRenderTree to expose number of worker threads
        https://bugs.webkit.org/show_bug.cgi?id=28292

        Defined/implemented COM interfaces to expose WorkerThread::workerThreadCount() for DumpRenderTree.

        * ForEachCoClass.h:
        Added WebWorkersPrivate.
        * Interfaces/IWebWorkersPrivate.idl: Added.
        * Interfaces/WebKit.idl:
        Added WebWorkersPrivate.
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebWorkersPrivate.cpp: Added.
        Implementation of the IWebWorkersPrivate COM interface, to expose workerThreadCount() for DumpRenderTree.
        (WebWorkersPrivate::QueryInterface):
        (WebWorkersPrivate::AddRef):
        (WebWorkersPrivate::Release):
        (WebWorkersPrivate::workerThreadCount):
        (WebWorkersPrivate::createInstance):
        (WebWorkersPrivate::WebWorkersPrivate):
        (WebWorkersPrivate::~WebWorkersPrivate):
        * WebWorkersPrivate.h: Added.

2009-08-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesGenerated.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2009-08-17  Simon Fraser  <simon.fraser@apple.com>

        Speculative fix for Windows build bustage.

        * DOMHTMLClasses.cpp:
        (DOMHTMLElement::idName):

2009-08-13  Jon Honeycutt  <jhoneycutt@apple.com>

        Part of <rdar://problem/6218721> No MSAA focus events fired for Webkit
        nightly (20866)

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

        Reviewed by Oliver Hunt.

        * AccessibleBase.cpp:
        (AccessibleBase::getAccessibilityObjectForChild):
        If the child ID is negative, negate it and treat it as an AXID.

2009-08-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://6728361> Mouse wheel scrolling on a page with expanded drop down 
        list detaches drop down.
        
        Added a check in mouseWheel to see if our focus is currently in a popup, if so, close
        the popup (matches other browser behavior).

        * WebView.cpp:
        (WebView::mouseWheel):

2009-08-12  Adam Roben  <aroben@apple.com>

        Make WebPreferenceKeysPrivate.h available for client use

        Reviewed by Dave Hyatt.

        Fixes <http://webkit.org/b/28227>.

        * WebKit.vcproj/WebKit.vcproj: Copy WebPreferenceKeysPrivate.h to
        $WebKitOutputDir, just like we do for a few other headers. Also let VS
        reorder some XML attributes.

        * WebPreferenceKeysPrivate.h: Touched this file to force a build.

2009-08-11  Adam Roben  <aroben@apple.com>

        Remove support for a window resizer within the WebView

        Starting with Safari 4, there is never a window resizer inside the
        WebView, so we no longer need to support that functionality.

        Fixes <http://webkit.org/b/28190> Remove support for a window resizer
        within the WebView

        Reviewed by Dave Hyatt.

        * Interfaces/IWebUIDelegatePrivate.idl: Replaced the delegate
        functions related to the window resizer with unused*() functions. We
        can't remove them entirely because we need to keep the vtable
        unchanged so new versions of WebKit will work with old versions of
        Safari (e.g., for nightlies and WebKit development).

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::windowResizerRect): Now always returns an empty
        rect.

        * WebView.cpp:
        (WebView::paint):
        (WebView::handleMouseEvent):
        * WebView.h:
        Removed window-resizer-related code.

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Move the accessor for notifications presenter from WebUIDelegate
        to WebUIDelegate2 which extends it.  When making this call from
        WebCoreSupport, check using QueryInterface before calling.

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

        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/IWebUIDelegate2.idl: Added.
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::show):
        (WebDesktopNotificationsDelegate::cancel):
        (WebDesktopNotificationsDelegate::notificationObjectDestroyed):
        (WebDesktopNotificationsDelegate::requestPermission):
        (WebDesktopNotificationsDelegate::checkPermission):
        (WebDesktopNotificationsDelegate::hasNotificationDelegate):
        (WebDesktopNotificationsDelegate::notificationDelegate):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

2009-08-11  Drew Wilson  <atwilson@google.com>

        Reviewed by NOBODY (build break).

        Speculative Windows build fix - undo previous unnecessary change.

        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

2009-08-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        Refactored MIMETypeforExtension to be a member of IWebViewPrivate
        instead of IWebView.

        * Interfaces/IWebView.idl:
        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::MIMETypeForExtension):
        * WebView.h:

2009-08-11  Drew Wilson <atwilson@google.com>

        Reviewed by NOBODY (build break)

        Speculative fix for windows build break.

        * WebKitSupport/WebDesktopNotificationsDelegate.h:
        WebCore/Notification*.h => WebCore/notifications/Notification*.h

2009-08-11  John Gregg  <johnnyg@google.com>

        Reviewed by Maciej Stachowiak.

        Desktop Notifications API
        https://bugs.webkit.org/show_bug.cgi?id=25643

        Adds test hooks for notification features to WebCoreSupport for
        use in DumpRenderTree.

        * Interfaces/IWebDesktopNotificationsDelegate.idl: Added.
        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::WebChromeClient):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::notificationPresenter):
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp: Added.
        (NotificationCOMWrapper::create):
        (NotificationCOMWrapper::NotificationCOMWrapper):
        (NotificationCOMWrapper::QueryInterface):
        (NotificationCOMWrapper::AddRef):
        (NotificationCOMWrapper::Release):
        (NotificationCOMWrapper::isHTML):
        (NotificationCOMWrapper::contentsURL):
        (NotificationCOMWrapper::iconURL):
        (NotificationCOMWrapper::title):
        (NotificationCOMWrapper::text):
        (NotificationCOMWrapper::notifyDisplay):
        (NotificationCOMWrapper::notifyError):
        (NotificationCOMWrapper::notifyClose):
        (WebDesktopNotificationsDelegate::WebDesktopNotificationsDelegate):
        (WebDesktopNotificationsDelegate::show):
        (WebDesktopNotificationsDelegate::cancel):
        (WebDesktopNotificationsDelegate::notificationObjectDestroyed):
        (WebDesktopNotificationsDelegate::requestPermission):
        (WebDesktopNotificationsDelegate::checkPermission):
        (WebDesktopNotificationsDelegate::notificationDelegate):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h: Added.
        * WebCoreSupport/WebInspectorDelegate.h:
        (WebInspectorDelegate::desktopNotificationsDelegate):
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:

2009-08-11  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://5016504> SVG file cannot be dragged to webview,
        but can be opened via Open File.
        
        Added a new function to IWebView that gets the MIME type for a given 
        extension from the MIMETypeRegistry.

        * Interfaces/IWebView.idl:
        * WebView.cpp:
        (WebView::MIMETypeForExtension):
        * WebView.h:

2009-08-11  Dmitry Titov <dimich@chromium.org>

        Reviewed by Adam Roben.

        Originally implemented by Glenn Wilson  <gwilson@chromium.org>.

        Added support for overriding default preferences per-test.
        See https://bugs.webkit.org/show_bug.cgi?id=20534

        * Interfaces/IWebPreferencesPrivate.idl: added new method setPreferenceForTest
        * WebPreferences.cpp: same.
        * WebPreferences.h: same.

2009-08-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Link drag images specify Lucida Grande on Windows and end up using Times
        New Roman
        <rdar://problem/7117835>

        * WebCoreSupport/WebDragClient.cpp:
        (dragLabelFont): Added a RenderingMode parameter and changed to use the
            same typeface as the Windows small caption font.
        (WebDragClient::createDragImageForLink): Changed to respect the
            page’s rendering mode.

2009-08-10  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=28048.
        Move various WinCairo build settings into *.vsprops file.

        * WebKit.vcproj/WebKit.vcproj: Add new cURL.vsprops property sheet
          (which contains link settings for cURL and its dependencies), and
          remove the corresponding entries from the vcproj file.  Remove
          png, jpeg, cairo library linking flags from vcproj, now that they
          are in the WinCairo.vsprops file.

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by George Staikos.

        [WML] Deck access control is completly broken
        https://bugs.webkit.org/show_bug.cgi?id=27721

        Synchronize WebFrameLoadType with FrameLoadType enum. Append 'WebFrameLoadTypeBackWMLDeckNotAccessible'.

        * Interfaces/IWebFramePrivate.idl:

2009-08-09  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>

        Reviewed by Maciej Stachowiak.

        FrameLoadType / WebFrameLoadType enums are out of sync
        https://bugs.webkit.org/show_bug.cgi?id=28132

        Synchronize FrameLoadType <-> WebFrameLoadType enums (append missing 'WebFrameLoadTypeReloadFromOrigin' value)

        * Interfaces/IWebFramePrivate.idl:

2009-08-06  Adam Barth  <abarth@webkit.org>

        Unreviewed revert.

        http://bugs.webkit.org/show_bug.cgi?id=27879

        Revert 46877 because it broke GTK.

        * COMPropertyBag.h:

2009-08-06  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Adam Barth.

        Change Noncopyable inheriting to public
        http://bugs.webkit.org/show_bug.cgi?id=27879

        Since Noncopyable is inherited from FastAllocBase,
        Noncopyable's inheriting has been changed to public.

        * COMPropertyBag.h:

2009-08-04  Alice Liu  <alice.liu@apple.com>

        "Shift + Enter" should behave like "Enter" in editable fields.
        Affects backward search in find-in-page in Safari for Windows

        Reviewed by Jon Honeycutt.

        * WebView.cpp:
        Register shift+enter as InsertNewline command, similar to other 
        modifier+Enter combinations.

2009-07-29  Jon Honeycutt  <jhoneycutt@apple.com>

        Part of <rdar://problem/5698113> Safari shouldn't auto-activate
        plug-ins in background tabs (make Win consistent with Mac)

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

        Reviewed by Adam Roben and Anders Carlsson.

        * Interfaces/IWebViewPrivate.idl:
        Add setCanStartPlugins().

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin):
        Added; code moved from createPlugin(). Modified to obtain the plug-in's
        page URL, the plug-ins "plug-ins page" parameter value, and the
        plug-in's MIME type by calling getter functions on the passed
        PluginView.
        (WebFrameLoaderClient::createPlugin):
        If the plug-in status is not "success," call
        dispatchDidFailToStartPlugin().

        * WebCoreSupport/WebFrameLoaderClient.h:
        Declare an override of dispatchDidFailToStartPlugin().

        * WebView.cpp:
        (WebViewWndProc):
        Add a missing ) to a comment.
        (WebView::setCanStartPlugins):
        Call the Page's setCanStartPlugins() function.

        * WebView.h:

2009-07-30  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Use checked casts for render tree
        https://bugs.webkit.org/show_bug.cgi?id=23522

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::isUserEdited):
        (DOMHTMLTextAreaElement::isUserEdited):
        Use checked casts.

2009-07-31  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        -Fix <rdar://problem/7104097>

        Make EmbeddedWidget::create return a PassRefPtr so it will have the correct ref count.
        
        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::create):
        * WebCoreSupport/EmbeddedWidget.h:

2009-07-29  Brian Weinstein  <bweinstein@apple.com>

        Was doing the build fix wrong, NotImplemented.h is in WebCore.

        * WebCoreSupport/WebInspectorClient.cpp:

2009-07-29  Brian Weinstein  <bweinstein@apple.com>

        Windows build fix.

        * WebCoreSupport/WebInspectorClient.cpp:

2009-07-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        Added foundation work to allow a testing infrastructure for the Web
        Inspector.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::inspectorWindowObjectCleared): Empty definition
        to let Windows compile but we should implement this at some point so
        that the tests can be run on Windows too.
        * WebCoreSupport/WebInspectorClient.h:

2009-07-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Steve Falkenburg.

        Add output directory for VS pre-build steps to enable out-of-tree builds

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

        The tmp.obj file is now placed in the intermediate build directory.

        * WebKit.vcproj/WebKit.vcproj:

2009-07-27  Brian Weinstein  <bweinstein@apple.com>

        Build fix for Windows.

        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2009-07-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27735
        Give a helpful name to JSLock constructor argument

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2009-07-25  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Windows build break due to warning C4819
        https://bugs.webkit.org/show_bug.cgi?id=27416

        Disable C4819 warning to fix build.

        * WebKit.vcproj/WebKit.vcproj:

2009-07-24  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Dave Hyatt.

        Clean up dependencies on Apple support libraries for non-Apple build.
        http://bugs.webkit.org/show_bug.cgi?id=27532.

        * DefaultDownloadDelegate.h: Conditionalize include of CFNetwork.h
        * WebDownload.h: Conditionalize include of CFNetwork.h
        * WebMutableURLRequest.cpp: Conditionalize include of CFNetwork.h

2009-07-24  Andrei Popescu  <andreip@google.com>

        Reviewed by Anders Carlsson.

        ApplicationCache should have size limit
        https://bugs.webkit.org/show_bug.cgi?id=22700

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::reachedMaxAppCacheSize):
        Adds empty implementation of the reachedMaxAppCacheSize callback.
        * WebCoreSupport/WebChromeClient.h:

2009-07-23  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoff Garen.

        WebFrameLoaderClient on Windows doesn't gracefully handle a null request returned from willSendRequest.
        https://bugs.webkit.org/show_bug.cgi?id=27595

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

2009-07-22  Takeshi Yoshino  <tyoshino@google.com>

        Reviewed by Darin Adler.

        VC++ 2005 Express failed to build WebKit due to raw UTF-8 string in WebKit/win/WebCoreLocalizedStrings.cpp
        https://bugs.webkit.org/show_bug.cgi?id=26375

        Replace a multiplication sign (U+00D7) encoded in UTF-8 (0xC3 0x97) in WebCoreLocalizedStrings.cpp
        with hex escape sequences.

        VC2005 failed to build due to this raw UTF-8 data in source code. Here's the warning message (
        treated as an error and stopped build).

        WebCoreLocalizedStrings.cpp : warning C4819: The file contains a character that cannot be
        represented in the current code page (932). Save the file in Unicode format to prevent data loss

        A change on WebKitTools/Scripts/extract-localizable-strings is attached to this change not to break
        localized string generation process.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::imageTitle):

2009-07-21  Roland Steiner  <rolandsteiner@google.com>

        Reviewed by David Levin.

        Add ENABLE_RUBY to list of build options
        https://bugs.webkit.org/show_bug.cgi?id=27324

        * WebKit.vcproj/WebKit.vcproj: Added flag ENABLE_RUBY.

2009-07-20  Peter Kasting  <pkasting@google.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=27468
        Back out r46060, which caused problems for some Apple developers.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesGenerated.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2009-07-17  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Fix of <rdar://problem/5712795> Win: Cannot change the height of the docked Web Inspector (14272)
        https://bugs.webkit.org/show_bug.cgi?id=14272
        
        Implemented resizing of inspector window when it is in attached mode. Implemented setAttachedWindowHeight
        to set window sizes and redraw the inspector and the inspected web view, and used stored preferences
        in InspectorController.cpp to remember user's preferred height.

        * WebCoreSupport/WebInspectorClient.cpp:

2009-07-17  Peter Kasting  <pkasting@google.com>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=27323
        Only add Cygwin to the path when it isn't already there.  This avoids
        causing problems for people who purposefully have non-Cygwin versions of
        executables like svn in front of the Cygwin ones in their paths.

        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/InterfacesGenerated.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitGUID.vcproj:

2009-07-16  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Add --web-sockets flag and ENABLE_WEB_SOCKETS define.
        https://bugs.webkit.org/show_bug.cgi?id=27206
        
        Add ENABLE_WEB_SOCKETS

        * WebKit.vcproj/WebKit.vcproj: add ENABLE_WEB_SOCKETS

2009-07-16  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Darin Adler.

        Fix tooltip does not get its directionality from its element's directionality.
        https://bugs.webkit.org/show_bug.cgi?id=24187

        Per mitz's suggestion in comment #6, while getting the plain-text 
        title, we also get the directionality of the title. How to handle 
        the directionality is up to clients. Clients could ignore it, 
        or use attribute or unicode control characters to display the title
        as what they want.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::setToolTip): Add directionality as 2nd parameter to setToopTip() (without handling it yet).
        * WebCoreSupport/WebChromeClient.h: Add directionality as 2nd parameter to setToolTip().
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read): Change call of spellingToolTip() and title() due to signature change.

2009-07-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Renamed parseURL to deprecatedParseURL.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin): Renamed.

2009-07-14  Steve Falkenburg  <sfalken@apple.com>

        Reorganize JavaScriptCore headers into:
        API: include/JavaScriptCore/
        Private: include/private/JavaScriptCore/

        Reviewed by Darin Adler.

        * WebKit.vcproj/WebKit.vcproj:

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Change all Noncopyable inheriting visibility to public.
        https://bugs.webkit.org/show_bug.cgi?id=27225

        Change all Noncopyable inheriting visibility to public because
        it is needed to the custom allocation framework (bug #20422).

        * COMEnumVariant.h:
        * WebDatabaseManager.cpp:
        * WebInspector.h:
        * WebLocalizableStrings.cpp:

2009-07-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Refactor WebFrame::spoolPages for easier sharing with Windows Cairo.
        https://bugs.webkit.org/show_bug.cgi?id=27240.

        * WebFrame.cpp:
        (WebFrame::printHeader): New shared method to print the header.
        (WebFrame::printFooter): New shared method to print the footer.
        (WebFrame::spoolPage): New conditionally-compiled method to print
         a page.
        (WebFrame::spoolPages): Revised to call the platform-specific spoolPage
         for each page.
        * WebFrame.h: Add new method prototypes.

2009-07-13  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Add new configuration flag for redistributable Windows build.
        https://bugs.webkit.org/show_bug.cgi=27087

        * WebKit.vcproj/WebKit.vcproj: Add new WinCairo.vsprops to
          Debug_Cairo and Release_Cairo targets.

2009-07-12  Brent Fulgham  <bfulgham@gmail.com>

        Speculative Windows build fix after http://trac.webkit.org/changeset/45786.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::addMessageToConsole):

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

        Reviewed by Sam Weinig with the power of Grayskull.

        Enable XSSAuditor by default.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):

2009-07-09  Drew Wilson  <atwilson@google.com>

        Reviewed by Alexey Proskuryakov.

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

        Turned on CHANNEL_MESSAGING by default because the MessageChannel API
        can now be implemented for Web Workers and is reasonably stable.

       * WebKit.vcproj/WebKit.vcproj:

2009-07-09  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Alice Liu.

        Fix of <rdar://5712929> Add preferences key to remember if the Inspector was docked (14271)
        https://bugs.webkit.org/show_bug.cgi?id=27140

        Added a preference key to remember whether the user prefers the inspector detached or attached.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::showWindow): Pass both parameters into setWindowVisible
        (WebInspectorClient::closeWindow): Ditto
        (WebInspectorClient::attachWindow): Set preference to attached windows here
        (WebInspectorClient::detachWindow): Set preference to detached windows here
        (WebInspectorClient::showWindowWithoutNotifications): Read preference for attached vs. detached
        (WebInspectorClient::onClose): Pass both parameters into setWindowVisible

2009-07-09  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Oliver Hunt.

        <rdar://problem/6921671> Visit count shouldn't be incremented by redirects.

        * WebCoreSupport/WebFrameLoaderClient.cpp: (WebFrameLoaderClient::updateGlobalHistory):
        Do not increase visit count if there is a redirect source. As a result, only pages that were
        explicitly visited by the user (by typing a URL, choosing one from bookmarks, or clicking
        a link) will be counted.

        * Interfaces/IWebHistoryItemPrivate.idl:
        * WebHistory.cpp:
        (WebHistory::visitedURL):
        * WebHistory.h:
        * WebHistoryItem.cpp:
        (WebHistoryItem::visitedWithTitle):
        * WebHistoryItem.h:
        Marshal this new argument all the way down to WebCore.

2009-07-09  Beth Dakin and Jon Honeycutt <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Make Widget RefCounted to fix:

        <rdar://problem/7038831> REGRESSION (TOT): In Mail, a crash occurs 
        at WebCore::Widget::afterMouseDown() after clicking To Do's close 
        box
        <rdar://problem/6978804> WER #16: Repro Access Violation in 
        WebCore::PluginView::bindingInstance (1310178023)
        -and-
        <rdar://problem/6991251> WER #13: Crash in WebKit!
        WebCore::PluginView::performRequest+203 (1311461169) 

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebFrame.cpp:
        (WebFrame::createJavaAppletWidget):
        * WebFrame.h:

2009-07-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Steve Falkenburg.

        Roll out r43848. The quirk is no longer necessary.

        * WebView.cpp:
        (WebView::userAgentForKURL):

2009-07-07  Ada Chan  <adachan@apple.com>

        Reviewed by Dave Hyatt.

        Missed a call to FocusController::setFocused(true) when handling WM_SETFOCUS in WebView.
        https://bugs.webkit.org/show_bug.cgi?id=27057

        * WebView.cpp:
        (WebViewWndProc):

2009-07-02  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Adam Roben.

        [Win] HTML5 Drag and drop, dragend is not fired when pressing Esc
        https://bugs.webkit.org/show_bug.cgi?id=26699

        * WebDropSource.cpp:
        (WebDropSource::QueryContinueDrag):

2009-07-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/6939593> REGRESSION (r37793): Hitting back button on Google often gives non-interactive Google page (26670)
        <https://bugs.webkit.org/show_bug.cgi?id=26670>

        Make windows loader client match mac behaviour more closely.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::forceLayout):

2009-06-30  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Adam Roben.

        Build DumpRenderTree under Cairo.
        https://bugs.webkit.org/show_bug.cgi?id=26457

        * WebKit.vcproj/WebKit.sln: Add Cairo targets to the
          DumpRenderTree build, and use the in the Debug_Cairo
          and Release_Cairo targets.

2009-07-02  Eric Carlson  <eric.carlson@apple.com>

        Fix Windows build by including missing localized string methods.

        * WebCoreLocalizedStrings.cpp:
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):

2009-07-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Tim Hatcher.

        <rdar://problem/6998524> REGRESSION (r44474): Form text field has focus ring, looks focused,
        even though the field is not actually focused for keyboard input
        
        Add the concept of whether or not the Page is focused by adding a boolean to the focusController.  This allows the
        focused frame and focused node to both be cached and changed programmatically without causing errors when the Page doesn't
        have focus.

        * WebView.cpp:
        (WebViewWndProc):

2009-06-29  David Hyatt  <hyatt@apple.com>

        Fix Windows bustage.  Missed two configurations for enabling DATAGRID.

        * WebKit.vcproj/WebKit.vcproj:

2009-06-29  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.
        
        Fix the windows build.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::isSpeaking):
        * WebCoreSupport/WebContextMenuClient.h:

2009-06-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Make sure to patch all configurations to have datagrid enabled.

        * WebKit.vcproj/WebKit.vcproj:

2009-06-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Put <datagrid> behind an ifdef.

        * WebKit.vcproj/WebKit.vcproj:

2009-06-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Simon Fraser.

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

        Added hit testing on scrollbars, so if you start a gesture over a scrollbar,
        it isn't counted, and lets the user drag the scrollbar itself instead of a
        panning gesture. Also cleaned up code in gesture.

        * WebView.cpp:
        (WebView::gestureNotify):
        (WebView::gesture):

2009-06-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

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

        Fix a build break due to LocalStorage.h being included in WebKitDLL.cpp
        despite it being deleted from the repo by the following patch/commit:
        https://bugs.webkit.org/show_bug.cgi?id=26732
        http://trac.webkit.org/changeset/45290

        * WebKitDLL.cpp:

2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Eric Seidel.

        Bug 20303: [Qt] Key events are not working in frames.

        Move the scroll handling code to EventHandler so that other
        ports can share the functionality.

        * WebView.cpp:
        (WebView::keyDown):
        (EnumTextMatches::QueryInterface):

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

        Reviewed by Darin Adler.

        WebKit side of <rdar://problem/6946094>.

        * Interfaces/IWebUIDelegate.idl:
        Add a newPasteboard out parameter to willPerformDragSourceAction.
        
        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::willPerformDragSourceAction):
        Implement this. If the client returns a new pasteboard, use it for the drag.
        
        * WebCoreSupport/WebInspectorDelegate.h:
        (WebInspectorDelegate::willPerformDragSourceAction):
        Add the new parameter.

2009-06-20  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/6964221> Need more processing of pluginspage.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin): Check protocolInHTTPFamily.

2009-06-19  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Steve Falkenburg.

        https://bugs.webkit.org/show_bug.cgi?id=26494
        Bug 26494: RenderTheme::themeForPage reads from Settings before it has
        been initialized by WebKit

        Get the shouldPaintNativeControls preference and update the settings
        before initializing the page, as the page depends on it after the
        themeForPage change.

        * WebView.cpp:
        (WebView::initWithFrame):

2009-06-19  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.
        
        https://bugs.webkit.org/show_bug.cgi?id=26488
        No Support for Single Finger or Two Finger Panning in Windows 7
        
        Added the code necessary for single finger and two-finger panning with
        window bounce. We now register for WM_GESTURENOTIFY and WM_GESTURE messages,
        and interpret the panning command. Also, added WindowsTouch.h which contains 
        structs and #defines from the Windows 7 SDK.

        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::gestureNotify): Checks if we are in a pannable region - IE: Not in the scrollbar
        (WebView::gesture): Handles the Panning gesture, creating the WheelEvent
        (WebViewWndProc): Added cases for WM_GESTURE and WM_GESTURENOTIFY
        * WebView.h:
        * WindowsTouch.h: Added.
        
2009-06-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

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

        Added preference to enable the XSSAuditor.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::isXSSAuditorEnabled):
        (WebPreferences::setXSSAuditorEnabled):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2009-06-18  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Dave Levin.

        Remove some boilerplate using the BitmapInfo struct.
        https://bugs.webkit.org/show_bug.cgi?id=26425

        * WebFrame.cpp:
        (WebFrame::spoolPages):
        * WebIconDatabase.cpp:
        (createDIB):
        * WebKit.vcproj/WebKit.sln:
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::update):
        * WebView.cpp:
        (WebView::ensureBackingStore):

2009-06-17  Steve Falkenburg  <sfalken@apple.com>

        Consolidate WebKit COM interfaces.
        Moved IID from the highest numbered COM interface to the first interface and combined all methods.

        Numbered interfaces can be combined since the latest shipping Safari 4 supports the latest interfaces.
        
        Reviewed by Adam Roben.

        * Interfaces/IWebFrameLoadDelegate.idl:
        * Interfaces/IWebFrameLoadDelegatePrivate.idl:
        * Interfaces/IWebResourceLoadDelegatePrivate.idl:
        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebContextMenuClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebInspectorDelegate.h:
        * WebFrame.cpp:
        * WebView.cpp:

2009-06-16  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Adam Roben.

        Create a different RenderTheme per page, so that RenderTheme has
        access to page specific theming. This is needed for the Qt port, as Qt
        supports setting the theme (style) per widget.

        This change was suggested and discussed with Dave Hyatt.

        More detailed:

        1) Create a theme per page or one global one, depending on the needs
           of the platform.
        2) Add an accesser to the theme from RenderObject.
        3) Change all uses of the theming to access the theme through
           RenderObject, using the global default theme as fallback, when the
           document of RenderObject has no page.
           When we don't have access to a RenderObject, use the default theme.
        4) Modify all RenderTheme platform implementations to work with the
           above changes, still creating only one global theme.

        * WebView.cpp:
        (WebViewWndProc): Get the theme from the associated page.

2009-06-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.
        
        Switch Control+Mousewheel Zooming definitions to match other browsers on Windows.
        Control+Mousewheel-Down now zooms out, Control+Mousewheel-Up now zooms in.
        https://bugs.webkit.org/show_bug.cgi?id=25875.
        <rdar://problem/6903976>

        * WebView.cpp:
        (WebView::mouseWheel):

2009-06-16  Brent Fulgham  <bfulgham@gmail.com>

        Reviewed by Darin Adler.

        Use consistent Windows GUID Comparison Functions.
        https://bugs.webkit.org/show_bug.cgi?id=26427.

        * WebView.cpp:
        (EnumTextMatches::QueryInterface):

== Rolled over to ChangeLog-2009-06-16 ==
