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

        Merge r54376.

    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-03  Mark Rowe  <mrowe@apple.com>

        Merge r54083.

    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-02-03  Mark Rowe  <mrowe@apple.com>

        Merge r48363.

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

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

        Merge r53567.

    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-27  Mark Rowe  <mrowe@apple.com>

        Merge r53368.

    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-27  Mark Rowe  <mrowe@apple.com>

        Merge r53512.

    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-27  Mark Rowe  <mrowe@apple.com>

        Merge r53369.

    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-27  Mark Rowe  <mrowe@apple.com>

        Merge r53220.

    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-27  Mark Rowe  <mrowe@apple.com>

        Merge r53163.

    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-27  Mark Rowe  <mrowe@apple.com>

        Merge r52351.

    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.

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

        Merge r52781.

    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-27  Mark Rowe  <mrowe@apple.com>

        Merge r52233.

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

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

        Merge r52749.

    2010-01-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Ada Chan and Mark Rowe.

        Updated copyright string

        * WebKit.vcproj/WebKit.rc:

2009-10-30  Mark Rowe  <mrowe@apple.com>

        Merge r50354.

    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-30  Mark Rowe  <mrowe@apple.com>

        Merge r50353.

    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-23  Mark Rowe  <mrowe@apple.com>

        Merge r50019.

    Build fix.  Include config.h before including other files.

        * AccessibleImage.cpp:

2009-10-23  Mark Rowe  <mrowe@apple.com>

        Merge r50004.

    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-13  Mark Rowe  <mrowe@apple.com>

        Merge r48770.

    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-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r48324.

    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-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r48308.

    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-10-13  Mark Rowe  <mrowe@apple.com>

        Merge r49026.

    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-10-12  Mark Rowe  <mrowe@apple.com>

        Merge r48946.

    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-08-17  Steve Falkenburg  <sfalken@apple.com>

        Merge r47311.

    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-05  Mark Rowe  <mrowe@apple.com>

        Merge r46638.

    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-15  Steve Falkenburg  <sfalken@apple.com>

        Merge r45892.

    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-11  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/7047403> Disable channel messaging

        * WebKit.vcproj/WebKit.vcproj:

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

        <rdar://problem/7048551> Disable datagrid

        * WebKit.vcproj/WebKit.vcproj:

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 ==
