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

        Unreviewed speculative buildfix after r192601.

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

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

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

        Reviewed by Joseph Pecoraro.

        * WebView.cpp:
        (WebView::onMenuCommand):

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Chris Dumez.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::shouldCacheResponse):
        (WebFrameLoaderClient::dispatchDidDispatchOnloadEvents):
        (WebFrameLoaderClient::dispatchDidHandleOnloadEvents): Deleted.
        * WebCoreSupport/WebFrameLoaderClient.h:

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

        Handle custom menu items in WebKit instead of WebCore on Windows
        https://bugs.webkit.org/show_bug.cgi?id=151147

        Reviewed by Tim Horton.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::contextMenuItemSelected):
        * WebView.cpp:
        (WebView::onMenuCommand):

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

        Use Win32 functions to get context menu item info
        https://bugs.webkit.org/show_bug.cgi?id=151123

        Reviewed by Tim Horton.

        * WebView.cpp:
        (WebView::handleContextMenuEvent):
        Destroy the menu if it already exists. Before creating the menu, make sure to set its style
        to MNS_NOTIFYBYPOS, so we'll be able to know which item was selected (instead of just the action ID).

        (WebView::onMenuCommand):
        Get the selected menu item's ID and title. Create a fake ContextMenuItem and pass it back to WebCore. In the future,
        we'll be able to pass just the action and title.

        (WebView::WebViewWndProc):
        There's no need to listen for WM_COMMAND. Just always listen for WM_MENUCOMMAND. Rename performContextMenuAction to onMenuCommand.
        
        * WebView.h:
        Add new member.

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

        Another Windows build fix.

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

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

        Fix the Windows build after r192140.

        * FullscreenVideoController.cpp:
        (HUDButton::draw):
        (HUDSlider::draw):
        (FullscreenVideoController::draw):
        * Plugins/PluginView.cpp:
        (WebCore::PluginView::paintMissingPluginIcon):

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

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

        Reviewed by Darin Adler.

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

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

        Move menu creation to WebView
        https://bugs.webkit.org/show_bug.cgi?id=150463

        Reviewed by Tim Horton.

        * WebView.cpp:
        (createContextMenuFromItems):
        (WebView::createContextMenu):

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

        Get rid of WebContextMenuClient::customizeMenu, it's no longer used
        https://bugs.webkit.org/show_bug.cgi?id=150427

        Reviewed by Tim Horton.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::customizeMenu): Deleted.
        * WebCoreSupport/WebContextMenuClient.h:

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

        Simplify context menu handling on Windows
        https://bugs.webkit.org/show_bug.cgi?id=150423

        Reviewed by Tim Horton.

        Instead of converting a ContextMenu to a HMENU, then back to a ContextMenu, and then back to a HMENU again
        just convert it once right before showing it and let the UIDelegate return a new menu at at time where we don't
        have to convert it back.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::customizeMenu):
        * WebView.cpp:
        (WebView::createContextMenu):
        (WebView::handleContextMenuEvent):
        * WebView.h:

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

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

        Reviewed by Chris Dumez.

        Implement FrameLoaderClient::prefetchDNS().

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

2015-10-14  Simon Fraser  <simon.fraser@apple.com>

        Change GraphicsContext image-drawing functions to take references
        https://bugs.webkit.org/show_bug.cgi?id=150108

        Reviewed by Tim Horton and Sam Weinig.

        Change GraphicsContext::drawImage(), drawTiledImage(), drawImageBuffer(), clipToImageBuffer()
        and isCompatibleWithBuffer() to take references, and adjust calling code, adding
        null-checks where necessary.

        * FullscreenVideoController.cpp:
        (HUDButton::draw):
        * Plugins/PluginView.cpp:
        (WebCore::PluginView::paintMissingPluginIcon):

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

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

        Reviewed by Tim Horton.

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

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

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

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::blockedError):
        (WebFrameLoaderClient::blockedByContentBlockerError):
        (WebFrameLoaderClient::cannotShowURLError):
        * WebCoreSupport/WebFrameLoaderClient.h:
        Added stub that should never be used.

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

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

        Reviewed by Darin Adler.

        * WebView.cpp:
        (WebView::rectsForTextMatches):

2015-09-25  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Incorrect position for windowless plugins.
        https://bugs.webkit.org/show_bug.cgi?id=149524

        Reviewed by Alex Christensen.

        Only perform the device context transformation if the plugin is painting
        directly into the GraphicsContext HDC. The previous check was not correct
        in all cases.

        * Plugins/PluginViewWin.cpp:
        (WebCore::PluginView::paint):

2015-09-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support composited content in WebView render-to-context methods
        https://bugs.webkit.org/show_bug.cgi?id=149516
        <rdar://problem/22635080>

        Reviewed by Simon Fraser.

        * WebView.cpp:
        (WebView::paint): Call the new 'paintCompositedContentToHDC' method. If
        it handles the pain, return.
        (WebView::paintCompositedContentToHDC): New method to share code with other
        paint methods.
        (WebView::paintDocumentRectToContext): Call new 'paintCompositedContentToHDC'
        to handle any composited layers. Otherwise, use slow drawing path.
        (WebView::paintScrollViewRectToContextAtPoint): Ditto.
        * WebView.h:

2015-09-24  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] NULL pointer crash when trying to use tiled backing for frame view.
        https://bugs.webkit.org/show_bug.cgi?id=149523

        Reviewed by Brent Fulgham.

        For WinCairo, disable tiled backing for frame view.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::shouldUseTiledBackingForFrameView):

2015-09-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] Show tiled drawing debug overlay on Windows
        https://bugs.webkit.org/show_bug.cgi?id=149426

        Reviewed by Dean Jackson.

        * Interfaces/IWebPreferencesPrivate.idl: Add new IWebPreferencesPrivate3 API version
        so we can add new methods this cycle.
        * WebPreferenceKeysPrivate.h: Add key for 'WebKitShowTiledScrollingIndicator'
        * WebPreferences.cpp:
        (WebPreferences::QueryInterface): Recognize the new IWebPreferencesPrivate3 API.
        (WebPreferences::showTiledScrollingIndicator): Added.
        (WebPreferences::setShowTiledScrollingIndicator): Ditto.
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Update to recognize 'showTiledScrollingIndicator'.
        (WebView::setAcceleratedCompositing): Link the CACFLayerTreeHost to the WebCore Page object
        so that it can see settings information.

2015-09-18  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use tiled drawing for main background layer
        https://bugs.webkit.org/show_bug.cgi?id=149347
        <rdar://problem/22759632>

        Reviewed by Alex Christensen.

        Instruct WebCore to use tiled drawing for the root layer
        of the display.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::shouldUseTiledBackingForFrameView): Added.
        * WebCoreSupport/WebChromeClient.h:

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

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

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::destroyInspectorView):

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

        (WebInspectorFrontendClient::onClose):
        (WebInspectorClient::inspectedPageDestroyed): Deleted.
        (WebInspectorClient::closeLocalFrontend): Deleted.
        * WebCoreSupport/WebInspectorClient.h: Drive-by cleanup for class declarations.
        * WebInspector.cpp:
        (WebInspector::close):

            Go through the frontend instead of InspectorController.

2015-09-17  Per Arne Vollan  <peavo@outlook.com>

        [Win][HighDPI] Windowed plugins have incorrect placement.
        https://bugs.webkit.org/show_bug.cgi?id=149090

        Reviewed by Alex Christensen.

        We have to scale plugin dimensions with device scale factor.

        * Plugins/PluginView.cpp:
        (WebCore::PluginView::windowClipRect):
        * Plugins/PluginView.h:
        * Plugins/PluginViewWin.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::snapshot):
        (WebCore::PluginView::deviceScaleFactor):

2015-09-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Provide a means for viewing the layer tree
        https://bugs.webkit.org/show_bug.cgi?id=149165

        Reviewed by Simon Fraser.

        Add a new WebView method "printLayerTree" so that clients
        can get a string dump of the current layer tree. Add this
        to a new COM interface version so no existing clients break
        compatibility.
        
        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::QueryInterface): Recognize the new interface version.
        (WebView::printLayerTree): Added. This just calls the WebCore
        implementation.
        * WebView.h:

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

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

        Reviewed by Joseph Pecoraro.

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

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::inspectedPageDestroyed): Renamed.
        (WebInspectorClient::openLocalFrontend): Renamed.
        (WebInspectorClient::closeLocalFrontend): Renamed.
        (WebInspectorClient::inspectorDestroyed): Deleted.
        (WebInspectorClient::openInspectorFrontend): Deleted.
        (WebInspectorClient::closeInspectorFrontend): Deleted.
        * WebCoreSupport/WebInspectorClient.h:
        * WebInspector.cpp:
        (WebInspector::createInstance):
        (WebInspector::WebInspector):
        (WebInspector::inspectedWebViewClosed): Renamed.
        (WebInspector::show):
        (WebInspector::close):
        (WebInspector::isJavaScriptProfilingEnabled):
        (WebInspector::setJavaScriptProfilingEnabled):
        (WebInspector::evaluateInFrontend):
        (WebInspector::webViewClosed): Deleted.
        * WebInspector.h:
        * WebView.cpp:
        (WebView::close):

2015-09-08  Per Arne Vollan  <peavo@outlook.com>

        [Win] Implement DOMNode::attributes.
        https://bugs.webkit.org/show_bug.cgi?id=148747

        Reviewed by Brent Fulgham.

        * DOMCoreClasses.cpp:
        (DOMNode::attributes):
        (DOMNode::ownerDocument):
        (DOMRange::detach):
        (DOMNamedNodeMap::DOMNamedNodeMap):
        (DOMNamedNodeMap::~DOMNamedNodeMap):
        (DOMNamedNodeMap::createInstance):
        (DOMNamedNodeMap::QueryInterface):
        (DOMNamedNodeMap::getNamedItem):
        (DOMNamedNodeMap::setNamedItem):
        (DOMNamedNodeMap::removeNamedItem):
        (DOMNamedNodeMap::item):
        (DOMNamedNodeMap::length):
        (DOMNamedNodeMap::getNamedItemNS):
        (DOMNamedNodeMap::setNamedItemNS):
        (DOMNamedNodeMap::removeNamedItemNS):
        * DOMCoreClasses.h:
        (DOMNamedNodeMap::AddRef):
        (DOMNamedNodeMap::Release):
        (DOMNamedNodeMap::throwException):
        (DOMNamedNodeMap::callWebScriptMethod):
        (DOMNamedNodeMap::evaluateWebScript):
        (DOMNamedNodeMap::removeWebScriptKey):
        (DOMNamedNodeMap::stringRepresentation):
        (DOMNamedNodeMap::webScriptValueAtIndex):
        (DOMNamedNodeMap::setWebScriptValueAtIndex):
        (DOMNamedNodeMap::setException):

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

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

        Reviewed by Joseph Pecoraro.

        Stop using InspectorForwarding.h.

        * WebCoreSupport/WebInspectorClient.h:

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

        Reverted changeset:

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

2015-09-02  Andreas Kling  <akling@apple.com>

        ScrollbarThemes should be returned by reference.
        <https://webkit.org/b/147551>

        Reviewed by Zalan Bujtas.

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

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

        Range API is throwing wrong exception type
        https://bugs.webkit.org/show_bug.cgi?id=148648

        Reviewed by Ryosuke Niwa.

        * Interfaces/DOMWindow.idl:
        Drop outdated comment.

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

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

        Reviewed by Brady Eidson.

        Deleted part of r188851.

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

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

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

        Reviewed by Ryosuke Niwa.

        Update Range API call sites to reflect changes.

        * DOMCoreClasses.cpp:
        (DOMRange::startContainer):
        (DOMRange::endContainer):
        (DOMRange::collapsed):
        (DOMRange::toString):
        * WebView.cpp:
        (WebView::prepareCandidateWindow):
        (WebView::onIMERequestCharPosition):
        (WebView::firstRectForCharacterRangeForTesting): Deleted.

2015-08-31  Sungmann Cho  <sungmann.cho@navercorp.com>

        Fix the WinCairo build after landing of webkit.org/b/148561.
        https://bugs.webkit.org/show_bug.cgi?id=148627

        Reviewed by Myles C. Maxfield.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::paintContents):

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

        Fix the Windows build more after r189144
        https://bugs.webkit.org/show_bug.cgi?id=148561

        Unreviewed.

        * WebFrame.cpp:
        (WebFrame::paintDocumentRectToContext):
        (WebFrame::paintScrollViewRectToContextAtPoint):
        (WebFrame::spoolPage):
        (WebFrame::spoolPages):
        * WebFrame.h:
        * WebView.cpp:
        (WebView::paintIntoBackingStore):
        (WebView::paintContents):

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

        Fix the Windows build after r189144
        https://bugs.webkit.org/show_bug.cgi?id=148561

        Unreviewed.

        * Plugins/PluginView.cpp:
        (WebCore::PluginView::paintMissingPluginIcon):
        * Plugins/PluginView.h:
        * Plugins/PluginViewWin.cpp:
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        (WebCore::PluginView::paint):

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad): Added the URL argument.
        * WebCoreSupport/WebFrameLoaderClient.h:

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

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

        Reviewed by Darin Adler.

        * DOMCoreClasses.cpp:
        (DOMDocument::getElementsByTagName):
        (DOMDocument::getElementsByTagNameNS):
        Add null checks for localName() before calling
        ContainerNode::getElementsByTagName*().

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

        Stop using the old callOnMainThread variant on Windows
        https://bugs.webkit.org/show_bug.cgi?id=148332

        Reviewed by Tim Horton.

        * Plugins/PluginMainThreadScheduler.cpp:
        (WebCore::PluginMainThreadScheduler::scheduleCall):
        (WebCore::PluginMainThreadScheduler::mainThreadCallback): Deleted.
        * Plugins/PluginMainThreadScheduler.h:
        * WebDatabaseManager.cpp:
        (DidModifyOriginData::dispatchToMainThread):
        * WebIconDatabase.cpp:
        (WebIconDatabase::scheduleNotificationDelivery):

2015-08-20  Brent Fulgham  <bfulgham@apple.com>

        [Win] Miscellaneous Windows Cleanups
        https://bugs.webkit.org/show_bug.cgi?id=148240

        Reviewed by Dean Jackson.

        Correct some C++ style issues in the Windows code.

        * AccessibleBase.cpp:
        * AccessibleTextImpl.cpp:
        * CFDictionaryPropertyBag.cpp:
        * DOMCoreClasses.cpp:
        * DOMEventsClasses.cpp:
        * MemoryStream.cpp:
        * MemoryStream.h:
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        * WebCoreSupport/WebEditorClient.cpp:
        * WebCoreSupport/WebEditorClient.h:
        * WebDownload.cpp:
        * WebDownloadCurl.cpp:
        * WebError.cpp:
        * WebHistoryItem.cpp:
        * WebJavaScriptCollector.cpp:
        * WebNotificationCenter.cpp:
        * WebPreferences.cpp:
        * WebURLAuthenticationChallengeSenderCurl.cpp:
        * WebURLCredential.cpp:
        * WebView.cpp:

2015-08-19  Alex Christensen  <achristensen@webkit.org>

        [Win] Build fix after r188662.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::removeAllUserContentFromGroup):
        (WebView::invalidateBackingStore):
        Making the RECT* optional was a change that caused a compiler error or warning.
        It looks like it was a mistake in r188662.

2015-08-19  Alex Christensen  <achristensen@webkit.org>

        CMake Windows build should not include files directly from other Source directories
        https://bugs.webkit.org/show_bug.cgi?id=148198

        Reviewed by Brent Fulgham.

        * WebKitPrefix.h:
        Include cmakeconfig.h to properly define all enabled features.

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

        [Win] Replace MIDL [in/out] comments with equivalent SAL
        https://bugs.webkit.org/show_bug.cgi?id=148001

        Reviewed by Tim Horton.

        Change the many "/*[in]*/" and "/*[out]*/" comments in the
        Windows interface code to use the equivalent SAL macros. This
        will allow MSVC static analysis to actually enforce that these
        semantics are being honored, and provide better compile-time
        support for avoiding API misuse.

        While making these changes, I also corrected a number of bad
        style issues in the Windows code:
        - Use 'nullptr' instead of 0
        - Check for null input pointers instead of blindly dereferencing
        them.
        - Enforce the null-on-error behavior expected on COM interfaces.

        * AccessibleBase.cpp:
        (AccessibleBase::AccessibleBase):
        (AccessibleBase::createInstance):
        (AccessibleBase::QueryService):
        (AccessibleBase::QueryInterface):
        (AccessibleBase::Release):
        (AccessibleBase::get_attribute):
        (AccessibleBase::get_accessibleWithCaret):
        (AccessibleBase::get_relationTargetsOfType):
        (AccessibleBase::get_nRelations):
        (AccessibleBase::get_relation):
        (AccessibleBase::get_relations):
        (AccessibleBase::role):
        (AccessibleBase::scrollToPoint):
        (AccessibleBase::get_groupPosition):
        (AccessibleBase::get_states):
        (AccessibleBase::get_extendedRole):
        (AccessibleBase::get_localizedExtendedRole):
        (AccessibleBase::get_nExtendedStates):
        (AccessibleBase::get_extendedStates):
        (AccessibleBase::get_localizedExtendedStates):
        (AccessibleBase::get_uniqueID):
        (AccessibleBase::get_windowHandle):
        (AccessibleBase::get_indexInParent):
        (AccessibleBase::get_locale):
        (AccessibleBase::get_attributes):
        (AccessibleBase::get_accParent):
        (AccessibleBase::get_accChildCount):
        (AccessibleBase::get_accChild):
        (AccessibleBase::get_accName):
        (AccessibleBase::get_accValue):
        (AccessibleBase::get_accDescription):
        (AccessibleBase::get_accRole):
        (AccessibleBase::state):
        (AccessibleBase::get_accState):
        (AccessibleBase::get_accHelp):
        (AccessibleBase::get_accKeyboardShortcut):
        (AccessibleBase::accSelect):
        (AccessibleBase::get_accSelection):
        (AccessibleBase::get_accFocus):
        (AccessibleBase::get_accDefaultAction):
        (AccessibleBase::accLocation):
        (AccessibleBase::accNavigate):
        (AccessibleBase::accHitTest):
        (AccessibleBase::accDoDefaultAction):
        (AccessibleBase::wrapper):
        (AccessibleBase::isSameObject):
        * AccessibleBase.h:
        * AccessibleTextImpl.cpp:
        (AccessibleText::get_attributes):
        (AccessibleText::QueryInterface):
        * AccessibleTextImpl.h:
        (AccessibleText::AddRef):
        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::CFDictionaryPropertyBag):
        (CFDictionaryPropertyBag::QueryInterface):
        (CFDictionaryPropertyBag::AddRef):
        (CFDictionaryPropertyBag::Read):
        (CFDictionaryPropertyBag::Write):
        * CFDictionaryPropertyBag.h:
        * COMEnumVariant.h:
        (COMEnumVariant::COMEnumVariant):
        (COMEnumVariant::~COMEnumVariant):
        (COMEnumVariant<ContainerType>::QueryInterface):
        (COMEnumVariant<ContainerType>::Reset):
        (COMEnumVariant<ContainerType>::Clone):
        * COMPropertyBag.h:
        (COMPropertyBag::COMPropertyBag):
        (COMPropertyBag::~COMPropertyBag):
        (HashType>::QueryInterface):
        (HashType>::Read):
        (HashType>::Write):
        (HashType>::CountProperties):
        (HashType>::GetPropertyInfo):
        (HashType>::LoadObject):
        * DOMCSSClasses.cpp:
        (DOMCSSStyleDeclaration::DOMCSSStyleDeclaration):
        (DOMCSSStyleDeclaration::createInstance):
        (DOMCSSStyleDeclaration::QueryInterface):
        (DOMCSSStyleDeclaration::cssText):
        (DOMCSSStyleDeclaration::setCssText):
        (DOMCSSStyleDeclaration::getPropertyValue):
        (DOMCSSStyleDeclaration::getPropertyCSSValue):
        (DOMCSSStyleDeclaration::removeProperty):
        (DOMCSSStyleDeclaration::getPropertyPriority):
        (DOMCSSStyleDeclaration::setProperty):
        (DOMCSSStyleDeclaration::length):
        (DOMCSSStyleDeclaration::item):
        (DOMCSSStyleDeclaration::parentRule):
        * DOMCSSClasses.h:
        (DOMCSSStyleDeclaration::AddRef):
        (DOMCSSStyleDeclaration::Release):
        (DOMCSSStyleDeclaration::throwException):
        (DOMCSSStyleDeclaration::callWebScriptMethod):
        (DOMCSSStyleDeclaration::evaluateWebScript):
        (DOMCSSStyleDeclaration::removeWebScriptKey):
        (DOMCSSStyleDeclaration::stringRepresentation):
        (DOMCSSStyleDeclaration::webScriptValueAtIndex):
        (DOMCSSStyleDeclaration::setWebScriptValueAtIndex):
        (DOMCSSStyleDeclaration::setException):
        * DOMCoreClasses.cpp:
        (DOMObject::QueryInterface):
        (DOMNode::QueryInterface):
        (DOMNode::nodeName):
        (DOMNode::nodeValue):
        (DOMNode::setNodeValue):
        (DOMNode::nodeType):
        (DOMNode::parentNode):
        (DOMNode::childNodes):
        (DOMNode::firstChild):
        (DOMNode::lastChild):
        (DOMNode::previousSibling):
        (DOMNode::nextSibling):
        (DOMNode::attributes):
        (DOMNode::ownerDocument):
        (DOMNode::insertBefore):
        (DOMNode::replaceChild):
        (DOMNode::removeChild):
        (DOMNode::appendChild):
        (DOMNode::hasChildNodes):
        (DOMNode::cloneNode):
        (DOMNode::normalize):
        (DOMNode::isSupported):
        (DOMNode::namespaceURI):
        (DOMNode::prefix):
        (DOMNode::setPrefix):
        (DOMNode::localName):
        (DOMNode::hasAttributes):
        (DOMNode::isSameNode):
        (DOMNode::isEqualNode):
        (DOMNode::textContent):
        (DOMNode::setTextContent):
        (DOMNode::addEventListener):
        (DOMNode::removeEventListener):
        (DOMNode::dispatchEvent):
        (DOMNode::DOMNode):
        (DOMNode::createInstance):
        (DOMNodeList::QueryInterface):
        (DOMNodeList::item):
        (DOMNodeList::length):
        (DOMNodeList::DOMNodeList):
        (DOMNodeList::createInstance):
        (DOMDocument::QueryInterface):
        (DOMDocument::doctype):
        (DOMDocument::implementation):
        (DOMDocument::documentElement):
        (DOMDocument::createElement):
        (DOMDocument::createDocumentFragment):
        (DOMDocument::createTextNode):
        (DOMDocument::createComment):
        (DOMDocument::createCDATASection):
        (DOMDocument::createProcessingInstruction):
        (DOMDocument::createAttribute):
        (DOMDocument::createEntityReference):
        (DOMDocument::getElementsByTagName):
        (DOMDocument::importNode):
        (DOMDocument::createElementNS):
        (DOMDocument::createAttributeNS):
        (DOMDocument::getElementsByTagNameNS):
        (DOMDocument::getElementById):
        (DOMDocument::getComputedStyle):
        (DOMDocument::createEvent):
        (DOMDocument::DOMDocument):
        (DOMDocument::createInstance):
        (DOMWindow::QueryInterface):
        (DOMWindow::document):
        (DOMWindow::getComputedStyle):
        (DOMWindow::getMatchedCSSRules):
        (DOMWindow::devicePixelRatio):
        (DOMWindow::addEventListener):
        (DOMWindow::removeEventListener):
        (DOMWindow::dispatchEvent):
        (DOMWindow::DOMWindow):
        (DOMWindow::createInstance):
        (DOMElement::QueryInterface):
        (DOMElement::boundingBox):
        (DOMElement::lineBoxRects):
        (DOMElement::tagName):
        (DOMElement::getAttribute):
        (DOMElement::setAttribute):
        (DOMElement::removeAttribute):
        (DOMElement::getAttributeNode):
        (DOMElement::setAttributeNode):
        (DOMElement::removeAttributeNode):
        (DOMElement::getElementsByTagName):
        (DOMElement::getAttributeNS):
        (DOMElement::setAttributeNS):
        (DOMElement::removeAttributeNS):
        (DOMElement::getAttributeNodeNS):
        (DOMElement::setAttributeNodeNS):
        (DOMElement::getElementsByTagNameNS):
        (DOMElement::hasAttribute):
        (DOMElement::hasAttributeNS):
        (DOMElement::focus):
        (DOMElement::blur):
        (DOMElement::coreElement):
        (DOMElement::isEqual):
        (DOMElement::isFocused):
        (DOMElement::innerText):
        (DOMElement::font):
        (DOMElement::renderedImage):
        (DOMElement::markerTextForListItem):
        (DOMElement::shadowPseudoId):
        (DOMElement::style):
        (DOMElement::offsetLeft):
        (DOMElement::offsetTop):
        (DOMElement::offsetWidth):
        (DOMElement::offsetHeight):
        (DOMElement::offsetParent):
        (DOMElement::clientWidth):
        (DOMElement::clientHeight):
        (DOMElement::scrollLeft):
        (DOMElement::setScrollLeft):
        (DOMElement::scrollTop):
        (DOMElement::setScrollTop):
        (DOMElement::scrollWidth):
        (DOMElement::scrollHeight):
        (DOMElement::scrollIntoView):
        (DOMElement::scrollIntoViewIfNeeded):
        (DOMElement::DOMElement):
        (DOMElement::createInstance):
        (DOMRange::QueryInterface):
        (DOMRange::createInstance):
        (DOMRange::startContainer):
        (DOMRange::startOffset):
        (DOMRange::endContainer):
        (DOMRange::endOffset):
        (DOMRange::collapsed):
        (DOMRange::commonAncestorContainer):
        (DOMRange::setStart):
        (DOMRange::setEnd):
        (DOMRange::setStartBefore):
        (DOMRange::setStartAfter):
        (DOMRange::setEndBefore):
        (DOMRange::setEndAfter):
        (DOMRange::collapse):
        (DOMRange::selectNode):
        (DOMRange::selectNodeContents):
        (DOMRange::compareBoundaryPoints):
        (DOMRange::deleteContents):
        (DOMRange::extractContents):
        (DOMRange::cloneContents):
        (DOMRange::insertNode):
        (DOMRange::surroundContents):
        (DOMRange::cloneRange):
        (DOMRange::toString):
        (DOMRange::detach):
        * DOMCoreClasses.h:
        (DOMObject::AddRef):
        (DOMObject::Release):
        (DOMObject::throwException):
        (DOMObject::callWebScriptMethod):
        (DOMObject::evaluateWebScript):
        (DOMObject::removeWebScriptKey):
        (DOMObject::stringRepresentation):
        (DOMObject::webScriptValueAtIndex):
        (DOMObject::setWebScriptValueAtIndex):
        (DOMObject::setException):
        (DOMNodeList::AddRef):
        (DOMNodeList::Release):
        (DOMNodeList::throwException):
        (DOMNodeList::callWebScriptMethod):
        (DOMNodeList::evaluateWebScript):
        (DOMNodeList::removeWebScriptKey):
        (DOMNodeList::stringRepresentation):
        (DOMNodeList::webScriptValueAtIndex):
        (DOMNodeList::setWebScriptValueAtIndex):
        (DOMNodeList::setException):
        (DOMDocument::AddRef):
        (DOMDocument::Release):
        (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::normalize):
        (DOMDocument::isSupported):
        (DOMDocument::namespaceURI):
        (DOMDocument::prefix):
        (DOMDocument::setPrefix):
        (DOMDocument::localName):
        (DOMDocument::hasAttributes):
        (DOMDocument::isSameNode):
        (DOMDocument::isEqualNode):
        (DOMDocument::textContent):
        (DOMDocument::setTextContent):
        (DOMDocument::document):
        (DOMWindow::AddRef):
        (DOMWindow::Release):
        (DOMWindow::throwException):
        (DOMWindow::callWebScriptMethod):
        (DOMWindow::evaluateWebScript):
        (DOMWindow::removeWebScriptKey):
        (DOMWindow::stringRepresentation):
        (DOMWindow::webScriptValueAtIndex):
        (DOMWindow::setWebScriptValueAtIndex):
        (DOMWindow::setException):
        (DOMWindow::window):
        (DOMElement::AddRef):
        (DOMElement::Release):
        (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::normalize):
        (DOMElement::isSupported):
        (DOMElement::namespaceURI):
        (DOMElement::prefix):
        (DOMElement::setPrefix):
        (DOMElement::localName):
        (DOMElement::hasAttributes):
        (DOMElement::isSameNode):
        (DOMElement::isEqualNode):
        (DOMElement::textContent):
        (DOMElement::setTextContent):
        (DOMElement::element):
        (DOMRange::AddRef):
        (DOMRange::Release):
        (DOMRange::throwException):
        (DOMRange::callWebScriptMethod):
        (DOMRange::evaluateWebScript):
        (DOMRange::removeWebScriptKey):
        (DOMRange::stringRepresentation):
        (DOMRange::webScriptValueAtIndex):
        (DOMRange::setWebScriptValueAtIndex):
        (DOMRange::setException):
        * DOMEventsClasses.cpp:
        (DOMEventListener::QueryInterface):
        (DOMEventListener::handleEvent):
        (DOMEvent::DOMEvent):
        (DOMEvent::createInstance):
        (DOMEvent::QueryInterface):
        (DOMEvent::type):
        (DOMEvent::target):
        (DOMEvent::currentTarget):
        (DOMEvent::eventPhase):
        (DOMEvent::bubbles):
        (DOMEvent::cancelable):
        (DOMEvent::timeStamp):
        (DOMEvent::stopPropagation):
        (DOMEvent::preventDefault):
        (DOMEvent::initEvent):
        (DOMUIEvent::QueryInterface):
        (DOMUIEvent::view):
        (DOMUIEvent::detail):
        (DOMUIEvent::initUIEvent):
        (DOMUIEvent::keyCode):
        (DOMUIEvent::charCode):
        (DOMUIEvent::unused1):
        (DOMUIEvent::unused2):
        (DOMUIEvent::pageX):
        (DOMUIEvent::pageY):
        (DOMUIEvent::which):
        (DOMKeyboardEvent::QueryInterface):
        (DOMKeyboardEvent::keyIdentifier):
        (DOMKeyboardEvent::location):
        (DOMKeyboardEvent::keyLocation):
        (DOMKeyboardEvent::ctrlKey):
        (DOMKeyboardEvent::shiftKey):
        (DOMKeyboardEvent::altKey):
        (DOMKeyboardEvent::metaKey):
        (DOMKeyboardEvent::altGraphKey):
        (DOMKeyboardEvent::getModifierState):
        (DOMKeyboardEvent::initKeyboardEvent):
        (DOMMouseEvent::QueryInterface):
        (DOMMouseEvent::screenX):
        (DOMMouseEvent::screenY):
        (DOMMouseEvent::clientX):
        (DOMMouseEvent::clientY):
        (DOMMouseEvent::ctrlKey):
        (DOMMouseEvent::shiftKey):
        (DOMMouseEvent::altKey):
        (DOMMouseEvent::metaKey):
        (DOMMouseEvent::button):
        (DOMMouseEvent::relatedTarget):
        (DOMMouseEvent::initMouseEvent):
        (DOMMouseEvent::offsetX):
        (DOMMouseEvent::offsetY):
        (DOMMouseEvent::x):
        (DOMMouseEvent::y):
        (DOMMouseEvent::fromElement):
        (DOMMouseEvent::toElement):
        (DOMMutationEvent::QueryInterface):
        (DOMMutationEvent::relatedNode):
        (DOMMutationEvent::prevValue):
        (DOMMutationEvent::newValue):
        (DOMMutationEvent::attrName):
        (DOMMutationEvent::attrChange):
        (DOMMutationEvent::initMutationEvent):
        (DOMOverflowEvent::QueryInterface):
        (DOMOverflowEvent::orient):
        (DOMOverflowEvent::horizontalOverflow):
        (DOMOverflowEvent::verticalOverflow):
        (DOMWheelEvent::QueryInterface):
        (DOMWheelEvent::screenX):
        (DOMWheelEvent::screenY):
        (DOMWheelEvent::clientX):
        (DOMWheelEvent::clientY):
        (DOMWheelEvent::ctrlKey):
        (DOMWheelEvent::shiftKey):
        (DOMWheelEvent::altKey):
        (DOMWheelEvent::metaKey):
        (DOMWheelEvent::wheelDelta):
        (DOMWheelEvent::wheelDeltaX):
        (DOMWheelEvent::wheelDeltaY):
        (DOMWheelEvent::offsetX):
        (DOMWheelEvent::offsetY):
        (DOMWheelEvent::x):
        (DOMWheelEvent::y):
        (DOMWheelEvent::isHorizontal):
        (DOMWheelEvent::initWheelEvent):
        * DOMEventsClasses.h:
        (DOMEventListener::AddRef):
        (DOMEventListener::Release):
        (DOMEventListener::throwException):
        (DOMEventListener::callWebScriptMethod):
        (DOMEventListener::evaluateWebScript):
        (DOMEventListener::removeWebScriptKey):
        (DOMEventListener::stringRepresentation):
        (DOMEventListener::webScriptValueAtIndex):
        (DOMEventListener::setWebScriptValueAtIndex):
        (DOMEventListener::setException):
        (DOMEvent::AddRef):
        (DOMEvent::Release):
        (DOMEvent::throwException):
        (DOMEvent::callWebScriptMethod):
        (DOMEvent::evaluateWebScript):
        (DOMEvent::removeWebScriptKey):
        (DOMEvent::stringRepresentation):
        (DOMEvent::webScriptValueAtIndex):
        (DOMEvent::setWebScriptValueAtIndex):
        (DOMEvent::setException):
        (DOMEvent::coreEvent):
        (DOMUIEvent::DOMUIEvent):
        (DOMUIEvent::AddRef):
        (DOMUIEvent::Release):
        (DOMUIEvent::throwException):
        (DOMUIEvent::callWebScriptMethod):
        (DOMUIEvent::evaluateWebScript):
        (DOMUIEvent::removeWebScriptKey):
        (DOMUIEvent::stringRepresentation):
        (DOMUIEvent::webScriptValueAtIndex):
        (DOMUIEvent::setWebScriptValueAtIndex):
        (DOMUIEvent::setException):
        (DOMUIEvent::type):
        (DOMUIEvent::target):
        (DOMUIEvent::currentTarget):
        (DOMUIEvent::eventPhase):
        (DOMUIEvent::bubbles):
        (DOMUIEvent::cancelable):
        (DOMUIEvent::timeStamp):
        (DOMUIEvent::stopPropagation):
        (DOMUIEvent::preventDefault):
        (DOMUIEvent::initEvent):
        (DOMKeyboardEvent::DOMKeyboardEvent):
        (DOMKeyboardEvent::AddRef):
        (DOMKeyboardEvent::Release):
        (DOMKeyboardEvent::throwException):
        (DOMKeyboardEvent::callWebScriptMethod):
        (DOMKeyboardEvent::evaluateWebScript):
        (DOMKeyboardEvent::removeWebScriptKey):
        (DOMKeyboardEvent::stringRepresentation):
        (DOMKeyboardEvent::webScriptValueAtIndex):
        (DOMKeyboardEvent::setWebScriptValueAtIndex):
        (DOMKeyboardEvent::setException):
        (DOMKeyboardEvent::type):
        (DOMKeyboardEvent::target):
        (DOMKeyboardEvent::currentTarget):
        (DOMKeyboardEvent::eventPhase):
        (DOMKeyboardEvent::bubbles):
        (DOMKeyboardEvent::cancelable):
        (DOMKeyboardEvent::timeStamp):
        (DOMKeyboardEvent::stopPropagation):
        (DOMKeyboardEvent::preventDefault):
        (DOMKeyboardEvent::initEvent):
        (DOMKeyboardEvent::view):
        (DOMKeyboardEvent::detail):
        (DOMKeyboardEvent::initUIEvent):
        (DOMKeyboardEvent::keyCode):
        (DOMKeyboardEvent::charCode):
        (DOMKeyboardEvent::unused1):
        (DOMKeyboardEvent::unused2):
        (DOMKeyboardEvent::pageX):
        (DOMKeyboardEvent::pageY):
        (DOMKeyboardEvent::which):
        (DOMMouseEvent::DOMMouseEvent):
        (DOMMouseEvent::AddRef):
        (DOMMouseEvent::Release):
        (DOMMouseEvent::throwException):
        (DOMMouseEvent::callWebScriptMethod):
        (DOMMouseEvent::evaluateWebScript):
        (DOMMouseEvent::removeWebScriptKey):
        (DOMMouseEvent::stringRepresentation):
        (DOMMouseEvent::webScriptValueAtIndex):
        (DOMMouseEvent::setWebScriptValueAtIndex):
        (DOMMouseEvent::setException):
        (DOMMouseEvent::type):
        (DOMMouseEvent::target):
        (DOMMouseEvent::currentTarget):
        (DOMMouseEvent::eventPhase):
        (DOMMouseEvent::bubbles):
        (DOMMouseEvent::cancelable):
        (DOMMouseEvent::timeStamp):
        (DOMMouseEvent::stopPropagation):
        (DOMMouseEvent::preventDefault):
        (DOMMouseEvent::initEvent):
        (DOMMouseEvent::view):
        (DOMMouseEvent::detail):
        (DOMMouseEvent::initUIEvent):
        (DOMMouseEvent::keyCode):
        (DOMMouseEvent::charCode):
        (DOMMouseEvent::unused1):
        (DOMMouseEvent::unused2):
        (DOMMouseEvent::pageX):
        (DOMMouseEvent::pageY):
        (DOMMouseEvent::which):
        (DOMMutationEvent::DOMMutationEvent):
        (DOMMutationEvent::AddRef):
        (DOMMutationEvent::Release):
        (DOMMutationEvent::throwException):
        (DOMMutationEvent::callWebScriptMethod):
        (DOMMutationEvent::evaluateWebScript):
        (DOMMutationEvent::removeWebScriptKey):
        (DOMMutationEvent::stringRepresentation):
        (DOMMutationEvent::webScriptValueAtIndex):
        (DOMMutationEvent::setWebScriptValueAtIndex):
        (DOMMutationEvent::setException):
        (DOMMutationEvent::type):
        (DOMMutationEvent::target):
        (DOMMutationEvent::currentTarget):
        (DOMMutationEvent::eventPhase):
        (DOMMutationEvent::bubbles):
        (DOMMutationEvent::cancelable):
        (DOMMutationEvent::timeStamp):
        (DOMMutationEvent::stopPropagation):
        (DOMMutationEvent::preventDefault):
        (DOMMutationEvent::initEvent):
        (DOMOverflowEvent::DOMOverflowEvent):
        (DOMOverflowEvent::AddRef):
        (DOMOverflowEvent::Release):
        (DOMOverflowEvent::throwException):
        (DOMOverflowEvent::callWebScriptMethod):
        (DOMOverflowEvent::evaluateWebScript):
        (DOMOverflowEvent::removeWebScriptKey):
        (DOMOverflowEvent::stringRepresentation):
        (DOMOverflowEvent::webScriptValueAtIndex):
        (DOMOverflowEvent::setWebScriptValueAtIndex):
        (DOMOverflowEvent::setException):
        (DOMOverflowEvent::type):
        (DOMOverflowEvent::target):
        (DOMOverflowEvent::currentTarget):
        (DOMOverflowEvent::eventPhase):
        (DOMOverflowEvent::bubbles):
        (DOMOverflowEvent::cancelable):
        (DOMOverflowEvent::timeStamp):
        (DOMOverflowEvent::stopPropagation):
        (DOMOverflowEvent::preventDefault):
        (DOMOverflowEvent::initEvent):
        (DOMWheelEvent::DOMWheelEvent):
        (DOMWheelEvent::AddRef):
        (DOMWheelEvent::Release):
        (DOMWheelEvent::throwException):
        (DOMWheelEvent::callWebScriptMethod):
        (DOMWheelEvent::evaluateWebScript):
        (DOMWheelEvent::removeWebScriptKey):
        (DOMWheelEvent::stringRepresentation):
        (DOMWheelEvent::webScriptValueAtIndex):
        (DOMWheelEvent::setWebScriptValueAtIndex):
        (DOMWheelEvent::setException):
        (DOMWheelEvent::type):
        (DOMWheelEvent::target):
        (DOMWheelEvent::currentTarget):
        (DOMWheelEvent::eventPhase):
        (DOMWheelEvent::bubbles):
        (DOMWheelEvent::cancelable):
        (DOMWheelEvent::timeStamp):
        (DOMWheelEvent::stopPropagation):
        (DOMWheelEvent::preventDefault):
        (DOMWheelEvent::initEvent):
        (DOMWheelEvent::view):
        (DOMWheelEvent::detail):
        (DOMWheelEvent::initUIEvent):
        (DOMWheelEvent::keyCode):
        (DOMWheelEvent::charCode):
        (DOMWheelEvent::unused1):
        (DOMWheelEvent::unused2):
        (DOMWheelEvent::pageX):
        (DOMWheelEvent::pageY):
        (DOMWheelEvent::which):
        * DOMHTMLClasses.cpp:
        (DOMHTMLCollection::QueryInterface):
        (DOMHTMLCollection::length):
        (DOMHTMLCollection::item):
        (DOMHTMLCollection::namedItem):
        (DOMHTMLOptionsCollection::QueryInterface):
        (DOMHTMLOptionsCollection::createInstance):
        (DOMHTMLOptionsCollection::length):
        (DOMHTMLOptionsCollection::setLength):
        (DOMHTMLOptionsCollection::item):
        (DOMHTMLOptionsCollection::namedItem):
        (DOMHTMLDocument::QueryInterface):
        (DOMHTMLDocument::title):
        (DOMHTMLDocument::setTitle):
        (DOMHTMLDocument::referrer):
        (DOMHTMLDocument::domain):
        (DOMHTMLDocument::URL):
        (DOMHTMLDocument::body):
        (DOMHTMLDocument::setBody):
        (DOMHTMLDocument::images):
        (DOMHTMLDocument::applets):
        (DOMHTMLDocument::links):
        (DOMHTMLDocument::forms):
        (DOMHTMLDocument::anchors):
        (DOMHTMLDocument::cookie):
        (DOMHTMLDocument::setCookie):
        (DOMHTMLDocument::open):
        (DOMHTMLDocument::close):
        (DOMHTMLDocument::write):
        (DOMHTMLDocument::writeln):
        (DOMHTMLDocument::getElementById_):
        (DOMHTMLDocument::getElementsByName):
        (DOMHTMLElement::QueryInterface):
        (DOMHTMLElement::idName):
        (DOMHTMLElement::setIdName):
        (DOMHTMLElement::title):
        (DOMHTMLElement::setTitle):
        (DOMHTMLElement::lang):
        (DOMHTMLElement::setLang):
        (DOMHTMLElement::dir):
        (DOMHTMLElement::setDir):
        (DOMHTMLElement::className):
        (DOMHTMLElement::setClassName):
        (DOMHTMLElement::innerHTML):
        (DOMHTMLElement::setInnerHTML):
        (DOMHTMLElement::innerText):
        (DOMHTMLElement::setInnerText):
        (DOMHTMLFormElement::QueryInterface):
        (DOMHTMLFormElement::elements):
        (DOMHTMLFormElement::length):
        (DOMHTMLFormElement::name):
        (DOMHTMLFormElement::setName):
        (DOMHTMLFormElement::acceptCharset):
        (DOMHTMLFormElement::setAcceptCharset):
        (DOMHTMLFormElement::action):
        (DOMHTMLFormElement::setAction):
        (DOMHTMLFormElement::encType):
        (DOMHTMLFormElement::setEnctype):
        (DOMHTMLFormElement::method):
        (DOMHTMLFormElement::setMethod):
        (DOMHTMLFormElement::target):
        (DOMHTMLFormElement::setTarget):
        (DOMHTMLFormElement::submit):
        (DOMHTMLFormElement::reset):
        (DOMHTMLSelectElement::QueryInterface):
        (DOMHTMLSelectElement::type):
        (DOMHTMLSelectElement::selectedIndex):
        (DOMHTMLSelectElement::setSelectedIndx):
        (DOMHTMLSelectElement::value):
        (DOMHTMLSelectElement::setValue):
        (DOMHTMLSelectElement::length):
        (DOMHTMLSelectElement::form):
        (DOMHTMLSelectElement::options):
        (DOMHTMLSelectElement::disabled):
        (DOMHTMLSelectElement::setDisabled):
        (DOMHTMLSelectElement::multiple):
        (DOMHTMLSelectElement::setMultiple):
        (DOMHTMLSelectElement::name):
        (DOMHTMLSelectElement::setName):
        (DOMHTMLSelectElement::size):
        (DOMHTMLSelectElement::setSize):
        (DOMHTMLSelectElement::tabIndex):
        (DOMHTMLSelectElement::setTabIndex):
        (DOMHTMLSelectElement::add):
        (DOMHTMLSelectElement::remove):
        (DOMHTMLSelectElement::activateItemAtIndex):
        (DOMHTMLOptionElement::QueryInterface):
        (DOMHTMLOptionElement::form):
        (DOMHTMLOptionElement::defaultSelected):
        (DOMHTMLOptionElement::setDefaultSelected):
        (DOMHTMLOptionElement::text):
        (DOMHTMLOptionElement::index):
        (DOMHTMLOptionElement::disabled):
        (DOMHTMLOptionElement::setDisabled):
        (DOMHTMLOptionElement::label):
        (DOMHTMLOptionElement::setLabel):
        (DOMHTMLOptionElement::selected):
        (DOMHTMLOptionElement::setSelected):
        (DOMHTMLOptionElement::value):
        (DOMHTMLOptionElement::setValue):
        (DOMHTMLInputElement::QueryInterface):
        (DOMHTMLInputElement::defaultValue):
        (DOMHTMLInputElement::setDefaultValue):
        (DOMHTMLInputElement::defaultChecked):
        (DOMHTMLInputElement::setDefaultChecked):
        (DOMHTMLInputElement::form):
        (DOMHTMLInputElement::accept):
        (DOMHTMLInputElement::setAccept):
        (DOMHTMLInputElement::accessKey):
        (DOMHTMLInputElement::setAccessKey):
        (DOMHTMLInputElement::align):
        (DOMHTMLInputElement::setAlign):
        (DOMHTMLInputElement::alt):
        (DOMHTMLInputElement::setAlt):
        (DOMHTMLInputElement::checked):
        (DOMHTMLInputElement::setChecked):
        (DOMHTMLInputElement::disabled):
        (DOMHTMLInputElement::setDisabled):
        (DOMHTMLInputElement::maxLength):
        (DOMHTMLInputElement::setMaxLength):
        (DOMHTMLInputElement::name):
        (DOMHTMLInputElement::setName):
        (DOMHTMLInputElement::readOnly):
        (DOMHTMLInputElement::setReadOnly):
        (DOMHTMLInputElement::size):
        (DOMHTMLInputElement::setSize):
        (DOMHTMLInputElement::src):
        (DOMHTMLInputElement::setSrc):
        (DOMHTMLInputElement::tabIndex):
        (DOMHTMLInputElement::setTabIndex):
        (DOMHTMLInputElement::type):
        (DOMHTMLInputElement::setType):
        (DOMHTMLInputElement::useMap):
        (DOMHTMLInputElement::setUseMap):
        (DOMHTMLInputElement::value):
        (DOMHTMLInputElement::setValue):
        (DOMHTMLInputElement::setValueForUser):
        (DOMHTMLInputElement::select):
        (DOMHTMLInputElement::click):
        (DOMHTMLInputElement::setSelectionStart):
        (DOMHTMLInputElement::selectionStart):
        (DOMHTMLInputElement::setSelectionEnd):
        (DOMHTMLInputElement::selectionEnd):
        (DOMHTMLInputElement::isTextField):
        (DOMHTMLInputElement::rectOnScreen):
        (DOMHTMLInputElement::replaceCharactersInRange):
        (DOMHTMLInputElement::selectedRange):
        (DOMHTMLInputElement::setAutofilled):
        (DOMHTMLInputElement::isAutofilled):
        (DOMHTMLInputElement::isUserEdited):
        (DOMHTMLTextAreaElement::QueryInterface):
        (DOMHTMLTextAreaElement::defaultValue):
        (DOMHTMLTextAreaElement::setDefaultValue):
        (DOMHTMLTextAreaElement::form):
        (DOMHTMLTextAreaElement::accessKey):
        (DOMHTMLTextAreaElement::setAccessKey):
        (DOMHTMLTextAreaElement::cols):
        (DOMHTMLTextAreaElement::setCols):
        (DOMHTMLTextAreaElement::disabled):
        (DOMHTMLTextAreaElement::setDisabled):
        (DOMHTMLTextAreaElement::name):
        (DOMHTMLTextAreaElement::setName):
        (DOMHTMLTextAreaElement::readOnly):
        (DOMHTMLTextAreaElement::setReadOnly):
        (DOMHTMLTextAreaElement::rows):
        (DOMHTMLTextAreaElement::setRows):
        (DOMHTMLTextAreaElement::tabIndex):
        (DOMHTMLTextAreaElement::setTabIndex):
        (DOMHTMLTextAreaElement::type):
        (DOMHTMLTextAreaElement::value):
        (DOMHTMLTextAreaElement::setValue):
        (DOMHTMLTextAreaElement::select):
        (DOMHTMLTextAreaElement::isUserEdited):
        (DOMHTMLIFrameElement::QueryInterface):
        (DOMHTMLIFrameElement::contentFrame):
        * DOMHTMLClasses.h:
        (DOMHTMLCollection::AddRef):
        (DOMHTMLCollection::Release):
        (DOMHTMLCollection::throwException):
        (DOMHTMLCollection::callWebScriptMethod):
        (DOMHTMLCollection::evaluateWebScript):
        (DOMHTMLCollection::removeWebScriptKey):
        (DOMHTMLCollection::stringRepresentation):
        (DOMHTMLCollection::webScriptValueAtIndex):
        (DOMHTMLCollection::setWebScriptValueAtIndex):
        (DOMHTMLCollection::setException):
        (DOMHTMLOptionsCollection::AddRef):
        (DOMHTMLOptionsCollection::Release):
        (DOMHTMLOptionsCollection::throwException):
        (DOMHTMLOptionsCollection::callWebScriptMethod):
        (DOMHTMLOptionsCollection::evaluateWebScript):
        (DOMHTMLOptionsCollection::removeWebScriptKey):
        (DOMHTMLOptionsCollection::stringRepresentation):
        (DOMHTMLOptionsCollection::webScriptValueAtIndex):
        (DOMHTMLOptionsCollection::setWebScriptValueAtIndex):
        (DOMHTMLOptionsCollection::setException):
        (DOMHTMLDocument::DOMHTMLDocument):
        (DOMHTMLDocument::AddRef):
        (DOMHTMLDocument::Release):
        (DOMHTMLDocument::throwException):
        (DOMHTMLDocument::callWebScriptMethod):
        (DOMHTMLDocument::evaluateWebScript):
        (DOMHTMLDocument::removeWebScriptKey):
        (DOMHTMLDocument::stringRepresentation):
        (DOMHTMLDocument::webScriptValueAtIndex):
        (DOMHTMLDocument::setWebScriptValueAtIndex):
        (DOMHTMLDocument::setException):
        (DOMHTMLDocument::nodeName):
        (DOMHTMLDocument::nodeValue):
        (DOMHTMLDocument::setNodeValue):
        (DOMHTMLDocument::nodeType):
        (DOMHTMLDocument::parentNode):
        (DOMHTMLDocument::childNodes):
        (DOMHTMLDocument::firstChild):
        (DOMHTMLDocument::lastChild):
        (DOMHTMLDocument::previousSibling):
        (DOMHTMLDocument::nextSibling):
        (DOMHTMLDocument::attributes):
        (DOMHTMLDocument::ownerDocument):
        (DOMHTMLDocument::insertBefore):
        (DOMHTMLDocument::replaceChild):
        (DOMHTMLDocument::removeChild):
        (DOMHTMLDocument::appendChild):
        (DOMHTMLDocument::hasChildNodes):
        (DOMHTMLDocument::cloneNode):
        (DOMHTMLDocument::normalize):
        (DOMHTMLDocument::isSupported):
        (DOMHTMLDocument::namespaceURI):
        (DOMHTMLDocument::prefix):
        (DOMHTMLDocument::setPrefix):
        (DOMHTMLDocument::localName):
        (DOMHTMLDocument::hasAttributes):
        (DOMHTMLDocument::isSameNode):
        (DOMHTMLDocument::isEqualNode):
        (DOMHTMLDocument::textContent):
        (DOMHTMLDocument::setTextContent):
        (DOMHTMLDocument::doctype):
        (DOMHTMLDocument::implementation):
        (DOMHTMLDocument::documentElement):
        (DOMHTMLDocument::createElement):
        (DOMHTMLDocument::createDocumentFragment):
        (DOMHTMLDocument::createTextNode):
        (DOMHTMLDocument::createComment):
        (DOMHTMLDocument::createCDATASection):
        (DOMHTMLDocument::createProcessingInstruction):
        (DOMHTMLDocument::createAttribute):
        (DOMHTMLDocument::createEntityReference):
        (DOMHTMLDocument::getElementsByTagName):
        (DOMHTMLDocument::importNode):
        (DOMHTMLDocument::createElementNS):
        (DOMHTMLDocument::createAttributeNS):
        (DOMHTMLDocument::getElementsByTagNameNS):
        (DOMHTMLDocument::getElementById):
        (DOMHTMLElement::DOMHTMLElement):
        (DOMHTMLElement::AddRef):
        (DOMHTMLElement::Release):
        (DOMHTMLElement::throwException):
        (DOMHTMLElement::callWebScriptMethod):
        (DOMHTMLElement::evaluateWebScript):
        (DOMHTMLElement::removeWebScriptKey):
        (DOMHTMLElement::stringRepresentation):
        (DOMHTMLElement::webScriptValueAtIndex):
        (DOMHTMLElement::setWebScriptValueAtIndex):
        (DOMHTMLElement::setException):
        (DOMHTMLElement::nodeName):
        (DOMHTMLElement::nodeValue):
        (DOMHTMLElement::setNodeValue):
        (DOMHTMLElement::nodeType):
        (DOMHTMLElement::parentNode):
        (DOMHTMLElement::childNodes):
        (DOMHTMLElement::firstChild):
        (DOMHTMLElement::lastChild):
        (DOMHTMLElement::previousSibling):
        (DOMHTMLElement::nextSibling):
        (DOMHTMLElement::attributes):
        (DOMHTMLElement::ownerDocument):
        (DOMHTMLElement::insertBefore):
        (DOMHTMLElement::replaceChild):
        (DOMHTMLElement::removeChild):
        (DOMHTMLElement::appendChild):
        (DOMHTMLElement::hasChildNodes):
        (DOMHTMLElement::cloneNode):
        (DOMHTMLElement::normalize):
        (DOMHTMLElement::isSupported):
        (DOMHTMLElement::namespaceURI):
        (DOMHTMLElement::prefix):
        (DOMHTMLElement::setPrefix):
        (DOMHTMLElement::localName):
        (DOMHTMLElement::hasAttributes):
        (DOMHTMLElement::isSameNode):
        (DOMHTMLElement::isEqualNode):
        (DOMHTMLElement::textContent):
        (DOMHTMLElement::setTextContent):
        (DOMHTMLElement::tagName):
        (DOMHTMLElement::getAttribute):
        (DOMHTMLElement::setAttribute):
        (DOMHTMLElement::removeAttribute):
        (DOMHTMLElement::getAttributeNode):
        (DOMHTMLElement::setAttributeNode):
        (DOMHTMLElement::removeAttributeNode):
        (DOMHTMLElement::getElementsByTagName):
        (DOMHTMLElement::getAttributeNS):
        (DOMHTMLElement::setAttributeNS):
        (DOMHTMLElement::removeAttributeNS):
        (DOMHTMLElement::getAttributeNodeNS):
        (DOMHTMLElement::setAttributeNodeNS):
        (DOMHTMLElement::getElementsByTagNameNS):
        (DOMHTMLElement::hasAttribute):
        (DOMHTMLElement::hasAttributeNS):
        (DOMHTMLElement::focus):
        (DOMHTMLElement::blur):
        (DOMHTMLFormElement::DOMHTMLFormElement):
        (DOMHTMLFormElement::AddRef):
        (DOMHTMLFormElement::Release):
        (DOMHTMLFormElement::throwException):
        (DOMHTMLFormElement::callWebScriptMethod):
        (DOMHTMLFormElement::evaluateWebScript):
        (DOMHTMLFormElement::removeWebScriptKey):
        (DOMHTMLFormElement::stringRepresentation):
        (DOMHTMLFormElement::webScriptValueAtIndex):
        (DOMHTMLFormElement::setWebScriptValueAtIndex):
        (DOMHTMLFormElement::setException):
        (DOMHTMLFormElement::nodeName):
        (DOMHTMLFormElement::nodeValue):
        (DOMHTMLFormElement::setNodeValue):
        (DOMHTMLFormElement::nodeType):
        (DOMHTMLFormElement::parentNode):
        (DOMHTMLFormElement::childNodes):
        (DOMHTMLFormElement::firstChild):
        (DOMHTMLFormElement::lastChild):
        (DOMHTMLFormElement::previousSibling):
        (DOMHTMLFormElement::nextSibling):
        (DOMHTMLFormElement::attributes):
        (DOMHTMLFormElement::ownerDocument):
        (DOMHTMLFormElement::insertBefore):
        (DOMHTMLFormElement::replaceChild):
        (DOMHTMLFormElement::removeChild):
        (DOMHTMLFormElement::appendChild):
        (DOMHTMLFormElement::hasChildNodes):
        (DOMHTMLFormElement::cloneNode):
        (DOMHTMLFormElement::normalize):
        (DOMHTMLFormElement::isSupported):
        (DOMHTMLFormElement::namespaceURI):
        (DOMHTMLFormElement::prefix):
        (DOMHTMLFormElement::setPrefix):
        (DOMHTMLFormElement::localName):
        (DOMHTMLFormElement::hasAttributes):
        (DOMHTMLFormElement::isSameNode):
        (DOMHTMLFormElement::isEqualNode):
        (DOMHTMLFormElement::textContent):
        (DOMHTMLFormElement::setTextContent):
        (DOMHTMLFormElement::tagName):
        (DOMHTMLFormElement::getAttribute):
        (DOMHTMLFormElement::setAttribute):
        (DOMHTMLFormElement::removeAttribute):
        (DOMHTMLFormElement::getAttributeNode):
        (DOMHTMLFormElement::setAttributeNode):
        (DOMHTMLFormElement::removeAttributeNode):
        (DOMHTMLFormElement::getElementsByTagName):
        (DOMHTMLFormElement::getAttributeNS):
        (DOMHTMLFormElement::setAttributeNS):
        (DOMHTMLFormElement::removeAttributeNS):
        (DOMHTMLFormElement::getAttributeNodeNS):
        (DOMHTMLFormElement::setAttributeNodeNS):
        (DOMHTMLFormElement::getElementsByTagNameNS):
        (DOMHTMLFormElement::hasAttribute):
        (DOMHTMLFormElement::hasAttributeNS):
        (DOMHTMLFormElement::focus):
        (DOMHTMLFormElement::blur):
        (DOMHTMLFormElement::idName):
        (DOMHTMLFormElement::setIdName):
        (DOMHTMLFormElement::title):
        (DOMHTMLFormElement::setTitle):
        (DOMHTMLFormElement::lang):
        (DOMHTMLFormElement::setLang):
        (DOMHTMLFormElement::dir):
        (DOMHTMLFormElement::setDir):
        (DOMHTMLFormElement::className):
        (DOMHTMLFormElement::setClassName):
        (DOMHTMLFormElement::innerHTML):
        (DOMHTMLFormElement::setInnerHTML):
        (DOMHTMLFormElement::innerText):
        (DOMHTMLFormElement::setInnerText):
        (DOMHTMLSelectElement::DOMHTMLSelectElement):
        (DOMHTMLSelectElement::AddRef):
        (DOMHTMLSelectElement::Release):
        (DOMHTMLSelectElement::throwException):
        (DOMHTMLSelectElement::callWebScriptMethod):
        (DOMHTMLSelectElement::evaluateWebScript):
        (DOMHTMLSelectElement::removeWebScriptKey):
        (DOMHTMLSelectElement::stringRepresentation):
        (DOMHTMLSelectElement::webScriptValueAtIndex):
        (DOMHTMLSelectElement::setWebScriptValueAtIndex):
        (DOMHTMLSelectElement::setException):
        (DOMHTMLSelectElement::nodeName):
        (DOMHTMLSelectElement::nodeValue):
        (DOMHTMLSelectElement::setNodeValue):
        (DOMHTMLSelectElement::nodeType):
        (DOMHTMLSelectElement::parentNode):
        (DOMHTMLSelectElement::childNodes):
        (DOMHTMLSelectElement::firstChild):
        (DOMHTMLSelectElement::lastChild):
        (DOMHTMLSelectElement::previousSibling):
        (DOMHTMLSelectElement::nextSibling):
        (DOMHTMLSelectElement::attributes):
        (DOMHTMLSelectElement::ownerDocument):
        (DOMHTMLSelectElement::insertBefore):
        (DOMHTMLSelectElement::replaceChild):
        (DOMHTMLSelectElement::removeChild):
        (DOMHTMLSelectElement::appendChild):
        (DOMHTMLSelectElement::hasChildNodes):
        (DOMHTMLSelectElement::cloneNode):
        (DOMHTMLSelectElement::normalize):
        (DOMHTMLSelectElement::isSupported):
        (DOMHTMLSelectElement::namespaceURI):
        (DOMHTMLSelectElement::prefix):
        (DOMHTMLSelectElement::setPrefix):
        (DOMHTMLSelectElement::localName):
        (DOMHTMLSelectElement::hasAttributes):
        (DOMHTMLSelectElement::isSameNode):
        (DOMHTMLSelectElement::isEqualNode):
        (DOMHTMLSelectElement::textContent):
        (DOMHTMLSelectElement::setTextContent):
        (DOMHTMLSelectElement::tagName):
        (DOMHTMLSelectElement::getAttribute):
        (DOMHTMLSelectElement::setAttribute):
        (DOMHTMLSelectElement::removeAttribute):
        (DOMHTMLSelectElement::getAttributeNode):
        (DOMHTMLSelectElement::setAttributeNode):
        (DOMHTMLSelectElement::removeAttributeNode):
        (DOMHTMLSelectElement::getElementsByTagName):
        (DOMHTMLSelectElement::getAttributeNS):
        (DOMHTMLSelectElement::setAttributeNS):
        (DOMHTMLSelectElement::removeAttributeNS):
        (DOMHTMLSelectElement::getAttributeNodeNS):
        (DOMHTMLSelectElement::setAttributeNodeNS):
        (DOMHTMLSelectElement::getElementsByTagNameNS):
        (DOMHTMLSelectElement::hasAttribute):
        (DOMHTMLSelectElement::hasAttributeNS):
        (DOMHTMLSelectElement::focus):
        (DOMHTMLSelectElement::blur):
        (DOMHTMLSelectElement::idName):
        (DOMHTMLSelectElement::setIdName):
        (DOMHTMLSelectElement::title):
        (DOMHTMLSelectElement::setTitle):
        (DOMHTMLSelectElement::lang):
        (DOMHTMLSelectElement::setLang):
        (DOMHTMLSelectElement::dir):
        (DOMHTMLSelectElement::setDir):
        (DOMHTMLSelectElement::className):
        (DOMHTMLSelectElement::setClassName):
        (DOMHTMLSelectElement::innerHTML):
        (DOMHTMLSelectElement::setInnerHTML):
        (DOMHTMLSelectElement::innerText):
        (DOMHTMLSelectElement::setInnerText):
        (DOMHTMLOptionElement::DOMHTMLOptionElement):
        (DOMHTMLOptionElement::AddRef):
        (DOMHTMLOptionElement::Release):
        (DOMHTMLOptionElement::throwException):
        (DOMHTMLOptionElement::callWebScriptMethod):
        (DOMHTMLOptionElement::evaluateWebScript):
        (DOMHTMLOptionElement::removeWebScriptKey):
        (DOMHTMLOptionElement::stringRepresentation):
        (DOMHTMLOptionElement::webScriptValueAtIndex):
        (DOMHTMLOptionElement::setWebScriptValueAtIndex):
        (DOMHTMLOptionElement::setException):
        (DOMHTMLOptionElement::nodeName):
        (DOMHTMLOptionElement::nodeValue):
        (DOMHTMLOptionElement::setNodeValue):
        (DOMHTMLOptionElement::nodeType):
        (DOMHTMLOptionElement::parentNode):
        (DOMHTMLOptionElement::childNodes):
        (DOMHTMLOptionElement::firstChild):
        (DOMHTMLOptionElement::lastChild):
        (DOMHTMLOptionElement::previousSibling):
        (DOMHTMLOptionElement::nextSibling):
        (DOMHTMLOptionElement::attributes):
        (DOMHTMLOptionElement::ownerDocument):
        (DOMHTMLOptionElement::insertBefore):
        (DOMHTMLOptionElement::replaceChild):
        (DOMHTMLOptionElement::removeChild):
        (DOMHTMLOptionElement::appendChild):
        (DOMHTMLOptionElement::hasChildNodes):
        (DOMHTMLOptionElement::cloneNode):
        (DOMHTMLOptionElement::normalize):
        (DOMHTMLOptionElement::isSupported):
        (DOMHTMLOptionElement::namespaceURI):
        (DOMHTMLOptionElement::prefix):
        (DOMHTMLOptionElement::setPrefix):
        (DOMHTMLOptionElement::localName):
        (DOMHTMLOptionElement::hasAttributes):
        (DOMHTMLOptionElement::isSameNode):
        (DOMHTMLOptionElement::isEqualNode):
        (DOMHTMLOptionElement::textContent):
        (DOMHTMLOptionElement::setTextContent):
        (DOMHTMLOptionElement::tagName):
        (DOMHTMLOptionElement::getAttribute):
        (DOMHTMLOptionElement::setAttribute):
        (DOMHTMLOptionElement::removeAttribute):
        (DOMHTMLOptionElement::getAttributeNode):
        (DOMHTMLOptionElement::setAttributeNode):
        (DOMHTMLOptionElement::removeAttributeNode):
        (DOMHTMLOptionElement::getElementsByTagName):
        (DOMHTMLOptionElement::getAttributeNS):
        (DOMHTMLOptionElement::setAttributeNS):
        (DOMHTMLOptionElement::removeAttributeNS):
        (DOMHTMLOptionElement::getAttributeNodeNS):
        (DOMHTMLOptionElement::setAttributeNodeNS):
        (DOMHTMLOptionElement::getElementsByTagNameNS):
        (DOMHTMLOptionElement::hasAttribute):
        (DOMHTMLOptionElement::hasAttributeNS):
        (DOMHTMLOptionElement::focus):
        (DOMHTMLOptionElement::blur):
        (DOMHTMLOptionElement::idName):
        (DOMHTMLOptionElement::setIdName):
        (DOMHTMLOptionElement::title):
        (DOMHTMLOptionElement::setTitle):
        (DOMHTMLOptionElement::lang):
        (DOMHTMLOptionElement::setLang):
        (DOMHTMLOptionElement::dir):
        (DOMHTMLOptionElement::setDir):
        (DOMHTMLOptionElement::className):
        (DOMHTMLOptionElement::setClassName):
        (DOMHTMLOptionElement::innerHTML):
        (DOMHTMLOptionElement::setInnerHTML):
        (DOMHTMLOptionElement::innerText):
        (DOMHTMLOptionElement::setInnerText):
        (DOMHTMLInputElement::DOMHTMLInputElement):
        (DOMHTMLInputElement::AddRef):
        (DOMHTMLInputElement::Release):
        (DOMHTMLInputElement::throwException):
        (DOMHTMLInputElement::callWebScriptMethod):
        (DOMHTMLInputElement::evaluateWebScript):
        (DOMHTMLInputElement::removeWebScriptKey):
        (DOMHTMLInputElement::stringRepresentation):
        (DOMHTMLInputElement::webScriptValueAtIndex):
        (DOMHTMLInputElement::setWebScriptValueAtIndex):
        (DOMHTMLInputElement::setException):
        (DOMHTMLInputElement::nodeName):
        (DOMHTMLInputElement::nodeValue):
        (DOMHTMLInputElement::setNodeValue):
        (DOMHTMLInputElement::nodeType):
        (DOMHTMLInputElement::parentNode):
        (DOMHTMLInputElement::childNodes):
        (DOMHTMLInputElement::firstChild):
        (DOMHTMLInputElement::lastChild):
        (DOMHTMLInputElement::previousSibling):
        (DOMHTMLInputElement::nextSibling):
        (DOMHTMLInputElement::attributes):
        (DOMHTMLInputElement::ownerDocument):
        (DOMHTMLInputElement::insertBefore):
        (DOMHTMLInputElement::replaceChild):
        (DOMHTMLInputElement::removeChild):
        (DOMHTMLInputElement::appendChild):
        (DOMHTMLInputElement::hasChildNodes):
        (DOMHTMLInputElement::cloneNode):
        (DOMHTMLInputElement::normalize):
        (DOMHTMLInputElement::isSupported):
        (DOMHTMLInputElement::namespaceURI):
        (DOMHTMLInputElement::prefix):
        (DOMHTMLInputElement::setPrefix):
        (DOMHTMLInputElement::localName):
        (DOMHTMLInputElement::hasAttributes):
        (DOMHTMLInputElement::isSameNode):
        (DOMHTMLInputElement::isEqualNode):
        (DOMHTMLInputElement::textContent):
        (DOMHTMLInputElement::setTextContent):
        (DOMHTMLInputElement::tagName):
        (DOMHTMLInputElement::getAttribute):
        (DOMHTMLInputElement::setAttribute):
        (DOMHTMLInputElement::removeAttribute):
        (DOMHTMLInputElement::getAttributeNode):
        (DOMHTMLInputElement::setAttributeNode):
        (DOMHTMLInputElement::removeAttributeNode):
        (DOMHTMLInputElement::getElementsByTagName):
        (DOMHTMLInputElement::getAttributeNS):
        (DOMHTMLInputElement::setAttributeNS):
        (DOMHTMLInputElement::removeAttributeNS):
        (DOMHTMLInputElement::getAttributeNodeNS):
        (DOMHTMLInputElement::setAttributeNodeNS):
        (DOMHTMLInputElement::getElementsByTagNameNS):
        (DOMHTMLInputElement::hasAttribute):
        (DOMHTMLInputElement::hasAttributeNS):
        (DOMHTMLInputElement::focus):
        (DOMHTMLInputElement::blur):
        (DOMHTMLInputElement::idName):
        (DOMHTMLInputElement::setIdName):
        (DOMHTMLInputElement::title):
        (DOMHTMLInputElement::setTitle):
        (DOMHTMLInputElement::lang):
        (DOMHTMLInputElement::setLang):
        (DOMHTMLInputElement::dir):
        (DOMHTMLInputElement::setDir):
        (DOMHTMLInputElement::className):
        (DOMHTMLInputElement::setClassName):
        (DOMHTMLInputElement::innerHTML):
        (DOMHTMLInputElement::setInnerHTML):
        (DOMHTMLInputElement::innerText):
        (DOMHTMLInputElement::setInnerText):
        (DOMHTMLTextAreaElement::DOMHTMLTextAreaElement):
        (DOMHTMLTextAreaElement::AddRef):
        (DOMHTMLTextAreaElement::Release):
        (DOMHTMLTextAreaElement::throwException):
        (DOMHTMLTextAreaElement::callWebScriptMethod):
        (DOMHTMLTextAreaElement::evaluateWebScript):
        (DOMHTMLTextAreaElement::removeWebScriptKey):
        (DOMHTMLTextAreaElement::stringRepresentation):
        (DOMHTMLTextAreaElement::webScriptValueAtIndex):
        (DOMHTMLTextAreaElement::setWebScriptValueAtIndex):
        (DOMHTMLTextAreaElement::setException):
        (DOMHTMLTextAreaElement::nodeName):
        (DOMHTMLTextAreaElement::nodeValue):
        (DOMHTMLTextAreaElement::setNodeValue):
        (DOMHTMLTextAreaElement::nodeType):
        (DOMHTMLTextAreaElement::parentNode):
        (DOMHTMLTextAreaElement::childNodes):
        (DOMHTMLTextAreaElement::firstChild):
        (DOMHTMLTextAreaElement::lastChild):
        (DOMHTMLTextAreaElement::previousSibling):
        (DOMHTMLTextAreaElement::nextSibling):
        (DOMHTMLTextAreaElement::attributes):
        (DOMHTMLTextAreaElement::ownerDocument):
        (DOMHTMLTextAreaElement::insertBefore):
        (DOMHTMLTextAreaElement::replaceChild):
        (DOMHTMLTextAreaElement::removeChild):
        (DOMHTMLTextAreaElement::appendChild):
        (DOMHTMLTextAreaElement::hasChildNodes):
        (DOMHTMLTextAreaElement::cloneNode):
        (DOMHTMLTextAreaElement::normalize):
        (DOMHTMLTextAreaElement::isSupported):
        (DOMHTMLTextAreaElement::namespaceURI):
        (DOMHTMLTextAreaElement::prefix):
        (DOMHTMLTextAreaElement::setPrefix):
        (DOMHTMLTextAreaElement::localName):
        (DOMHTMLTextAreaElement::hasAttributes):
        (DOMHTMLTextAreaElement::isSameNode):
        (DOMHTMLTextAreaElement::isEqualNode):
        (DOMHTMLTextAreaElement::textContent):
        (DOMHTMLTextAreaElement::setTextContent):
        (DOMHTMLTextAreaElement::tagName):
        (DOMHTMLTextAreaElement::getAttribute):
        (DOMHTMLTextAreaElement::setAttribute):
        (DOMHTMLTextAreaElement::removeAttribute):
        (DOMHTMLTextAreaElement::getAttributeNode):
        (DOMHTMLTextAreaElement::setAttributeNode):
        (DOMHTMLTextAreaElement::removeAttributeNode):
        (DOMHTMLTextAreaElement::getElementsByTagName):
        (DOMHTMLTextAreaElement::getAttributeNS):
        (DOMHTMLTextAreaElement::setAttributeNS):
        (DOMHTMLTextAreaElement::removeAttributeNS):
        (DOMHTMLTextAreaElement::getAttributeNodeNS):
        (DOMHTMLTextAreaElement::setAttributeNodeNS):
        (DOMHTMLTextAreaElement::getElementsByTagNameNS):
        (DOMHTMLTextAreaElement::hasAttribute):
        (DOMHTMLTextAreaElement::hasAttributeNS):
        (DOMHTMLTextAreaElement::focus):
        (DOMHTMLTextAreaElement::blur):
        (DOMHTMLTextAreaElement::idName):
        (DOMHTMLTextAreaElement::setIdName):
        (DOMHTMLTextAreaElement::title):
        (DOMHTMLTextAreaElement::setTitle):
        (DOMHTMLTextAreaElement::lang):
        (DOMHTMLTextAreaElement::setLang):
        (DOMHTMLTextAreaElement::dir):
        (DOMHTMLTextAreaElement::setDir):
        (DOMHTMLTextAreaElement::className):
        (DOMHTMLTextAreaElement::setClassName):
        (DOMHTMLTextAreaElement::innerHTML):
        (DOMHTMLTextAreaElement::setInnerHTML):
        (DOMHTMLTextAreaElement::innerText):
        (DOMHTMLTextAreaElement::setInnerText):
        (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):
        * DefaultDownloadDelegate.cpp:
        (DefaultDownloadDelegate::DefaultDownloadDelegate):
        (DefaultDownloadDelegate::QueryInterface):
        (DefaultDownloadDelegate::AddRef):
        (DefaultDownloadDelegate::Release):
        (DefaultDownloadDelegate::decideDestinationWithSuggestedFilename):
        (DefaultDownloadDelegate::didCancelAuthenticationChallenge):
        (DefaultDownloadDelegate::didCreateDestination):
        (DefaultDownloadDelegate::didReceiveAuthenticationChallenge):
        (DefaultDownloadDelegate::didReceiveDataOfLength):
        (DefaultDownloadDelegate::didReceiveResponse):
        (DefaultDownloadDelegate::shouldDecodeSourceDataOfMIMEType):
        (DefaultDownloadDelegate::willResumeWithResponse):
        (DefaultDownloadDelegate::willSendRequest):
        (DefaultDownloadDelegate::didBegin):
        (DefaultDownloadDelegate::didFinish):
        (DefaultDownloadDelegate::didFailWithError):
        * DefaultDownloadDelegate.h:
        * DefaultPolicyDelegate.cpp:
        (DefaultPolicyDelegate::DefaultPolicyDelegate):
        (DefaultPolicyDelegate::QueryInterface):
        (DefaultPolicyDelegate::AddRef):
        (DefaultPolicyDelegate::Release):
        (DefaultPolicyDelegate::decidePolicyForNavigationAction):
        (DefaultPolicyDelegate::decidePolicyForNewWindowAction):
        (DefaultPolicyDelegate::decidePolicyForMIMEType):
        (DefaultPolicyDelegate::unableToImplementPolicyWithError):
        * DefaultPolicyDelegate.h:
        * Interfaces/Accessible2/Accessible2.idl:
        * Interfaces/Accessible2/Accessible2_2.idl:
        * Interfaces/Accessible2/AccessibleApplication.idl:
        * Interfaces/Accessible2/AccessibleEditableText.idl:
        * Interfaces/Accessible2/AccessibleRelation.idl:
        * Interfaces/Accessible2/AccessibleStates.idl:
        * Interfaces/Accessible2/AccessibleText.idl:
        * Interfaces/Accessible2/AccessibleText2.idl:
        * Interfaces/IWebApplicationCache.idl:
        * Interfaces/IWebView.idl:
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * MemoryStream.cpp:
        (MemoryStream::QueryInterface):
        (MemoryStream::AddRef):
        * MemoryStream.h:
        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::WebActionPropertyBag):
        (WebActionPropertyBag::QueryInterface):
        (WebActionPropertyBag::AddRef):
        (WebActionPropertyBag::Release):
        (findMouseEvent):
        (WebActionPropertyBag::Read):
        (WebActionPropertyBag::Write):
        * WebActionPropertyBag.h:
        * WebApplicationCache.cpp:
        (WebApplicationCache::QueryInterface):
        (WebApplicationCache::AddRef):
        * WebApplicationCache.h:
        * WebArchive.cpp:
        (WebArchive::createInstance):
        (WebArchive::WebArchive):
        (WebArchive::~WebArchive):
        (WebArchive::QueryInterface):
        (WebArchive::AddRef):
        (WebArchive::Release):
        (WebArchive::initWithMainResource):
        (WebArchive::initWithData):
        (WebArchive::initWithNode):
        (WebArchive::mainResource):
        (WebArchive::subResources):
        (WebArchive::subframeArchives):
        (WebArchive::data):
        * WebArchive.h:
        * WebBackForwardList.cpp:
        (backForwardListWrappers):
        (WebBackForwardList::WebBackForwardList):
        (WebBackForwardList::createInstance):
        (WebBackForwardList::QueryInterface):
        (WebBackForwardList::AddRef):
        (WebBackForwardList::Release):
        (WebBackForwardList::addItem):
        (WebBackForwardList::goBack):
        (WebBackForwardList::goForward):
        (WebBackForwardList::goToItem):
        (WebBackForwardList::backItem):
        (WebBackForwardList::currentItem):
        (WebBackForwardList::forwardItem):
        (WebBackForwardList::backListWithLimit):
        (WebBackForwardList::forwardListWithLimit):
        (WebBackForwardList::capacity):
        (WebBackForwardList::setCapacity):
        (WebBackForwardList::backListCount):
        (WebBackForwardList::forwardListCount):
        (WebBackForwardList::containsItem):
        (WebBackForwardList::itemAtIndex):
        (WebBackForwardList::removeItem):
        * WebBackForwardList.h:
        * WebCache.cpp:
        (WebCache::WebCache):
        (WebCache::QueryInterface):
        (WebCache::AddRef):
        (WebCache::Release):
        (WebCache::statistics):
        (WebCache::empty):
        (WebCache::setDisabled):
        (WebCache::disabled):
        (WebCache::cacheFolder):
        (WebCache::setCacheFolder):
        * WebCache.h:
        * WebCoreStatistics.cpp:
        (WebCoreStatistics::WebCoreStatistics):
        (WebCoreStatistics::QueryInterface):
        (WebCoreStatistics::AddRef):
        (WebCoreStatistics::Release):
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        (WebCoreStatistics::javaScriptObjectTypeCounts):
        (WebCoreStatistics::iconPageURLMappingCount):
        (WebCoreStatistics::iconRetainedPageURLCount):
        (WebCoreStatistics::iconRecordCount):
        (WebCoreStatistics::iconsWithDataCount):
        (WebCoreStatistics::cachedFontDataCount):
        (WebCoreStatistics::cachedFontDataInactiveCount):
        (WebCoreStatistics::purgeInactiveFontData):
        (WebCoreStatistics::glyphPageCount):
        (WebCoreStatistics::setJavaScriptGarbageCollectorTimerEnabled):
        (WebCoreStatistics::shouldPrintExceptions):
        (WebCoreStatistics::stopIgnoringWebCoreNodeLeaks):
        (WebCoreStatistics::memoryStatistics):
        (WebCoreStatistics::returnFreeMemoryToSystem):
        (WebCoreStatistics::cachedPageCount):
        (WebCoreStatistics::cachedFrameCount):
        * WebCoreStatistics.h:
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (NotificationCOMWrapper::create):
        (NotificationCOMWrapper::QueryInterface):
        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorUndoTarget::QueryInterface):
        (WebEditorUndoTarget::AddRef):
        (WebEditorUndoCommand::execute):
        (WebEditorUndoCommand::QueryInterface):
        (WebEditorUndoCommand::AddRef):
        * WebCoreSupport/WebInspectorDelegate.cpp:
        (WebInspectorDelegate::WebInspectorDelegate):
        (WebInspectorDelegate::createInstance):
        (QueryInterface):
        (WebInspectorDelegate::AddRef):
        (WebInspectorDelegate::Release):
        (WebInspectorDelegate::dragDestinationActionMaskForDraggingInfo):
        (WebInspectorDelegate::createWebViewWithRequest):
        (WebInspectorDelegate::willPerformDragSourceAction):
        (WebInspectorDelegate::createModalDialog):
        (WebInspectorDelegate::desktopNotificationsDelegate):
        (:m_refCount): Deleted.
        * WebCoreSupport/WebInspectorDelegate.h:
        (WebInspectorDelegate::webViewShow):
        (WebInspectorDelegate::webViewClose):
        (WebInspectorDelegate::webViewFocus):
        (WebInspectorDelegate::webViewUnfocus):
        (WebInspectorDelegate::webViewFirstResponder):
        (WebInspectorDelegate::makeFirstResponder):
        (WebInspectorDelegate::setStatusText):
        (WebInspectorDelegate::webViewStatusText):
        (WebInspectorDelegate::webViewAreToolbarsVisible):
        (WebInspectorDelegate::setToolbarsVisible):
        (WebInspectorDelegate::webViewIsStatusBarVisible):
        (WebInspectorDelegate::setStatusBarVisible):
        (WebInspectorDelegate::webViewIsResizable):
        (WebInspectorDelegate::setResizable):
        (WebInspectorDelegate::setFrame):
        (WebInspectorDelegate::webViewFrame):
        (WebInspectorDelegate::setContentRect):
        (WebInspectorDelegate::webViewContentRect):
        (WebInspectorDelegate::runJavaScriptAlertPanelWithMessage):
        (WebInspectorDelegate::runJavaScriptConfirmPanelWithMessage):
        (WebInspectorDelegate::runJavaScriptTextInputPanelWithPrompt):
        (WebInspectorDelegate::runBeforeUnloadConfirmPanelWithMessage):
        (WebInspectorDelegate::runOpenPanelForFileButtonWithResultListener):
        (WebInspectorDelegate::mouseDidMoveOverElement):
        (WebInspectorDelegate::contextMenuItemsForElement):
        (WebInspectorDelegate::validateUserInterfaceItem):
        (WebInspectorDelegate::shouldPerformAction):
        (WebInspectorDelegate::willPerformDragDestinationAction):
        (WebInspectorDelegate::dragSourceActionMaskForPoint):
        (WebInspectorDelegate::contextMenuItemSelected):
        (WebInspectorDelegate::hasCustomMenuImplementation):
        (WebInspectorDelegate::trackCustomPopupMenu):
        (WebInspectorDelegate::measureCustomMenuItem):
        (WebInspectorDelegate::drawCustomMenuItem):
        (WebInspectorDelegate::addCustomMenuDrawingData):
        (WebInspectorDelegate::cleanUpCustomMenuDrawingData):
        (WebInspectorDelegate::canTakeFocus):
        (WebInspectorDelegate::takeFocus):
        (WebInspectorDelegate::registerUndoWithTarget):
        (WebInspectorDelegate::removeAllActionsWithTarget):
        (WebInspectorDelegate::setActionTitle):
        (WebInspectorDelegate::undo):
        (WebInspectorDelegate::redo):
        (WebInspectorDelegate::canUndo):
        (WebInspectorDelegate::canRedo):
        (WebInspectorDelegate::printFrame):
        (WebInspectorDelegate::ftpDirectoryTemplatePath):
        (WebInspectorDelegate::webViewHeaderHeight):
        (WebInspectorDelegate::webViewFooterHeight):
        (WebInspectorDelegate::drawHeaderInRect):
        (WebInspectorDelegate::drawFooterInRect):
        (WebInspectorDelegate::webViewPrintingMarginRect):
        (WebInspectorDelegate::canRunModal):
        (WebInspectorDelegate::runModal):
        (WebInspectorDelegate::isMenuBarVisible):
        (WebInspectorDelegate::setMenuBarVisible):
        (WebInspectorDelegate::runDatabaseSizeLimitPrompt):
        (WebInspectorDelegate::paintCustomScrollbar):
        (WebInspectorDelegate::paintCustomScrollCorner):
        (WebInspectorDelegate::QueryInterface): Deleted.
        (WebInspectorDelegate::createWebViewWithRequest): Deleted.
        (WebInspectorDelegate::willPerformDragSourceAction): Deleted.
        (WebInspectorDelegate::createModalDialog): Deleted.
        (WebInspectorDelegate::desktopNotificationsDelegate): Deleted.
        * WebDataSource.cpp:
        (WebDataSource::overrideEncoding):
        (WebDataSource::setOverrideEncoding):
        (WebDataSource::mainDocumentError):
        (WebDataSource::setDeferMainResourceDataLoad):
        (WebDataSource::QueryInterface):
        (WebDataSource::AddRef):
        (WebDataSource::Release):
        (WebDataSource::initWithRequest):
        (WebDataSource::data):
        (WebDataSource::representation):
        (WebDataSource::webFrame):
        (WebDataSource::initialRequest):
        (WebDataSource::request):
        (WebDataSource::response):
        (WebDataSource::textEncodingName):
        (WebDataSource::isLoading):
        (WebDataSource::pageTitle):
        (WebDataSource::unreachableURL):
        (WebDataSource::webArchive):
        (WebDataSource::mainResource):
        (WebDataSource::subresources):
        (WebDataSource::subresourceForURL):
        (WebDataSource::addSubresource):
        * WebDataSource.h:
        * WebDatabaseManager.cpp:
        (DatabaseDetailsPropertyBag::DatabaseDetailsPropertyBag):
        (DatabaseDetailsPropertyBag::~DatabaseDetailsPropertyBag):
        (DatabaseDetailsPropertyBag::createInstance):
        (DatabaseDetailsPropertyBag::AddRef):
        (DatabaseDetailsPropertyBag::Release):
        (DatabaseDetailsPropertyBag::QueryInterface):
        (DatabaseDetailsPropertyBag::Read):
        (DatabaseDetailsPropertyBag::Write):
        (WebDatabaseManager::createInstance):
        (WebDatabaseManager::WebDatabaseManager):
        (WebDatabaseManager::~WebDatabaseManager):
        (WebDatabaseManager::QueryInterface):
        (WebDatabaseManager::AddRef):
        (WebDatabaseManager::Release):
        (WebDatabaseManager::sharedWebDatabaseManager):
        (WebDatabaseManager::origins):
        (WebDatabaseManager::databasesWithOrigin):
        (WebDatabaseManager::detailsForDatabase):
        (WebDatabaseManager::deleteAllDatabases):
        (WebDatabaseManager::deleteOrigin):
        (WebDatabaseManager::deleteDatabase):
        (WebDatabaseManager::dispatchDidModifyOrigin):
        (WebDatabaseManager::setQuota):
        * WebDatabaseManager.h:
        * WebDownload.cpp:
        (WebDownload::WebDownload):
        (WebDownload::QueryInterface):
        (WebDownload::AddRef):
        (WebDownload::Release):
        (WebDownload::canResumeDownloadDecodedWithEncodingMIMEType):
        (WebDownload::bundlePathForTargetPath):
        (WebDownload::request):
        * WebDownload.h:
        * WebDownloadCFNet.cpp:
        (WebDownload::initWithRequest):
        (WebDownload::initToResumeWithBundle):
        (WebDownload::start):
        (WebDownload::cancel):
        (WebDownload::cancelForResume):
        (WebDownload::deletesFileUponFailure):
        (WebDownload::setDeletesFileUponFailure):
        (WebDownload::setDestination):
        (WebDownload::cancelAuthenticationChallenge):
        (WebDownload::continueWithoutCredentialForAuthenticationChallenge):
        (WebDownload::useCredential):
        * WebDropSource.cpp:
        (WebDropSource::createInstance):
        (WebDropSource::WebDropSource):
        (WebDropSource::~WebDropSource):
        (WebDropSource::QueryInterface):
        (WebDropSource::AddRef):
        (WebDropSource::Release):
        (generateMouseEvent):
        (WebDropSource::QueryContinueDrag):
        (WebDropSource::GiveFeedback):
        * WebDropSource.h:
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::WebElementPropertyBag):
        (WebElementPropertyBag::QueryInterface):
        (WebElementPropertyBag::AddRef):
        (WebElementPropertyBag::Release):
        (WebElementPropertyBag::Read):
        (WebElementPropertyBag::Write):
        * WebElementPropertyBag.h:
        * WebError.cpp:
        (WebError::WebError):
        (WebError::QueryInterface):
        (WebError::AddRef):
        (WebError::Release):
        (WebError::init):
        (WebError::code):
        (WebError::domain):
        (WebError::localizedDescription):
        (WebError::localizedFailureReason):
        (WebError::localizedRecoveryOptions):
        (WebError::localizedRecoverySuggestion):
        (WebError::recoverAttempter):
        (WebError::userInfo):
        (WebError::failingURL):
        (WebError::isPolicyChangeError):
        (WebError::sslPeerCertificate):
        * WebError.h:
        * WebFrame.cpp:
        (kit):
        (core):
        (elementFromDOMElement):
        (WebFrame::WebFramePrivate::WebFramePrivate):
        (WebFrame::WebFramePrivate::~WebFramePrivate):
        (WebFrame::WebFramePrivate::frameView):
        (WebFrame::WebFrame):
        (WebFrame::createInstance):
        (WebFrame::setAllowsScrolling):
        (WebFrame::allowsScrolling):
        (WebFrame::setIsDisconnected):
        (WebFrame::setExcludeFromTextSearch):
        (WebFrame::reloadFromOrigin):
        (WebFrame::paintDocumentRectToContext):
        (WebFrame::paintScrollViewRectToContextAtPoint):
        (WebFrame::QueryInterface):
        (WebFrame::AddRef):
        (WebFrame::Release):
        (WebFrame::name):
        (WebFrame::webView):
        (WebFrame::frameView):
        (WebFrame::DOMDocument):
        (WebFrame::DOMWindow):
        (WebFrame::frameElement):
        (WebFrame::currentForm):
        (WebFrame::globalContext):
        (WebFrame::globalContextForScriptWorld):
        (WebFrame::loadRequest):
        (WebFrame::loadData):
        (WebFrame::loadPlainTextString):
        (WebFrame::loadHTMLString):
        (WebFrame::loadAlternateHTMLString):
        (WebFrame::loadArchive):
        (getWebDataSource):
        (WebFrame::dataSource):
        (WebFrame::provisionalDataSource):
        (WebFrame::url):
        (WebFrame::stopLoading):
        (WebFrame::reload):
        (WebFrame::findFrameNamed):
        (WebFrame::parentFrame):
        (EnumChildFrames::EnumChildFrames):
        (EnumChildFrames::QueryInterface):
        (EnumChildFrames::AddRef):
        (EnumChildFrames::Clone):
        (WebFrame::childFrames):
        (WebFrame::renderTreeAsExternalRepresentation):
        (WebFrame::pageNumberForElementById):
        (WebFrame::numberOfPages):
        (WebFrame::scrollOffset):
        (WebFrame::layout):
        (WebFrame::firstLayoutDone):
        (WebFrame::pendingFrameUnloadEventCount):
        (WebFrame::hasSpellingMarker):
        (WebFrame::clearOpener):
        (WebFrame::setTextDirection):
        (WebFrame::supportsTextEncoding):
        (WebFrame::selectedString):
        (WebFrame::selectAll):
        (WebFrame::deselectAll):
        (WebFrame::formForElement):
        (WebFrame::elementDoesAutoComplete):
        (WebFrame::resumeAnimations):
        (WebFrame::suspendAnimations):
        (WebFrame::pauseAnimation):
        (WebFrame::pauseTransition):
        (WebFrame::visibleContentRect):
        (WebFrame::numberOfActiveAnimations):
        (WebFrame::isDisplayingStandaloneImage):
        (WebFrame::allowsFollowingLink):
        (WebFrame::searchForLabelsBeforeElement):
        (WebFrame::matchLabelsAgainstElement):
        (WebFrame::canProvideDocumentSource):
        (WebFrame::layerTreeAsText):
        (WebFrame::setPrinting):
        (WebFrame::setInPrintingMode):
        (WebFrame::computePageRects):
        (WebFrame::getPrintedPageCount):
        (WebFrame::spoolPages):
        (WebFrame::isFrameSet):
        (WebFrame::string):
        (WebFrame::size):
        (WebFrame::hasScrollBars):
        (WebFrame::contentBounds):
        (WebFrame::frameBounds):
        (WebFrame::isDescendantOfFrame):
        (WebFrame::updateBackground):
        (WebFrame::isMainFrame):
        * WebFrame.h:
        * WebFramePolicyListener.cpp:
        (WebFramePolicyListener::WebFramePolicyListener):
        (WebFramePolicyListener::QueryInterface):
        (WebFramePolicyListener::AddRef):
        (WebFramePolicyListener::Release):
        (WebFramePolicyListener::use):
        (WebFramePolicyListener::download):
        (WebFramePolicyListener::ignore):
        (WebFramePolicyListener::continueSubmit):
        * WebFramePolicyListener.h:
        * WebGeolocationPolicyListener.cpp:
        (WebGeolocationPolicyListener::QueryInterface):
        (WebGeolocationPolicyListener::AddRef):
        (WebGeolocationPolicyListener::Release):
        (WebGeolocationPolicyListener::allow):
        (WebGeolocationPolicyListener::deny):
        * WebGeolocationPolicyListener.h:
        * WebGeolocationPosition.cpp:
        (WebGeolocationPosition::createInstance):
        (WebGeolocationPosition::WebGeolocationPosition):
        (WebGeolocationPosition::~WebGeolocationPosition):
        (WebGeolocationPosition::QueryInterface):
        * WebGeolocationPosition.h:
        (WebGeolocationPosition::impl):
        * WebHTMLRepresentation.cpp:
        (WebHTMLRepresentation::WebHTMLRepresentation):
        (WebHTMLRepresentation::~WebHTMLRepresentation):
        (WebHTMLRepresentation::QueryInterface):
        (WebHTMLRepresentation::AddRef):
        (WebHTMLRepresentation::Release):
        (WebHTMLRepresentation::supportedMIMETypes):
        (WebHTMLRepresentation::supportedNonImageMIMETypes):
        (WebHTMLRepresentation::supportedImageMIMETypes):
        (WebHTMLRepresentation::attributedStringFromDOMNodes):
        (WebHTMLRepresentation::elementWithName):
        (WebHTMLRepresentation::elementDoesAutoComplete):
        (WebHTMLRepresentation::elementIsPassword):
        (WebHTMLRepresentation::formForElement):
        (WebHTMLRepresentation::currentForm):
        (WebHTMLRepresentation::controlsInForm):
        (WebHTMLRepresentation::deprecatedSearchForLabels):
        (WebHTMLRepresentation::matchLabels):
        (WebHTMLRepresentation::searchForLabels):
        (WebHTMLRepresentation::setDataSource):
        (WebHTMLRepresentation::receivedData):
        (WebHTMLRepresentation::receivedError):
        (WebHTMLRepresentation::finishedLoadingWithDataSource):
        (WebHTMLRepresentation::canProvideDocumentSource):
        (WebHTMLRepresentation::documentSource):
        (WebHTMLRepresentation::title):
        * WebHTMLRepresentation.h:
        * WebHistory.cpp:
        (WebHistory::WebHistory):
        (WebHistory::QueryInterface):
        (WebHistory::AddRef):
        (WebHistory::Release):
        (WebHistory::sharedHistory):
        (WebHistory::optionalSharedHistory):
        (WebHistory::setOptionalSharedHistory):
        (WebHistory::unused1):
        (WebHistory::unused2):
        (WebHistory::addItems):
        (WebHistory::removeItems):
        (WebHistory::removeAllItems):
        (WebHistory::orderedLastVisitedDays):
        (WebHistory::orderedItemsLastVisitedOnDay):
        (WebHistory::allItems):
        (WebHistory::removeAllVisitedLinks):
        (WebHistory::setHistoryItemLimit):
        (WebHistory::historyItemLimit):
        (WebHistory::setHistoryAgeInDaysLimit):
        (WebHistory::historyAgeInDaysLimit):
        (WebHistory::visitedURL):
        (WebHistory::itemForURL):
        * WebHistory.h:
        * WebHistoryItem.cpp:
        (historyItemWrappers):
        (WebHistoryItem::WebHistoryItem):
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::dictionaryRepresentation):
        (WebHistoryItem::hasURLString):
        (WebHistoryItem::visitCount):
        (WebHistoryItem::setVisitCount):
        (WebHistoryItem::mergeAutoCompleteHints):
        (WebHistoryItem::setLastVisitedTimeInterval):
        (WebHistoryItem::setTitle):
        (WebHistoryItem::RSSFeedReferrer):
        (WebHistoryItem::setRSSFeedReferrer):
        (WebHistoryItem::hasPageCache):
        (WebHistoryItem::setHasPageCache):
        (WebHistoryItem::target):
        (WebHistoryItem::isTargetItem):
        (WebHistoryItem::children):
        (WebHistoryItem::lastVisitWasFailure):
        (WebHistoryItem::setLastVisitWasFailure):
        (WebHistoryItem::lastVisitWasHTTPNonGet):
        (WebHistoryItem::setLastVisitWasHTTPNonGet):
        (WebHistoryItem::redirectURLs):
        (WebHistoryItem::visitedWithTitle):
        (WebHistoryItem::getDailyVisitCounts):
        (WebHistoryItem::getWeeklyVisitCounts):
        (WebHistoryItem::recordInitialVisit):
        (WebHistoryItem::QueryInterface):
        (WebHistoryItem::AddRef):
        (WebHistoryItem::Release):
        (WebHistoryItem::initWithURLString):
        (WebHistoryItem::originalURLString):
        (WebHistoryItem::URLString):
        (WebHistoryItem::title):
        (WebHistoryItem::lastVisitedTimeInterval):
        (WebHistoryItem::setAlternateTitle):
        (WebHistoryItem::alternateTitle):
        (WebHistoryItem::icon):
        * WebHistoryItem.h:
        * WebIconDatabase.cpp:
        (WebIconDatabase::WebIconDatabase):
        (WebIconDatabase::QueryInterface):
        (WebIconDatabase::AddRef):
        (WebIconDatabase::Release):
        (WebIconDatabase::sharedIconDatabase):
        (WebIconDatabase::iconForURL):
        (WebIconDatabase::defaultIconWithSize):
        (WebIconDatabase::retainIconForURL):
        (WebIconDatabase::releaseIconForURL):
        (WebIconDatabase::removeAllIcons):
        (WebIconDatabase::delayDatabaseCleanup):
        (WebIconDatabase::allowDatabaseCleanup):
        (WebIconDatabase::iconURLForURL):
        (WebIconDatabase::isEnabled):
        (WebIconDatabase::setEnabled):
        (WebIconDatabase::hasIconForURL):
        * WebIconDatabase.h:
        * WebInspector.cpp:
        (WebInspector::createInstance):
        (WebInspector::WebInspector):
        (WebInspector::frontendClient):
        (WebInspector::webViewClosed):
        (WebInspector::QueryInterface):
        (WebInspector::AddRef):
        (WebInspector::Release):
        (WebInspector::show):
        (WebInspector::showConsole):
        (WebInspector::unused1):
        (WebInspector::close):
        (WebInspector::attach):
        (WebInspector::detach):
        (WebInspector::isDebuggingJavaScript):
        (WebInspector::toggleDebuggingJavaScript):
        (WebInspector::isProfilingJavaScript):
        (WebInspector::toggleProfilingJavaScript):
        (WebInspector::isJavaScriptProfilingEnabled):
        (WebInspector::setJavaScriptProfilingEnabled):
        (WebInspector::evaluateInFrontend):
        (WebInspector::isTimelineProfilingEnabled):
        (WebInspector::setTimelineProfilingEnabled):
        * WebInspector.h:
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::WebJavaScriptCollector):
        (WebJavaScriptCollector::QueryInterface):
        (WebJavaScriptCollector::AddRef):
        (WebJavaScriptCollector::collect):
        (WebJavaScriptCollector::collectOnAlternateThread):
        (WebJavaScriptCollector::objectCount):
        * WebJavaScriptCollector.h:
        * WebKitCOMAPI.cpp:
        (classFactory):
        (WebKitCreateInstance):
        * WebKitCOMAPI.h:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::WebKitClassFactory):
        (WebKitClassFactory::~WebKitClassFactory):
        (WebKitClassFactory::QueryInterface):
        (WebKitClassFactory::AddRef):
        (leakRefFromCreateInstance):
        (WebKitClassFactory::CreateInstance):
        * WebKitClassFactory.h:
        * WebKitDLL.cpp:
        * WebKitMessageLoop.cpp:
        * WebKitMessageLoop.h:
        * WebKitStatistics.cpp:
        * WebKitStatistics.h:
        * WebMutableURLRequest.cpp:
        * WebMutableURLRequest.h:
        * WebNavigationData.cpp:
        * WebNavigationData.h:
        * WebNotification.cpp:
        * WebNotification.h:
        * WebNotificationCenter.cpp:
        * WebNotificationCenter.h:
        * WebPreferences.cpp:
        * WebPreferences.h:
        * WebResource.cpp:
        * WebResource.h:
        * WebScriptObject.cpp:
        * WebScriptObject.h:
        * WebScriptWorld.cpp:
        * WebScriptWorld.h:
        * WebSecurityOrigin.cpp:
        * WebSecurityOrigin.h:
        * WebSerializedJSValue.cpp:
        * WebSerializedJSValue.h:
        * WebTextRenderer.cpp:
        * WebTextRenderer.h:
        * WebURLAuthenticationChallenge.cpp:
        * WebURLAuthenticationChallenge.h:
        * WebURLAuthenticationChallengeSender.cpp:
        * WebURLAuthenticationChallengeSender.h:
        * WebURLAuthenticationChallengeSenderCFNet.cpp:
        * WebURLCredential.cpp:
        * WebURLCredential.h:
        * WebURLProtectionSpace.cpp:
        * WebURLProtectionSpace.h:
        * WebURLResponse.cpp:
        * WebURLResponse.h:
        * WebUserContentURLPattern.cpp:
        * WebUserContentURLPattern.h:
        * WebView.cpp:
        * WebView.h:
        * WebWorkersPrivate.cpp:
        * WebWorkersPrivate.h:

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

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

        Reviewed by Geoffrey Garen.

        * Plugins/PluginMainThreadScheduler.cpp:
        (WebCore::PluginMainThreadScheduler::scheduleCall):
        (WebCore::PluginMainThreadScheduler::registerPlugin):
        (WebCore::PluginMainThreadScheduler::unregisterPlugin):
        (WebCore::PluginMainThreadScheduler::dispatchCallsForPlugin):
        * Plugins/PluginMainThreadScheduler.h:
        * WebIconDatabase.cpp:
        (WebIconDatabase::didRemoveAllIcons):
        (WebIconDatabase::didImportIconURLForPageURL):
        (WebIconDatabase::deliverNotifications):
        * WebIconDatabase.h:
        * WebLocalizableStrings.cpp:
        (mainBundleLocStrings):
        (frameworkLocStringsMutex):
        (findCachedString):
        (cacheString):

2015-08-17  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Accelerated compositing does not respect device scale factor.
        https://bugs.webkit.org/show_bug.cgi?id=148085

        Reviewed by Brent Fulgham.

        Scale root layer's transformation matrix with device scale factor.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::initialize):
        (AcceleratedCompositingContext::startedAnimation):
        (AcceleratedCompositingContext::applyDeviceScaleFactor):
        (AcceleratedCompositingContext::compositeLayersToContext):
        (AcceleratedCompositingContext::resizeRootLayer):
        (AcceleratedCompositingContext::flushAndRenderLayers):
        (AcceleratedCompositingContext::paintContents):
        (AcceleratedCompositingContext::deviceScaleFactor):
        * WebCoreSupport/AcceleratedCompositingContext.h:
        * WebView.cpp:
        (WebView::repaint):

2015-08-17  Sungmann Cho  <sungmann.cho@navercorp.com>

        [Win] Cleanups to PluginView::handleMouseEvent().
        https://bugs.webkit.org/show_bug.cgi?id=148024

        Reviewed by Alex Christensen.

        1. Replace the raw values identifying specific mouse buttons with
           WebCore::MouseButton enum values.
        2. Reindent if and switch statements.

        * Plugins/PluginViewWin.cpp:
        (WebCore::PluginView::handleMouseEvent):

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

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

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebFrameLoaderClient.cpp: Updated to include SubresourceLoader.h.

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

        Windows build fix.

        * FullscreenVideoController.cpp:

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

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

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebChromeClient.cpp:
        (createWindowFeaturesPropertyBag):

2015-08-10  Per Arne Vollan  <peavo@outlook.com>

        [Win] Small repaint issues when device scale factor != 1.
        https://bugs.webkit.org/show_bug.cgi?id=147825

        Reviewed by Alex Christensen.

        When scaling, we should scale a FloatRect, and then compute the enclosing IntRect.

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

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

        Build more testing binaries with CMake on Windows
        https://bugs.webkit.org/show_bug.cgi?id=147799

        Reviewed by Brent Fulgham.

        * WebKitDLL.cpp:
        (loadResourceIntoBuffer):
        AppleWin doesn't like exporting a function without a separate declaration.

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

        Try to fix the build

        * WebIconDatabase.h:

2015-08-05  Brent Fulgham  <bfulgham@apple.com>

        [Win] Allow display of mixed content on Windows by default
        https://bugs.webkit.org/show_bug.cgi?id=147693
        <rdar://problem/22059707>

        Reviewed by Alex Christensen.

        * Interfaces/IWebPreferencesPrivate.idl: Add preference accessor
        to allow getting/setting use of insecure content.
        * WebPreferenceKeysPrivate.h: Add new key for preference.
        * WebPreferences.cpp: Implement preference accessor.
        * WebPreferences.h:
        * WebView.cpp: Set WebCore settings to match prefernces for
        loading mixed content.

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

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

        * Plugins/PluginMainThreadScheduler.cpp:
        (WebCore::PluginMainThreadScheduler::scheduleCall):
        (WebCore::PluginMainThreadScheduler::registerPlugin):
        (WebCore::PluginMainThreadScheduler::unregisterPlugin):
        (WebCore::PluginMainThreadScheduler::dispatchCallsForPlugin):
        * Plugins/PluginMainThreadScheduler.h:
        * WebIconDatabase.cpp:
        (WebIconDatabase::didRemoveAllIcons):
        (WebIconDatabase::didImportIconURLForPageURL):
        (WebIconDatabase::deliverNotifications):
        * WebLocalizableStrings.cpp:
        (mainBundleLocStrings):
        (frameworkLocStringsMutex):
        (findCachedString):
        (cacheString):

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

        Build DumpRenderTree with CMake.
        https://bugs.webkit.org/show_bug.cgi?id=147519

        Reviewed by Brent Fulgham.

        * WebView.cpp:
        Include JSScriptProfile.h to export toJS(ExecState*, JSDomGlobalObject*, JSC::Profile*) from WebKit.dll.

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

        Fix Windows build.

        * WebIconDatabase.h:

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

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

        Reviewed by Geoffrey Garen.

        * Plugins/PluginMainThreadScheduler.cpp:
        (WebCore::PluginMainThreadScheduler::scheduleCall):
        (WebCore::PluginMainThreadScheduler::registerPlugin):
        (WebCore::PluginMainThreadScheduler::unregisterPlugin):
        (WebCore::PluginMainThreadScheduler::dispatchCallsForPlugin):
        * Plugins/PluginMainThreadScheduler.h:
        * WebIconDatabase.cpp:
        (WebIconDatabase::didRemoveAllIcons):
        (WebIconDatabase::didImportIconURLForPageURL):
        (WebIconDatabase::deliverNotifications):
        * WebLocalizableStrings.cpp:
        (mainBundleLocStrings):
        (frameworkLocStringsMutex):
        (findCachedString):
        (cacheString):

2015-08-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update Apple Windows build for VS2015
        https://bugs.webkit.org/show_bug.cgi?id=147653

        Reviewed by Dean Jackson.

        * WebView.cpp:
        (WebView::setCacheModel): Add explicit 'get' to satisfy compiler.

2015-08-04  Alex Christensen  <achristensen@webkit.org>

        Fix Windows build after r187886.

        * Plugins/PluginStream.h:
        Befriend PluginView.

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

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

        Reviewed by Andreas Kling.

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

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

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

        Patch by Jeffrey Pfau, updated and tweaked by me.

        Reviewed by Anders Carlsson.

        * Plugins/PluginStream.cpp:
        (WebCore::PluginStream::sendJavaScriptStream):
        (WebCore::PluginStream::willSendRequest):
        (WebCore::PluginStream::didReceiveResponse):
        * Plugins/PluginStream.h:

2015-08-01  Alex Christensen  <achristensen@webkit.org>

        Fix compile errors with VS2015
        https://bugs.webkit.org/show_bug.cgi?id=147526

        Reviewed by Myles Maxfield.

        * WebKitDLL.cpp:
        (shutDownWebKit):
        (loadResourceIntoBuffer): Needs to be exported from WebKit.dll to link with CMake using VS2015.

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

        Use Ninja on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=147228

        Reviewed by Martin Robinson.

        * WebView.h:
        Add more #if USE(CA) to protect the CACFLayer code.

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

        Progress towards building AppleWin with CMake
        https://bugs.webkit.org/show_bug.cgi?id=147325

        Reviewed by Martin Robinson.

        * WebError.cpp:
        * WebKitDLL.cpp:
        * WebPreferences.cpp:
        * WebURLResponse.cpp:
        Fix some include quirks.

2015-07-27  Per Arne Vollan  <peavo@outlook.com>

        [Curl] Crash in CurlDownload::didReceiveHeader when downloading file.
        https://bugs.webkit.org/show_bug.cgi?id=146832

        Reviewed by Darin Adler.

        CurlDownload should be reference counted to make sure it still
        lives when a function call is invoked on the main thread from
        the download thread.

        * WebDownload.h:
        * WebDownloadCurl.cpp:
        (WebDownload::init):
        (WebDownload::start):
        (WebDownload::cancel):
        (WebDownload::deletesFileUponFailure):
        (WebDownload::setDeletesFileUponFailure):
        (WebDownload::setDestination):
        (WebDownload::didReceiveResponse):

2015-07-24  Brent Fulgham  <bfulgham@apple.com>

        [Win] Connect UserScript and UserStyleSheet through WebView.
        https://bugs.webkit.org/show_bug.cgi?id=147279
        <rdar://problem/21990767>

        Reviewed by Dean Jackson.

        * Interfaces/IWebViewPrivate.idl: Add updated API for 'addUserScriptToGroup' and
        'addUserStyleSheetToGroup'
        * WebView.cpp:
        (WebView::addUserScriptToGroup): Add implementation.
        (toStringVector): Added helper function.
        (WebView::addUserStyleSheetToGroup): Add implementation.
        (WebView::removeUserScriptFromGroup): Ditto.
        (WebView::removeUserStyleSheetFromGroup): Ditto.
        (WebView::removeUserScriptsFromGroup): Ditto.
        (WebView::removeUserStyleSheetsFromGroup): Ditto.
        (WebView::removeAllUserContentFromGroup): Ditto.
        * WebView.h:

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

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

        Reviewed by Alex Christensen.

        * Interfaces/IWebPreferencesPrivate.idl:

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

        Unreviewed build fix after r187245.

        * WebView.cpp:
        WM_DPICHANGED is #defined, which causes problems if we try to use it as a variable name.

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

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

        Reviewed by Yusuke Suzuki.

        * Interfaces/IWebPreferencesPrivate.idl:

2015-07-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Implement High DPI support features
        https://bugs.webkit.org/show_bug.cgi?id=146335
        <rdar://problem/21558269>

        Reviewed by Alex Christensen.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::transitionToCommittedForNewPage): Size
        page for current device scale factor.
        * WebFrame.cpp:
        (WebFrame::paintDocumentRectToContext): Account for device scale factor.
        (WebFrame::paintScrollViewRectToContextAtPoint): Ditto.
        * WebView.cpp:
        (WebView::repaint): Adjust paint rect for device scale factor.
        (WebView::scrollBackingStore): Adjust coordinates for scale factor.
        (WebView::sizeChanged): Ditto.
        (WebView::updateBackingStore): Ditto.
        (WebView::paint): Ditto.
        (WebView::paintIntoBackingStore): Ditto.
        (WebView::handleContextMenuEvent): Ditto.
        (WebView::gestureNotify): Ditto.
        (WebView::gesture): Ditto.
        (WebView::initializeToolTipWindow): Adjust max tool tip width
        for device scale factor.
        (WebView::selectionRect): Adjust coordinates for scale factor.
        (WebView::elementAtPoint): Ditto.
        (WebView::scrollOffset): Ditto.
        (WebView::scrollBy): Ditto.
        (WebView::visibleContentRect): Ditto.
        (WebView::paintContents): Ditto.
        * WebView.h:

2015-07-23  Sungmann Cho  <sungmann.cho@navercorp.com>

        [Win] Fix typos in PluginViewWin.cpp: kWebPluginViewdowClassName -> kWebPluginViewClassName
        https://bugs.webkit.org/show_bug.cgi?id=147214

        Reviewed by Csaba Osztrogonác.

        * Plugins/PluginViewWin.cpp:
        (WebCore::registerPluginView):
        (WebCore::PluginView::platformStart):

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

        Fix quirks in CMake build on Mac and Windows
        https://bugs.webkit.org/show_bug.cgi?id=147174

        Reviewed by Gyuyoung Kim.

        * WebView.cpp:
        Include winuser.h to get definitions of touch-related structures like tagGESTUREINFO.

2015-07-21  Sungmann Cho  <sungmann.cho@navercorp.com>

        [Win] Add needTouchEvents() stub to WebChromeClient.h for a successful build with ENABLE_TOUCH_EVENTS=ON
        https://bugs.webkit.org/show_bug.cgi?id=147141

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.h:

2015-07-21  Per Arne Vollan  <peavo@outlook.com>

        WinLauncher does not start on WinXP.
        https://bugs.webkit.org/show_bug.cgi?id=147147

        Reviewed by Alex Christensen.

        ANGLE requires Win7, accelerated compositing must be disabled on earlier Windows versions.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::acceleratedCompositingAvailable):

2015-07-19  David Kilzer  <ddkilzer@apple.com>

        REGRESSION (r187002): Broke the Windows build: Reduce PassRefPtr in WebKit2 - 3
        <https://bugs.webkit.org/show_bug.cgi?id=146995>

        Attempt to fix the Windows build.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createDocumentLoader):
        (WebFrameLoaderClient::createFrame):
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebDocumentLoader.cpp:
        (WebDocumentLoader::create):
        * WebDocumentLoader.h:

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

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

        Reviewed by Daniel Bates.

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

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

2015-07-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Gross workaround to fix build after r186858.

        * WebView.cpp:
        (WebView::unused5): Force export of WebCore symbol through
        WebKit.dll.

2015-07-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Maintain consistent COM Interfaces
        https://bugs.webkit.org/show_bug.cgi?id=146983
        <rdar://problem/21822278>

        Reviewed by Dean Jackson.

        Keep WebKit's COM interface compatible with software
        linked against earlier WebKit releases:
        1. Update IDL to present the same interface as earlier
           releases of WebKit.
        2. Add new interface objects (i.g., IWebFrame2) extending
           earlier interfaces when adding new methods.
        3. Update our internal software to use the correct interface
           objects.

        * DefaultPolicyDelegate.cpp:
        (DefaultPolicyDelegate::decidePolicyForNavigationAction):
        * Interfaces/IWebEditingDelegate.idl:
        * Interfaces/IWebFrame.idl:
        * Interfaces/IWebPreferencesPrivate.idl:
        * Interfaces/IWebSecurityOrigin.idl:
        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::shouldInsertNode):
        * WebFrame.cpp:
        (WebFrame::updateBackground):
        (WebFrame::isMainFrame):
        * WebFrame.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::QueryInterface):
        (WebPreferences::setMockScrollbarsEnabled):
        (WebPreferences::screenFontSubstitutionEnabled):
        (WebPreferences::setScreenFontSubstitutionEnabled):
        (WebPreferences::hyperlinkAuditingEnabled):
        (WebPreferences::unused4):
        (WebPreferences::shouldPaintNativeControls):
        (WebPreferences::setShouldPaintNativeControls):
        (WebPreferences::setDeveloperExtrasEnabled):
        (WebPreferences::authorAndUserStylesEnabled):
        (WebPreferences::inApplicationChromeMode):
        * WebPreferences.h:
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::QueryInterface):
        (WebSecurityOrigin::setQuota):
        (WebSecurityOrigin::initWithURL):
        * WebSecurityOrigin.h:
        * WebView.cpp:
        (WebView::QueryInterface):
        (WebView::notifyPreferencesChanged):
        (WebView::selectedRangeForTesting):
        (WebView::setLoadResourcesSerially):
        * WebView.h:

2015-07-09  Per Arne Vollan  <peavo@outlook.com>

        [Win] Add memory pressure handler.
        https://bugs.webkit.org/show_bug.cgi?id=146685

        Reviewed by Brent Fulgham.

        * WebView.cpp:
        (WebView::initWithFrame): Install memory pressure handler.

2015-07-08  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Apple Windows build after <https://trac.webkit.org/changeset/186566>
        (https://bugs.webkit.org/show_bug.cgi?id=146591)

        Update implementation of PluginView::create() to return a Ref<PluginView> object
        instead of a PassRefPtr<PluginView> object.

        * Plugins/PluginView.cpp:
        (WebCore::PluginView::create):

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

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

        Reviewed by Tim Horton.

        * WebDownloadCFNet.cpp:
        (WebDownload::didReceiveAuthenticationChallenge):

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

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

        Reviewed by Brady Eidson.

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

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

        Fix Mac and Windows builds.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::flushPendingLayerChanges):
        * WebView.cpp:
        (WebView::flushPendingGraphicsLayerChanges):

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

        [Win] webViewAddMessageToConsole always gets 1 for isError
        https://bugs.webkit.org/show_bug.cgi?id=146457
        <rdar://problem/21606395>

        Reviewed by Zalan Bujtas.

        * WebCoreSupport/WebChromeClient.cpp:
        (messageIsError): Added.
        (WebChromeClient::addMessageToConsole): Only pass true for
        isError if the message is an error message.

2015-06-30  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Compile error, WebEditorClient::didApplyStyle() should not have any parameters.
        https://bugs.webkit.org/show_bug.cgi?id=146450

        Reviewed by Csaba Osztrogonác.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::shouldApplyStyle):
        (WebEditorClient::didApplyStyle):
        * WebCoreSupport/WebEditorClient.h:

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

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

        Reviewed by Darin Adler.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::didApplyStyle): Added.
        * WebCoreSupport/WebEditorClient.h:

2015-06-26  Per Arne Vollan  <peavo@outlook.com>

        WinLauncher fails to download files.
        https://bugs.webkit.org/show_bug.cgi?id=146242

        Reviewed by Alex Christensen.

        Don't start download when there is no download delegate.

        * WebView.cpp:
        (WebView::downloadURL):

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

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

        Reviewed by Brent Fulgham.

        Make WebViewGroup class sharing on Mac and Win port.

        * WebCoreSupport/WebVisitedLinkStore.cpp:
        (visitedLinkStores):
        (WebVisitedLinkStore::create):
        (WebVisitedLinkStore::WebVisitedLinkStore):
        (WebVisitedLinkStore::~WebVisitedLinkStore):
        (WebVisitedLinkStore::setShouldTrackVisitedLinks):
        (WebVisitedLinkStore::removeAllVisitedLinks):
        (WebVisitedLinkStore::singleton): Deleted.
        * WebCoreSupport/WebVisitedLinkStore.h:
        * WebView.cpp:
        (toURL):
        (localStorageDatabasePath):
        (WebView::WebView):
        (WebView::~WebView):
        (WebView::shouldInitializeTrackPointHack):
        (WebView::initWithFrame):
        (WebView::setGroupName):
        (WebView::addVisitedLinks):
        * WebView.h:

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

        [Win] Need implementation of layoutTestController.setBackingScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=87919
        <rdar://problem/11563242>

        Reviewed by Dean Jackson.

        Connect the test infrastructure for High DPI tests to Windows. This
        involved adding a new accessor to the IWebViewPrivate interface, and
        providing a rudimentary implemenation of DPI support on Windows.

        * Interfaces/IWebViewPrivate.idl: Add new API to set/get scaling
        factor.
        * WebView.cpp:
        (WebView::initWithFrame): Initialize the device scale factor.
        (WebView::setHostWindow): Ditto.
        (WebView::windowAncestryDidChange): Ditto.
        (WebView::deviceScaleFactor): Added. Check current window for scaling
        factor. If no windows exist, check main screen.
        (WebView::setCustomBackingScaleFactor): Added.
        (WebView::backingScaleFactor): Added.
        * WebView.h:

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

        Move PluginMainThreadScheduler to WebKit/win
        https://bugs.webkit.org/show_bug.cgi?id=146289

        Reviewed by Tim Horton.

        * Plugins/PluginMainThreadScheduler.cpp: Renamed from Source/WebCore/plugins/PluginMainThreadScheduler.cpp.
        (WebCore::PluginMainThreadScheduler::scheduler):
        (WebCore::PluginMainThreadScheduler::PluginMainThreadScheduler):
        (WebCore::PluginMainThreadScheduler::scheduleCall):
        (WebCore::PluginMainThreadScheduler::registerPlugin):
        (WebCore::PluginMainThreadScheduler::unregisterPlugin):
        (WebCore::PluginMainThreadScheduler::dispatchCallsForPlugin):
        (WebCore::PluginMainThreadScheduler::dispatchCalls):
        (WebCore::PluginMainThreadScheduler::mainThreadCallback):
        * Plugins/PluginMainThreadScheduler.h: Renamed from Source/WebCore/plugins/PluginMainThreadScheduler.h.
        (WebCore::PluginMainThreadScheduler::Call::Call):
        (WebCore::PluginMainThreadScheduler::Call::performCall):
        * Plugins/PluginView.cpp:

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

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

        Reviewed by Beth Dakin.

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

2015-06-23  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] WebDownload::initWithRequest is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=146203

        Reviewed by Alex Christensen.

        Implement method to start download from a IWebURLRequest object.

        * WebDownloadCurl.cpp:
        (WebDownload::initWithRequest): Implemented.

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

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

        Reviewed by Antti Koivisto.

        * Interfaces/IWebUIDelegatePrivate.idl:
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::shouldInterruptJavaScript): Deleted.
        * WebCoreSupport/WebChromeClient.h:

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

        [Win]Implement layoutTestController.dispatchPendingLoadRequests.
        https://bugs.webkit.org/show_bug.cgi?id=26481

        Reviewed by Darin Adler.

        Implement WebView::dispatchPendingLoadRequests() private API for test runner.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::scaleWebView):
        (WebView::dispatchPendingLoadRequests):
        * WebView.h:

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

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

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

        Reverted changeset:

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

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

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

        Reviewed by Brent Fulgham.

        Make WebViewGroup class sharing on Mac and Win port.

        * WebCoreSupport/WebVisitedLinkStore.cpp:
        (visitedLinkStores):
        (WebVisitedLinkStore::create):
        (WebVisitedLinkStore::WebVisitedLinkStore):
        (WebVisitedLinkStore::~WebVisitedLinkStore):
        (WebVisitedLinkStore::setShouldTrackVisitedLinks):
        (WebVisitedLinkStore::removeAllVisitedLinks):
        (WebVisitedLinkStore::singleton): Deleted.
        * WebCoreSupport/WebVisitedLinkStore.h:
        * WebView.cpp:
        (WebView::~WebView):
        (WebView::initWithFrame):
        (WebView::setGroupName):
        (WebView::addVisitedLinks):
        * WebView.h:

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

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

        Reviewed by Darin Adler.

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

        * WebCoreSupport/WebFrameLoaderClient.h:

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

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

        Reviewed by Michael Saboff.

        * WebView.cpp:
        (WebView::reportException):
        - Don't assume we have an Exception object.  Let WebCore::reportException() take
          care of it.

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

        Implement dumpProgressFinishedCallback() for Win layoutTestController.
        https://bugs.webkit.org/show_bug.cgi?id=66773

        Reviewed by Darin Adler.

        * WebView.cpp:
        (WebView::setFrameLoadDelegatePrivate):

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

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

        Reviewed by Darin Adler.

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

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::garbageCollectJavaScriptObjects):
        (WebCoreStatistics::garbageCollectJavaScriptObjectsOnAlternateThreadForDebugging):
        (WebCoreStatistics::setJavaScriptGarbageCollectorTimerEnabled):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::collect):
        (WebJavaScriptCollector::collectOnAlternateThread):

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

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

        Reviewed by Geoffrey Garen.

        * WebView.cpp:
        (WebView::reportException):
        - Changed to use the new Exception object.

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

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

        Reviewed by Alex Christensen.

        * Plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::getURLNotify):
        (WebCore::PluginView::getURL):
        (WebCore::PluginView::handlePost):
        
        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):
        
        * WebFrame.cpp:
        (WebFrame::loadRequest):
        (WebFrame::loadData):

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

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

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

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.h:
        Stubbed new functions that aren't used on Windows.

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

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

        Reviewed by Eric Carlson.

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

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Use the new name.

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

        Unreviewed build fix for Windows.

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

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

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

        Reviewed by Alexey Proskuryakov.

        * WebFrame.cpp:
        (WebFrame::loadData):

2015-05-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] Move Windows build target to Windows 7 (or newer)
        https://bugs.webkit.org/show_bug.cgi?id=144890
        <rdar://problem/20707307>

        Reviewed by Anders Carlsson.

        Update linked SDK and minimal Windows level to be compatible with
        Windows 7 or newer.

        * WebKitPrefix.h:

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

        Unreviewed WinCairo buildfix after r183807.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::initialize):
        (AcceleratedCompositingContext::acceleratedCompositingAvailable):

2015-04-28  Ryuan Choi  <ryuan.choi@navercorp.com>

        [CoordinatedGraphics] Merge TILED_BACKING_STORE guard with COORDINATED_GRAPHICS
        https://bugs.webkit.org/show_bug.cgi?id=143001

        Reviewed by Gyuyoung Kim.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::delegatedScrollRequested):
        Deleted because WIN does not use Coordinated Graphics.

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

        Fix common typo "targetting" => "targeting"
        https://bugs.webkit.org/show_bug.cgi?id=144349

        Reviewed by Daniel Bates.

        * Interfaces/IWebPolicyDelegate.idl:

2015-04-28  Brady Eidson  <beidson@apple.com>

        Consolidate most "frame load" arguments into FrameLoadRequest.
        https://bugs.webkit.org/show_bug.cgi?id=144276

        Reviewed by Alexey Proskuryakov.

        * Plugins/PluginView.cpp:
        (WebCore::PluginView::start):
        (WebCore::PluginView::getURLNotify):
        (WebCore::PluginView::getURL):
        (WebCore::PluginView::handlePost):

2015-04-27  Brady Eidson  <beidson@apple.com>

        Unreviewed build fix after r183405

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read): Cast the enum class to a LONG.

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

        Try to fix the Windows build after r183234.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::FullscreenVideoController): FullscreenVideoController inherits privately from
        WebCore::MediaPlayerPrivateFullscreenClient, so make_unique isn't allowed to upcast. Add an explicit upcast.

2015-04-23  Darin Adler  <darin@apple.com>

        Another round of removing use of OwnPtr, PassOwnPtr, and deleteOwnedPtr
        https://bugs.webkit.org/show_bug.cgi?id=144090

        Reviewed by Anders Carlsson.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::FullscreenVideoController):
        (FullscreenVideoController::exitFullscreen):
        * FullscreenVideoController.h:
        * Plugins/PluginView.h:
        * Plugins/PluginViewWin.cpp:
        (WebCore::PluginView::wndProc):
        * WebCoreSupport/AcceleratedCompositingContext.h:
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::WebChromeClient):
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::WebFrameLoaderClient):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::highlight):
        * WebCoreSupport/WebInspectorClient.h:
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::WebElementPropertyBag):
        * WebElementPropertyBag.h:
        * WebFrame.h:
        * WebHistoryItem.cpp:
        * WebNodeHighlight.cpp:
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::WebNotificationCenter):
        * WebNotificationCenter.h:
        Use make_unique and unique_ptr instead of adoptPtr and OwnPtr.

2015-04-23  Andreas Kling  <akling@apple.com>

        There should only be one way to get the system memory size.
        <https://webkit.org/b/144081>

        Reviewed by Antti Koivisto.

        * WebView.cpp:
        (WebView::setCacheModel):

2015-04-13  Jer Noble  <jer.noble@apple.com>

        [Fullscreen] ChromeClient::exitVideoFullscreen() should take a pointer to a HTMLVideoElement.
        https://bugs.webkit.org/show_bug.cgi?id=143674

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::enterVideoFullscreenForVideoElement): Takes a reference.
        (WebChromeClient::exitVideoFullscreenForVideoElement): Renamed from exitVideoFullscreen().
        (WebChromeClient::exitVideoFullscreen): Deleted.
        * WebCoreSupport/WebChromeClient.h:
        * WebView.cpp:
        (WebView::enterVideoFullscreenForVideoElement): Takes a reference.
        (WebView::exitVideoFullscreenForVideoElement): Renamed from exitVideoFullscreen().
        (WebView::exitVideoFullscreen): Deleted.
        * WebView.h:

2015-04-13  Beth Dakin  <bdakin@apple.com>

        Add force property to MouseEvents
        https://bugs.webkit.org/show_bug.cgi?id=143569
        -and corresponding-
        rdar://problem/20472954

        Reviewed by Darin Adler.

        PlatformMouseEvent takes a force parameter.
        * WebDropSource.cpp:
        (generateMouseEvent):

2015-04-13  Per Arne Vollan  <peavo@outlook.com>

        [Win] Incorrect parameter order in call to WebView::repaint.
        https://bugs.webkit.org/show_bug.cgi?id=143666

        Reviewed by Brent Fulgham.

        The 'immediate' default parameter has been forgotten.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::invalidateRootView):
        (WebChromeClient::invalidateContentsAndRootView):
        (WebChromeClient::invalidateContentsForSlowScroll):

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

        [ES6] Enable Symbol in web pages
        https://bugs.webkit.org/show_bug.cgi?id=143375

        Reviewed by Ryosuke Niwa.

        * Interfaces/IWebPreferencesPrivate.idl:

2015-04-10  Per Arne Vollan  <peavo@outlook.com>

        [Win] Implement some methods in DOMHTMLDocument interface.
        https://bugs.webkit.org/show_bug.cgi?id=143602

        Reviewed by Alex Christensen.

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::open):
        (DOMHTMLDocument::close):
        (DOMHTMLDocument::write):
        (DOMHTMLDocument::writeln):

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

        [WK2][iOS] editorState() should not cause a synchronous layout
        https://bugs.webkit.org/show_bug.cgi?id=142536
        <rdar://problem/20041506>

        Reviewed by Enrica Casucci.

        Provide implementation for EditorClient::didChangeSelectionAndUpdateLayout().

        * WebCoreSupport/WebEditorClient.h:

2015-04-08  Brady Eidson  <beidson@apple.com>

        Expose the "Share" menu for links, images, and media.
        <rdar://problem/20435340> and https://bugs.webkit.org/show_bug.cgi?id=143502

        Reviewed by Tim Horton.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::shareMenuItem):
        * WebCoreSupport/WebContextMenuClient.h:

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

        Add a WebApplicationCache::storage() and use it instead of the WebCore singleton
        https://bugs.webkit.org/show_bug.cgi?id=143525

        Reviewed by Antti Koivisto.

        * WebApplicationCache.cpp:
        (WebApplicationCache::storage):
        (WebApplicationCache::maximumSize):
        (WebApplicationCache::setMaximumSize):
        (WebApplicationCache::defaultOriginQuota):
        (WebApplicationCache::setDefaultOriginQuota):
        (WebApplicationCache::diskUsageForOrigin):
        (WebApplicationCache::deleteAllApplicationCaches):
        (WebApplicationCache::deleteCacheForOrigin):
        (WebApplicationCache::originsWithCache):
        * WebApplicationCache.h:

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

        Fix Windows build.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::numWheelEventHandlersChanged): Deleted.

2015-03-25  Per Arne Vollan  <peavo@outlook.com>

        [WinCairo] Crash when plugin window is destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=142905

        Reviewed by Alex Christensen.

        When a plugin window is destroyed with the Win32 api function DestroyWindow,
        the system will send a synchronous WM_PARENTNOTIFY message to the WebView.
        The WebView window procedure will, when processing the WM_PARENTNOTIFY message,
        call UpdateWindow to paint synchronously. This will cause reentrancy problems,
        since we're already called from WebCore code, and then reenter WebCore painting code.
        We should avoid calling UpdateWindow when handling the WM_PARENTNOTIFY message.

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

2015-03-19  Chris Dumez  <cdumez@apple.com>

        Clean up DOMTimer related settings
        https://bugs.webkit.org/show_bug.cgi?id=142837

        Reviewed by Darin Adler.

        Stop setting the DOMTimers' default minimum interval to 4ms as this
        is now the default.

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

2015-03-16  Conrad Shultz  <conrad_shultz@apple.com>

        Allow clients to selectively disable plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=142506

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::getWebVisiblePluginInfo):
        Wrap getPluginInfo();

        * WebView.cpp:
        (WebView::canShowMIMEType):
        Update to reflect function rename.

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

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

        Caused use-after-free on many tests (Requested by ap on
        #webkit).

        Reverted changeset:

        "Allow clients to selectively disable plug-ins"
        https://bugs.webkit.org/show_bug.cgi?id=142506
        http://trac.webkit.org/changeset/181483

2015-03-10  Conrad Shultz  <conrad_shultz@apple.com>

        Allow clients to selectively disable plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=142506

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::getWebVisiblePluginInfo):
        Wrap getPluginInfo();

        * WebView.cpp:
        (WebView::canShowMIMEType):
        Update to reflect function rename.

2015-03-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] AX: Implement support for ARIA 1.1 'switch' role
        https://bugs.webkit.org/show_bug.cgi?id=142016
        <rdar://problem/19953264>

        Reviewed by Chris Fleizach.

        The changes in Bug 141986 did not update the proper Windows routines to
        support the new ARIA 1.1 role. This turned out to be trivial.

        * AccessibleBase.cpp:
        (MSAARole): Provide MSAA role for 'switch'. Also correct 'ToggleButtonRole',
        which was improperly reporting as 'push button'.

2015-03-04  Yusuke Suzuki  <utatane.tea@gmail.com>

        Hide Promise with runtime flags under Cocoa JSContext API
        https://bugs.webkit.org/show_bug.cgi?id=141965

        Reviewed by Filip Pizlo.

        Add new JSC runtime flag, PromiseDisabled.

        * Interfaces/IWebPreferences.idl:
        * Interfaces/IWebPreferencesPrivate.idl:

2015-03-03  Chris Dumez  <cdumez@apple.com>

        Access ApplicationCacheStorage global instance via singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=142239

        Reviewed by Anders Carlsson.

        Access ApplicationCacheStorage global instance via singleton() static
        member function as per WebKit coding style.

2015-03-01  Chris Dumez  <cdumez@apple.com>

        Make NotificationCenter / Notification suspendable
        https://bugs.webkit.org/show_bug.cgi?id=142117
        <rdar://problem/19923085>

        Reviewed by Andreas Kling.

        Provide implementation for NotificationClient::hasPendingPermissionRequests().

        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::requestPermission):
        (hasPendingPermissionRequests):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

2015-02-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove remaining SafariTheme cruft
        https://bugs.webkit.org/show_bug.cgi?id=142075

        Reviewed by Anders Carlsson.

        Remove reference to SafariTheme-switching preference.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::WebKitClassFactory):
        (WebKitClassFactory::QueryInterface):
        (WebKitClassFactory::AddRef):
        (WebKitClassFactory::Release):
        (WebKitClassFactory::CreateInstance):
        (WebKitClassFactory::LockServer):
        * WebPreferences.cpp:
        (WebPreferences::shouldPaintNativeControls): Deleted.
        (WebPreferences::setShouldPaintNativeControls): Deleted.
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::initWithFrame):
        (WebView::notifyPreferencesChanged):

2015-02-26  Chris Dumez  <cdumez@apple.com>

        Rename DatabaseManager::manager() to DatabaseManager::singleton()
        https://bugs.webkit.org/show_bug.cgi?id=142054

        Reviewed by Ryosuke Niwa.

        Rename DatabaseManager::manager() to DatabaseManager::singleton() as
        per coding style and use WTF::NeverDestroyed.

        * WebDatabaseManager.cpp:
        (WebDatabaseManager::sharedWebDatabaseManager):
        (WebDatabaseManager::origins):
        (WebDatabaseManager::databasesWithOrigin):
        (WebDatabaseManager::detailsForDatabase):
        (WebDatabaseManager::deleteAllDatabases):
        (WebDatabaseManager::deleteOrigin):
        (WebDatabaseManager::deleteDatabase):
        (WebDatabaseManager::setQuota):
        (WebKitInitializeWebDatabasesIfNecessary):
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::usage):
        (WebSecurityOrigin::quota):
        (WebSecurityOrigin::setQuota):
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2015-02-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Use WEBCORE_EXPORT instead of Definition file
        https://bugs.webkit.org/show_bug.cgi?id=141734

        Reviewed by Alex Christensen.

        * CFDictionaryPropertyBag.h: Add required export macros.
        * Interfaces/WebKit.idl: Ditto.
        * WebCoreStatistics.cpp: Add missing #include (required
        now that we are exporting more symbols.)
        * WebKitCOMAPI.h: Add required export macros.
        * WebKitDLL.h: Ditto.
        * WebKitPrefix.h: Ditto.
        * WebView.cpp: Add missing #include required using new
        due to new export mechanism.

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

        REGRESSION(r179429): Can't type comments in Facebook
        https://bugs.webkit.org/show_bug.cgi?id=141859

        Reviewed by Brent Fulgham.

        Added Windows support.

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

2015-02-18  Chris Dumez  <cdumez@apple.com>

        Access FontCache global instance via singleton() static member function
        https://bugs.webkit.org/show_bug.cgi?id=141726

        Reviewed by Daniel Bates.

        Access FontCache global instance via singleton() static member function,
        as per coding style.

2015-02-09  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove some unnecessary Inspector prefixes from class names in Inspector namespace
        https://bugs.webkit.org/show_bug.cgi?id=141372

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::destroyInspectorView):

2015-02-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] [64-bit] Work around MSVC2013 Runtime Bug
        https://bugs.webkit.org/show_bug.cgi?id=141498
        <rdar://problem/19803642>

        Reviewed by Anders Carlsson.

        Disable FMA3 instruction use in the MSVC math library to
        work around a VS2013 runtime crash. We can remove this
        workaround when we switch to VS2015.

        * WebKitDLL.cpp: Call _set_FMA3_enable(0) to disable FMA3 support.

2015-02-11  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Accelerated compositing should be disabled when graphics card does not support it.
        https://bugs.webkit.org/show_bug.cgi?id=140667

        Reviewed by Alex Christensen.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::scrollNonCompositedContents):
        (AcceleratedCompositingContext::acceleratedCompositingAvailable):
        * WebCoreSupport/AcceleratedCompositingContext.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2015-02-09  Brent Fulgham  <bfulgham@apple.com>

        AX: [Win] OBJID_CLIENT comparisons broken in 64-bit builds
        https://bugs.webkit.org/show_bug.cgi?id=141391
        <rdar://problem/19767342>

        Reviewed by Anders Carlsson.

        * WebView.cpp:
        (WebView::onGetObject): Cast lParam as LONG to ensure proper word size for
        comparison against OBJID_CLIENT.

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

        Add Vector::removeFirstMatching() / removeAllMatching() methods taking lambda functions
        https://bugs.webkit.org/show_bug.cgi?id=141321

        Reviewed by Darin Adler.

        Use new Vector::removeFirstMatching() / removeAllMatching() methods.

2015-02-02  Chris Dumez  <cdumez@apple.com>

        Access MemoryCache singleton using MemoryCache::singleton()
        https://bugs.webkit.org/show_bug.cgi?id=141104

        Reviewed by Andreas Kling.

        Access MemoryCache singleton using MemoryCache::singleton() static
        member function, instead of a free function, as per the recent
        coding style discussion on WebKit-dev.

2015-01-30  Chris Dumez  <cdumez@apple.com>

        Rename shared() static member functions to singleton() for singleton classes.
        https://bugs.webkit.org/show_bug.cgi?id=141088

        Reviewed by Ryosuke Niwa and Benjamin Poulain.

        Rename shared() static member functions to singleton() for singleton
        classes as per the recent coding style change.

2015-01-29  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r179368.

        * Interfaces/IWebPreferencesPrivate.idl:
        * WebPreferences.cpp:
        (WebPreferences::screenFontSubstitutionEnabled): Deleted.
        (WebPreferences::setScreenFontSubstitutionEnabled): Deleted.
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2015-01-29  Sam Weinig  <sam@webkit.org>

        Remove support for screen font substitution
        https://bugs.webkit.org/show_bug.cgi?id=141038

        Reviewed by Tim Horton.

        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::screenFontSubstitutionEnabled):
        (WebPreferences::setScreenFontSubstitutionEnabled):
        Remove implementations. Have this setting set on windows didn't have any effect before,
        so this doesn't change behavior.

2015-01-29  Chris Dumez  <cdumez@apple.com>

        Clean up / modernize PageCache class
        https://bugs.webkit.org/show_bug.cgi?id=141009

        Reviewed by Darin Adler.

        Clean up / modernize PageCache class.

        * WebView.cpp:
        (WebView::setCacheModel):

2015-01-28  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Message loop is flooded with timer messages when animating in accelerated compositing mode.
        https://bugs.webkit.org/show_bug.cgi?id=140985

        Reviewed by Brent Fulgham.

        The animation timer has zero timeout, which makes it hard for other messages to slip through.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::scheduleLayerFlush):

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Fix typo in markPagesForVistedLinkStyleRecalc()
        https://bugs.webkit.org/show_bug.cgi?id=140977

        Reviewed by Darin Adler.

        * WebCoreSupport/WebVisitedLinkStore.cpp:
        (WebVisitedLinkStore::removeAllVisitedLinks):
        (WebVisitedLinkStore::addVisitedLinkHash):

2015-01-28  Chris Dumez  <cdumez@apple.com>

        Rename pageCache() to PageCache::shared() and return a reference
        https://bugs.webkit.org/show_bug.cgi?id=140983

        Reviewed by Andreas Kling.

        Rename pageCache() to PageCache::shared() as this is a singleton class
        and have it return a reference instead of a pointer.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::cachedPageCount):
        (WebCoreStatistics::cachedFrameCount):
        * WebCoreSupport/WebVisitedLinkStore.cpp:
        (WebVisitedLinkStore::removeAllVisitedLinks):
        (WebVisitedLinkStore::addVisitedLinkHash):
        * WebView.cpp:
        (WebView::setCacheModel):

2015-01-27  Chris Dumez  <cdumez@apple.com>

        Use a Ref<CachedResourceLoader> in Document instead of a RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=140971

        Reviewed by Andreas Kling.

        Use more references instead of pointers.

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

2015-01-26  Brent Fulgham  <bfulgham@apple.com>

        [Win] ASSERTION FAILED !m_ptr under AccessibilityController::winAddNotificationListener
        https://bugs.webkit.org/show_bug.cgi?id=87426
        <rdar://problem/11527899>

        Reviewed by Darin Adler.

        Revise COMPtr to work better with our HashMap implementation. Use
        modern loop syntax.

        * WebHistory.cpp:
        (WebHistory::visitedURL): Adjust for new COMPtr changes.
        * WebPreferences.cpp:
        (WebPreferences::getInstanceForIdentifier): Ditto.
        (WebPreferences::removeReferenceForIdentifier): Ditto.
        * WebView.cpp:
        (WebView::setEditable): Ditto.

2015-01-26  Chris Dumez  <cdumez@apple.com>

        Rename Document::body() to Document::bodyOrFrameset() for clarity
        https://bugs.webkit.org/show_bug.cgi?id=140902

        Reviewed by Andreas Kling.

        Rename Document::body() to Document::bodyOrFrameset() for clarity. This
        method does not necessarily return an HTMLBodyElement, it can also
        return a frameset as per the specification:
        http://www.w3.org/TR/html5/dom.html#dom-tree-accessors

        This method is often misused internally (the caller is only interested
        in the <body> element). I will fix these instances in a follow-up patch,
        this patch is only renaming mechanically.

2015-01-25  peavo@outlook.com  <peavo@outlook.com>

        [Win] Add WebKit message loop interface.
        https://bugs.webkit.org/show_bug.cgi?id=140857

        Reviewed by Brent Fulgham.

        Added message loop interface which will run the message loop,
        and perform required tasks (like calling CFRunLoopRunInMode)
        on each iteration of the loop.

        * ForEachCoClass.h:
        * Interfaces/WebKit.idl:
        * Interfaces/WebKitMessageLoop.idl: Added.
        * WebKitClassFactory.cpp:
        * WebKitMessageLoop.cpp: Added.
        (WebKitMessageLoop::WebKitMessageLoop):
        (WebKitMessageLoop::~WebKitMessageLoop):
        (WebKitMessageLoop::createInstance):
        (WebKitMessageLoop::QueryInterface):
        (WebKitMessageLoop::AddRef):
        (WebKitMessageLoop::Release):
        (WebKitMessageLoop::run):
        (WebKitMessageLoop::performMessageLoopTasks):
        * WebKitMessageLoop.h: Added.

2015-01-23  Brent Fulgham  <bfulgham@apple.com>

        [Win] Teach WebKit to provide IAccessible2 'get_language'
        https://bugs.webkit.org/show_bug.cgi?id=140839

        Reviewed by Dean Jackson.

        * AccessibleBase.cpp:
        (AccessibleBase::get_locale): Wrap the Webore::AccessibleObject::language
        result in an IA2Locale structure to statisfy the IAccessible2 specification.

2015-01-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed test fix after r178965.

        * WebView.cpp: Supply missing implementation of 'setEditable'. It
        currently asserts, causing all debug tests to fail.

2015-01-22  peavo@outlook.com  <peavo@outlook.com>

        [Win] No plugin content on some sites.
        https://bugs.webkit.org/show_bug.cgi?id=140780

        Reviewed by Anders Carlsson.

        Add override modifier to bindingInstance method.

        * Plugins/PluginView.h:

2015-01-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Expose missing editing features through WebView interface
        https://bugs.webkit.org/show_bug.cgi?id=140773
        <rdar://problem/19565421>

        Reviewed by Dean Jackson.

        Connect the various WebView editing delegate methods to our
        test infrastructure. Also prefer _bstr_t to raw BSTR types
        to simplify life cycle management.

        * DOMCoreClasses.cpp: Flesh out the DOMRange object.
        (DOMElement::createInstance):
        (DOMRange::QueryInterface):
        (DOMRange::DOMRange):
        (DOMRange::~DOMRange):
        (DOMRange::createInstance):
        (DOMRange::startContainer):
        (DOMRange::startOffset):
        (DOMRange::endContainer):
        (DOMRange::endOffset):
        (DOMRange::collapsed):
        (DOMRange::commonAncestorContainer):
        (DOMRange::setStart):
        (DOMRange::setEnd):
        (DOMRange::setStartBefore):
        (DOMRange::setStartAfter):
        (DOMRange::setEndBefore):
        (DOMRange::setEndAfter):
        (DOMRange::collapse):
        (DOMRange::selectNode):
        (DOMRange::selectNodeContents):
        (DOMRange::compareBoundaryPoints):
        (DOMRange::deleteContents):
        (DOMRange::extractContents):
        (DOMRange::cloneContents):
        (DOMRange::insertNode):
        (DOMRange::surroundContents):
        (DOMRange::cloneRange):
        (DOMRange::toString):
        (DOMRange::detach):
        * DOMCoreClasses.h:
        (DOMRange::AddRef):
        (DOMRange::Release):
        (DOMRange::throwException):
        (DOMRange::callWebScriptMethod):
        (DOMRange::evaluateWebScript):
        (DOMRange::removeWebScriptKey):
        (DOMRange::stringRepresentation):
        (DOMRange::webScriptValueAtIndex):
        (DOMRange::setWebScriptValueAtIndex):
        (DOMRange::setException):
        * Interfaces/IWebEditingDelegate.idl:
        * Interfaces/IWebView.idl:
        * WebCoreSupport/WebEditorClient.cpp: Connect more methods
        to actual editing features in WebCore.
        (WebEditorClient::shouldBeginEditing):
        (WebEditorClient::shouldEndEditing):
        (WebEditorClient::didBeginEditing):
        (WebEditorClient::respondToChangedContents):
        (WebEditorClient::respondToChangedSelection):
        (WebEditorClient::didEndEditing):
        (WebEditorClient::shouldDeleteRange):
        (WebEditorClient::shouldInsertNode):
        (WebEditorClient::shouldInsertText):
        (WebEditorClient::shouldChangeSelectedRange):
        (WebEditorClient::webViewDidChangeTypingStyle):
        (WebEditorClient::webViewDidChangeSelection):
        (WebEditorClient::isSelectTrailingWhitespaceEnabled):
        * WebView.cpp:
        (WebView::setEditingDelegate): Added.

2015-01-21  Brent Fulgham  <bfulgham@apple.com>

        [Win] eventSender does not support scalePageBy
        https://bugs.webkit.org/show_bug.cgi?id=140726
        <rdar://problem/19549865>

        Reviewed by Dean Jackson.

        * Interfaces/IWebViewPrivate.idl: Add scaleWebView API.
        * WebView.cpp:
        (WebView::scaleWebView): 
        Connect WebCore implementation to the Windows COM interface.
        * WebView.h:

2015-01-21  Csaba Osztrogonác  <ossy@webkit.org>

        Remove ENABLE(INSPECTOR) ifdef guards
        https://bugs.webkit.org/show_bug.cgi?id=140668

        Reviewed by Darin Adler.

        * WebCoreSupport/WebInspectorClient.cpp:
        (registerWindowClass):
        * WebInspector.cpp:
        (WebInspector::setTimelineProfilingEnabled):
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::WebNodeHighlight):
        (WebNodeHighlight::update):
        * WebNodeHighlight.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::close):
        (WebView::initWithFrame):
        (WebView::inspector):
        * WebView.h:

2015-01-20  Csaba Osztrogonác  <ossy@webkit.org>

        Remove non-Windows cruft from WebKit/win/Plugins
        https://bugs.webkit.org/show_bug.cgi?id=140675

        Reviewed by Anders Carlsson.

        * Plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        (WebCore::PluginDatabase::getPluginPathsInDirectories):
        * Plugins/PluginDebug.cpp:
        (WebCore::prettyNameForNPNVariable):
        (WebCore::prettyNameForNPPVariable):
        (WebCore::prettyNameForDrawingModel): Deleted.
        (WebCore::prettyNameForEventModel): Deleted.
        * Plugins/PluginDebug.h:
        * Plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::compareFileVersion):
        (WebCore::PluginPackage::determineQuirks): Deleted.
        (WebCore::PluginPackage::determineModuleVersionFromDescription): Deleted.
        (WebCore::PluginPackage::hash): Deleted.
        (WebCore::PluginPackage::equal): Deleted.
        * Plugins/PluginView.cpp:
        (WebCore::PluginView::setFrameRect):
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::setValue):
        (WebCore::PluginView::PluginView):
        * Plugins/PluginView.h:
        (WebCore::PluginView::platformPluginWidget): Deleted.
        (WebCore::PluginView::setPlatformPluginWidget): Deleted.
        * Plugins/PluginViewWin.cpp:
        (windowHandleForPageClient):
        (WebCore::PluginView::hookedBeginPaint):
        (WebCore::PluginView::hookedEndPaint):
        (WebCore::hook):
        (WebCore::registerPluginView):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::snapshot):
        * Plugins/npapi.cpp:
        (NPN_InvalidateRect):

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

        [Win] Periodic failure in DumpRenderTree related to WebActionPropertyBag::Read
        https://bugs.webkit.org/show_bug.cgi?id=139906

        Reviewed by Dean Jackson.

        WebKit on Windows was creating uninitialized VARIANT structures, then attempting
        to use them. This patch fixes that.

        Identified by dom/html/level2/html/HTMLIFrameElement03.html (and others)

        * COMEnumVariant.h:
        (COMEnumVariant<ContainerType>::Next):
        * COMPropertyBag.h:
        (HashType>::Read):
        * DefaultPolicyDelegate.cpp:
        (DefaultPolicyDelegate::decidePolicyForNavigationAction):
        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read):
        * WebDatabaseManager.cpp:
        (DatabaseDetailsPropertyBag::Read):
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read):
        * WebFrame.cpp:
        (EnumChildFrames::Next):
        * WebView.cpp:
        (WebView::notifyDidAddIcon):

2015-01-15  Csaba Osztrogonác  <ossy@webkit.org>

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

        Reviewed by Darin Adler.

        * ForEachCoClass.h:
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::exceededDatabaseQuota):
        * WebCoreSupport/WebChromeClient.h:
        * WebDatabaseManager.cpp:
        (WebKitInitializeWebDatabasesIfNecessary):
        * WebDatabaseManager.h:
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::usage):
        (WebSecurityOrigin::quota):
        (WebSecurityOrigin::setQuota):
        * WebView.cpp:
        (WebView::initWithFrame):
        (WebView::notifyPreferencesChanged):

2015-01-15  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r178510

        Correct #include and declarations from Font->FontCascade

        * DOMCoreClasses.cpp:
        (DOMElement::font):
        * FullscreenVideoController.cpp:
        (FullscreenVideoController::draw):
        * WebKitGraphics.cpp:
        * WebPreferences.cpp:

2015-01-14  Chris Dumez  <cdumez@apple.com>

        Make 'TypeName' parameter unnecessary in CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=140347

        Reviewed by Darin Adler.

        Call FontDescription::setIsItalic() instead of setItalic() as the
        call site passes a boolean.

        * WebKitGraphics.cpp:
        (makeFont):

2015-01-11  Sam Weinig  <sam@webkit.org>

        Remove support for SharedWorkers
        https://bugs.webkit.org/show_bug.cgi?id=140344

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createSharedWorkerStrategy): Deleted.
        * WebCoreSupport/WebPlatformStrategies.h:

2015-01-10  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Accelerated compositing has stopped working.
        https://bugs.webkit.org/show_bug.cgi?id=140334

        Reviewed by Brent Fulgham.

        The method GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly()
        is not updating the backingstore anymore, we need to call the new method
        GraphicsLayerTextureMapper::updateBackingStoreIncludingSubLayers().

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::flushPendingLayerChanges):
        (AcceleratedCompositingContext::flushAndRenderLayers):

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

        Get rid of the database strategy
        https://bugs.webkit.org/show_bug.cgi?id=140322

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createDatabaseStrategy): Deleted.
        * WebCoreSupport/WebPlatformStrategies.h:

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

        Move the Windows only plug-in code to WebKit/win
        https://bugs.webkit.org/show_bug.cgi?id=140133

        Reviewed by Darin Adler.

        * Plugins/PaintHooks.asm: Renamed from Source/WebCore/plugins/win/PaintHooks.asm.
        * Plugins/PluginDatabase.cpp: Renamed from Source/WebCore/plugins/PluginDatabase.cpp.
        (WebCore::persistentPluginMetadataCachePath):
        (WebCore::PluginDatabase::PluginDatabase):
        (WebCore::PluginDatabase::installedPlugins):
        (WebCore::PluginDatabase::isMIMETypeRegistered):
        (WebCore::PluginDatabase::addExtraPluginDirectory):
        (WebCore::PluginDatabase::refresh):
        (WebCore::PluginDatabase::plugins):
        (WebCore::PluginDatabase::preferredPluginCompare):
        (WebCore::PluginDatabase::pluginForMIMEType):
        (WebCore::PluginDatabase::MIMETypeForExtension):
        (WebCore::PluginDatabase::findPlugin):
        (WebCore::PluginDatabase::setPreferredPluginForMIMEType):
        (WebCore::PluginDatabase::fileExistsAndIsNotDisabled):
        (WebCore::PluginDatabase::getDeletedPlugins):
        (WebCore::PluginDatabase::add):
        (WebCore::PluginDatabase::remove):
        (WebCore::PluginDatabase::clear):
        (WebCore::PluginDatabase::removeDisabledPluginFile):
        (WebCore::PluginDatabase::addDisabledPluginFile):
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        (WebCore::PluginDatabase::getPluginPathsInDirectories):
        (WebCore::fillBufferWithContentsOfFile):
        (WebCore::readUTF8String):
        (WebCore::readTime):
        (WebCore::PluginDatabase::loadPersistentMetadataCache):
        (WebCore::writeUTF8String):
        (WebCore::writeTime):
        (WebCore::PluginDatabase::updatePersistentMetadataCache):
        (WebCore::PluginDatabase::isPersistentMetadataCacheEnabled):
        (WebCore::PluginDatabase::setPersistentMetadataCacheEnabled):
        (WebCore::PluginDatabase::persistentMetadataCachePath):
        (WebCore::PluginDatabase::setPersistentMetadataCachePath):
        * Plugins/PluginDatabase.h: Renamed from Source/WebCore/plugins/PluginDatabase.h.
        (WebCore::PluginDatabase::setPluginDirectories):
        (WebCore::PluginDatabase::pluginDirectories):
        * Plugins/PluginDatabaseWin.cpp: Renamed from Source/WebCore/plugins/win/PluginDatabaseWin.cpp.
        (WebCore::addPluginPathsFromRegistry):
        (WebCore::PluginDatabase::getPluginPathsInDirectories):
        (WebCore::parseVersionString):
        (WebCore::compareVersions):
        (WebCore::addMozillaPluginDirectories):
        (WebCore::addWindowsMediaPlayerPluginDirectory):
        (WebCore::addAdobeAcrobatPluginDirectory):
        (WebCore::addJavaPluginDirectory):
        (WebCore::safariPluginsDirectory):
        (WebCore::addMacromediaPluginDirectories):
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        * Plugins/PluginDebug.cpp: Renamed from Source/WebCore/plugins/PluginDebug.cpp.
        (WebCore::prettyNameForNPError):
        (WebCore::prettyNameForDrawingModel):
        (WebCore::prettyNameForEventModel):
        (WebCore::prettyNameForNPNVariable):
        (WebCore::prettyNameForNPPVariable):
        (WebCore::prettyNameForNPNURLVariable):
        * Plugins/PluginDebug.h: Renamed from Source/WebCore/plugins/PluginDebug.h.
        * Plugins/PluginMessageThrottlerWin.cpp: Renamed from Source/WebCore/plugins/win/PluginMessageThrottlerWin.cpp.
        (WebCore::PluginMessageThrottlerWin::PluginMessageThrottlerWin):
        (WebCore::PluginMessageThrottlerWin::~PluginMessageThrottlerWin):
        (WebCore::PluginMessageThrottlerWin::appendMessage):
        (WebCore::PluginMessageThrottlerWin::processQueuedMessage):
        (WebCore::PluginMessageThrottlerWin::messageThrottleTimerFired):
        (WebCore::PluginMessageThrottlerWin::allocateMessage):
        (WebCore::PluginMessageThrottlerWin::isInlineMessage):
        (WebCore::PluginMessageThrottlerWin::freeMessage):
        * Plugins/PluginMessageThrottlerWin.h: Renamed from Source/WebCore/plugins/win/PluginMessageThrottlerWin.h.
        * Plugins/PluginPackage.cpp: Renamed from Source/WebCore/plugins/PluginPackage.cpp.
        (WebCore::PluginPackage::~PluginPackage):
        (WebCore::PluginPackage::freeLibrarySoon):
        (WebCore::PluginPackage::freeLibraryTimerFired):
        (WebCore::PluginPackage::compare):
        (WebCore::PluginPackage::PluginPackage):
        (WebCore::PluginPackage::unload):
        (WebCore::PluginPackage::unloadWithoutShutdown):
        (WebCore::PluginPackage::setEnabled):
        (WebCore::PluginPackage::createPackage):
        (WebCore::PluginPackage::createPackageFromCache):
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::PluginPackage::determineModuleVersionFromDescription):
        (WebCore::getListFromVariantArgs):
        (WebCore::makeSource):
        (WebCore::NPN_Evaluate):
        (WebCore::NPN_Invoke):
        (WebCore::PluginPackage::initializeBrowserFuncs):
        (WebCore::PluginPackage::hash):
        (WebCore::PluginPackage::equal):
        (WebCore::PluginPackage::compareFileVersion):
        (WebCore::PluginPackage::ensurePluginLoaded):
        * Plugins/PluginPackage.h: Renamed from Source/WebCore/plugins/PluginPackage.h.
        (WebCore::PluginPackage::name):
        (WebCore::PluginPackage::description):
        (WebCore::PluginPackage::path):
        (WebCore::PluginPackage::fileName):
        (WebCore::PluginPackage::parentDirectory):
        (WebCore::PluginPackage::module):
        (WebCore::PluginPackage::lastModified):
        (WebCore::PluginPackage::mimeToDescriptions):
        (WebCore::PluginPackage::mimeToExtensions):
        (WebCore::PluginPackage::isEnabled):
        (WebCore::PluginPackage::pluginFuncs):
        (WebCore::PluginPackage::quirks):
        (WebCore::PluginPackage::version):
        (WebCore::PluginPackage::fullMIMEDescription):
        (WebCore::PluginPackageHash::hash):
        (WebCore::PluginPackageHash::equal):
        * Plugins/PluginPackageWin.cpp: Renamed from Source/WebCore/plugins/win/PluginPackageWin.cpp.
        (WebCore::getVersionInfo):
        (WebCore::PluginPackage::isPluginBlacklisted):
        (WebCore::PluginPackage::determineQuirks):
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):
        (WebCore::PluginPackage::hash):
        (WebCore::PluginPackage::equal):
        (WebCore::PluginPackage::NPVersion):
        * Plugins/PluginQuirkSet.h: Renamed from Source/WebCore/plugins/PluginQuirkSet.h.
        (WebCore::PluginQuirkSet::PluginQuirkSet):
        (WebCore::PluginQuirkSet::add):
        (WebCore::PluginQuirkSet::contains):
        * Plugins/PluginStream.cpp: Renamed from Source/WebCore/plugins/PluginStream.cpp.
        (WebCore::streams):
        (WebCore::PluginStream::PluginStream):
        (WebCore::PluginStream::~PluginStream):
        (WebCore::PluginStream::start):
        (WebCore::PluginStream::stop):
        (WebCore::lastModifiedDate):
        (WebCore::PluginStream::startStream):
        (WebCore::PluginStream::ownerForStream):
        (WebCore::PluginStream::cancelAndDestroyStream):
        (WebCore::PluginStream::destroyStream):
        (WebCore::PluginStream::delayDeliveryTimerFired):
        (WebCore::PluginStream::deliverData):
        (WebCore::PluginStream::sendJavaScriptStream):
        (WebCore::PluginStream::didReceiveResponse):
        (WebCore::PluginStream::didReceiveData):
        (WebCore::PluginStream::didFail):
        (WebCore::PluginStream::didFinishLoading):
        (WebCore::PluginStream::wantsAllStreams):
        * Plugins/PluginStream.h: Renamed from Source/WebCore/plugins/PluginStream.h.
        (WebCore::PluginStreamClient::~PluginStreamClient):
        (WebCore::PluginStreamClient::streamDidFinishLoading):
        (WebCore::PluginStream::create):
        (WebCore::PluginStream::setLoadManually):
        * Plugins/PluginView.cpp: Renamed from Source/WebCore/plugins/PluginView.cpp.
        (WebCore::instanceMap):
        (WebCore::scriptStringIfJavaScriptURL):
        (WebCore::PluginView::popPopupsStateTimerFired):
        (WebCore::PluginView::windowClipRect):
        (WebCore::PluginView::setFrameRect):
        (WebCore::PluginView::frameRectsChanged):
        (WebCore::PluginView::clipRectChanged):
        (WebCore::PluginView::handleEvent):
        (WebCore::PluginView::init):
        (WebCore::PluginView::startOrAddToUnstartedList):
        (WebCore::PluginView::start):
        (WebCore::PluginView::mediaCanStart):
        (WebCore::PluginView::~PluginView):
        (WebCore::PluginView::stop):
        (WebCore::PluginView::setCurrentPluginView):
        (WebCore::PluginView::currentPluginView):
        (WebCore::createUTF8String):
        (WebCore::PluginView::performRequest):
        (WebCore::PluginView::requestTimerFired):
        (WebCore::PluginView::scheduleRequest):
        (WebCore::PluginView::load):
        (WebCore::makeURL):
        (WebCore::PluginView::getURLNotify):
        (WebCore::PluginView::getURL):
        (WebCore::PluginView::postURLNotify):
        (WebCore::PluginView::postURL):
        (WebCore::PluginView::newStream):
        (WebCore::PluginView::write):
        (WebCore::PluginView::destroyStream):
        (WebCore::PluginView::status):
        (WebCore::PluginView::setValue):
        (WebCore::PluginView::invalidateTimerFired):
        (WebCore::PluginView::pushPopupsEnabledState):
        (WebCore::PluginView::popPopupsEnabledState):
        (WebCore::PluginView::arePopupsAllowed):
        (WebCore::PluginView::setJavaScriptPaused):
        (WebCore::PluginView::npObject):
        (WebCore::PluginView::bindingInstance):
        (WebCore::PluginView::disconnectStream):
        (WebCore::PluginView::setParameters):
        (WebCore::PluginView::PluginView):
        (WebCore::PluginView::focusPluginElement):
        (WebCore::PluginView::didReceiveResponse):
        (WebCore::PluginView::didReceiveData):
        (WebCore::PluginView::didFinishLoading):
        (WebCore::PluginView::didFail):
        (WebCore::PluginView::setCallingPlugin):
        (WebCore::PluginView::isCallingPlugin):
        (WebCore::PluginView::create):
        (WebCore::PluginView::freeStringArray):
        (WebCore::startsWithBlankLine):
        (WebCore::locationAfterFirstBlankLine):
        (WebCore::findEOL):
        (WebCore::capitalizeRFC822HeaderFieldName):
        (WebCore::parseRFC822HeaderFields):
        (WebCore::PluginView::handlePost):
        (WebCore::PluginView::invalidateWindowlessPluginRect):
        (WebCore::PluginView::paintMissingPluginIcon):
        (WebCore::PluginView::userAgent):
        (WebCore::PluginView::userAgentStatic):
        (WebCore::PluginView::lifeSupportTimerFired):
        (WebCore::PluginView::keepAlive):
        (WebCore::PluginView::getValueStatic):
        (WebCore::PluginView::getValue):
        (WebCore::getFrame):
        (WebCore::PluginView::getValueForURL):
        (WebCore::PluginView::setValueForURL):
        (WebCore::PluginView::getAuthenticationInfo):
        (WebCore::PluginView::privateBrowsingStateChanged):
        * Plugins/PluginView.h: Renamed from Source/WebCore/plugins/PluginView.h.
        (WebCore::PluginRequest::PluginRequest):
        (WebCore::PluginRequest::frameLoadRequest):
        (WebCore::PluginRequest::notifyData):
        (WebCore::PluginRequest::sendNotification):
        (WebCore::PluginRequest::shouldAllowPopups):
        (WebCore::PluginManualLoader::~PluginManualLoader):
        (WebCore::PluginView::plugin):
        (WebCore::PluginView::instance):
        (WebCore::PluginView::status):
        (WebCore::PluginView::streamDidFinishLoading):
        (WebCore::PluginView::parentFrame):
        (WebCore::PluginView::pluginsPage):
        (WebCore::PluginView::mimeType):
        (WebCore::PluginView::url):
        (WebCore::PluginView::pluginWndProc):
        (WebCore::PluginView::platformPluginWidget):
        (WebCore::PluginView::setPlatformPluginWidget):
        (WebCore::toPluginView):
        * Plugins/PluginViewWin.cpp: Renamed from Source/WebCore/plugins/win/PluginViewWin.cpp.
        (windowHandleForPageClient):
        (WebCore::PluginView::hookedBeginPaint):
        (WebCore::PluginView::hookedEndPaint):
        (WebCore::hook):
        (WebCore::setUpOffscreenPaintingHooks):
        (WebCore::registerPluginView):
        (WebCore::PluginView::PluginViewWndProc):
        (WebCore::isWindowsMessageUserGesture):
        (WebCore::contentsToNativeWindow):
        (WebCore::PluginView::wndProc):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::show):
        (WebCore::PluginView::hide):
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::paintIntoTransformedContext):
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::handleKeyboardEvent):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setParentVisible):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::handlePostReadFile):
        (WebCore::PluginView::platformGetValueStatic):
        (WebCore::PluginView::platformGetValue):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::forceRedraw):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):
        (WebCore::PluginView::snapshot):
        * Plugins/npapi.cpp: Renamed from Source/WebCore/plugins/npapi.cpp.
        (pluginViewForInstance):
        (NPN_MemAlloc):
        (NPN_MemFree):
        (NPN_MemFlush):
        (NPN_ReloadPlugins):
        (NPN_RequestRead):
        (NPN_GetURLNotify):
        (NPN_GetURL):
        (NPN_PostURLNotify):
        (NPN_PostURL):
        (NPN_NewStream):
        (NPN_Write):
        (NPN_DestroyStream):
        (NPN_UserAgent):
        (NPN_Status):
        (NPN_InvalidateRect):
        (NPN_InvalidateRegion):
        (NPN_ForceRedraw):
        (NPN_GetValue):
        (NPN_SetValue):
        (NPN_GetJavaEnv):
        (NPN_GetJavaPeer):
        (NPN_PushPopupsEnabledState):
        (NPN_PopPopupsEnabledState):
        (NPN_PluginThreadAsyncCall):
        (NPN_GetValueForURL):
        (NPN_SetValueForURL):
        (NPN_GetAuthenticationInfo):
        (NPN_PopUpContextMenu):

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

        Text not drawn or white-on-white for "Close Page"/"Go Back" button on safe browsing warning page
        https://bugs.webkit.org/show_bug.cgi?id=140232
        <rdar://problem/19371010>

        Reviewed by Anders Carlsson.

        Remove the applicationChromeMode setting, but leave stubs in to make
        sure existing binaries don't break.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::inApplicationChromeMode):
        (WebPreferences::setApplicationChromeMode):
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2015-01-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] WindowCloseTimer is an ActiveDOMObject and must call suspendIfNeeded
        https://bugs.webkit.org/show_bug.cgi?id=140184
        <rdar://problem/19399740>

        Reviewed by Jer Noble.

        This bug was found in fast/loader/stateobjects/popstate-fires-with-page-cache.html

        * WebView.cpp:
        (WindowCloseTimer::create): Modify to ensure a call to suspendIfNeeded is made
        during the creation process.

2015-01-07  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] m_layer member in GraphicsLayerTextureMapper is always non-null
        https://bugs.webkit.org/show_bug.cgi?id=140135

        Reviewed by Darin Adler.

        GraphicsLayerTextureMapper::layer() now returns a reference,
        so the call sites are updated.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::initialize):
        (AcceleratedCompositingContext::startedAnimation):
        (AcceleratedCompositingContext::compositeLayersToContext):

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

        Add a WebKit1 database provider
        https://bugs.webkit.org/show_bug.cgi?id=140126

        Reviewed by Sam Weinig.

        Set the database provider.

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

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

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

        Caused lots of crashes (Requested by smfr on #webkit).

        Reverted changeset:

        "Add a WebKit1 database provider"
        https://bugs.webkit.org/show_bug.cgi?id=140126
        http://trac.webkit.org/changeset/177963

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

        Add a WebKit1 database provider
        https://bugs.webkit.org/show_bug.cgi?id=140126

        Reviewed by Sam Weinig.

        Set the database provider.

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

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Another attempt at fixing the build.

        * WebKitDLL.cpp:
        (shutDownWebKit):

2014-12-29  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        * WebKitDLL.cpp:
        (shutDownWebKit):

2014-12-19  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Crash after failing to create GL context in accelerated compositing mode.
        https://bugs.webkit.org/show_bug.cgi?id=139830

        Reviewed by Alex Christensen.

        There is missing a null pointer check.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::initialize):

2014-12-19  Brent Fulgham  <bfulgham@apple.com>

        [Win] Add accessor for serializing HTTP loads.
        https://bugs.webkit.org/show_bug.cgi?id=139817

        Reviewed by Mark Lam.

        * Interfaces/IWebViewPrivate.idl: Add new method.
        * WebView.cpp:
        (WebView::setLoadResourcesSerially): Provide implementation.
        * WebView.h:

2014-12-18  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error in code for creating GL context.
        https://bugs.webkit.org/show_bug.cgi?id=139782

        Reviewed by Alex Christensen.

        The GLContext::createContextForWindow method has changed return type to std::unique_ptr.

        * WebCoreSupport/AcceleratedCompositingContext.h:

2014-12-18  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update DumpRenderTree to more closely match Mac version
        https://bugs.webkit.org/show_bug.cgi?id=139799

        Reviewed by Tim Horton.

        * Interfaces/IWebSecurityOrigin.idl: Add initializer from URL.
        * Interfaces/WebKit.idl: Add CLSID so we can instantiate a
        WebSecurityOrigin from COM.
        * WebApplicationCache.h: Decorate class declaration with CLSID
        to support COM introspection.
        * WebSecurityOrigin.cpp: Get rid of meaningless STDMETHODCALLTYPE
        declarations inside implementation.
        (WebSecurityOrigin::QueryInterface):
        (WebSecurityOrigin::AddRef):
        (WebSecurityOrigin::Release):
        (WebSecurityOrigin::protocol):
        (WebSecurityOrigin::host):
        (WebSecurityOrigin::port):
        (WebSecurityOrigin::usage):
        (WebSecurityOrigin::quota):
        (WebSecurityOrigin::setQuota):
        (WebSecurityOrigin::initWithURL): Added.
        * WebSecurityOrigin.h:

2014-12-18  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct Windows tests after Bug 139149.
        https://bugs.webkit.org/show_bug.cgi?id=139781

        Reviewed by Anders Carlsson.

        * Interfaces/IWebApplicationCache.idl: Added.
        * Interfaces/WebKit.idl: Add new IDL file.
        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read): Remove old debugging message.
        * WebApplicationCache.cpp: Added.
        (WebApplicationCache::WebApplicationCache):
        (WebApplicationCache::~WebApplicationCache):
        (WebApplicationCache::createInstance):
        (WebApplicationCache::QueryInterface):
        (WebApplicationCache::AddRef):
        (WebApplicationCache::Release):
        (WebApplicationCache::maximumSize):
        (WebApplicationCache::setMaximumSize):
        (WebApplicationCache::defaultOriginQuota):
        (WebApplicationCache::setDefaultOriginQuota):
        (WebApplicationCache::diskUsageForOrigin):
        (WebApplicationCache::deleteAllApplicationCaches):
        (WebApplicationCache::deleteCacheForOrigin):
        (WebApplicationCache::originsWithCache):
        * WebApplicationCache.h: Added.
        * WebKitClassFactory.cpp: Add new interface header.

2014-12-17  Anders Carlsson  <andersca@apple.com>

        Get rid of FrameLoader::defaultObjectContentType
        https://bugs.webkit.org/show_bug.cgi?id=139758

        Reviewed by Geoffrey Garen.

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

2014-12-16  Andreas Kling  <akling@apple.com>

        Use Ref for SecurityOrigin.
        <https://webkit.org/b/139710>

        Reviewed by Anders Carlsson.

        * WebDatabaseManager.cpp:
        (WebDatabaseManager::setQuota):
        * WebView.cpp:
        (WebView::addOriginAccessWhitelistEntry):
        (WebView::removeOriginAccessWhitelistEntry):

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

        REGRESSION (Async Text Input): Text input method state is not reset when reloading a page
        https://bugs.webkit.org/show_bug.cgi?id=139504
        rdar://problem/19034674

        Reviewed by Enrica Casucci.

        Stub out new client calls, this patch doesn't attempt to make any changes on Windows.

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

2014-12-10  Anders Carlsson  <andersca@apple.com>

        Get rid of the storage strategy
        https://bugs.webkit.org/show_bug.cgi?id=139519

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createStorageStrategy): Deleted.
        * WebCoreSupport/WebPlatformStrategies.h:

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

        Use the new storage namespace provider in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=139425

        Reviewed by Tim Horton.

        * WebView.cpp:
        (localStorageDatabasePath):
        Helper from getting the local storage database path given a WebPreferences instance.

        (WebView::initWithFrame):
        Create a storage namespace provider.

2014-12-09  Commit Queue  <commit-queue@webkit.org>

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

        broke ~50 API tests (Requested by thorton on #webkit).

        Reverted changeset:

        "Use the new storage namespace provider in WebKit1"
        https://bugs.webkit.org/show_bug.cgi?id=139425
        http://trac.webkit.org/changeset/177037

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

        Use the new storage namespace provider in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=139425

        Reviewed by Tim Horton.

        * WebView.cpp:
        (localStorageDatabasePath):
        Helper from getting the local storage database path given a WebPreferences instance.

        (WebView::initWithFrame):
        Create a storage namespace provider.

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Get rid of config.h includes and include config.h in the prefix header instead
        https://bugs.webkit.org/show_bug.cgi?id=139323

        Reviewed by Brent Fulgham.

        This is making it easier to share code between WebKit1 for Mac and WebKit1 for Windows.

        * AccessibleBase.cpp:
        * AccessibleDocument.cpp:
        * AccessibleImage.cpp:
        * AccessibleTextImpl.cpp:
        * CFDictionaryPropertyBag.cpp:
        * DOMCSSClasses.cpp:
        * DOMCoreClasses.cpp:
        * DOMEventsClasses.cpp:
        * DOMHTMLClasses.cpp:
        * DefaultDownloadDelegate.cpp:
        * DefaultPolicyDelegate.cpp:
        * ForEachCoClass.cpp:
        * FullscreenVideoController.cpp:
        * MarshallingHelpers.cpp:
        * MemoryStream.cpp:
        * WebActionPropertyBag.cpp:
        * WebArchive.cpp:
        * WebBackForwardList.cpp:
        * WebCache.cpp:
        * WebCoreStatistics.cpp:
        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        * WebCoreSupport/EmbeddedWidget.cpp:
        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebContextMenuClient.cpp:
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        * WebCoreSupport/WebDragClient.cpp:
        * WebCoreSupport/WebEditorClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        * WebCoreSupport/WebGeolocationClient.cpp:
        * WebCoreSupport/WebInspectorClient.cpp:
        * WebCoreSupport/WebInspectorDelegate.cpp:
        * WebCoreSupport/WebPlatformStrategies.cpp:
        * WebCoreSupport/WebVisitedLinkStore.cpp:
        * WebDataSource.cpp:
        * WebDatabaseManager.cpp:
        * WebDocumentLoader.cpp:
        * WebDownload.cpp:
        * WebDownloadCFNet.cpp:
        * WebDownloadCurl.cpp:
        * WebDropSource.cpp:
        * WebElementPropertyBag.cpp:
        * WebError.cpp:
        * WebFrame.cpp:
        * WebFramePolicyListener.cpp:
        * WebGeolocationPolicyListener.cpp:
        * WebGeolocationPosition.cpp:
        * WebHTMLRepresentation.cpp:
        * WebHistory.cpp:
        * WebHistoryItem.cpp:
        * WebIconDatabase.cpp:
        * WebInspector.cpp:
        * WebJavaScriptCollector.cpp:
        * WebKitCOMAPI.cpp:
        * WebKitClassFactory.cpp:
        * WebKitDLL.cpp:
        * WebKitGraphics.cpp:
        * WebKitLogging.cpp:
        * WebKitPrefix.h:
        * WebKitStatistics.cpp:
        * WebKitSystemBits.cpp:
        * WebLocalizableStrings.cpp:
        * WebMutableURLRequest.cpp:
        * WebNavigationData.cpp:
        * WebNodeHighlight.cpp:
        * WebNotification.cpp:
        * WebNotificationCenter.cpp:
        * WebPreferences.cpp:
        * WebResource.cpp:
        * WebScriptObject.cpp:
        * WebScriptWorld.cpp:
        * WebSecurityOrigin.cpp:
        * WebSerializedJSValue.cpp:
        * WebTextRenderer.cpp:
        * WebURLAuthenticationChallenge.cpp:
        * WebURLAuthenticationChallengeSender.cpp:
        * WebURLAuthenticationChallengeSenderCFNet.cpp:
        * WebURLAuthenticationChallengeSenderCurl.cpp:
        * WebURLCredential.cpp:
        * WebURLProtectionSpace.cpp:
        * WebURLResponse.cpp:
        * WebUserContentURLPattern.cpp:
        * WebView.cpp:
        * WebWorkersPrivate.cpp:

2014-12-05  Anders Carlsson  <andersca@apple.com>

        Follow-up build fix.

        * WebCoreSupport/WebVisitedLinkStore.cpp:
        (WebVisitedLinkStore::shared):

2014-12-04  Anders Carlsson  <andersca@apple.com>

        Don't use NeverDestroyed with a RefCounted object.

        * WebCoreSupport/WebVisitedLinkStore.cpp:
        (WebVisitedLinkStore::shared):

2014-12-03  peavo@outlook.com  <peavo@outlook.com>

        [TexMap] Redundant method in GraphicsLayerTextureMapper.
        https://bugs.webkit.org/show_bug.cgi?id=138005

        Reviewed by Alex Christensen.

        The TextureMapperLayer method descendantsOrSelfHaveRunningAnimations() can be used
        instead of the GraphicsLayerTextureMapper method startedAnimation().

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::startedAnimation):

2014-12-02  Anders Carlsson  <andersca@apple.com>

        Remove more Windows cruft
        https://bugs.webkit.org/show_bug.cgi?id=139189

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createNetworkingContext):
        * WebCoreSupport/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext::create):
        (WebFrameNetworkingContext::WebFrameNetworkingContext):
        (WebFrameNetworkingContext::userAgent): Deleted.

2014-12-02  Anders Carlsson  <andersca@apple.com>

        Remove visited link handling from PageGroup
        https://bugs.webkit.org/show_bug.cgi?id=139185

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::populateVisitedLinks): Deleted.
        * WebCoreSupport/WebChromeClient.h:

2014-12-01  Anders Carlsson  <andersca@apple.com>

        Remove IWebCookieManager on Windows
        https://bugs.webkit.org/show_bug.cgi?id=139144

        Reviewed by Sam Weinig.

        Remove WebCookieManager.

        * ForEachCoClass.h:
        * Interfaces/IWebCookieManager.idl: Removed.
        * Interfaces/WebKit.idl:
        * WebCookieManager.cpp: Removed.
        * WebCookieManager.h: Removed.
        * WebCookieManagerCFNet.cpp: Removed.
        * WebCookieManagerCurl.cpp: Removed.
        * WebKitClassFactory.cpp:

2014-11-29  Anders Carlsson  <andersca@apple.com>

        Switch over to using WebVisitedLinkStore on Windows
        https://bugs.webkit.org/show_bug.cgi?id=139103

        Reviewed by Antti Koivisto.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::populateVisitedLinks):
        * WebHistory.cpp:
        (WebHistory::setOptionalSharedHistory):
        (WebHistory::removeAllItems):
        (WebHistory::setVisitedLinkTrackingEnabled):
        (WebHistory::removeAllVisitedLinks):
        (WebHistory::removeItemForURLString):
        (WebHistory::addVisitedLinksToVisitedLinkStore):
        (WebHistory::addVisitedLinksToPageGroup): Deleted.
        * WebHistory.h:
        * WebView.cpp:
        (WebView::initWithFrame):

2014-11-29  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        * WebHistory.cpp:
        (WebHistory::addVisitedLinksToVisitedLinkStore):

2014-11-29  Anders Carlsson  <andersca@apple.com>

        Another build fix.

        * WebHistory.cpp:
        (WebHistory::addVisitedLinksToVisitedLinkStore):
        (WebHistory::removeAllVisitedLinks): Deleted.
        (WebHistory::setHistoryItemLimit): Deleted.

2014-11-29  Anders Carlsson  <andersca@apple.com>

        Try to fix build.

        * WebHistory.h:

2014-11-29  Anders Carlsson  <andersca@apple.com>

        Stub out more of WebVisitedLinkStore on Windows
        https://bugs.webkit.org/show_bug.cgi?id=139098

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebVisitedLinkStore.cpp:
        (WebVisitedLinkStore::WebVisitedLinkStore):
        Initialize m_visitedLinksPopulated to false.

        (WebVisitedLinkStore::setShouldTrackVisitedLinks):
        Update s_shouldTrackVisitedLinks and remove all visited links if needed.

        (WebVisitedLinkStore::removeAllVisitedLinks):
        Remove all hashes from our shared link store.

        (WebVisitedLinkStore::addVisitedLink):
        Compute the visited link hash and add it to the store.

        (WebVisitedLinkStore::isLinkVisited):
        Populate visited links and then look up the hash in our hash map.

        (WebVisitedLinkStore::populateVisitedLinksIfNeeded):
        Call out to the history delegate or populate visited links from shared history.

        (WebVisitedLinkStore::addVisitedLinkHash):
        Add the hash if we're tracking hashes.

        (WebVisitedLinkStore::removeVisitedLinkHashes):
        Clear the map.

        * WebCoreSupport/WebVisitedLinkStore.h:
        Add members.

        * WebHistory.cpp:
        (WebHistory::addVisitedLinksToVisitedLinkStore):
        New function that adds visited links from the history to a given store.

        * WebHistory.h:
        Add new member.

        * WebView.cpp:
        (WebView::addVisitedLinks):
        Add links to the visited link store as well.

2014-11-27  Anders Carlsson  <andersca@apple.com>

        Add a stubbed out WebVisitedLinkStore class on Windows
        https://bugs.webkit.org/show_bug.cgi?id=139078

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebVisitedLinkStore.cpp: Added.
        (WebVisitedLinkStore::shared):
        (WebVisitedLinkStore::WebVisitedLinkStore):
        (WebVisitedLinkStore::~WebVisitedLinkStore):
        (WebVisitedLinkStore::isLinkVisited):
        (WebVisitedLinkStore::addVisitedLink):
        * WebCoreSupport/WebVisitedLinkStore.h: Added.

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

        Stub out user content WebView member functions on Windows
        https://bugs.webkit.org/show_bug.cgi?id=139033

        Reviewed by Sam Weinig.

        These functions aren't used by any clients and hinder getting rid of PageGroup.
        If it turns out they're still needed we can copy the user content controller code from Mac Legacy WebKit.

        * WebView.cpp:
        (WebView::addUserScriptToGroup):
        (WebView::addUserStyleSheetToGroup):
        (WebView::removeUserScriptFromGroup):
        (WebView::removeUserStyleSheetFromGroup):
        (WebView::removeUserScriptsFromGroup):
        (WebView::removeUserStyleSheetsFromGroup):
        (WebView::removeAllUserContentFromGroup):
        (toStringVector): Deleted.

2014-11-21  Jer Noble  <jer.noble@apple.com>

        Support multiple signatures of diagnostic logging.
        https://bugs.webkit.org/show_bug.cgi?id=138690

        Reviewed by Anders Carlsson.

        Page::PageClients has been renamed PageConfiguration.

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

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Another Windows build fix.

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

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Remove the Timer parameters from timer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=138974

        Reviewed by Antti Koivisto.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::timerFired):
        * FullscreenVideoController.h:

2014-11-21  Anders Carlsson  <andersca@apple.com>

        Make memoryCache() return a reference
        https://bugs.webkit.org/show_bug.cgi?id=138939

        Reviewed by Antti Koivisto.

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

2014-11-16  Zan Dobersek  <zdobersek@igalia.com>

        [TexMap] Add typecasting support for GraphicsLayerTextureMapper
        https://bugs.webkit.org/show_bug.cgi?id=138741

        Reviewed by Martin Robinson.

        Switch to using downcast<GraphicsLayerTextureMapper>() and replace
        uses of toTextureMapperLayer() with downcasting and calling
        the GraphicsLayerTextureMapper::layer() method.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::initialize):
        (AcceleratedCompositingContext::startedAnimation):
        (AcceleratedCompositingContext::compositeLayersToContext):

2014-11-12  Chris Dumez  <cdumez@apple.com>

        Have DOMTimer deal with more ScriptExecutionContext references
        https://bugs.webkit.org/show_bug.cgi?id=138679

        Reviewed by Andreas Kling.

        Update WindowCloseTimer to deal with ScriptExecutionContext references
        instead of pointers as it subclasses SuspendableTimer and its
        constructor takes a ScriptExecutionContext& in argument.

        * WebView.cpp:
        (WindowCloseTimer::create):
        (WindowCloseTimer::WindowCloseTimer):

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

        De-templatize Timer
        https://bugs.webkit.org/show_bug.cgi?id=138450

        Reviewed by Anders Carlsson.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::timerFired):
        * FullscreenVideoController.h:

2014-11-04  Darin Adler  <darin@apple.com>

        Eliminate ResourceBuffer and use SharedBuffer directly instead
        https://bugs.webkit.org/show_bug.cgi?id=138174

        Reviewed by Antti Koivisto.

        * WebDataSource.cpp:
        (WebDataSource::data): Use SharedBuffer directly.
        (WebDataSource::subresourceForURL): Ditto.

2014-11-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r175406, r175413, and r175423.
        https://bugs.webkit.org/show_bug.cgi?id=138327

        Multipart tests are still broken (Requested by ap on #webkit).

        Reverted changesets:

        "Eliminate ResourceBuffer and use SharedBuffer directly
        instead"
        https://bugs.webkit.org/show_bug.cgi?id=138174
        http://trac.webkit.org/changeset/175406

        "Unreviewed, iOS build fix since 175406."
        http://trac.webkit.org/changeset/175413

        "Fix assertion in CachedResource::addDataBuffer"
        http://trac.webkit.org/changeset/175423

2014-11-03  Sungmann Cho  <sungmann.cho@navercorp.com>

        AX: Fix some minor typos related to the word "accessibility".
        https://bugs.webkit.org/show_bug.cgi?id=138299

        Reviewed by Chris Fleizach.

        No new tests, no behavior change.

        * AccessibleBase.h:

2014-10-31  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr for TypeCountSet
        https://bugs.webkit.org/show_bug.cgi?id=138242

        Reviewed by Andreas Kling.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts): Use std::unique_ptr<> instead of OwnPtr.
        (WebCoreStatistics::javaScriptObjectTypeCounts): ditto.

2014-10-30  Darin Adler  <darin@apple.com>

        Eliminate ResourceBuffer and use SharedBuffer directly instead
        https://bugs.webkit.org/show_bug.cgi?id=138174

        Reviewed by Antti Koivisto.

        * WebDataSource.cpp:
        (WebDataSource::data): Use SharedBuffer directly.
        (WebDataSource::subresourceForURL): Ditto.

2014-10-20  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Crash in ATI display driver in accelerated compositing mode.
        https://bugs.webkit.org/show_bug.cgi?id=137879

        Reviewed by Darin Adler.

        Speculative fix; don't enable antialiasing when drawing textures.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::initialize):

2014-10-20  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Accessibility objects
        https://bugs.webkit.org/show_bug.cgi?id=137286

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for Accessibility objects.

        * AccessibleBase.cpp:
        (AccessibleBase::accSelect):
        * AccessibleImage.cpp:
        (AccessibleImage::name):

2014-10-18  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Repaint issues with accelerated compositing.
        https://bugs.webkit.org/show_bug.cgi?id=137850

        Reviewed by Brent Fulgham.

        There is sometimes missing content in accelerated compositing mode.
        This is caused by not invalidating the non composited layer,
        and not rendering when a flush did not complete.

        * WebCoreSupport/AcceleratedCompositingContext.cpp:
        (AcceleratedCompositingContext::flushAndRenderLayers): Also render when flush did not complete.
        (AcceleratedCompositingContext::setNeedsDisplayInRect): Deleted.
        * WebCoreSupport/AcceleratedCompositingContext.h: Ditto.
        * WebView.cpp:
        (WebView::addToDirtyRegion): Invalidate non composited layer.
        (WebView::flushPendingGraphicsLayerChanges): Flush layers.

2014-10-17  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=137804

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for RenderBox and clean up the surrounding
        code.

        * WebView.cpp:
        (WebView::gestureNotify):

2014-10-17  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Accelerated compositing is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=137345

        Reviewed by Brent Fulgham.

        This patch is based on GTK, and the texture mapper graphics layer type.

        * WebCoreSupport/AcceleratedCompositingContext.cpp: Added.
        (WebKit::AcceleratedCompositingContext::AcceleratedCompositingContext):
        (WebKit::getWebViewSize):
        (WebKit::AcceleratedCompositingContext::initialize):
        (WebKit::AcceleratedCompositingContext::~AcceleratedCompositingContext):
        (WebKit::AcceleratedCompositingContext::stopAnyPendingLayerFlush):
        (WebKit::AcceleratedCompositingContext::enabled):
        (WebKit::AcceleratedCompositingContext::prepareForRendering):
        (WebKit::AcceleratedCompositingContext::startedAnimation):
        (WebKit::AcceleratedCompositingContext::compositeLayersToContext):
        (WebKit::AcceleratedCompositingContext::setRootCompositingLayer):
        (WebKit::AcceleratedCompositingContext::setNonCompositedContentsNeedDisplay):
        (WebKit::AcceleratedCompositingContext::setNeedsDisplayInRect):
        (WebKit::AcceleratedCompositingContext::resizeRootLayer):
        (WebKit::AcceleratedCompositingContext::scrollNonCompositedContents):
        (WebKit::AcceleratedCompositingContext::scheduleLayerFlush):
        (WebKit::AcceleratedCompositingContext::flushPendingLayerChanges):
        (WebKit::AcceleratedCompositingContext::flushPendingLayerChangesSoon):
        (WebKit::AcceleratedCompositingContext::flushAndRenderLayers):
        (WebKit::AcceleratedCompositingContext::layerFlushTimerFired):
        (WebKit::AcceleratedCompositingContext::notifyAnimationStarted):
        (WebKit::AcceleratedCompositingContext::notifyFlushRequired):
        (WebKit::AcceleratedCompositingContext::paintContents):
        * WebCoreSupport/AcceleratedCompositingContext.h: Added.
        (WebKit::AcceleratedCompositingContext::LayerFlushTimer::LayerFlushTimer):
        (WebKit::AcceleratedCompositingContext::LayerFlushTimer::fired):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::addToDirtyRegion):
        (WebView::scrollBackingStore):
        (WebView::sizeChanged):
        (WebView::paint):
        (WebView::setRootChildLayer):
        (WebView::flushPendingGraphicsLayerChangesSoon):
        (WebView::setAcceleratedCompositing):
        * WebView.h:

2014-10-16  Commit Queue  <commit-queue@webkit.org>

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

        Speculative fix for Windows test was ineffective. (Requested
        by rfong on #webkit).

        Reverted changeset:

        "[Windows] Add some more logging to debug Windows test
        issues."
        http://trac.webkit.org/changeset/174754

2014-10-15  Roger Fong  <roger_fong@apple.com>

        [Windows] Add some more logging to debug Windows test issues.

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read):

2014-10-14  Roger Fong  <roger_fong@apple.com>

        [Windows] Add some logging to debug random crashing when running layout tests on Windows.

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read):

2014-10-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Implement a page load profiling tool
        https://bugs.webkit.org/show_bug.cgi?id=137673

        Reviewed by Dean Jackson.

        Add a new predicate (isMainFrame) to the IWebFrame interface so
        that we can make decisions about a frames position in the page
        load hierarchy in client programs.

        * Interfaces/IWebFrame.idl: Added new isMainFrame
        predicate to interface definition.
        * WebFrame.cpp:
        (WebFrame::isMainFrame): Added.
        * WebFrame.h:

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

        Use is<>() / downcast<>() for PlatformCALayer subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137661

        Reviewed by Simon Fraser.

        Use is<>() / downcast<>() for PlatformCALayer subclasses and clean up 
        the surrounding code.

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

2014-10-10  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for RenderElement
        https://bugs.webkit.org/show_bug.cgi?id=137622

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() for RenderElement and clean up the
        surrounding code.

        * WebFrame.cpp:
        (WebFrame::pauseAnimation):
        (WebFrame::pauseTransition):

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

        Use is<>() / downcast<>() for Widget subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137549

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for Widget subclasses and clean up the
        surrounding code.

        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::frameRectsChanged):

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

        [Win] Resolve various static analyzer warnings in WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=137531

        Reviewed by Dean Jackson.

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::safeArrayToIntArray): Handle possible failure of
        SafeArrayGetElement call.
        (MarshallingHelpers::safeArrayToIUnknownArray): Ditto.
        * MemoryStream.cpp:
        (MemoryStream::CopyTo): Zero-initialize 'written' to silence warning. 
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::exceededDatabaseQuota): Handle possible failure of
        GetModuleFileName.
        * WebHistory.cpp:
        (getDayBoundaries): Handle possible failure of TzSpecificLocalTimeToSystemTime
        * WebView.cpp:
        (WebView::shouldInitializeTrackPointHack): Zero initialize return value.
        (WebView::dispatchDidReceiveIconFromWebFrame): Avoid possible DeleteObject
        call on a null bitmap handle.
        (WebView::standardUserAgentWithApplicationName): Get rid of spurious
        pointer dereference.

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

        Move PageOverlay[Controller] to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=137164
        <rdar://problem/18508258>

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::attachViewOverlayGraphicsLayer):
        * WebCoreSupport/WebChromeClient.h:
        Add an empty ChromeClient override.

2014-10-01  Christophe Dumez  <cdumez@apple.com>

        Have is<>(T*) function do a null check on the pointer argument
        https://bugs.webkit.org/show_bug.cgi?id=137333

        Reviewed by Gavin Barraclough.

        Have is<>(T*) function do a null check on the argument instead of a
        simple assertion. This makes sense for 2 reasons:
        1. It is more consistent with downcast<>(T*), which will succeed even
           if the argument is a nullptr.
        2. It simplifies the code a bit as it gets rid of a lot of explicit
           null checks.

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):
        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::body):
        (DOMHTMLDocument::forms):
        (DOMHTMLElement::idName):
        (DOMHTMLElement::innerText):
        (DOMHTMLElement::setInnerText):
        (DOMHTMLFormElement::action):
        (DOMHTMLFormElement::method):
        (DOMHTMLOptionElement::text):
        (DOMHTMLOptionElement::label):
        (DOMHTMLInputElement::form):
        (DOMHTMLInputElement::disabled):
        (DOMHTMLInputElement::readOnly):
        (DOMHTMLInputElement::setType):
        (DOMHTMLInputElement::value):
        (DOMHTMLInputElement::setValue):
        (DOMHTMLInputElement::setValueForUser):
        (DOMHTMLInputElement::select):
        (DOMHTMLInputElement::setSelectionStart):
        (DOMHTMLInputElement::selectionStart):
        (DOMHTMLInputElement::setSelectionEnd):
        (DOMHTMLInputElement::selectionEnd):
        (DOMHTMLInputElement::isTextField):
        (DOMHTMLInputElement::rectOnScreen):
        (DOMHTMLInputElement::replaceCharactersInRange):
        (DOMHTMLInputElement::selectedRange):
        (DOMHTMLInputElement::setAutofilled):
        (DOMHTMLInputElement::isAutofilled):
        (DOMHTMLInputElement::isUserEdited):
        (DOMHTMLTextAreaElement::form):
        (DOMHTMLTextAreaElement::value):
        (DOMHTMLTextAreaElement::setValue):
        (DOMHTMLTextAreaElement::select):
        (DOMHTMLTextAreaElement::isUserEdited):
        * WebFrame.cpp:
        (formElementFromDOMElement):
        (inputElementFromDOMElement):
        (WebFrame::elementWithName):

2014-09-30  Christophe Dumez  <cdumez@apple.com>

        Generalize is<>() / downcast<>() support to all types
        https://bugs.webkit.org/show_bug.cgi?id=137243

        Reviewed by Benjamin Poulain.

        Generalize is<>() / downcast<>() support to all types, not just Nodes.

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):

2014-09-30  Chris Dumez  <cdumez@apple.com>

        Use is<>() / downcast<>() for Element
        https://bugs.webkit.org/show_bug.cgi?id=137241

        Reviewed by Andreas Kling.

        Use is<>() / downcast<>() for Element instead of isElementNode() /
        toElement().

        * DOMEventsClasses.cpp:
        (DOMMouseEvent::toElement):
        * DOMEventsClasses.h:

2014-09-29  Christophe Dumez  <cdumez@apple.com>

        Make is<>() / downcast<>() work for HTMLDocument and its subclasses
        https://bugs.webkit.org/show_bug.cgi?id=137169

        Reviewed by Darin Adler.

        Use is<>() / downcast<>() for HTMLDocument and its subclasses.

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::URL):
        (DOMHTMLDocument::body):
        (DOMHTMLDocument::forms):

2014-09-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use std::unique_ptr for ContextMenuController
        https://bugs.webkit.org/show_bug.cgi?id=137178

        Reviewed by Darin Adler.

        Switch to using std::unique_ptr instead of OwnPtr and PassOwnPtr
        for ContextMenuController class. Inherited class is changed by this use as well.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::customizeMenu):
        * WebCoreSupport/WebContextMenuClient.h:

2014-09-26  Christophe Dumez  <cdumez@apple.com>

        Stop using legacy NODE_TYPE_CASTS() macro for HTML Elements
        https://bugs.webkit.org/show_bug.cgi?id=137137

        Reviewed by Benjamin Poulain.

        Use is<>() / downcast<>() where appropriate.

        * DOMHTMLClasses.cpp:
        (DOMHTMLElement::idName):
        (DOMHTMLElement::innerText):
        (DOMHTMLElement::setInnerText):

2014-09-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Debug builds of TestWebKitAPI are crashing.
        https://bugs.webkit.org/show_bug.cgi?id=133553

        Reviewed by Dean Jackson.

        Switch from global static HashTable to a NeverDestroyed object.
        Modify all accessors of the global static to use the new
        NeverDestroyed accessor method.

        * AccessibleBase.cpp:
        (AccessibleBase::AccessibleBase):
        (AccessibleBase::~AccessibleBase):
        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::CFDictionaryPropertyBag):
        (CFDictionaryPropertyBag::~CFDictionaryPropertyBag):
        * DefaultDownloadDelegate.cpp:
        (DefaultDownloadDelegate::DefaultDownloadDelegate):
        (DefaultDownloadDelegate::~DefaultDownloadDelegate):
        * DefaultPolicyDelegate.cpp:
        (DefaultPolicyDelegate::DefaultPolicyDelegate):
        (DefaultPolicyDelegate::~DefaultPolicyDelegate):
        * MemoryStream.cpp:
        (MemoryStream::MemoryStream):
        (MemoryStream::~MemoryStream):
        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::WebActionPropertyBag):
        (WebActionPropertyBag::~WebActionPropertyBag):
        * WebArchive.cpp:
        (WebArchive::WebArchive):
        (WebArchive::~WebArchive):
        * WebBackForwardList.cpp:
        (WebBackForwardList::WebBackForwardList):
        (WebBackForwardList::~WebBackForwardList):
        * WebCache.cpp:
        (WebCache::WebCache):
        (WebCache::~WebCache):
        * WebCookieManager.cpp:
        (WebCookieManager::WebCookieManager):
        (WebCookieManager::~WebCookieManager):
        * WebCoreStatistics.cpp:
        (WebCoreStatistics::WebCoreStatistics):
        (WebCoreStatistics::~WebCoreStatistics):
        * WebDataSource.cpp:
        (WebDataSource::~WebDataSource):
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::WebDatabaseManager):
        (WebDatabaseManager::~WebDatabaseManager):
        * WebDocumentLoader.cpp:
        (WebDocumentLoader::WebDocumentLoader):
        (WebDocumentLoader::~WebDocumentLoader):
        * WebDownload.cpp:
        (WebDownload::WebDownload):
        (WebDownload::~WebDownload):
        * WebDropSource.cpp:
        (WebDropSource::WebDropSource):
        (WebDropSource::~WebDropSource):
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::WebElementPropertyBag):
        (WebElementPropertyBag::~WebElementPropertyBag):
        * WebError.cpp:
        (WebError::WebError):
        (WebError::~WebError):
        * WebFrame.cpp:
        (WebFrame::WebFrame):
        (WebFrame::~WebFrame):
        * WebFramePolicyListener.cpp:
        (WebFramePolicyListener::WebFramePolicyListener):
        (WebFramePolicyListener::~WebFramePolicyListener):
        * WebGeolocationPolicyListener.cpp:
        (WebGeolocationPolicyListener::WebGeolocationPolicyListener):
        (WebGeolocationPolicyListener::~WebGeolocationPolicyListener):
        * WebGeolocationPosition.cpp:
        (WebGeolocationPosition::WebGeolocationPosition):
        (WebGeolocationPosition::~WebGeolocationPosition):
        * WebHTMLRepresentation.cpp:
        (WebHTMLRepresentation::WebHTMLRepresentation):
        (WebHTMLRepresentation::~WebHTMLRepresentation):
        * WebHistory.cpp:
        (WebHistory::WebHistory):
        (WebHistory::~WebHistory):
        * WebHistoryItem.cpp:
        (WebHistoryItem::WebHistoryItem):
        (WebHistoryItem::~WebHistoryItem):
        * WebIconDatabase.cpp:
        (WebIconDatabase::WebIconDatabase):
        (WebIconDatabase::~WebIconDatabase):
        * WebInspector.cpp:
        (WebInspector::WebInspector):
        (WebInspector::~WebInspector):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::WebJavaScriptCollector):
        (WebJavaScriptCollector::~WebJavaScriptCollector):
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::WebKitClassFactory):
        (WebKitClassFactory::~WebKitClassFactory):
        * WebKitDLL.cpp: Also switch to NeverDestroyed HashTable for
        the global class name count.
        * WebKitDLL.h:
        * WebKitStatistics.cpp:
        (WebKitStatistics::WebKitStatistics):
        (WebKitStatistics::~WebKitStatistics):
        (WebKitStatistics::comClassNameCounts):
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::WebMutableURLRequest):
        (WebMutableURLRequest::~WebMutableURLRequest):
        * WebNavigationData.cpp:
        (WebNavigationData::WebNavigationData):
        (WebNavigationData::~WebNavigationData):
        * WebNotification.cpp:
        (WebNotification::WebNotification):
        (WebNotification::~WebNotification):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::WebNotificationCenter):
        (WebNotificationCenter::~WebNotificationCenter):
        * WebPreferences.cpp:
        (webPreferencesInstances):
        (WebPreferences::WebPreferences):
        (WebPreferences::~WebPreferences):
        (WebPreferences::getInstanceForIdentifier):
        (WebPreferences::setInstance):
        (WebPreferences::removeReferenceForIdentifier):
        * WebResource.cpp:
        (WebResource::WebResource):
        (WebResource::~WebResource):
        * WebScriptObject.cpp:
        (WebScriptObject::WebScriptObject):
        (WebScriptObject::~WebScriptObject):
        * WebScriptWorld.cpp:
        (WebScriptWorld::WebScriptWorld):
        (WebScriptWorld::~WebScriptWorld):
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::WebSecurityOrigin):
        (WebSecurityOrigin::~WebSecurityOrigin):
        * WebSerializedJSValue.cpp:
        (WebSerializedJSValue::WebSerializedJSValue):
        (WebSerializedJSValue::~WebSerializedJSValue):
        * WebTextRenderer.cpp:
        (WebTextRenderer::WebTextRenderer):
        (WebTextRenderer::~WebTextRenderer):
        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::WebURLAuthenticationChallenge):
        (WebURLAuthenticationChallenge::~WebURLAuthenticationChallenge):
        * WebURLAuthenticationChallengeSender.cpp:
        (WebURLAuthenticationChallengeSender::WebURLAuthenticationChallengeSender):
        (WebURLAuthenticationChallengeSender::~WebURLAuthenticationChallengeSender):
        * WebURLCredential.cpp:
        (WebURLCredential::WebURLCredential):
        (WebURLCredential::~WebURLCredential):
        * WebURLProtectionSpace.cpp:
        (WebURLProtectionSpace::WebURLProtectionSpace):
        (WebURLProtectionSpace::~WebURLProtectionSpace):
        * WebURLResponse.cpp:
        (:m_refCount):
        (WebURLResponse::~WebURLResponse):
        * WebUserContentURLPattern.cpp:
        (WebUserContentURLPattern::WebUserContentURLPattern):
        (WebUserContentURLPattern::~WebUserContentURLPattern):
        * WebView.cpp:
        (pendingDeleteBackingStoreSet): Switch from a global static
        value to a NeverDestroyed object wrapped by an accessor function.
        (WebView::WebView): Ditto.
        (WebView::~WebView): Ditto.
        (WebView::deleteBackingStore): Ditto.
        (WebView::deleteBackingStoreSoon): Ditto,
        (WebView::cancelDeleteBackingStoreSoon): Ditto.
        * WebWorkersPrivate.cpp: Switch from a global static value for
        the preferences objects t a NeverDestroyed container.
        (WebWorkersPrivate::WebWorkersPrivate): Ditto.
        (WebWorkersPrivate::~WebWorkersPrivate): Ditto.

2014-09-25  Christophe Dumez  <cdumez@apple.com>

        Use is<HTML*Element>() instead of isHTML*Element() - Part 2
        https://bugs.webkit.org/show_bug.cgi?id=137103

        Reviewed by Benjamin Poulain.

        Use is<HTML*Element>() instead of isHTML*Element().

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):
        * DOMHTMLClasses.cpp:
        (DOMHTMLFormElement::action):
        (DOMHTMLFormElement::method):
        * WebFrame.cpp:
        (formElementFromDOMElement):

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Add initial is<>() / downcast<>() support for any type of Nodes
        https://bugs.webkit.org/show_bug.cgi?id=137056

        Reviewed by Benjamin Poulain.

        Use is<HTMLFormControlElement>() / downcast<HTMLFormControlElement>()
        instead of isFormControlElement() / toHTMLFormControlElement().

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

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Unreviewed build fix after r173932.

        Unreviewed build fix after r173932 for Windows. Use WebCore:: namespace
        explicitely in DOMCoreClasses.cpp.

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):

2014-09-24  Christophe Dumez  <cdumez@apple.com>

        Use is<HTML*Element>() instead of isHTML*Element() - Part 1
        https://bugs.webkit.org/show_bug.cgi?id=137068

        Reviewed by Ryosuke Niwa.

        Start using is<HTML*Element>() instead of isHTML*Element().
        Remaining usages will be updated in a follow-up patch to
        reduce the size of the change.

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):
        * DOMHTMLClasses.cpp:
        (DOMHTMLOptionElement::text):
        (DOMHTMLOptionElement::label):
        (DOMHTMLInputElement::form):
        (DOMHTMLInputElement::disabled):
        (DOMHTMLInputElement::readOnly):
        (DOMHTMLInputElement::setType):
        (DOMHTMLInputElement::value):
        (DOMHTMLInputElement::setValue):
        (DOMHTMLInputElement::setValueForUser):
        (DOMHTMLInputElement::select):
        (DOMHTMLInputElement::setSelectionStart):
        (DOMHTMLInputElement::selectionStart):
        (DOMHTMLInputElement::setSelectionEnd):
        (DOMHTMLInputElement::selectionEnd):
        (DOMHTMLInputElement::isTextField):
        (DOMHTMLInputElement::rectOnScreen):
        (DOMHTMLInputElement::replaceCharactersInRange):
        (DOMHTMLInputElement::selectedRange):
        (DOMHTMLInputElement::setAutofilled):
        (DOMHTMLInputElement::isAutofilled):
        (DOMHTMLInputElement::isUserEdited):
        (DOMHTMLTextAreaElement::form):
        (DOMHTMLTextAreaElement::value):
        (DOMHTMLTextAreaElement::setValue):
        (DOMHTMLTextAreaElement::select):
        (DOMHTMLTextAreaElement::isUserEdited):
        * WebFrame.cpp:
        (inputElementFromDOMElement):

2014-09-21  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector use a separate web process.

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

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::openInspectorFrontend):
        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient::frontendClient):
        Own WebInspectorFrontendClient instead of moving it.

2014-09-23  Christophe Dumez  <cdumez@apple.com>

        Unreviewed build fix after r173893.

        Partial revert of r173893 to fix debug builds.

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::URL):
        (DOMHTMLDocument::body):
        (DOMHTMLDocument::forms):

2014-09-23  Chris Dumez  <cdumez@apple.com>

        Use downcast<HTML*Element>() instead of toHTML*Element()
        https://bugs.webkit.org/show_bug.cgi?id=137007

        Reviewed by Benjamin Poulain.

        Use downcast<HTML*Element>() instead of toHTML*Element().

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::URL):
        (DOMHTMLDocument::body):
        (DOMHTMLDocument::forms):
        (DOMHTMLFormElement::action):
        (DOMHTMLFormElement::method):
        (DOMHTMLSelectElement::options):
        (DOMHTMLSelectElement::activateItemAtIndex):
        (DOMHTMLOptionElement::text):
        (DOMHTMLOptionElement::label):
        (DOMHTMLInputElement::form):
        (DOMHTMLInputElement::disabled):
        (DOMHTMLInputElement::readOnly):
        (DOMHTMLInputElement::setType):
        (DOMHTMLInputElement::value):
        (DOMHTMLInputElement::setValue):
        (DOMHTMLInputElement::setValueForUser):
        (DOMHTMLInputElement::select):
        (DOMHTMLInputElement::setSelectionStart):
        (DOMHTMLInputElement::selectionStart):
        (DOMHTMLInputElement::setSelectionEnd):
        (DOMHTMLInputElement::selectionEnd):
        (DOMHTMLInputElement::isTextField):
        (DOMHTMLInputElement::replaceCharactersInRange):
        (DOMHTMLInputElement::selectedRange):
        (DOMHTMLInputElement::setAutofilled):
        (DOMHTMLInputElement::isAutofilled):
        (DOMHTMLInputElement::isUserEdited):
        (DOMHTMLTextAreaElement::form):
        (DOMHTMLTextAreaElement::value):
        (DOMHTMLTextAreaElement::setValue):
        (DOMHTMLTextAreaElement::select):
        (DOMHTMLTextAreaElement::isUserEdited):
        (DOMHTMLIFrameElement::contentFrame):
        * WebFrame.cpp:
        (formElementFromDOMElement):
        (inputElementFromDOMElement):

2014-09-21  Chris Dumez  <cdumez@apple.com>

        Generate Element casting helper functions
        https://bugs.webkit.org/show_bug.cgi?id=136839

        Reviewed by Darin Adler.

        Use JSXXX::toWrapped() instead of toXXX() function.

        * WebView.cpp:
        (WebView::elementFromJS):

2014-09-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: convert DockSide to an enum class
        https://bugs.webkit.org/show_bug.cgi?id=136601

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::frontendLoaded):

2014-09-04  Antti Koivisto  <antti@apple.com>

        Try to fix windows build.

        * WebURLResponse.cpp:
        (WebURLResponse::createInstance):
        (WebURLResponse::initWithURL):

2014-09-02  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: fix prefixes for subclasses of JSC::ConsoleClient
        https://bugs.webkit.org/show_bug.cgi?id=136476

        Reviewed by Timothy Hatcher.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::shouldPrintExceptions):
        (WebCoreStatistics::setShouldPrintExceptions):

2014-09-02  Maciej Stachowiak  <mjs@apple.com>

        Clean up naming for and slightly refactor legacy video fullscreen support
        https://bugs.webkit.org/show_bug.cgi?id=136446

        Reviewed by Jer Noble.

        Key changes:
        supportsFullscreenForNode(Node*) --> supportsVideoFullscreen()
        enterFullscreenForNode(Node*) --> enterVideoFullscreenForVideoElement(HTMLVideoElement*)
        exitFullscreenForNode(Node*) --> exitVideoFullscreen()
        
        The old versions had unnecessary parameters, did not clearly distinguish their purpose
        from enterFullscreenForElement and friends, and wrongly claimed generality to all Nodes.
        Also changed many other places to use HTMLVideoElement* instead of Node* or 
        HTMLMediaElement* when they were in fact only used for video elements and would only
        work for such.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::supportsVideoFullscreen): Adjust for the
        main refactoring.
        (WebChromeClient::enterVideoFullscreenForVideoElement): ditto
        (WebChromeClient::exitVideoFullscreen): ditto
        * WebCoreSupport/WebChromeClient.h:
        * WebView.cpp:
        (WebView::enterVideoFullscreenForVideoElement): Adjust for the 
        main refactoring.
        (WebView::exitVideoFullscreen): ditto.
        * WebView.h:
        * FullscreenVideoController.cpp: Use video elements, not media elements throughout
        (FullscreenVideoController::LayerClient::platformCALayerLayoutSublayersOfLayer):
        (FullscreenVideoController::setVideoElement):
        (FullscreenVideoController::enterFullscreen):
        (FullscreenVideoController::exitFullscreen):
        (FullscreenVideoController::canPlay):
        (FullscreenVideoController::play):
        (FullscreenVideoController::pause):
        (FullscreenVideoController::volume):
        (FullscreenVideoController::setVolume):
        (FullscreenVideoController::currentTime):
        (FullscreenVideoController::setCurrentTime):
        (FullscreenVideoController::duration):
        (FullscreenVideoController::beginScrubbing):
        (FullscreenVideoController::endScrubbing):
        (FullscreenVideoController::onChar):
        (FullscreenVideoController::onKeyDown):
        (FullscreenVideoController::onMouseUp):
        * FullscreenVideoController.h:
        (FullscreenVideoController::videoElement):

2014-09-03  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix after r173200.

        * WebView.cpp:
        (WebView::setCacheModel): Use appropriate types for cache sizes to be
        64-bit clean on CFNetwork compile.

2014-09-02  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Memory cache capacity is not set.
        https://bugs.webkit.org/show_bug.cgi?id=136432

        Reviewed by Alex Christensen.

        Reuse code from AppleWin to set memory and disk cache capacity.

        * WebKitSystemBits.cpp:
        (WebVolumeFreeSize):
        * WebKitSystemBits.h:
        * WebView.cpp:
        (WebView::setCacheModel):

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

        [Win] WebKit IDL incorrectly passes HWND as OLE_HANDLE
        https://bugs.webkit.org/show_bug.cgi?id=136258
        <rdar://problem/18134138>

        Reviewed by Tim Horton.

        Avoid 32/64-bit truncation by preventing 64-bit HWND (and other)
        values from passing through the 32-bit OLE_HANDLE data type.

        * Interfaces/IWebDocument.idl:
        * Interfaces/IWebEmbeddedView.idl:
        * Interfaces/IWebErrorPrivate.idl:
        * Interfaces/IWebFrameLoadDelegate.idl:
        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/IWebHistoryItem.idl:
        * Interfaces/IWebIconDatabase.idl:
        * Interfaces/IWebMutableURLRequestPrivate.idl:
        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/IWebURLResponsePrivate.idl:
        * Interfaces/IWebView.idl:
        * Interfaces/IWebViewPrivate.idl:
        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::createWindow):
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::rootViewToScreen):
        (WebChromeClient::screenToRootView):
        (WebChromeClient::platformPageClient):
        (WebChromeClient::runOpenPanel):
        (WebChromeClient::setCursor):
        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::customizeMenu):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorClient::highlight):
        (WebInspectorFrontendClient::setAttachedWindowHeight):
        (WebInspectorFrontendClient::closeWindowWithoutNotifications):
        (WebInspectorFrontendClient::showWindowWithoutNotifications):
        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorDelegate.cpp:
        * WebCoreSupport/WebInspectorDelegate.h:
        (WebInspectorDelegate::webViewFirstResponder):
        (WebInspectorDelegate::makeFirstResponder):
        (WebInspectorDelegate::contextMenuItemsForElement):
        (WebInspectorDelegate::trackCustomPopupMenu):
        (WebInspectorDelegate::addCustomMenuDrawingData):
        (WebInspectorDelegate::cleanUpCustomMenuDrawingData):
        (WebInspectorDelegate::drawHeaderInRect):
        (WebInspectorDelegate::drawFooterInRect):
        * WebDropSource.cpp:
        (generateMouseEvent):
        (WebDropSource::GiveFeedback):
        * WebError.cpp:
        (WebError::sslPeerCertificate):
        * WebError.h:
        * WebFrame.cpp:
        (WebFrame::paintDocumentRectToContext):
        (WebFrame::paintScrollViewRectToContextAtPoint):
        (WebFrame::createSubframeWithOwnerElement):
        (WebFrame::initWithWebView):
        (WebFrame::drawHeader):
        (WebFrame::drawFooter):
        * WebFrame.h:
        * WebHistoryItem.cpp:
        (WebHistoryItem::icon):
        * WebHistoryItem.h:
        * WebIconDatabase.cpp:
        (WebIconDatabase::iconForURL):
        (WebIconDatabase::defaultIconWithSize):
        * WebIconDatabase.h:
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setClientCertificate):
        * WebMutableURLRequest.h:
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::WebNodeHighlight):
        * WebURLResponse.cpp:
        (WebURLResponse::sslPeerCertificate):
        * WebURLResponse.h:
        * WebView.cpp:
        (WebView::paintIntoBackingStore):
        (WebView::handleContextMenuEvent):
        (WebView::onInitMenuPopup):
        (WebView::onUninitMenuPopup):
        (WebView::WebViewWndProc):
        (WebView::dispatchDidReceiveIconFromWebFrame):
        (WebView::setHostWindow):
        (WebView::hostWindow):
        (WebView::generateSelectionImage):
        (WebView::mainFrameIcon):
        (WebView::viewWindow):
        (WebView::paintDocumentRectToContext):
        (WebView::paintScrollViewRectToContextAtPoint):
        (WebView::backingStore):
        (WebView::fullScreenClientSetParentWindow):
        * WebView.h:

2014-08-21  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r172849.

        * WebKitPrefix.h:
        Defined WEBCORE_EXPORT.

2014-08-19  Pratik Solanki  <psolanki@apple.com>

        Remove PurgeableBuffer since it is not very useful any more
        https://bugs.webkit.org/show_bug.cgi?id=135939

        Reviewed by Andreas Kling.

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

2014-08-18  Commit Queue  <commit-queue@webkit.org>

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

        Caused 14% PLT regressions (Requested by rniwa on #webkit).

        Reverted changeset:

        "Remove PurgeableBuffer since it is not very useful any more"
        https://bugs.webkit.org/show_bug.cgi?id=135939
        http://trac.webkit.org/changeset/172736

2014-08-18  Pratik Solanki  <psolanki@apple.com>

        Remove PurgeableBuffer since it is not very useful any more
        https://bugs.webkit.org/show_bug.cgi?id=135939

        Reviewed by Geoffrey Garen.

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

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

        Remove unused preference keys
        https://bugs.webkit.org/show_bug.cgi?id=135280

        Reviewed by Darin Adler.

        * WebPreferenceKeysPrivate.h:

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

        [Win] Build fix after r171370.

        * WebCoreSupport/WebEditorClient.h: Add override
        for new 'overflowScrollPositionChanged'.

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

        Add WTF::move()
        https://bugs.webkit.org/show_bug.cgi?id=134500

        Rubber-stamped by Anders Carlsson.

        Substitute WTF::move() for std::move().

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorFrontendClient::WebInspectorFrontendClient):
        * WebHistory.cpp:
        (createUserInfoFromArray):
        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):
        * WebView.cpp:
        (WebView::addToDirtyRegion):
        (WebView::scrollBackingStore):

2014-06-26  Brady Eidson  <beidson@apple.com>

        Remove use of PlatformStrategies for Gamepad API.
        https://bugs.webkit.org/show_bug.cgi?id=134348

        Reviewed by Dean Jackson.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createGamepadStrategy): Deleted.
        * WebCoreSupport/WebPlatformStrategies.h:

2014-06-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Expose Cache Information to WinLauncher
        https://bugs.webkit.org/show_bug.cgi?id=134318

        Reviewed by Dean Jackson.

        * Interfaces/IWebCoreStatistics.idl: Add missing
        API added to WebKit since this was last updated.
        * WebCache.cpp:
        (WebCache::statistics): Add missing elements for
        purgable and purged data.
        * WebCoreStatistics.cpp: Provide implementaions.
        * WebCoreStatistics.h: Ditto.

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

        Add new platform gamepad abstractions
        https://bugs.webkit.org/show_bug.cgi?id=134325

        Reviewed by Dean Jackson.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createGamepadStrategy):
        * WebCoreSupport/WebPlatformStrategies.h:

2014-06-19  Anders Carlsson  <andersca@apple.com>

        Try to fix Windows build.

        * WebFrame.h:

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

        Make FrameLoadType a strongly typed enum
        https://bugs.webkit.org/show_bug.cgi?id=134047

        Reviewed by Andreas Kling.

        * WebView.cpp:
        (WebView::goToBackForwardItem):
        (WebView::loadBackForwardListFromOtherView):

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

        Remove IWebFramePrivate::loadType
        https://bugs.webkit.org/show_bug.cgi?id=134044

        Reviewed by Tim Horton.

        * Interfaces/IWebFramePrivate.idl:
        * WebFrame.cpp:
        (WebFrame::loadType): Deleted.
        (WebFrame::unused2): Deleted.
        * WebFrame.h:

2014-06-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Avoid crashes in code that converted CFDictionaries to HashMap
        https://bugs.webkit.org/show_bug.cgi?id=133813
        <rdar://problem/17291647>

        Reviewed by Tim Horton.

        * WebHistory.cpp: Add empty string checks to avoid crashes in
        hash function.
        (WebHistory::removeItem):
        (WebHistory::addItem):
        (WebHistory::visitedURL):
        (WebHistory::itemForURL):
        (WebHistory::removeItemForURLString):
        (WebHistory::itemForURLString):
        * WebPreferences.cpp: Ditto.
        (WebPreferences::getInstanceForIdentifier):
        (WebPreferences::setInstance):
        (WebPreferences::removeReferenceForIdentifier):
        * WebView.cpp: Ditto. Also convert OwnPtr uses in this file
        to std::unique_ptr.
        (WebView::close):
        (WebView::handleMouseEvent):
        (WebView::registerEmbeddedViewMIMEType):
        (WebView::shouldUseEmbeddedView):
        (WebView::enterFullscreenForNode):
        (WebView::fullScreenController):
        * WebView.h:

2014-05-07  Hyowon Kim  <hw1008.kim@samsung.com>

        GraphicsLayer::client() should return a reference.
        https://bugs.webkit.org/show_bug.cgi?id=126372

        Reviewed by Simon Fraser.

        GraphicsLayers always have a GraphicsLayerClient attached,
        so make client() a reference and remove some unnecessary branches.
        The author of the changes in the mac port is Andreas Kling <akling@apple.com>.

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

2014-04-30  Alexey Proskuryakov  <ap@apple.com>

        Roll out fix for https://bugs.webkit.org/show_bug.cgi?id=131637:
        Clean up unnecessary methods in the BackForwardClient interface

        It broke a regression test and an API test.

        * WebBackForwardList.cpp:
        (WebBackForwardList::WebBackForwardList):
        (WebBackForwardList::~WebBackForwardList):
        (WebBackForwardList::createInstance):
        * WebBackForwardList.h:
        * WebView.cpp:
        (WebView::backForwardList):
        (WebView::canGoBack):
        (WebView::canGoForward):
        (WebView::loadBackForwardListFromOtherView):

2014-04-30  Brian J. Burg  <burg@cs.washington.edu>

        Clean up unnecessary methods in the BackForwardClient interface
        https://bugs.webkit.org/show_bug.cgi?id=131637

        Reviewed by Andreas Kling.

        Remove uses of reference counting for BackForwardList.
        Use BackForwardController instead of BackForwardClient where possible.

        * WebBackForwardList.cpp:
        (WebBackForwardList::WebBackForwardList):
        (WebBackForwardList::~WebBackForwardList):
        (WebBackForwardList::createInstance):
        * WebBackForwardList.h:
        * WebView.cpp:
        (WebView::backForwardList):
        (WebView::canGoBack):
        (WebView::canGoForward):
        (WebView::loadBackForwardListFromOtherView):

2014-04-24  Myles C. Maxfield  <mmaxfield@apple.com>

        FontCache::fontCache() never returns nullptr so it can be made to return a reference instead
        https://bugs.webkit.org/show_bug.cgi?id=132110

        Reviewed by Tim Horton.

        Updates callers to use '.' instead of '->'.

        No new tests are necessary because there should be no behavior change.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::cachedFontDataCount):
        (WebCoreStatistics::cachedFontDataInactiveCount):
        (WebCoreStatistics::purgeInactiveFontData):

2014-04-22  Alex Christensen  <achristensen@webkit.org>

        Begin implementation of video using Media Foundation.
        https://bugs.webkit.org/show_bug.cgi?id=131830

        Reviewed by Brent Fulgham.

        * FullscreenVideoController.cpp:
        * WebView.cpp:
        Added new USE(MEDIA_FOUNDATION) flag to prevent using the unsupported fullscreen api.

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        Eliminate DragSession structure
        https://bugs.webkit.org/show_bug.cgi?id=131465

        Reviewed by Benjamin Poulain.

        * WebView.cpp:
        (WebView::DragEnter):
        (WebView::DragOver):

2014-04-09  Alexey Proskuryakov  <ap@apple.com>

        Rename some dragging functions
        https://bugs.webkit.org/show_bug.cgi?id=131460

        Reviewed by Tim Horton.

        Renamed performDrag to performDragOperation.

        * WebView.cpp: (WebView::Drop):

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

        Build fix after r166684.

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

2014-04-02  Martin Hock  <mhock@apple.com>

        Unify private browsing with sessions.
        https://bugs.webkit.org/show_bug.cgi?id=130099

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebFrameLoaderClient.cpp: Change WebCore::Settings::privateBrowsingEnabled() to Page::sessionID().isEphemeral().
        (WebFrameLoaderClient::updateGlobalHistoryItemForPage):
        * WebCoreSupport/WebFrameNetworkingContext.cpp: Ditto.
        (WebFrameNetworkingContext::storageSession):
        * WebView.cpp: Change WebCore::Settings::setPrivateBrowsingEnabled() to Page::enableLegacyPrivateBrowsing().
        (WebView::notifyPreferencesChanged):

2014-03-22  Darin Adler  <darin@apple.com>

        Remove String::deprecatedCharacters
        https://bugs.webkit.org/show_bug.cgi?id=126854

        Reviewed by Sam Weinig.

        * WebKitStatistics.cpp:
        (WebKitStatistics::comClassNameCounts): Update to not use Vector::append(String).

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

        Provide preference to enable additional AVFoundation options
        https://bugs.webkit.org/show_bug.cgi?id=130275

        Reviewed by Eric Carlson.

        * Interfaces/IWebPreferencesPrivate.idl: Added new preference.
        * WebPreferenceKeysPrivate.h: Ditto.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Initialize preference to false.
        (WebPreferences::isInheritURIQueryComponentEnabled): Added.
        (WebPreferences::setEnableInheritURIQueryComponent): Added.
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Handle new preference.

2014-03-16  Darin Adler  <darin@apple.com>

        Remove all deprecatedCharacters use from WebKit
        https://bugs.webkit.org/show_bug.cgi?id=130305

        Reviewed by Andreas Kling.

        * AccessibleTextImpl.cpp:
        (AccessibleText::get_text): Use BString instead of SysAllocStringLen,
        which handles String directly.
        (AccessibleText::get_textBeforeOffset): Ditto.
        (AccessibleText::get_textAfterOffset): Ditto.
        (AccessibleText::get_textAtOffset): Ditto.
        (AccessibleText::get_attributes): Ditto.
        * DOMCSSClasses.cpp:
        (DOMCSSStyleDeclaration::getPropertyValue): Ditto.
        * DOMCoreClasses.cpp:
        (DOMNode::nodeValue): Ditto.
        (DOMElement::getAttribute): Ditto.
        (DOMElement::font): Rework this to leak a string, since it returns a
        pointer to a font family name's characters with no defined lifetime.

        * DOMHTMLClasses.cpp:
        (DOMHTMLElement::innerText): Use BString's String-based constructor,
        instead of explicitly passing a character pointer.
        (DOMHTMLFormElement::action): Ditto.
        (DOMHTMLFormElement::method): Ditto.
        (DOMHTMLInputElement::value): Ditto.
        (DOMHTMLTextAreaElement::value): Ditto.

        * MarshallingHelpers.cpp:
        (MarshallingHelpers::PathStringToFileCFURLRef): Use String::createCFString.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::checkSpellingOfString): Use StringView::upconvertedCharacters.
        (WebEditorClient::checkGrammarOfString): Ditto.

        * WebDataSource.cpp:
        (WebDataSource::unreachableURL): Use BString's String-based constructor,
        instead of explicitly passing a character pointer.

        * WebDownload.cpp:
        (WebDownload::bundlePathForTargetPath): Use BString instead of SysAllocStringLen.

        * WebDownloadCFNet.cpp:
        (WebDownload::didFinish): Use BString's String-based constructor,
        instead of explicitly passing a character pointer.
        * WebDownloadCurl.cpp:
        (WebDownload::didReceiveResponse): Ditto.

        * WebElementPropertyBag.cpp:
        (convertStringToVariant): Use BString instead of SysAllocStringLen.
        * WebFrame.cpp:
        (WebFrame::searchForLabelsBeforeElement): Ditto.
        (WebFrame::matchLabelsAgainstElement): Ditto.

        * WebHistory.cpp:
        (WebHistory::addVisitedLinksToPageGroup): Use a better loop and call
        visitedLinkHash, since it can take a String.

        * WebKitGraphics.cpp:
        (CenterTruncateStringToWidth): Use StringView::getCharactersWithUpconvert.
        (RightTruncateStringToWidth): Ditto.

        * WebView.cpp:
        (WebView::applicationNameForUserAgent): Use BString instead of SysAllocStringLen.
        (WebView::customUserAgent): Ditto.
        (WebView::groupName): Ditto.
        (WebView::selectedText): Ditto.
        (WebView::onIMERequestReconvertString): Use StringView::getCharactersWithUpconvert.

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>
        
        Reviewed by Simon Fraser.

        * CFDictionaryPropertyBag.cpp:
        * CFDictionaryPropertyBag.h:
        * CodeAnalysisConfig.h:
        * DOMCSSClasses.cpp:
        * DOMCSSClasses.h:
        * DOMCoreClasses.cpp:
        * DOMCoreClasses.h:
        * DOMEventsClasses.cpp:
        * DOMEventsClasses.h:
        * DOMHTMLClasses.cpp:
        * DOMHTMLClasses.h:
        * DefaultDownloadDelegate.cpp:
        * DefaultDownloadDelegate.h:
        * DefaultPolicyDelegate.cpp:
        * DefaultPolicyDelegate.h:
        * ForEachCoClass.cpp:
        * ForEachCoClass.h:
        * FullscreenVideoController.cpp:
        * FullscreenVideoController.h:
        * Interfaces/AccessibilityDelegate.idl:
        * Interfaces/DOMCSS.idl:
        * Interfaces/DOMCore.idl:
        * Interfaces/DOMEvents.idl:
        * Interfaces/DOMExtensions.idl:
        * Interfaces/DOMHTML.idl:
        * Interfaces/DOMPrivate.idl:
        * Interfaces/DOMRange.idl:
        * Interfaces/DOMWindow.idl:
        * Interfaces/IGEN_DOMObject.idl:
        * Interfaces/IWebArchive.idl:
        * Interfaces/IWebBackForwardList.idl:
        * Interfaces/IWebBackForwardListPrivate.idl:
        * Interfaces/IWebCache.idl:
        * Interfaces/IWebDataSource.idl:
        * Interfaces/IWebDatabaseManager.idl:
        * Interfaces/IWebDocument.idl:
        * Interfaces/IWebDownload.idl:
        * Interfaces/IWebEditingDelegate.idl:
        * Interfaces/IWebError.idl:
        * Interfaces/IWebErrorPrivate.idl:
        * Interfaces/IWebFormDelegate.idl:
        * Interfaces/IWebFrame.idl:
        * Interfaces/IWebFrameLoadDelegate.idl:
        * Interfaces/IWebFrameLoadDelegatePrivate.idl:
        * Interfaces/IWebFrameLoadDelegatePrivate2.idl:
        * Interfaces/IWebFramePrivate.idl:
        * Interfaces/IWebFrameView.idl:
        * Interfaces/IWebHTMLRepresentation.idl:
        * Interfaces/IWebHTTPURLResponse.idl:
        * Interfaces/IWebHistory.idl:
        * Interfaces/IWebHistoryDelegate.idl:
        * Interfaces/IWebHistoryItem.idl:
        * Interfaces/IWebHistoryItemPrivate.idl:
        * Interfaces/IWebHistoryPrivate.idl:
        * Interfaces/IWebIconDatabase.idl:
        * Interfaces/IWebInspector.idl:
        * Interfaces/IWebInspectorPrivate.idl:
        * Interfaces/IWebJavaScriptCollector.idl:
        * Interfaces/IWebKitStatistics.idl:
        * Interfaces/IWebMutableURLRequest.idl:
        * Interfaces/IWebMutableURLRequestPrivate.idl:
        * Interfaces/IWebNavigationData.idl:
        * Interfaces/IWebNotification.idl:
        * Interfaces/IWebNotificationCenter.idl:
        * Interfaces/IWebNotificationObserver.idl:
        * Interfaces/IWebPolicyDelegate.idl:
        * Interfaces/IWebPolicyDelegatePrivate.idl:
        * Interfaces/IWebPreferences.idl:
        * Interfaces/IWebPreferencesPrivate.idl:
        * Interfaces/IWebResource.idl:
        * Interfaces/IWebResourceLoadDelegate.idl:
        * Interfaces/IWebResourceLoadDelegatePrivate.idl:
        * Interfaces/IWebResourceLoadDelegatePrivate2.idl:
        * Interfaces/IWebScriptObject.idl:
        * Interfaces/IWebSecurityOrigin.idl:
        * Interfaces/IWebSerializedJSValuePrivate.idl:
        * Interfaces/IWebTextRenderer.idl:
        * Interfaces/IWebUIDelegate.idl:
        * Interfaces/IWebUIDelegatePrivate.idl:
        * Interfaces/IWebURLAuthenticationChallenge.idl:
        * Interfaces/IWebURLRequest.idl:
        * Interfaces/IWebURLResponse.idl:
        * Interfaces/IWebURLResponsePrivate.idl:
        * Interfaces/IWebUndoManager.idl:
        * Interfaces/IWebUndoTarget.idl:
        * Interfaces/IWebView.idl:
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * Interfaces/WebScrollbarTypes.idl:
        * MarshallingHelpers.cpp:
        * MarshallingHelpers.h:
        * MemoryStream.cpp:
        * MemoryStream.h:
        * ProgIDMacros.h:
        * WebActionPropertyBag.cpp:
        * WebActionPropertyBag.h:
        * WebBackForwardList.cpp:
        * WebBackForwardList.h:
        * WebCache.cpp:
        * WebCache.h:
        * WebCachedFramePlatformData.h:
        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebContextMenuClient.cpp:
        * WebCoreSupport/WebContextMenuClient.h:
        * WebCoreSupport/WebDragClient.cpp:
        * WebCoreSupport/WebDragClient.h:
        * WebCoreSupport/WebEditorClient.cpp:
        * WebCoreSupport/WebEditorClient.h:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebInspectorClient.cpp:
        * WebCoreSupport/WebInspectorClient.h:
        * WebCoreSupport/WebInspectorDelegate.cpp:
        * WebCoreSupport/WebInspectorDelegate.h:
        * WebDataSource.cpp:
        * WebDataSource.h:
        * WebDatabaseManager.cpp:
        * WebDatabaseManager.h:
        * WebDocumentLoader.cpp:
        * WebDocumentLoader.h:
        * WebDownload.cpp:
        * WebDownload.h:
        * WebDownloadCFNet.cpp:
        * WebDownloadCurl.cpp:
        * WebDropSource.cpp:
        * WebDropSource.h:
        * WebElementPropertyBag.cpp:
        * WebElementPropertyBag.h:
        * WebError.cpp:
        * WebError.h:
        * WebFrame.cpp:
        * WebFrame.h:
        * WebFramePolicyListener.cpp:
        * WebFramePolicyListener.h:
        * WebHTMLRepresentation.cpp:
        * WebHTMLRepresentation.h:
        * WebHistory.cpp:
        * WebHistory.h:
        * WebHistoryItem.cpp:
        * WebHistoryItem.h:
        * WebIconDatabase.cpp:
        * WebIconDatabase.h:
        * WebInspector.cpp:
        * WebInspector.h:
        * WebJavaScriptCollector.cpp:
        * WebJavaScriptCollector.h:
        * WebKitCOMAPI.cpp:
        * WebKitCOMAPI.h:
        * WebKitClassFactory.cpp:
        * WebKitClassFactory.h:
        * WebKitDLL.cpp:
        * WebKitDLL.h:
        * WebKitGraphics.cpp:
        * WebKitGraphics.h:
        * WebKitLogging.cpp:
        * WebKitLogging.h:
        * WebKitPrefix.cpp:
        * WebKitPrefix.h:
        * WebKitStatistics.cpp:
        * WebKitStatistics.h:
        * WebKitStatisticsPrivate.h:
        * WebKitSystemBits.cpp:
        * WebKitSystemBits.h:
        * WebLocalizableStrings.cpp:
        * WebLocalizableStrings.h:
        * WebMutableURLRequest.cpp:
        * WebMutableURLRequest.h:
        * WebNavigationData.cpp:
        * WebNavigationData.h:
        * WebNodeHighlight.cpp:
        * WebNodeHighlight.h:
        * WebNotification.cpp:
        * WebNotification.h:
        * WebNotificationCenter.cpp:
        * WebNotificationCenter.h:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        * WebPreferences.h:
        * WebResource.cpp:
        * WebResource.h:
        * WebScriptObject.cpp:
        * WebScriptObject.h:
        * WebSecurityOrigin.cpp:
        * WebSecurityOrigin.h:
        * WebTextRenderer.cpp:
        * WebTextRenderer.h:
        * WebURLAuthenticationChallenge.cpp:
        * WebURLAuthenticationChallenge.h:
        * WebURLAuthenticationChallengeSender.cpp:
        * WebURLAuthenticationChallengeSender.h:
        * WebURLAuthenticationChallengeSenderCFNet.cpp:
        * WebURLAuthenticationChallengeSenderCurl.cpp:
        * WebURLCredential.cpp:
        * WebURLCredential.h:
        * WebURLProtectionSpace.cpp:
        * WebURLProtectionSpace.h:
        * WebURLResponse.cpp:
        * WebURLResponse.h:
        * WebView.cpp:
        * WebView.h:

2014-03-12  Sergio Villar Senin  <svillar@igalia.com>

        Rename DEFINE_STATIC_LOCAL to DEPRECATED_DEFINE_STATIC_LOCAL
        https://bugs.webkit.org/show_bug.cgi?id=129612

        Reviewed by Darin Adler.

        For new code use static NeverDestroyed<T> instead.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::initialize):
        * WebHistory.cpp:
        (sharedHistoryStorage):
        * WebLocalizableStrings.cpp:
        (mainBundleLocStrings):
        (frameworkLocStringsMutex):
        (frameworkLocStrings):
        * WebView.cpp:
        (WebView::standardUserAgentWithApplicationName):

2014-03-13  Brian Burg  <bburg@apple.com>

        Unreviewed build fix for Mac Windows after r165545.
        https://bugs.webkit.org/show_bug.cgi?id=129744

        Reviewed by Timothy Hatcher.

        * Interfaces/IWebInspectorPrivate.idl: Remove callId from IWebInspectorPrivate.

2014-03-12  Brian Burg  <bburg@apple.com>

        Web Inspector: Remove unused callId parameter from evaluateInWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=129744

        Reviewed by Timothy Hatcher.

        * WebInspector.cpp:
        (WebInspector::evaluateInFrontend):
        * WebInspector.h:

2014-03-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Expose the console object in JSContexts to interact with Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=127944

        Reviewed by Geoffrey Garen.

        * WebCoreSupport/WebChromeClient.h:
        Update namespaces.

2014-03-04  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make GraphicsLayer::fillRect FloatRoundedRect based and cleanup dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=129557

        Reviewed by Simon Fraser.

        This is the preparation for snapping rounded rects to device pixel position. It enables
        device pixel aware border-radius painting.

        No change in functionality.

        * FullscreenVideoController.cpp:
        (HUDSlider::draw):
        (FullscreenVideoController::draw):

2014-03-02  Darin Adler  <darin@apple.com>

        Streamline use of TextIterator, cutting down includes and use of soon-to-be-deleted functions
        https://bugs.webkit.org/show_bug.cgi?id=129592

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebEditorClient.cpp: Added now-needed include.

2014-02-25  Anders Carlsson  <andersca@apple.com>

        Get rid of VisitedLinkStrategy
        https://bugs.webkit.org/show_bug.cgi?id=129324

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::getPluginInfo):
        * WebCoreSupport/WebPlatformStrategies.h:

2014-02-24  Renata Hodovan  <rhodovan.u-szeged@partner.samsung.com>

        Get rid of the unused 'immediate' parameters from repaint related functions
        https://bugs.webkit.org/show_bug.cgi?id=129111

        Reviewed by Simon Fraser.

        Removing the 'immediate' parameters from repaint related functions - accoring
        to the FIXME in RenderView::repaintViewRectangle() - since they have no effect.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::invalidateRootView):
        (WebChromeClient::invalidateContentsAndRootView):
        (WebChromeClient::invalidateContentsForSlowScroll):
        * WebCoreSupport/WebChromeClient.h:

2014-02-20  Csaba Osztrogonác  <ossy@webkit.org>

        Get rid of redundant Platform.h includes
        https://bugs.webkit.org/show_bug.cgi?id=128817

        Reviewed by Brent Fulgham.

        * WebDownloadCFNet.cpp:
        * WebDownloadCurl.cpp:
        * WebURLResponse.cpp:

2014-02-18  Sam Weinig  <sam@webkit.org>

        Simplify HTML tokenizer parameterization down to what is used
        https://bugs.webkit.org/show_bug.cgi?id=128977

        Reviewed by Alexey Proskuryakov.

        Remove unused SPI.

        * WebView.cpp:
        (WebView::setCustomHTMLTokenizerTimeDelay):
        (WebView::setCustomHTMLTokenizerChunkSize):

2014-02-17  Anders Carlsson  <andersca@apple.com>

        Remove view source code
        https://bugs.webkit.org/show_bug.cgi?id=127233

        Reviewed by Antti Koivisto.

        * WebFrame.cpp:
        (WebFrame::inViewSourceMode):
        (WebFrame::setInViewSourceMode):
        * WebView.cpp:
        (WebView::setInViewSourceMode):
        (WebView::inViewSourceMode):

2014-02-17  Sergio Correia  <sergio.correia@openbossa.org>

        Replace uses of PassOwnPtr/OwnPtr with std::unique_ptr in WebCore/inspector
        https://bugs.webkit.org/show_bug.cgi?id=128681

        Reviewed by Timothy Hatcher.

        Another step towards getting rid of PassOwnPtr/OwnPtr, now targeting
        WebCore/inspector/*. Besides files in there, a few other files in
        JavaScriptCore/inspector, WebKit/, WebKit2/WebProcess/WebCoreSupport/
        and WebCore/testing were touched.

        * WebCoreSupport/WebInspectorClient.cpp:
        * WebCoreSupport/WebInspectorClient.h:

2014-02-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Make tests more consistent with Mac platform
        https://bugs.webkit.org/show_bug.cgi?id=128848

        Reviewed by Simon Fraser.

        * Interfaces/IWebPreferencesPrivate.idl: Add access to the
        mock scrollbar and screen font substitution features.
        * WebPreferenceKeysPrivate.h: Ditto
        * WebPreferences.cpp: Ditto
        (WebPreferences::mockScrollbarsEnabled):
        (WebPreferences::setMockScrollbarsEnabled):
        (WebPreferences::screenFontSubstitutionEnabled):
        (WebPreferences::setScreenFontSubstitutionEnabled):
        * WebPreferences.h: Ditto
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Ditto

2014-02-11  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make GraphicsLayerClient::paintContents's clip rect subpixel based.
        https://bugs.webkit.org/show_bug.cgi?id=128460

        Reviewed by Simon Fraser.

        GraphicsClient::paintContents takes clipRect as FloatRect now so that we can paint on
        subpixel position.

        No change in functionality.

        * WebView.cpp:
        (WebView::paintContents):
        * WebView.h:

2014-02-11  Alex Christensen  <achristensen@webkit.org>

        Fixed pointer truncation on Win64.
        https://bugs.webkit.org/show_bug.cgi?id=128211

        Reviewed by Brent Fulgham.

        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::createWindow):
        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::customizeMenu):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createPlugin):
        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorClient::highlight):
        (WebInspectorClient::releaseFrontend):
        (WebInspectorFrontendClient::setAttachedWindowHeight):
        (WebInspectorFrontendClient::closeWindowWithoutNotifications):
        * WebCoreSupport/WebInspectorClient.h:
        * WebDropSource.cpp:
        (generateMouseEvent):
        * WebFrame.cpp:
        (WebFrame::createSubframeWithOwnerElement):
        (WebFrame::initWithWebView):
        Removed all casts from &HWND to OLE_HANDLE*.

2014-02-11  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error related to toString function.
        https://bugs.webkit.org/show_bug.cgi?id=128607

        Reviewed by Brent Fulgham.

        * WebView.cpp:
        (toString): Added another toString function to make sure we are not trying to use WTF::toString.

2014-02-08  Ryosuke Niwa  <rniwa@webkit.org>

        Cleanup the interface of FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=128481

        Reviewed by Andreas Kling.

        * WebView.cpp:
        (WebView::selectionRect):

2014-02-08  Darin Adler  <darin@apple.com>

        Change TextIterator to use StringView, preparing to wean it from deprecatedCharacters
        https://bugs.webkit.org/show_bug.cgi?id=128233

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::checkSpellingOfString): Use StringView.
        (WebEditorClient::checkGrammarOfString): Ditto.
        * WebCoreSupport/WebEditorClient.h: Ditto.

2014-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Console support to JSContext Inspection
        https://bugs.webkit.org/show_bug.cgi?id=127941

        Reviewed by Geoffrey Garen.

        * WebCoreSupport/WebChromeClient.h:

2014-02-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct IME Regression after r141479
        https://bugs.webkit.org/show_bug.cgi?id=128323
        <rdar://problem/15952986>

        Reviewed by Tim Horton.

        * WebView.cpp:
        (WebView::updateSelectionForIME): Refactoring flipped the meaning of the test used
        to select the resetIME case. Corrected for behavior of new cancel method.

2014-02-04  Andreas Kling  <akling@apple.com>

        Remove <iframe seamless> support.
        <https://webkit.org/b/128213>

        Rubber-stamped by Antti Koivisto.

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

2014-02-03  Darin Adler  <darin@apple.com>

        Try to fix the WinCairo build.

        * WebDownloadCurl.cpp:
        (WebDownload::didReceiveResponse): characters -> deprecatedCharacters.

2014-02-02  Darin Adler  <darin@apple.com>

        Still more characters -> deprecatedCharacters (EWS keeps finding more)
        https://bugs.webkit.org/show_bug.cgi?id=128076

        Reviewed by Andreas Kling.

        * AccessibleTextImpl.cpp:
        (AccessibleText::get_text):
        (AccessibleText::get_textBeforeOffset):
        (AccessibleText::get_textAfterOffset):
        (AccessibleText::get_textAtOffset):
        (AccessibleText::get_attributes):
        * DOMCSSClasses.cpp:
        (DOMCSSStyleDeclaration::getPropertyValue):
        * DOMCoreClasses.cpp:
        (DOMNode::nodeValue):
        (DOMElement::getAttribute):
        (DOMElement::font):
        * DOMHTMLClasses.cpp:
        (DOMHTMLElement::innerText):
        (DOMHTMLFormElement::action):
        (DOMHTMLFormElement::method):
        (DOMHTMLInputElement::value):
        (DOMHTMLTextAreaElement::value):
        * MarshallingHelpers.cpp:
        (MarshallingHelpers::PathStringToFileCFURLRef):
        * WebDataSource.cpp:
        (WebDataSource::unreachableURL):
        * WebDownload.cpp:
        (WebDownload::bundlePathForTargetPath):
        * WebDownloadCFNet.cpp:
        (WebDownload::didFinish):
        * WebElementPropertyBag.cpp:
        (convertStringToVariant):
        * WebFrame.cpp:
        (WebFrame::searchForLabelsBeforeElement):
        (WebFrame::matchLabelsAgainstElement):
        * WebHistory.cpp:
        (WebHistory::addVisitedLinksToPageGroup):
        * WebKitGraphics.cpp:
        (CenterTruncateStringToWidth):
        (RightTruncateStringToWidth):
        * WebView.cpp:
        (WebView::applicationNameForUserAgent):
        (WebView::customUserAgent):
        (WebView::groupName):
        (WebView::selectedText):
        (WebView::onIMERequestReconvertString):
        Use deprecatedCharacters.

2014-01-30  Andrei Bucur  <abucur@adobe.com>

        Remove the ACCELERATED_COMPOSITING flag
        https://bugs.webkit.org/show_bug.cgi?id=127833

        Reviewed by Antti Koivisto.

        Remove the USE(ACCELERATED_COMPOSITING) conditionals from the code base and make AC
        mandatory.

        Another patch will be required to remove the flag support from the Win build system.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::LayerClient::platformCALayerLayoutSublayersOfLayer):
        (FullscreenVideoController::FullscreenVideoController):
        (FullscreenVideoController::~FullscreenVideoController):
        (FullscreenVideoController::enterFullscreen):
        * FullscreenVideoController.h:
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::scheduleCompositingLayerFlush):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::setNeedsOneShotDrawingSynchronization):
        * WebPreferences.cpp:
        (WebPreferences::acceleratedCompositingEnabled):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::~WebView):
        (WebView::close):
        (WebView::repaint):
        (WebView::addToDirtyRegion):
        (WebView::scrollBackingStore):
        (WebView::sizeChanged):
        (WebView::updateBackingStore):
        (WebView::paint):
        (WebView::setShouldInvertColors):
        (WebView::WebViewWndProc):
        (WebView::notifyPreferencesChanged):
        (WebView::setAcceleratedCompositing):
        * WebView.h:

2014-01-29  Alex Christensen  <achristensen@webkit.org>

        Prepare for accelerated compositing on WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=127843

        Reviewed by Anders Carlsson.

        * WebPreferences.cpp:
        Moved CACFLayerTreeHost.h inclusion to Apple-specific includes
        to avoid compile errors in WinCairo when using accelerated compositing.

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Follow-up build fix.

        * WebHistoryItem.cpp:
        (WebHistoryItem::visitedWithTitle):

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Remove even more Windows history code.

        * WebHistory.cpp:
        (WebHistory::removeItemForURLString):
        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::dictionaryRepresentation):
        (WebHistoryItem::getDailyVisitCounts):
        (WebHistoryItem::getWeeklyVisitCounts):
        (WebHistoryItem::recordInitialVisit):
        (WebHistoryItem::initWithURLString):

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Another follow-up build fix.

        * WebHistory.cpp:
        (WebHistory::removeAllItems):
        (WebHistory::orderedItemsLastVisitedOnDay):
        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::dictionaryRepresentation):
        (WebHistoryItem::visitCount):
        (WebHistoryItem::setVisitCount):

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Remove more history gunk.

        * WebHistory.cpp:
        (WebHistory::orderedLastVisitedDays):
        (WebHistory::addItem):
        (WebHistory::visitedURL):
        (WebHistory::removeItemForURLString):
        * WebHistory.h:
        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::dictionaryRepresentation):
        (WebHistoryItem::mergeAutoCompleteHints):
        (WebHistoryItem::setLastVisitedTimeInterval):
        (WebHistoryItem::initWithURLString):
        (WebHistoryItem::lastVisitedTimeInterval):

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::dictionaryRepresentation):

2014-01-26  Anders Carlsson  <andersca@apple.com>

        Move lastVisitWasHTTPNonGet out to WebHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=127657

        Reviewed by Dan Bernstein.

        Remove uses of lastVisitWasHTTPNonGet.

        * WebHistory.cpp:
        (WebHistory::visitedURL):
        * WebHistoryItem.cpp:
        (WebHistoryItem::initFromDictionaryRepresentation):
        (WebHistoryItem::lastVisitWasHTTPNonGet):
        (WebHistoryItem::setLastVisitWasHTTPNonGet):

2014-01-25  Anders Carlsson  <andersca@apple.com>

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

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.h:

2014-01-25  Anders Carlsson  <andersca@apple.com>

        Modernize HashTable threading code
        https://bugs.webkit.org/show_bug.cgi?id=127621

        Reviewed by Darin Adler.

        Explicitly include headers that used to be brought in by HashTable.h

        * WebLocalizableStrings.cpp:

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

        Remove back/forward list related functions from Page
        https://bugs.webkit.org/show_bug.cgi?id=127596

        Reviewed by Andreas Kling.

        * WebView.cpp:
        (WebView::keyDown):
        (WebView::goBack):
        (WebView::goForward):

2014-01-24  Zan Dobersek  <zdobersek@igalia.com>

        Move HistoryItem to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127275

        Reviewed by Darin Adler.

        * WebHistoryItem.cpp: The Vector object that's passed to HistoryItem::setRedirectURLs
        should now be handled by std::unique_ptr and passed on through move semantics.
        (WebHistoryItem::initFromDictionaryRepresentation):

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

        Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=127409

        Reviewed by Geoffrey Garen.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::destroyInspectorView):
        Include InspectorDisconnectReason.

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

        Another Windows fix.

        * WebFrame.cpp:
        (WebFrame::frameBounds):

2014-01-23  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=127500

        Reviewed by Brent Fulgham.

        * WebCache.cpp:
        (WebCache::cacheFolder): CurlCacheManager::getCacheDirectory() has changed name to cacheDirectory().

2014-01-23  peavo@outlook.com  <peavo@outlook.com>

        [Curl] There is no way to specify cache folder.
        https://bugs.webkit.org/show_bug.cgi?id=125028

        Reviewed by Brent Fulgham.

        Added interface methods to set and get cache folder location.

        * Interfaces/IWebCache.idl:
        * WebCache.cpp:
        (WebCache::disabled):
        (WebCache::cacheFolder):
        (WebCache::setCacheFolder):
        * WebCache.h:

2014-01-21  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo][Curl] Download request has incorrect user agent string.
        https://bugs.webkit.org/show_bug.cgi?id=127110

        Reviewed by Brent Fulgham.

        * WebDownloadCurl.cpp:
        (WebDownload::init): Set user agent string in download request.
        * WebView.cpp:
        (WebView::downloadURL): Avoid early return if no ResourceHandle is provided.

2014-01-18  Brian Burg  <bburg@apple.com>

        Web Inspector: Page should use std::unique_ptr for InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=127068

        Reviewed by Joseph Pecoraro.

        Convert call sites to use a InspectorController reference.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorFrontendClient::destroyInspectorView):
        (WebInspectorFrontendClient::onClose):
        * WebInspector.cpp:
        (WebInspector::show):
        (WebInspector::close):
        (WebInspector::isJavaScriptProfilingEnabled):
        (WebInspector::setJavaScriptProfilingEnabled):
        (WebInspector::evaluateInFrontend):
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::update):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Clean up PageCache classes
        https://bugs.webkit.org/show_bug.cgi?id=127202

        Reviewed by Andreas Kling.

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

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Remove another unused FrameLoaderClient callback
        https://bugs.webkit.org/show_bug.cgi?id=127192

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.h:

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Remove didPerformFirstNavigation from all FrameLoaderClient subclasses
        https://bugs.webkit.org/show_bug.cgi?id=127190

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.h:

2014-01-16  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove workaround for compilers not supporting explicit override control
        https://bugs.webkit.org/show_bug.cgi?id=127111

        Reviewed by Anders Carlsson.

        Now all compilers support explicit override control, this workaround can be removed.

        * AccessibleDocument.h:
        * FullscreenVideoController.cpp:
        * WebCoreSupport/WebChromeClient.h:
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebInspectorClient.h:
        * WebHistory.h:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Tweak ProgressTrackerClient functions
        https://bugs.webkit.org/show_bug.cgi?id=126808

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::progressStarted):
        (WebFrameLoaderClient::progressEstimateChanged):
        (WebFrameLoaderClient::progressFinished):
        * WebCoreSupport/WebFrameLoaderClient.h:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Move progress tracking functions from FrameLoaderClient to a new ProgressTrackerClient
        https://bugs.webkit.org/show_bug.cgi?id=126801

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebView.cpp:
        (WebView::initWithFrame):

2014-01-08  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=126534

        Reviewed by Brent Fulgham.

        * WebKitPrefix.h: Define __STDC_LIMIT_MACROS, so INTMAX_MAX will be defined (needed by std C++ library).

2014-01-06  László Langó  <lango@inf.u-szeged.hu>

        Use unsigned consistently, and check for invalid casts when calling into SharedBuffer from other code.
        https://bugs.webkit.org/show_bug.cgi?id=124579

        Reviewed by Anders Carlsson.

        * WebKitDLL.cpp:
        (loadResourceIntoBuffer):

2013-12-30  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Cleanup static_cast<HTMLFormElement*> by using toHTMLFormElement()
        https://bugs.webkit.org/show_bug.cgi?id=126309

        Reviewed by Andreas Kling.

        To detect bad type casts, it would be good to use toHTMLFormElement() instead of
        using manual type cast. Additionally FORM_ASSOCIATED_ELEMENT_TYPE_CASTS is introduced newly
        to do it.

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

2013-12-17  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Compile fixes for GStreamer on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=124867

        Reviewed by Philippe Normand.

        * WebView.cpp:
        (WebView::enterFullscreenForNode):
        (WebView::exitFullscreen):
        GStreamer in WebKit does not support fullscreen, so
        I added #if !USE(GSTREAMER) to the fullscreen code to get it to compile.

2013-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push More Inspector Required Classes Down into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=125324

        Reviewed by Timothy Hatcher.

        * WebFrame.cpp:
        * WebView.cpp:

2013-12-04  Brent Fulgham  <bfulgham@apple.com>

        [Win] Exiting from Media Full Screen mode via 'escape' key does not work properly
        https://bugs.webkit.org/show_bug.cgi?id=125272

        Reviewed by Jer Noble.

        * WebView.cpp:
        (WebView::fullScreenClientWillExitFullScreen): Change to webkitCancelFullScreen method call
        to more closely match Media Control behavior.

2013-12-04  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Darin Adler.

        * DOMCoreClasses.cpp:
        (DOMElement::renderedImage): use createDragImageForNode.

2013-12-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push Remote Inspector debugging connection management into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=124613

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/WebInspectorClient.h:

2013-11-25  peavo@outlook.com  <peavo@outlook.com>

        [Win] WebKit version in user agent string is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=124454

        Reviewed by Brent Fulgham.

        * WebView.cpp: Use WebKit version from WebKitVersion.h in user agent.
        (webKitVersionString):

2013-11-21  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove ENABLE_WORKERS
        https://bugs.webkit.org/show_bug.cgi?id=105784

        Reviewed by Darin Adler.

        * WebWorkersPrivate.cpp:
        (WebWorkersPrivate::workerThreadCount):

2013-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159455.
        http://trac.webkit.org/changeset/159455
        https://bugs.webkit.org/show_bug.cgi?id=124568

        broke two api tests (see bug 124564) (Requested by thorton on
        #webkit).

        * DOMCoreClasses.cpp:
        (DOMElement::renderedImage):

2013-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159430.
        http://trac.webkit.org/changeset/159430
        https://bugs.webkit.org/show_bug.cgi?id=124548

        WebCore can know nothing about nor use files from WebKit/
        (Requested by thorton on #webkit).

        * WebView.cpp:
        (webKitVersionString):

2013-11-18  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Timothy Hatcher.

        * DOMCoreClasses.cpp:
        (DOMElement::renderedImage): use createDragImageForNode.

2013-11-18  peavo@outlook.com  <peavo@outlook.com>

        [Win] Optimization, no need to erase background before paint.
        https://bugs.webkit.org/show_bug.cgi?id=124453

        Reviewed by Brent Fulgham.

        As the paint will blit a bitmap onto the invalid area (no alpha),
        there is no need to erase the background first, as this will be overwritten by the blit.

        * WebView.cpp:
        (WebView::WebViewWndProc): Avoid erasing background before paint.

2013-11-18  peavo@outlook.com  <peavo@outlook.com>

        [Win] WebKit version in user agent string is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=124454

        Reviewed by Brent Fulgham.

        * WebView.cpp:
        (webKitVersionString): Create WebKit version string from WebKitVersion.h.

2013-11-15  Jer Noble  <jer.noble@apple.com>

        Unreviewed Win build fix; setCurrentTime() no longer takes an exception parameter.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::setCurrentTime):

2013-11-12  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Preparation for ENABLE(VIDEO).
        https://bugs.webkit.org/show_bug.cgi?id=57420

        Reviewed by Martin Robinson.

        * FullscreenVideoController.cpp:
        Don't compile if using GStreamer.

2013-11-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Clean up static_cast<> to cast from AccessibilityObject 
        https://bugs.webkit.org/show_bug.cgi?id=124032

        Reviewed by Mario Sanchez Prada.

        Use toAccessibilityListBox instead of using static_cast<AccessibilityListBox*>.

        * AccessibleBase.cpp:
        (AccessibleBase::accSelect):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt after r158704.

        * FullscreenVideoController.cpp:

2013-11-01  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Reduce usage of CFSTR() in WebPreferences
        https://bugs.webkit.org/show_bug.cgi?id=121827

        Reviewed by Brent Fulgham.

        This moved the dependency on CF to a few functions only
        and is a first step to make it compile without CF.

        * WebPreferences.cpp:
        * WebPreferences.h:

2013-10-31  Alex Christensen  <achristensen@webkit.org>

        Compile fix for VS2012.
        https://bugs.webkit.org/show_bug.cgi?id=123599

        Reviewed by Brent Fulgham.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::WebFramePolicyListenerPrivate::WebFramePolicyListenerPrivate):
        (WebFrameLoaderClient::cancelPolicyCheck):
        (WebFrameLoaderClient::receivedPolicyDecision):
        Use nullptr instead of 0 for m_policyFunction, which is a std::function.

2013-10-31  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Make WebHistory compile without USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=122010

        Reviewed by Brent Fulgham.

        Add an alternative code path for !USE(CF) to be able to
        compile WebHistory without the CoreFoundation library.

        * COMVariantSetter.h: Add support for setting a Vector.
        * WebHistory.cpp:
        (createUserInfoFromArray):
        (createUserInfoFromHistoryItem):
        (WebHistory::removeAllItems):
        (WebHistory::removeItem):
        (WebHistory::addItem):
        (WebHistory::visitedURL):
        * WebHistory.h:

2013-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        WebKit/win/WebKitGraphics.h:void WebDrawText(WebTextRenderInfo*); is never called
        https://bugs.webkit.org/show_bug.cgi?id=123485

        Reviewed by Brent Fulgham.

        Removed unused WebDrawText implementation.

        * WebKitGraphics.cpp:
        * WebKitGraphics.h:

2013-10-30  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Add missing USE(CFNETWORK) to WebError.h
        https://bugs.webkit.org/show_bug.cgi?id=121834

        Reviewed by Brent Fulgham.

        WebError.cpp uses USE(CFNETWORK), so add it to the header too.

        * WebError.h:

2013-10-30  peavo@outlook.com  <peavo@outlook.com>

        [Curl][Win] Suggested filename of download is not url decoded.
        https://bugs.webkit.org/show_bug.cgi?id=123511

        Reviewed by Brent Fulgham.

        * WebDownloadCurl.cpp:
        (WebDownload::didReceiveResponse): Url decode suggested filename.

2013-10-28  Tim Horton  <timothy_horton@apple.com>

        Make TileController manipulate PlatformCALayers instead of CALayers
        https://bugs.webkit.org/show_bug.cgi?id=123279

        Reviewed by Simon Fraser.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::LayerClient::platformCALayerPaintContents):
        (FullscreenVideoController::LayerClient::platformCALayerIncrementRepaintCount):
        Adjust for new parameters on PlatformCALayerClient callbacks.

2013-10-23  Alex Christensen  <achristensen@webkit.org>

        Separated USE(CA) from USE(ACCELERATED_COMPOSITING) to prepare WinCairo for accelerated compositing.
        https://bugs.webkit.org/show_bug.cgi?id=123214

        Reviewed by Brent Fulgham.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::delegatedScrollRequested): Added empty function.
        * WebPreferences.cpp:
        (WebPreferences::acceleratedCompositingEnabled):
        Return true for non-CA ports using accelerated compositing.
        * WebView.cpp:
        (WebView::~WebView):
        (WebView::sizeChanged):
        (WebView::paint):
        (WebView::setShouldInvertColors):
        (WebView::flushPendingGraphicsLayerChangesSoon):
        (WebView::setAcceleratedCompositing):
        * WebView.h:
        Added USE(CA) where necessary to compile WinCairo with accelerated compositing.

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Attempt to fix the Windows build after http://trac.webkit.org/changeset/157547.

        Apparently some *more* Windows code uses setFrame and I missed it.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::LayerClient::platformCALayerLayoutSublayersOfLayer):

2013-10-16  Jochen Eisinger  <jochen@chromium.org>

        A page should exit fullscreen mode if it opens a new popup
        https://bugs.webkit.org/show_bug.cgi?id=122865

        Reviewed by Jer Noble.

        If a fullscreen page opens a popup, the popup would be hidden and
        therefore invisible to the user. To avoid this, exit fullscreen mode
        before opening a new window.

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

2013-10-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Windows old front-end related code
        https://bugs.webkit.org/show_bug.cgi?id=122845

        Reviewed by Brent Fulgham.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::openInspectorFrontend):

2013-10-14  Roger Fong  <roger_fong@apple.com>

        Windows select element doesn't draw RTL properly.
        https://bugs.webkit.org/show_bug.cgi?id=122785.

        Reviewed by Brent Fulgham.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::selectItemWritingDirectionIsNatural):
        (WebChromeClient::selectItemAlignmentFollowsMenuWritingDirection):

2013-10-14  Tim Horton  <timothy_horton@apple.com>

        Virtualize PlatformCALayer
        https://bugs.webkit.org/show_bug.cgi?id=122672

        Reviewed by Anders Carlsson.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::FullscreenVideoController):
        Include PlatformCALayerWin.h and explicitly make PlatformCALayerWins here.

2013-10-12  Darin Adler  <darin@apple.com>

        Get rid of the toHTMLElement helper for casting FormAssociatedElement to HTMLElement
        https://bugs.webkit.org/show_bug.cgi?id=122713

        Reviewed by Sam Weinig.

        * WebFrame.cpp:
        (WebFrame::controlsInForm): Use asHTMLElement.

2013-10-12  Darin Adler  <darin@apple.com>

        Use unique_ptr instead of delete in a few places
        https://bugs.webkit.org/show_bug.cgi?id=122639

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        (privateSession):
        (identifierBase):
        (WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
        (WebFrameNetworkingContext::setPrivateBrowsingStorageSessionIdentifierBase):
        (WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebFrameNetworkingContext::destroyPrivateBrowsingSession):
        (WebFrameNetworkingContext::storageSession):

2013-10-10  Anders Carlsson  <andersca@apple.com>

        Fix build.
        
        * Interfaces/WebKit.idl:
        Oops, didn't mean to remove the uuid for WebURLResponse.

2013-10-10  Anders Carlsson  <andersca@apple.com>

        Remove WebScrollBar
        https://bugs.webkit.org/show_bug.cgi?id=122623

        Reviewed by Brent Fulgham.

        WebScrollBar isn't used by anyone, remove it.

        * ForEachCoClass.h:
        * Interfaces/IWebScrollBarDelegatePrivate.idl: Removed.
        * Interfaces/IWebScrollBarPrivate.idl: Removed.
        * Interfaces/WebKit.idl:
        * WebKitClassFactory.cpp:
        (WebKitClassFactory::CreateInstance):
        * WebScrollBar.cpp: Removed.
        * WebScrollBar.h: Removed.

2013-10-10  Beth Dakin  <bdakin@apple.com>

        Build fix after http://trac.webkit.org/changeset/157253

        * WebScrollBar.h:

2013-10-09  peavo@outlook.com  <peavo@outlook.com>

        [Win] BeginPaint should only be called in response to WM_PAINT.
        https://bugs.webkit.org/show_bug.cgi?id=122549

        Reviewed by Brent Fulgham.

        According to the documentation, the Win32 api function BeginPaint should only be called in response to a WM_PAINT message.
        Currently, the WebView window procedure might call this function (via WebView::paint(0, 0)) for all types of messages.
        Also, there is potential for double drawing. If some message is dispatched before WM_PAINT, WebView::paint(0, 0) will be called.
        This call does not validate the area drawn, so later the WM_PAINT will arrive, drawing the same area.
        This can be fixed by calling the Win32 function UpdateWindow(), which will do a synchronous window update, and validate the area.

        * WebView.cpp:
        (WebView::WebViewWndProc): Use Win32 function UpdateWindow() to draw invalid area.

2013-10-07  Sam Weinig  <sam@webkit.org>

        Consolidate findString functions
        https://bugs.webkit.org/show_bug.cgi?id=122480

        Reviewed by Darin Adler.

        * WebView.cpp:
        (WebView::searchFor):

2013-10-07  Sam Weinig  <sam@webkit.org>

        CTTE: Use references in and around DragController
        https://bugs.webkit.org/show_bug.cgi?id=122427

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::actionMaskForDrag):
        (WebDragClient::willPerformDragDestinationAction):
        (WebDragClient::willPerformDragSourceAction):
        (WebDragClient::startDrag):
        * WebCoreSupport/WebDragClient.h:

2013-10-04  Anders Carlsson  <andersca@apple.com>

        FramePolicyFunction should be an std::function
        https://bugs.webkit.org/show_bug.cgi?id=122362

        Reviewed by Darin Adler.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDecidePolicyForResponse):
        (WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebFrameLoaderClient::dispatchWillSubmitForm):
        (WebFrameLoaderClient::receivedPolicyDecision):

2013-10-03  Sam Weinig  <sam@webkit.org>

        Remove shouldRubberBandInDirection from the WKBundlePageUIClient
        https://bugs.webkit.org/show_bug.cgi?id=122309

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebChromeClient.h:

2013-10-02  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed build fix.

        * WebScriptWorld.cpp:
        (WebScriptWorld::findOrCreateWorld):

2013-10-01  Sam Weinig  <sam@webkit.org>

        CTTE: DOMWrapperWorlds should be passed around by reference
        https://bugs.webkit.org/show_bug.cgi?id=122206

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        * WebCoreSupport/WebFrameLoaderClient.h:
        * WebScriptWorld.cpp:
        (WebScriptWorld::standardWorld):
        (WebScriptWorld::findOrCreateWorld):
        * WebScriptWorld.h:
        (WebScriptWorld::world):

2013-10-01  Alex Christensen  <achristensen@webkit.org>

        Implemented createWebViewWithRequest in WinLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=122069

        Reviewed by Brent Fulgham.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::createWindow):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchCreatePage):
        Pass request url from the NavigationAction to createWebViewWithRequest.

2013-09-30  Andreas Kling  <akling@apple.com>

        Try to fix the Windows build.

        * WebFrame.cpp:
        (WebFrame::pauseAnimation):
        (WebFrame::pauseTransition):

2013-09-27  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed build fix following r156560.

        * WebView.h:

2013-09-26  Darin Adler  <darin@apple.com>

        rename KURL to URL
        https://bugs.webkit.org/show_bug.cgi?id=16214

        Reviewed by Andreas Kling.

        * many files: Renamed, using script.

2013-09-27  Darin Adler  <darin@apple.com>

        Add empty MainFrame class
        https://bugs.webkit.org/show_bug.cgi?id=121770

        Reviewed by Andreas Kling.

        * win/WebCoreSupport/WebDragClient.cpp:
        * win/WebCoreSupport/WebContextMenuClient.cpp:
        * win/WebDropSource.cpp:
        * win/WebFrame.cpp:
        * win/WebView.cpp:
        Include MainFrame.h instead of Frame.h as needed.

2013-09-25  Roger Fong  <roger_fong@apple.com>

        [Windows] Attempting to scroll from a non-scrollable layer results the main document getting scrolled.
        https://bugs.webkit.org/show_bug.cgi?id=121889.
        <rdar://problem/15072441>

        Reviewed by Timothy Horton.

        * WebView.cpp:
        (WebView::gesture): 
        Call scrollByRecursively on the current RenderLayer's enclosingScrollableLayer to make sure that the method
        doesn't bail early and end up just scrolling the main document instead of the next scrollable layer in the RenderLayer tree.

2013-09-25  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Replace CF time functions with Windows API functions in WebHistory
        https://bugs.webkit.org/show_bug.cgi?id=121599

        Reviewed by Brent Fulgham.

        This reduces the dependencies on the CoreFoundation library.

        * WebHistory.cpp:
        (addDayToSystemTime):
        (getDayBoundaries):
        (beginningOfDay):
        (dateKey):
        (WebHistory::orderedLastVisitedDays):
        * WebHistory.h:

2013-09-24  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Refactor RuntimeEnabledFeatures as a Singleton.
        https://bugs.webkit.org/show_bug.cgi?id=121883

        Reviewed by Jer Noble.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Use singleton accessor

2013-09-24  Roger Fong  <roger_fong@apple.com>

        [Windows] Overpanning occurs even when what is being panned isn't the main document.
        https://bugs.webkit.org/show_bug.cgi?id=121885.
        <rdar://problem/15072332>.

        Reviewed by Brent Fulgham.

        * WebView.cpp:
        (WebView::gestureNotify):
        (WebView::gesture):

2013-09-24  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed crash fix after r156321.

        Fix a few mistakes in the use of Vectors and counting that introduced test crashes.

        * WebHistory.cpp:
        (WebHistory::removeAllItems): Loop termination tried to test an unsigned for negative size.
        (WebHistory::removeItemFromDateCaches): Vector was being created with empty entries.
        (WebHistory::addItemToDateCaches): Ditto.

2013-09-24  Patrick Gansterer  <paroga@webkit.org>

        Make WebHistory more type safe
        https://bugs.webkit.org/show_bug.cgi?id=121801

        Reviewed by Brent Fulgham.

        Use a WTF::Vector instead of a CFMutableArray to avoid
        casting from void* all the time when accessing the entries.
        This reduces the dependencies on CoreFoundation too.

        * WebHistory.cpp:
        (getDayBoundaries):
        (beginningOfDay):
        (dateKey):
        (WebHistory::orderedItemsLastVisitedOnDay):
        (WebHistory::removeItemFromDateCaches):
        (WebHistory::addItemToDateCaches):
        * WebHistory.h:

2013-09-23  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Implement WebMutableURLRequest::setHTTPBody()
        https://bugs.webkit.org/show_bug.cgi?id=91920

        Reviewed by Brent Fulgham.

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::setHTTPBody):
        (WebMutableURLRequest::setHTTPBodyStream):

2013-09-23  Patrick Gansterer  <paroga@webkit.org>

        use NOMINMAX instead of #define min min
        https://bugs.webkit.org/show_bug.cgi?id=73563

        Reviewed by Brent Fulgham.

        Use NOMINMAX instead of #define min/max as a cleaner
        way of ensuring that Windows system header files don't
        define min/max as macro in the first place.

        * WebKitPrefix.h:

2013-09-22  Sam Weinig  <sam@webkit.org>

        Try to fix the windows build (take 2).

        * DOMEventsClasses.cpp:
        (DOMEvent::createInstance):

2013-09-22  Sam Weinig  <sam@webkit.org>

        Try to fix the windows build.

        * DOMEventsClasses.cpp:
        (DOMEvent::createInstance):

2013-09-20  Roger Fong  <roger_fong@apple.com>

        Handle panning gestures messages properly on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=121711.

        Reviewed by Brent Fulgham.

        This fixes a number of issues with panning gestures on Windows.
        1. Two finger panning in one direction can sometimes cause some unexpected scrolling 
        in the other direction when the gesture first begins (directions meaning horizontal and vertical)
        2. Single finger horizontal panning should only be disabled when attempting to select text.
        3. Scrolling via panning should be clamped, other wise we can scroll contents completely out of the scrollview.
        4. Horizontal overpan should work.
        5. Overpan should occur whenever we scroll to the extents of whichever scroll view we're currently scrolling.

        * WebView.cpp:
        (WebView::gestureNotify):
        (WebView::gesture):

2013-09-20  Patrick Gansterer  <paroga@webkit.org>

        Fix MIDL files for Visual Studio 2012
        https://bugs.webkit.org/show_bug.cgi?id=121552

        Reviewed by Brent Fulgham.

        The MIDL compiler shipped with Visual Studio 2012 does not accept forward declarations
        with typedefs. Use the struct keyword in the function signature to fix this problem.

        * Interfaces/DOMPrivate.idl:

2013-09-20  Patrick Gansterer  <paroga@webkit.org>

        Remove duplicated secondsPerDay variables
        https://bugs.webkit.org/show_bug.cgi?id=121601

        Reviewed by Andreas Kling.

        Use secondsPerDay from DateMath.h instead of defining it again.

        * MarshallingHelpers.cpp:

2013-09-20  Csaba Osztrogonác  <ossy@webkit.org>

        Add covariant RenderElement* Element::renderer()
        https://bugs.webkit.org/show_bug.cgi?id=121638

        Unreviewed buildfix after r156144.

        * DOMCoreClasses.cpp:
        (DOMElement::boundingBox):
        (DOMElement::font):

2013-09-18  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Build fix after r156063.

        * WebHistory.h: std::unique is an algorithm; std::unique_ptr is what we want here!

2013-09-18  Sam Weinig  <sam@webkit.org>

        Replace use of OwnArrayPtr<Foo> with std::unique_ptr<Foo[]> in WebKit and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=121568

        Reviewed by Andreas Kling.

        * WebHistory.cpp:
        (WebHistory::removeAllItems):
        (WebHistory::orderedLastVisitedDays):
        (WebHistory::addItemToDateCaches):
        (WebHistory::removeItemFromDateCaches):
        * WebHistory.h:
        * WebPreferences.cpp:
        (WebPreferences::copyWebKitPreferencesToCFPreferences):

2013-09-18  Patrick Gansterer  <paroga@webkit.org>

        Make WebHistory more type safe
        https://bugs.webkit.org/show_bug.cgi?id=119389

        Reviewed by Brent Fulgham.

        Use a WTF::HashMap instead of a CFMutableDictionary to avoid
        casting from void* all the time when accessing the entries.
        This reduces the dependencies on CoreFoundation too.

        * WebHistory.cpp:
        (WebHistory::WebHistory):
        (WebHistory::removeAllItems):
        (WebHistory::allItems):
        (WebHistory::removeItem):
        (WebHistory::addItem):
        (WebHistory::visitedURL):
        (WebHistory::itemForURL):
        (WebHistory::removeItemForURLString):
        (WebHistory::itemForURLString):
        (WebHistory::addVisitedLinksToPageGroup):
        * WebHistory.h:

2013-09-17  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Speculative build fix after r155963

        * WebKitCOMAPI.cpp:
        (classFactory): Use nullptr rather than 0 for HashMap.

2013-09-16  Enrica Casucci  <enrica@apple.com>

        Remove unused function didSetSelectionTypesForPasteboard from EditorClient.
        https://bugs.webkit.org/show_bug.cgi?id=121464

        Reviewed by Darin Adler.

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

2013-09-16  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Rendering stops when mouse is moving for some types of animations.
        https://bugs.webkit.org/show_bug.cgi?id=121329

        Reviewed by Anders Carlsson.

        * WebView.cpp:
        (WebView::WebView): Add new display flag.
        (WebView::repaint): Mark view as needing a display operation.
        (WebView::addToDirtyRegion): Ditto
        (WebView::scrollBackingStore): Ditto
        (WebView::sizeChanged): Ditto
        (WebView::updateBackingStore): Ditto
        (WebView::performLayeredWindowUpdate): Mark the WebView as having been
        moved to screen.
        (WebView::paintIntoWindow): Ditto
        (WebView::WebViewWndProc): If the view needs display, and it was not done during
        this message loop iteration, draw the screen.
        * WebView.h:
        (WebView::needsDisplay): Added

2013-09-15  Patrick Gansterer  <paroga@webkit.org>

        Remove dependency on CoreFoundation from WebIconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=119387

        Reviewed by Brent Fulgham.

        * COMVariantSetter.h:
        (COMVariant::operator&):
        (COMVariant::operator->):
        * WebIconDatabase.cpp:
        (WebIconDatabase::iconDatabaseNotificationUserInfoURLKey):
        (postDidAddIconNotification):
        * WebIconDatabase.h:
        * WebView.cpp:
        (WebView::notifyDidAddIcon):

2013-09-11  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Avoid converting from IntSize->SIZE->IntSize
        https://bugs.webkit.org/show_bug.cgi?id=121180

        Reviewed by Anders Carlsson.

        * WebIconDatabase.cpp:
        (WebIconDatabase::iconForURL): Guard against null SIZE argument.
        This was dereferenced with checking before! Use IntSize arguments.
        (WebIconDatabase::defaultIconWithSize): Used passed-in IntSize.
        (createDIB): Take an IntSize argument.
        (WebIconDatabase::getOrCreateSharedBitmap): Take IntSize argument.
        (WebIconDatabase::getOrCreateDefaultIconBitmap): Ditto.
        * WebIconDatabase.h: Update for IntSize arguments.
        * WebView.cpp:
        (WebView::dispatchDidReceiveIconFromWebFrame): Pass address of
        IntSize directly, rather than casting to SIZE first.

2013-09-11  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build correction after r155507.

        * WebCoreSupport/WebChromeClient.cpp: Add missing header include
        to define isHTMLVideoElement.

2013-09-11  peavo@outlook.com  <peavo@outlook.com>

        [Win] Compile error when VIDEO is not enabled.
        https://bugs.webkit.org/show_bug.cgi?id=121156

        Reviewed by Andreas Kling.

        * WebView.cpp:
        (WebView::enterFullscreenForNode): Protect isHTMLVideoElement() function with ENABLE(VIDEO) guard.

2013-09-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate more HTML type checks and casting
        https://bugs.webkit.org/show_bug.cgi?id=121080

        Reviewed by Andreas Kling.

        Clean-up remained functions of HTML elements using auto-generated isFooElement(),
        and replace toFooElement() with ELEMENT_TYPE_CASTS() macro.

        Besides this patch clean-up unnecessary checks which are being supported by
        auto-generated isFooElement().

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::supportsFullscreenForNode):
        * WebView.cpp:
        (WebView::enterFullscreenForNode):

2013-09-10  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Create SharedGDIObject Class Template
        https://bugs.webkit.org/show_bug.cgi?id=121037

        Reviewed by Anders Carlsson.

        * WebView.cpp: Change implementations to use the new SharedGDIObject
        class.
        (WebView::addToDirtyRegion):
        (WebView::scrollBackingStore):
        (WebView::updateBackingStore):
        (WebView::performLayeredWindowUpdate):
        (WebView::paint):
        (WebView::backingStore):
        * WebView.h: Ditto.

2013-09-09  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Change from using OwnPtr<GDI Stuff> to new GDIObject template.
        https://bugs.webkit.org/show_bug.cgi?id=120778

        Reviewed by Anders Carlsson.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::createHUDWindow): Switch to GDIObject.
        (FullscreenVideoController::draw): Ditto.
        * FullscreenVideoController.h:
        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::frameRectsChanged): Switch to GDIObject.
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::update): Switch to GDIObject.
        * WebView.cpp:
        (WebView::scrollBackingStore): Switch to GDIObject.
        (WebView::updateBackingStore): Ditto.
        (WebView::performLayeredWindowUpdate): Ditto.
        (WebView::paint): Ditto.
        (WebView::paintIntoBackingStore): Ditto.
        (WebView::paintIntoWindow): Ditto.
        (WebView::generateSelectionImage): Ditto.

2013-09-05  Roger Fong  <roger_fong@apple.com>

        [Windows] Implement text offset methods of IAccessibleText interface.
        https://bugs.webkit.org/show_bug.cgi?id=120820.
        <rdar://problem/14925242>

        Reviewed by Brenet Fulgham.

        * AccessibleTextImpl.cpp:
        (AccessibleText::get_textBeforeOffset):
        (AccessibleText::get_textAfterOffset):
        (AccessibleText::get_textAtOffset):
        (AccessibleText::isInRange):
        * AccessibleTextImpl.h:

2013-08-30  Andreas Kling  <akling@apple.com>

        Windows build fix for Document& Node::document().

        * DOMCoreClasses.cpp:
        (DOMNode::createInstance):

2013-08-28  Brent Fulgham  <bfulgham@apple.com>

        [Windows] LayoutTests on Windows debug fails and exits early
        https://bugs.webkit.org/show_bug.cgi?id=120438

        Reviewed by Tim Horton.

        Visual Studio mishandles char* containing utf8-content. Must manually
        escape non-ASCII characters so the byte stream is correct for localized
        string lookup.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::cannotShowURLError): Replace unicode apostrophe
        character with utf8-byte equivalent.
        (WebFrameLoaderClient::cannotShowMIMETypeError): Ditto.
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin): Ditto.

2013-08-28  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Provide useful error messages for WebKitErrorDomain errors
        https://bugs.webkit.org/show_bug.cgi?id=120428

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::cancelledError): Provide text for this error.
        (WebFrameLoaderClient::blockedError): Hook up WEB_UI_STRING for this error.
        (WebFrameLoaderClient::cannotShowURLError): Ditto
        (WebFrameLoaderClient::interruptedForPolicyChangeError): Ditto
        (WebFrameLoaderClient::cannotShowMIMETypeError): Ditto
        (WebFrameLoaderClient::fileDoesNotExistError): Provide text for this error.
        (WebFrameLoaderClient::pluginWillHandleLoadError): Hook up WEB_UI_STRING for this error.
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin): Ditto.
        (WebFrameLoaderClient::createJavaAppletWidget): Ditto.
        (WebFrameLoaderClient::webHistory): Remove blank line above method.

2013-08-27  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Loader is not properly determining supported MIME types
        https://bugs.webkit.org/show_bug.cgi?id=120383

        Reviewed by Eric Carlson.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::canShowMIMEType): Modify to ask WebView if it can
        display the media type. Use new helper function to avoid converting a String
        to BSTR, only to immediatly be converted from BSTR back to String.
        (WebFrameLoaderClient::canShowMIMETypeAsHTML): Ditto.
        * WebView.cpp:
        (WebView::canShowMIMEType): Move logic to a new (similarly named) helper function.
        (WebView::canShowMIMETypeAsHTML): Ditto.
        * WebView.h: Add declaration for two new helper functions.

2013-08-26  Ryosuke Niwa  <rniwa@webkit.org>

        Another Windows build fix after r154658.

        * WebView.cpp:
        (WebView::shouldClose):

2013-08-26  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Add missing interface files that were left out in r154627.

        * Interfaces/Accessible2/AccessibleEditableText.idl: Added.
        * Interfaces/Accessible2/AccessibleText.idl: Added.
        * Interfaces/Accessible2/AccessibleText2.idl: Added.

2013-08-26  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Let Page create the main Frame.
        https://bugs.webkit.org/show_bug.cgi?id=120323

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::WebFrameLoaderClient): Remove assertion that frame
        is passed as construction argument.
        (WebFrameLoaderClient::createFrame): Call new 'createSubframeWithOwnerElement'
        * WebCoreSupport/WebFrameLoaderClient.h: Update constructor to
        handle case of no default frame argument.
        (WebFrameLoaderClient::setWebFrame): Added.
        * WebFrame.cpp:
        (WebFrame::createSubframeWithOwnerElement): Renamed from 'init'.
        (WebFrame::initWithWebFrameView): Added for new page-driven load path.
        * WebFrame.h: Added new method signatures.
        * WebView.cpp:
        (WebView::initWithFrame): Update to match behavior of other ports.

2013-08-23  Roger Fong  <roger_fong@apple.com>

        <https://bugs.webkit.org/show_bug.cgi?id=119829> Add IAccessibleText and IAccessibleEditableText implementation.

        Reviewed by Chris Fleizach.

        Add IAccessibleText and IAccessibleEditableText interfaces and implementation to AppleWin port.

        * AccessibleBase.cpp:
        (AccessibleBase::createInstance): Create an AccessibleText instance when necessary.
        (AccessibleBase::QueryService):
        * AccessibleBase.h:
        * AccessibleTextImpl.cpp: Added.
        (AccessibleText::AccessibleText):
        (AccessibleText::addSelection):
        (AccessibleText::get_attributes): Not Implemented
        (AccessibleText::get_caretOffset):
        (AccessibleText::get_characterExtents):
        (AccessibleText::get_nSelections):
        (AccessibleText::get_offsetAtPoint):
        (AccessibleText::get_selection):
        (AccessibleText::get_text):
        (AccessibleText::get_textBeforeOffset): Not Implemented
        (AccessibleText::get_textAfterOffset): Not Implemented
        (AccessibleText::get_textAtOffset): Not Implemented
        (AccessibleText::removeSelection):
        (AccessibleText::setCaretOffset):
        (AccessibleText::setSelection):
        (AccessibleText::get_nCharacters):
        (AccessibleText::scrollSubstringTo):
        (AccessibleText::scrollSubstringToPoint):
        (AccessibleText::get_newText): Not Implemented
        (AccessibleText::get_oldText): Not Implemented
        (AccessibleText::get_attributeRange): Not Implemented
        (AccessibleText::copyText):
        (AccessibleText::deleteText):
        (AccessibleText::insertText):
        (AccessibleText::cutText):
        (AccessibleText::pasteText):
        (AccessibleText::replaceText):
        (AccessibleText::setAttributes): Not Implemented
        (AccessibleText::QueryInterface):
        (AccessibleText::Release):
        (AccessibleText::convertSpecialOffset):
        (AccessibleText::initialCheck):
        * AccessibleTextImpl.h: Added.
        (AccessibleText::~AccessibleText):
        (AccessibleText::AddRef):

2013-08-24  Darin Adler  <darin@apple.com>

        Frame::tree should return a reference instead of a pointer
        https://bugs.webkit.org/show_bug.cgi?id=120259

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::createFrame):
        * WebFrame.cpp:
        (WebFrame::name):
        (WebFrame::findFrameNamed):
        (WebFrame::parentFrame):
        (EnumChildFrames::EnumChildFrames):
        (EnumChildFrames::Next):
        (EnumChildFrames::Skip):
        (EnumChildFrames::Reset):
        (WebFrame::isDescendantOfFrame):
        (WebFrame::unmarkAllMisspellings):
        (WebFrame::unmarkAllBadGrammar):
        * WebView.cpp:
        (WebView::initWithFrame):
        (incrementFrame):
        (WebView::clearMainFrameName):
        Use tree(). instead of tree()->.

2013-08-23  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Refactor WebFrame to compose with WebFrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=120092

        Reviewed by Anders Carlsson.

        Revise WebFrame implementation on Windows to no longer subclass from
        WebFrameLoaderClient, instead using a fully-functional WebFrameLoaderClient
        as a helper object to perform the tasks, as is done in the other
        ports. This is a step towards completing
        https://bugs.webkit.org/show_bug.cgi?id=119964.

        * WebCoreSupport/WebFrameLoaderClient.cpp: Add a new 'private data'
        object to house the policy delegate and function.
        (WebFrameLoaderClient::WebFramePolicyListenerPrivate::WebFramePolicyListenerPrivate):
        Create the new private data object.
        (WebFrameLoaderClient::WebFramePolicyListenerPrivate::~WebFramePolicyListenerPrivate):
        Destroy the new private data object.
        (WebFrameLoaderClient::WebFrameLoaderClient): Moved from WebFrame.cpp
        (WebFrameLoaderClient::frameLoaderDestroyed): Ditto
        (WebFrameLoaderClient::makeRepresentation): Ditto
        (WebFrameLoaderClient::forceLayoutForNonHTML): Ditto
        (WebFrameLoaderClient::setCopiesOnScroll): Ditto
        (WebFrameLoaderClient::detachedFromParent2): Ditto
        (WebFrameLoaderClient::detachedFromParent3): Ditto
        (WebFrameLoaderClient::convertMainResourceLoadToDownload): Ditto
        (WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache): Ditto
        (WebFrameLoaderClient::dispatchDidFailProvisionalLoad): Ditto
        (WebFrameLoaderClient::dispatchDidFailLoad): Ditto
        (WebFrameLoaderClient::dispatchDecidePolicyForResponse): Ditto
        (WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction): Ditto
        (WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction): Ditto
        (WebFrameLoaderClient::dispatchUnableToImplementPolicy): Ditto
        (WebFrameLoaderClient::dispatchWillSendSubmitEvent): Ditto
        (WebFrameLoaderClient::dispatchWillSubmitForm): Ditto
        (WebFrameLoaderClient::startDownload): Ditto
        (WebFrameLoaderClient::willChangeTitle): Ditto
        (WebFrameLoaderClient::didChangeTitle): Ditto
        (WebFrameLoaderClient::cancelledError): Ditto
        (WebFrameLoaderClient::blockedError): Ditto
        (WebFrameLoaderClient::cannotShowURLError): Ditto
        (WebFrameLoaderClient::interruptedForPolicyChangeError): Ditto
        (WebFrameLoaderClient::cannotShowMIMETypeError): Ditto
        (WebFrameLoaderClient::fileDoesNotExistError): Ditto
        (WebFrameLoaderClient::pluginWillHandleLoadError): Ditto
        (WebFrameLoaderClient::shouldFallBack): Ditto
        (WebFrameLoaderClient::canHandleRequest): Ditto
        (WebFrameLoaderClient::canShowMIMEType): Ditto
        (WebFrameLoaderClient::canShowMIMETypeAsHTML): Ditto
        (WebFrameLoaderClient::representationExistsForURLScheme): Ditto
        (WebFrameLoaderClient::generatedMIMETypeForURLScheme): Ditto
        (WebFrameLoaderClient::frameLoadCompleted): Ditto
        (WebFrameLoaderClient::saveViewStateToItem): Ditto
        (WebFrameLoaderClient::restoreViewState): Ditto
        (WebFrameLoaderClient::provisionalLoadStarted): Ditto
        (WebFrameLoaderClient::didFinishLoad): Ditto
        (WebFrameLoaderClient::prepareForDataSourceReplacement): Ditto
        (WebFrameLoaderClient::userAgent): Ditto
        (WebFrameLoaderClient::objectContentType): Ditto
        (WebFrameLoaderClient::createJavaAppletWidget): Ditto
        (WebFrameLoaderClient::overrideMediaType): Ditto
        (WebFrameLoaderClient::documentElementAvailable): Ditto
        (WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld): Ditto
        (WebFrameLoaderClient::registerForIconNotification): Ditto
        (WebFrameLoaderClient::didPerformFirstNavigation): Ditto
        (WebFrameLoaderClient::createNetworkingContext): Ditto
        (WebFrameLoaderClient::shouldAlwaysUsePluginDocument): Ditto
        (WebFrameLoaderClient::revertToProvisionalState): Ditto
        (WebFrameLoaderClient::setMainFrameDocumentReady): Ditto
        (WebFrameLoaderClient::cancelPolicyCheck): Ditto
        (WebFrameLoaderClient::setUpPolicyListener): Ditto
        (WebFrameLoaderClient::receivedPolicyDecision): Ditto
        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient::webFrame): Add accessor method
        * WebDataSource.cpp:
        (WebDataSource::representation): Loader client is now
        a WebFrameLoaderClient (not a WebFrame).
        (WebDataSource::webFrame): Ditto
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read): Loader client is now
        a WebFrameLoaderClient (not a WebFrame)
        * WebFrame.cpp:
        (kit): Revise for WebFrameLoaderClient use.
        (WebFrame::WebFramePrivate::WebFramePrivate): Remove
        WebFramePolicyListener and FramePolicyFunction, since
        they are no longer needed here. They were moved to
        the WebFrameLoaderClient object.
        (WebFrame::WebFrame): No longer inheriting from
        WebFramePolicyListener.
        (WebFrame::init): Frame::create now needs to be supplied
        with a new WebFramePolicyListener, rather than 'this'
        * WebFrame.h:
        * WebFramePolicyListener.cpp:
        (WebFramePolicyListener::receivedPolicyDecision): Loader
        client is now a WebFramePolicyClient, not a WebFrame.

2013-08-22  Andreas Kling  <akling@apple.com>

        Another Windows build fix.

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

2013-08-22  Andreas Kling  <akling@apple.com>

        Windows build juice.

        * WebDataSource.cpp:
        (WebDataSource::representation):
        (WebDataSource::webFrame):
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read):
        * WebFramePolicyListener.cpp:
        (WebFramePolicyListener::receivedPolicyDecision):

2013-08-21  Brent Fulgham  <bfulgham@apple.com>

        <https://webkit.org/b/120125> [Windows] Correct Tooltip Text

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::runOpenPanel): Make sure valid strings are passed to the File Open
        API call.
        * WebView.cpp:
        (WebView::setToolTip): Correct tooltip text (avoid passing address to temporary
        return value.)

2013-08-20  Brent Fulgham  <bfulgham@apple.com>

        <https://webkit.org/b/120098> [Windows] Enable the New Web Inspector

        Reviewed by Brian Weinstein.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::openInspectorFrontend): Use the new inspector
        if present in the WebKit distribution.
        (WebInspectorFrontendClient::localizedStringsURL): Use the new
        Web Inspector's localized strings (if present).

2013-08-20  Pratik Solanki  <psolanki@apple.com>

        <https://webkit.org/b/120029> Document::markers() should return a reference

        Reviewed by Andreas Kling.

        Document::m_markers is never NULL so return a reference from Document::markers(). Also mark
        m_markers as const and initialize it in member initialization.

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

2013-08-19  Pratik Solanki  <psolanki@apple.com>

        <https://webkit.org/b/119918> Frame::selection() should return a reference

        Reviewed by Darin Adler.

        m_selection is never NULL so return a reference from Frame::selection(). Also removed some
        unnecessary null checks and assert diff ts exposed as a result.

        * WebFrame.cpp:
        (WebFrame::currentForm):
        * WebView.cpp:
        (WebView::updateFocusedAndActiveState):
        (WebView::selectionRect):
        (WebView::centerSelectionInVisibleArea):
        (WebView::hasSelectedRange):
        (WebView::replaceSelectionWithText):
        (WebView::clearSelection):
        (WebView::prepareCandidateWindow):
        (WebView::onIMERequestCharPosition):
        (WebView::onIMERequestReconvertString):
        (WebView::firstRectForCharacterRangeForTesting):
        (WebView::selectedRangeForTesting):

2013-08-17  Andreas Kling  <akling@apple.com>

        Windows build fix after r154219.

        * WebFrame.cpp:
        (WebFrame::dispatchDidClearWindowObjectInWorld):

2013-08-17  Darin Adler  <darin@apple.com>

        <https://webkit.org/b/119941> Make Page::dragController return a reference

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::startDrag):
        * WebView.cpp:
        (WebView::keyStateToDragOperation):
        (WebView::DragEnter):
        (WebView::DragOver):
        (WebView::DragLeave):
        (WebView::Drop):
        Updated call sites.

2013-08-16  Pratik Solanki  <psolanki@apple.com>

        <https://webkit.org/b/119852> Frame::scriptController() should return a reference

        Reviewed by Andreas Kling.

        m_script is never NULL so we can just return a reference. Also remove some pointless null
        checks as a result of doing this.

        * WebFrame.cpp:
        (WebFrame::globalContext):
        (WebFrame::globalContextForScriptWorld):
        (WebFrame::dispatchDidClearWindowObjectInWorld):
        (WebFrame::stringByEvaluatingJavaScriptInScriptWorld):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):

2013-08-16  Andreas Kling  <akling@apple.com>

        Windows build juice.

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

2013-08-15  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Consolidate WebKit Bundle handling
        https://bugs.webkit.org/show_bug.cgi?id=119869

        Reviewed by Tim Horton.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::openInspectorFrontend): Switch to new
        WebCore::webkitBundle() method.
        (WebInspectorFrontendClient::localizedStringsURL): Ditto.

2013-08-15  Anders Carlsson  <andersca@apple.com>

        <https://webkit.org/b/119859> Frame::loader() should return a reference

        Reviewed by Andreas Kling.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::updateGlobalHistory):
        (WebFrameLoaderClient::updateGlobalHistoryRedirectLinks):
        (WebFrameLoaderClient::savePlatformDataToCachedFrame):
        (WebFrameLoaderClient::createFrame):
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin):
        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        (WebFrameNetworkingContext::blockedError):
        (WebFrameNetworkingContext::referrer):
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::Read):
        * WebFrame.cpp:
        (kit):
        (WebFrame::reloadFromOrigin):
        (WebFrame::loadRequest):
        (WebFrame::loadData):
        (WebFrame::dataSource):
        (WebFrame::provisionalDataSource):
        (WebFrame::stopLoading):
        (WebFrame::reload):
        (WebFrame::firstLayoutDone):
        (WebFrame::loadType):
        (WebFrame::clearOpener):
        (WebFrame::dispatchWillSubmitForm):
        (WebFrame::receivedPolicyDecision):
        (WebFrame::dispatchDecidePolicyForResponse):
        (WebFrame::dispatchDecidePolicyForNewWindowAction):
        (WebFrame::dispatchDecidePolicyForNavigationAction):
        (WebFrame::createJavaAppletWidget):
        * WebFramePolicyListener.cpp:
        (WebFramePolicyListener::receivedPolicyDecision):
        * WebView.cpp:
        (WebView::close):
        (WebView::canShowMIMEType):
        (WebView::setCustomTextEncodingName):
        (WebView::loadBackForwardListFromOtherView):
        (WebView::shouldClose):

2013-08-12  Andreas Kling  <akling@apple.com>

        More Windows build juice.

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

2013-08-09  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add support for KeyboardEvent.location attribute
        https://bugs.webkit.org/show_bug.cgi?id=119326

        Reviewed by Benjamin Poulain.

        Add new location attribute to DOMKeyboardEvent.

        * DOMEventsClasses.cpp:
        (DOMKeyboardEvent::location):
        * DOMEventsClasses.h:
        * Interfaces/DOMEvents.idl:

2013-08-07  Antti Koivisto  <antti@apple.com>

        Try to fix Win WK1 build.

        Not reviewed.

        * WebFrame.cpp:
        (WebFrame::invalidate):

2013-08-07  Patrick Gansterer  <paroga@webkit.org>

        Remove dependency on CoreFoundation from WebURLResponse
        https://bugs.webkit.org/show_bug.cgi?id=119390

        Reviewed by Brent Fulgham.

        * WebURLResponse.cpp:
        (localizedShortDescriptionForStatusCode):
        (WebURLResponse::localizedStringForStatusCode):

2013-08-05  Mark Rowe  <mrowe@apple.com>

        Another Windows release build fix.

        * WebKitLogging.cpp: Wrap the implementation file in !LOG_DISABLED #if's too.

2013-08-05  Mark Rowe  <mrowe@apple.com>

        Build fix for Windows release build.

        * WebKitLogging.h: Wrap things in !LOG_DISABLED so that we don't attempt to use macros that have not been defined.

2013-07-26  Mark Rowe  <mrowe@apple.com>

        Logging should be configurable using human-readable channel names rather than crazy bitmasks
        <http://webkit.org/b/119031>

        Implement shared logic for initializing logging channels based on human-readable channel names in WTF,
        and rework the WebCore, WebKit and WebKit2 logging initialization on top of it.

        Logging channels may now be enabled by providing a comma-separated list of channel names, with the special
        "all" name enabling all channels. Channel names prefixed with a leading "-" will result in the named channel
        being disabled. For instance, specifying "all,-history,-loading" will result in all logging channels except
        for history and loading being enabled.

        For OS X developers, this also changes the name of the user defaults used to enable logging. This is done to allow
        the old user defaults to remain set for those people that need to switch between version of WebKit before and
        after this change. Where the old user default keys were WebCoreLogLevel, WebKitLogLevel and WebKit2LogLevel,
        the new user default keys are WebCoreLogging, WebKitLogging and WebKit2Logging.

        For GTK developers, this changes the separator used in the WEBKIT_DEBUG environment variable to a comma for
        consistency with the other platforms and to enable more code sharing.

        While doing this work I've also taken the opportunity to eliminate the need to touch multiple files when
        adding a new logging channel. Now only the header in the relevant project needs to be updated.

        Reviewed by Sam Weinig.

        * WebKitLogging.cpp: Declare a WEBKIT_LOG_CHANNELS macro that can be used to apply a preprocessor macro across
        the set of all logging channels. Use this macro to declare the logging channels.
        * WebKitLogging.h: Use WEBKIT_LOG_CHANNELS to define all of the channels. Pass the channels to the new WTF
        function that handles the initialization. As per the previous implementation a developer needs to hard-code
        their desired log level here.
        * WebView.cpp: Switch from WebCore's InitializeLogging.h to Logging.h.

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

        [Windows] WebKit1 Fullscreen Video Play is Broken
        https://bugs.webkit.org/show_bug.cgi?id=119415

        Reviewed by Jer Noble.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Set accelerated
        rendering on by default on systems that support it.
        * WebView.cpp:
        (WebView::exitFullscreen): Clean up Fullscreen video controller
        once it is no longer used. This was preventing users from being
        able to reenter Fullscreen mode after leaving it.
        (WebView::fullScreenClientForceRepaint): Change assert to
        match the member actually being used in the method.

2013-08-01  Patrick Gansterer  <paroga@webkit.org>

        Rearrange the code of FrameWin
        https://bugs.webkit.org/show_bug.cgi?id=117984

        Reviewed by Brent Fulgham.

        * WebView.cpp:
        (WebView::generateSelectionImage):

2013-07-25  Andreas Kling  <akling@apple.com>

        ChromeClient::focusedNodeChanged() should be focusedElementChanged().
        <http://webkit.org/b/119110>

        Reviewed by Anders Carlsson.

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

2013-07-23  peavo@outlook.com  <peavo@outlook.com>

        [Win] WebView didReceiveIcon delegate call doesn't have the icon in it
        https://bugs.webkit.org/show_bug.cgi?id=100379

        Reviewed by Brent Fulgham.

        Added missing icon to WebView didReceiveIcon delegate call, fixes <rdar://problem/5491010>.

        * WebView.cpp:
        (WebView::dispatchDidReceiveIconFromWebFrame):

2013-07-22  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Download fails for certain urls.
        https://bugs.webkit.org/show_bug.cgi?id=118468

        Reviewed by Brent Fulgham.

        Initialize download from provided resource handle, request, and response object.

        * WebDownload.h: Use WebCore namespace for Curl download class.
        * WebDownloadCurl.cpp:
        (WebDownload::init): Initialize download from provided resource handle, request, and response object.

2013-07-19  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Http response code 401 (Authentication required) is not handled.
        https://bugs.webkit.org/show_bug.cgi?id=118849

        Reviewed by Brent Fulgham.

        The current Curl implementation does not handle a 401 response.
        When receiving http code 401, we need to give a notification that authorization is required, by calling the appropriate notification method.
        This gives a WebKit client the possibility to present a password dialog to the user.
        In response to this, we should provide Curl with the given username and password, so another request can be sent with the given credentials.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
            Implement empty method; use the same implementation as the CFNetwork version does,
            notify delegate when authorization is required. 
        * WebURLAuthenticationChallengeSenderCurl.cpp:
        (WebURLAuthenticationChallengeSender::cancelAuthenticationChallenge):
            Implement empty method; use the same implementation as the CFNetwork version does.
        (WebURLAuthenticationChallengeSender::continueWithoutCredentialForAuthenticationChallenge):
            Implement empty method; use the same implementation as the CFNetwork version does.
        (WebURLAuthenticationChallengeSender::useCredential):
            Implement empty method; use the same implementation as the CFNetwork version does.

2013-07-17  Kangil Han  <kangil.han@samsung.com>

        Use toHTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=118727

        Reviewed by Ryosuke Niwa.

        To avoid direct use of static_cast, this patch uses toHTMLMediaElement for code cleanup.

        * WebView.cpp:
        (WebView::enterFullscreenForNode):

2013-07-16  Kangil Han  <kangil.han@samsung.com>

        Use toHTMLSelectElement and dismiss isHTMLSelectElement
        https://bugs.webkit.org/show_bug.cgi?id=118714

        Reviewed by Ryosuke Niwa.

        To avoid direct use of static_cast, this patch introduces toHTMLIFrameElement for code cleanup.
        Additionally, this patch removes isHTMLSelectElement because not all element subclasses can be checked by a combination of tag names.

        * DOMHTMLClasses.cpp:
        (DOMHTMLSelectElement::options):
        (DOMHTMLSelectElement::activateItemAtIndex):

2013-07-15  Kangil Han  <kangil.han@samsung.com>

        Introduce toHTMLIFrameElement
        https://bugs.webkit.org/show_bug.cgi?id=118672

        Reviewed by Ryosuke Niwa.

        To avoid direct use of static_cast, this patch introduces toHTMLIFrameElement for code cleanup.

        * DOMHTMLClasses.cpp:
        (DOMHTMLIFrameElement::contentFrame):

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

        Reviewed by Simon Fraser.

        Remember the scroll position and restore after exiting full-screen mode.
        https://bugs.webkit.org/show_bug.cgi?id=61956

        Add support for two new FullScreenClient callbacks for saving and restoring the 
        scroll position of the full-screen frame.

        * WebView.cpp:
        (WebView::fullScreenClientSaveScrollPosition):
        (WebView::fullScreenClientRestoreScrollPosition):
        * WebView.h:

2013-07-01  Jochen Eisinger  <jochen@chromium.org>

        Remove support for consumable user gestures
        https://bugs.webkit.org/show_bug.cgi?id=118247

        Reviewed by Geoffrey Garen.

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

2013-07-01  peavo@outlook.com  <peavo@outlook.com>

        [Curl] WebDownload init method is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=118241

        Reviewed by Brent Fulgham.

        The WebDownload::init() method called when a normal load is changed to a download
        because of a decision by the policy delegate, is not implemented for Curl.

        * WebDownloadCurl.cpp:
        (WebDownload::init): Implement init() method.

2013-07-01  Kangil Han  <kangil.han@samsung.com>

        Adopt toHTMLTextAreaElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=118226

        Reviewed by Andreas Kling.

        To enhance readability, this patch adopts toHTMLTextAreaElement.
        This also helps out to reduce duplicated use of static_cast.

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):
        * DOMHTMLClasses.cpp:
        (DOMHTMLTextAreaElement::form):
        (DOMHTMLTextAreaElement::value):
        (DOMHTMLTextAreaElement::setValue):
        (DOMHTMLTextAreaElement::select):
        (DOMHTMLTextAreaElement::isUserEdited):

2013-06-29  Kangil Han  <kangil.han@samsung.com>

        Adopt is/toHTMLOptionElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=118212

        Reviewed by Andreas Kling.

        To enhance readability, this patch adopts is/toHTMLOptionElement.
        This also helps out to reduce duplicated use of static_cast.

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):
        * DOMHTMLClasses.cpp:
        (DOMHTMLOptionElement::text):
        (DOMHTMLOptionElement::label):

2013-06-28  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compilation error.
        https://bugs.webkit.org/show_bug.cgi?id=118131

        Reviewed by Brent Fulgham.

        * Interfaces/IWebView.idl: Include needed accessibility interface.
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::AXFinishFrameLoad): Accessibility methods should not be inside FULLSCREEN_API ifdef.

2013-06-27  Kangil Han  <kangil.han@samsung.com>

        Adopt is/toHTMLInputElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=118130

        Reviewed by Antti Koivisto.

        To enhance readability, this patch adopts is/toHTMLInputElement.
        This also helps out to reduce duplicated use of static_cast.

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):
        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::form):
        (DOMHTMLInputElement::disabled):
        (DOMHTMLInputElement::readOnly):
        (DOMHTMLInputElement::setType):
        (DOMHTMLInputElement::value):
        (DOMHTMLInputElement::setValue):
        (DOMHTMLInputElement::setValueForUser):
        (DOMHTMLInputElement::select):
        (DOMHTMLInputElement::setSelectionStart):
        (DOMHTMLInputElement::selectionStart):
        (DOMHTMLInputElement::setSelectionEnd):
        (DOMHTMLInputElement::selectionEnd):
        (DOMHTMLInputElement::isTextField):
        (DOMHTMLInputElement::rectOnScreen):
        (DOMHTMLInputElement::replaceCharactersInRange):
        (DOMHTMLInputElement::selectedRange):
        (DOMHTMLInputElement::setAutofilled):
        (DOMHTMLInputElement::isAutofilled):
        (DOMHTMLInputElement::isUserEdited):
        * WebFrame.cpp:
        (inputElementFromDOMElement):

2013-06-27  Anders Carlsson  <andersca@apple.com>

        Get rid of the last uses of deprecatedCharactersWithNullTermination()
        https://bugs.webkit.org/show_bug.cgi?id=118159

        Reviewed by Andreas Kling.

        Replace calls to deprecatedCharactersWithNullTermination() with charactersWithNullTermination().data().

        * COMPropertyBag.h:
        (::GetPropertyInfo):
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::runOpenPanel):
        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::updateWindowTitle):
        * WebDownloadCFNet.cpp:
        (WebDownload::didFinish):
        * WebKitSystemBits.cpp:
        (WebVolumeFreeSize):
        * WebLocalizableStrings.cpp:
        (LocalizedString::operator LPCTSTR):
        * WebView.cpp:
        (WebView::setToolTip):

2013-06-26  Anders Carlsson  <andersca@apple.com>

        Deprecate StringImpl::charactersWithNullTermination
        https://bugs.webkit.org/show_bug.cgi?id=118108

        Reviewed by Beth Dakin.

        Rename calls to charactersWithNullTermination to deprecatedCharactersWithNullTermination.

        * COMPropertyBag.h:
        (::GetPropertyInfo):
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::runOpenPanel):
        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::updateWindowTitle):
        * WebDownloadCFNet.cpp:
        (WebDownload::didFinish):
        * WebKitSystemBits.cpp:
        (WebVolumeFreeSize):
        * WebLocalizableStrings.cpp:
        (LocalizedString::operator LPCTSTR):
        * WebView.cpp:
        (WebView::setToolTip):

2013-06-26  Roger Fong  <roger_fong@apple.com>

        Add an accessibility delegate interface to AppleWin port.
        https://bugs.webkit.org/show_bug.cgi?id=118094.

        Reviewed by Brent Fulgham.

        * Interfaces/AccessibilityDelegate.idl: Added.
        * Interfaces/IWebView.idl:
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebChromeClient.cpp: Add methods that call into the AccessibilityDelegate.
        (WebChromeClient::AXStartFrameLoad):
        (WebChromeClient::AXFinishFrameLoad):
        * WebCoreSupport/WebChromeClient.h:
        * WebView.cpp: Add support for setting and getting the AccessibilityDelegate from the WebView.
        (WebView::close):
        (WebView::setAccessibilityDelegate):
        (WebView::accessibilityDelegate):
        * WebView.h:

2013-06-24  Kangil Han  <kangil.han@samsung.com>

        Adopt is/toHTMLFormElement for code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=117937

        Reviewed by Andreas Kling.

        This refers to http://src.chromium.org/viewvc/blink?view=revision&revision=152859

        To enhance readibility, this patch adopts is/toHTMLFormElement.
        This also helps out to reduce duplicated use of static_cast.

        * DOMCoreClasses.cpp:
        (DOMElement::createInstance):
        * DOMHTMLClasses.cpp:
        (DOMHTMLFormElement::action):
        (DOMHTMLFormElement::method):
        * WebFrame.cpp:
        (formElementFromDOMElement):

2013-06-20  Brent Fulgham  <bfulgham@apple.com>

        [Windows] AX: Radio buttons with "tab" role should describe themselves as tabs.
        https://bugs.webkit.org/show_bug.cgi?id=117837

        Reviewed by Chris Fleizach.

        * AccessibleBase.cpp:
        (MSAARole): Don't expose TabRole as a radio button to satisfy buggy screen readers.

2013-06-21  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        REGRESSION (r150663): Using webkitAudioContext in Inspector makes it undefined everywhere
        https://bugs.webkit.org/show_bug.cgi?id=117825

        Reviewed by Kentaro Hara.

        Use Settings to enable Web Audio instead of RuntimeEnabledFeatures.

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

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

        [Windows] Correct style on last patch.

        Reviewed by Tim Horton.

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        (WebFrameNetworkingContext::ensurePrivateBrowsingSession):

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

        [Windows] Unreviewed build correction.

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        (WebFrameNetworkingContext::ensurePrivateBrowsingSession): Make sure returned generic
        type is a CFStringRef before casting.

2013-06-19  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix for Apple Windows port.

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        (WebFrameNetworkingContext::ensurePrivateBrowsingSession):

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

        [Windows] AX: Extend notification support.
        https://bugs.webkit.org/show_bug.cgi?id=117761

        Reviewed by Anders Carlsson.

        * AccessibleDocument.cpp:
        (AccessibleDocument::state): Improve handling of focus state.
        * AccessibleDocument.h: Provide signature for new state override.

2013-06-19  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Does not compile.
        https://bugs.webkit.org/show_bug.cgi?id=117798

        Reviewed by Brent Fulgham.

        Add USE(CFNETWORK) guards.

        * WebCoreSupport/WebFrameNetworkingContext.cpp: Add USE(CFNETWORK) guard.
        (WebFrameNetworkingContext::ensurePrivateBrowsingSession): Change USE(CF_NETWORK) to USE(CFNETWORK).
        * WebCoreSupport/WebFrameNetworkingContext.h: Add USE(CFNETWORK) guard.

2013-06-18  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix for Apple Windows.

        * WebCoreSupport/WebFrameNetworkingContext.h:
        (WebFrameNetworkingContext::create):
        (WebFrameNetworkingContext::WebFrameNetworkingContext):
        (WebFrameNetworkingContext::userAgent):

2013-06-18  Roger Fong  <roger_fong@apple.com>

        Re-implement WebFrameNetworkingContext.
        <rdar://problem/13174821>.

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebFrameNetworkingContext.cpp: Added.
        (WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
        (WebFrameNetworkingContext::setPrivateBrowsingStorageSessionIdentifierBase):
        (WebFrameNetworkingContext::ensurePrivateBrowsingSession):
        (WebFrameNetworkingContext::destroyPrivateBrowsingSession):
        (WebFrameNetworkingContext::blockedError):
        (WebFrameNetworkingContext::referrer):
        (WebFrameNetworkingContext::storageSession):
        * WebCoreSupport/WebFrameNetworkingContext.h: Added.
        (WebFrameNetworkingContext::create):
        (WebFrameNetworkingContext::WebFrameNetworkingContext):

2013-06-18  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13174821> Remove files with an incorrect license.

        Rubber-stamped by Maciej Stachowiak.

        This will break the build, stay tuned for a fix coming soon.

        * WebCoreSupport/WebFrameNetworkingContext.cpp: Removed.
        * WebCoreSupport/WebFrameNetworkingContext.h: Removed.

2013-06-12  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Implement Accessibility2 APIs in Windows.
        https://bugs.webkit.org/show_bug.cgi?id=117561

        Reviewed by Anders Carlsson.

        * AccessibleBase.cpp: Add stubs for IAccessible2 interface, replace attributeValue
        method with get_attribute from IAccessible2 API.
        * AccessibleBase.h: Ditto.
        * AccessibleDocument.cpp: Revise signatures for IAccessible2.
        * AccessibleDocument.h: Ditto.
        * AccessibleImage.cpp: Revise signatures for IAccessible2.
        * AccessibleImage.h: Ditto.
        * Interfaces/Accessible2: Added.
        * Interfaces/Accessible2/Accessible2.idl: Added.
        * Interfaces/Accessible2/Accessible2_2.idl: Added.
        * Interfaces/Accessible2/AccessibleApplication.idl: Added.
        * Interfaces/Accessible2/AccessibleRelation.idl: Added.
        * Interfaces/Accessible2/AccessibleStates.idl: Added.
        * Interfaces/Accessible2/IA2CommonTypes.idl: Added.
        * Interfaces/AccessibleComparable.idl:
        * Interfaces/WebKit.idl: Reference IAccessible2 types.
        * WebFrame.cpp: 
        (WebFrame::accessible): Pass window handle to IAccessible types.

2013-06-12  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Support Title UI Element Accessibility Attribute
        https://bugs.webkit.org/show_bug.cgi?id=117530

        Reviewed by Anders Carlsson.

        * AccessibleBase.cpp:
        (AccessibleBase::attributeValue): Extend to handle Title UI Element.
        * AccessibleBase.h: Revise signature to use a variant argument.
        * Interfaces/AccessibleComparable.idl:  Revise interface to use variant

2013-06-12  Zan Dobersek  <zdobersek@igalia.com>

        Remove memoryInfoEnabled, quantizedMemoryInfoEnabled settings
        https://bugs.webkit.org/show_bug.cgi?id=117512

        Reviewed by Darin Adler.

        * Interfaces/IWebPreferencesPrivate.idl: Remove memoryInfoEnabled, setMemoryInfoEnabled entries.
        * WebPreferenceKeysPrivate.h: Remove the WebKitMemoryInfoEnabledPreferenceKey definition.
        * WebPreferences.cpp: Remove the memoryInfo, setMemoryInfoEnabled methods.
        (WebPreferences::initializeDefaultSettings): Remove the WebKitMemoryInfoEnabledPreferenceKey entry initialization.
        * WebPreferences.h: Remove the memoryInfo, setMemoryInfoEnabled method declarations.
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Remove the Settings::setMemoryInfoEnabled call, the method is being removed.

2013-06-11  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build correction after r151440.

        * AccessibleBase.cpp:
        (MSAARole): Switch back to emiting ROLE_SYSTEM_LISTITEM for
        ListItemRole Web role to avoid breaking existing test.

2013-06-11  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Implement 'attributeValue' accessor to support testing.
        https://bugs.webkit.org/show_bug.cgi?id=117513

        Reviewed by Anders Carlsson.

        * AccessibleBase.cpp:
        (AccessibleBase::attributeValue): Added.
        * AccessibleBase.h: Added method declaration.
        * Interfaces/AccessibleComparable.idl: New accessor interface.

2013-06-09  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Provide MSAA mappings for more WebCore roles.
        https://bugs.webkit.org/show_bug.cgi?id=117389

        Reviewed by Chris Fleizach.

        * AccessibleBase.cpp:
        (MSAARole): Add additional mappings between WebCore roles and MSAA roles.

2013-06-07  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Get rid of outdated raises() from Web IDL
        https://bugs.webkit.org/show_bug.cgi?id=117350

        Reviewed by Darin Adler.

        Replace raises() by [RaisesException].

        * Interfaces/DOMEvents.idl:

2013-06-03  Roger Fong  <roger_fong@apple.com>

        Nuke VS2005 files from the tree.
        <rdar://problem/14042021>.

        Rubberstamped by Brent Fulgham.

        * WebKit.vcproj: Removed.
        * WebKit.vcproj/FixMIDLHeaders.pl: Removed.
        * WebKit.vcproj/Interfaces.vcproj: Removed.
        * WebKit.vcproj/InterfacesCommon.vsprops: Removed.
        * WebKit.vcproj/InterfacesDebug.vsprops: Removed.
        * WebKit.vcproj/InterfacesDebugAll.vsprops: Removed.
        * WebKit.vcproj/InterfacesDebugCairoCFLite.vsprops: Removed.
        * WebKit.vcproj/InterfacesPostBuild.cmd: Removed.
        * WebKit.vcproj/InterfacesPreBuild.cmd: Removed.
        * WebKit.vcproj/InterfacesProduction.vsprops: Removed.
        * WebKit.vcproj/InterfacesRelease.vsprops: Removed.
        * WebKit.vcproj/InterfacesReleaseCairoCFLite.vsprops: Removed.
        * WebKit.vcproj/WebKit.make: Removed.
        * WebKit.vcproj/WebKit.rc: Removed.
        * WebKit.vcproj/WebKit.sln: Removed.
        * WebKit.vcproj/WebKit.submit.sln: Removed.
        * WebKit.vcproj/WebKit.vcproj: Removed.
        * WebKit.vcproj/WebKitApple.vsprops: Removed.
        * WebKit.vcproj/WebKitCFLite.vsprops: Removed.
        * WebKit.vcproj/WebKitDirectX.vsprops: Removed.
        * WebKit.vcproj/WebKitExportGenerator.vcproj: Removed.
        * WebKit.vcproj/WebKitExportGeneratorBuildCmd.cmd: Removed.
        * WebKit.vcproj/WebKitExportGeneratorCommon.vsprops: Removed.
        * WebKit.vcproj/WebKitExportGeneratorDebug.vsprops: Removed.
        * WebKit.vcproj/WebKitExportGeneratorDebugAll.vsprops: Removed.
        * WebKit.vcproj/WebKitExportGeneratorDebugCairoCFLite.vsprops: Removed.
        * WebKit.vcproj/WebKitExportGeneratorPostBuild.cmd: Removed.
        * WebKit.vcproj/WebKitExportGeneratorPreBuild.cmd: Removed.
        * WebKit.vcproj/WebKitExportGeneratorProduction.vsprops: Removed.
        * WebKit.vcproj/WebKitExportGeneratorRelease.vsprops: Removed.
        * WebKit.vcproj/WebKitExportGeneratorReleaseCairoCFLite.vsprops: Removed.
        * WebKit.vcproj/WebKitExports.def.in: Removed.
        * WebKit.vcproj/WebKitGUID.vcproj: Removed.
        * WebKit.vcproj/WebKitGUIDCommon.vsprops: Removed.
        * WebKit.vcproj/WebKitGUIDDebug.vsprops: Removed.
        * WebKit.vcproj/WebKitGUIDDebugAll.vsprops: Removed.
        * WebKit.vcproj/WebKitGUIDDebugCairoCFLite.vsprops: Removed.
        * WebKit.vcproj/WebKitGUIDPostBuild.cmd: Removed.
        * WebKit.vcproj/WebKitGUIDPreBuild.cmd: Removed.
        * WebKit.vcproj/WebKitGUIDProduction.vsprops: Removed.
        * WebKit.vcproj/WebKitGUIDRelease.vsprops: Removed.
        * WebKit.vcproj/WebKitGUIDReleaseCairoCFLite.vsprops: Removed.
        * WebKit.vcproj/WebKitLibCommon.vsprops: Removed.
        * WebKit.vcproj/WebKitLibDebug.vsprops: Removed.
        * WebKit.vcproj/WebKitLibDebugAll.vsprops: Removed.
        * WebKit.vcproj/WebKitLibDebugCairoCFLite.vsprops: Removed.
        * WebKit.vcproj/WebKitLibPostBuild.cmd: Removed.
        * WebKit.vcproj/WebKitLibPreBuild.cmd: Removed.
        * WebKit.vcproj/WebKitLibProduction.vsprops: Removed.
        * WebKit.vcproj/WebKitLibRelease.vsprops: Removed.
        * WebKit.vcproj/WebKitLibReleaseCairoCFLite.vsprops: Removed.
        * WebKit.vcproj/WebKit_Cairo.def: Removed.
        * WebKit.vcproj/WebKit_Cairo_debug.def: Removed.
        * 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/resource.h: 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.

2013-05-31  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Unable to download files.
        https://bugs.webkit.org/show_bug.cgi?id=116150

        Reviewed by Brent Fulgham.

        Implemented basic download functionality for Curl.

        * WebDownload.h:
        * WebDownloadCurl.cpp:
        (WebDownload::init):
        (WebDownload::start):
        (WebDownload::cancel):
        (WebDownload::deletesFileUponFailure):
        (WebDownload::setDeletesFileUponFailure):
        (WebDownload::setDestination):
        (WebDownload::useCredential):
        (WebDownload::didReceiveResponse):
        (WebDownload::didReceiveDataOfLength):
        (WebDownload::didFinish):
        (WebDownload::didFail):

2013-05-29  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Be consistent with allocation/deallocation behavior
        https://bugs.webkit.org/show_bug.cgi?id=116998

        Reviewed by Anders Carlsson.

        * WebPreferences.cpp:
        (WebPreferences::setStringValue): Switch from using _wcsdup and
        CFStringCreateWithCharactersNoCopy to just use the standard
        CFStringCreateWithCharacters call.

2013-05-28  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Many css2.1 tests fail on Apple's Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=75707

        Reviewed by Darin Adler.

        * WebKit.vcproj/WebKitExports.def.in: Export the
        WebCore::directoryName method for DRT use.

2013-05-28  Andreas Kling  <akling@apple.com>

        Document::setFocusedNode() should be setFocusedElement().
        <http://webkit.org/b/116857>

        Reviewed by Antti Koivisto.

        * DOMCoreClasses.cpp:
        (DOMElement::isFocused):
        * WebView.cpp:
        (WebView::setInitialFocus):

2013-05-27  Xueqing Huang  <huangxueqing@baidu.com>

        Move Windows port off legacy clipboard.
        https://bugs.webkit.org/show_bug.cgi?id=116258

        Reviewed by Darin Adler.

        * WebCoreSupport/WebDragClient.cpp:
        (WebDragClient::willPerformDragSourceAction): Get IDataObject from Pasteboard instead of Clipboard.
        (WebDragClient::startDrag): Ditto.

2013-05-26  Antti Koivisto  <antti@apple.com>

        Another build fix.
        
        Not reviewed.

        * DOMCoreClasses.cpp:
        (DOMElement::font):
        * FullscreenVideoController.cpp:
        (FullscreenVideoController::draw):

2013-05-26  Antti Koivisto  <antti@apple.com>

        Build fix
        
        Not reviewed.

        * WebKitGraphics.cpp:
        (makeFont):

2013-05-26  Andreas Kling  <akling@apple.com>

        FocusController::setFocusedNode() should be setFocusedElement().
        <http://webkit.org/b/116780>

        Reviewed by Antti Koivisto.

        * WebView.cpp:
        (WebView::clearFocusNode):

2013-05-24  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Expose database storage and cache locations via preferences.
        https://bugs.webkit.org/show_bug.cgi?id=116729

        Reviewed by Tim Horton.

        * WebDatabaseManager.cpp: Update to check preferences for the
        desired location of the database store.
        (databasesDirectory): Added.
        (WebKitInitializeWebDatabasesIfNecessary): Use new databasesDirectory
        method to determine what system path to use for file storage.
        * WebKit.vcproj/WebKitExports.def.in: Export three symbols
        needed to implement the feature.
        * WebView.cpp: Update to check preferences for the desired location
        of the various caches used by WebKit.
        (WebView::setCacheModel): Update to check preferences for URL cache
        storage.
        (WebKitSetApplicationCachePathIfNecessary): Update to check
        preferences for ccache storage.

2013-05-24  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Remove custom code for webkitAudioContext global constructor getter
        https://bugs.webkit.org/show_bug.cgi?id=116530

        Reviewed by Geoffrey Garen.

        Use RuntimeEnabledFeatures instead of Settings to toggle Web Audio support.

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

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

        Remove unused code to read/write history
        https://bugs.webkit.org/show_bug.cgi?id=116738

        Reviewed by Brent Fulgham.

        * Interfaces/IWebHistory.idl:
        Replace loadFromURL and saveToURL with unused1/unused2.

        * Interfaces/IWebHistoryPrivate.idl:
        Replace data with unused1.

        * WebHistory.cpp:
        Remove history loading/saving code.

        (WebHistory::unused1):
        (WebHistory::unused2):
        Add implementations.

        * WebHistory.h:
        (WebHistory):

2013-05-21  Mark Salisbury  <mark.salisbury@hp.com>

        [Windows, curl] WebDownloadCurl.cpp should not include SystemTime.h
        https://bugs.webkit.org/show_bug.cgi?id=116584

        Reviewed by Brent Fulgham.

        SystemTime header and implementation are no longer used and were removed
        recently - http://trac.webkit.org/changeset/150216.

        * WebDownloadCurl.cpp:

2013-05-19  Anders Carlsson  <andersca@apple.com>

        Remove ChromeClient::webView()
        https://bugs.webkit.org/show_bug.cgi?id=116054

        Reviewed by Darin Adler.

        This blatantly horrible layer violation was only used to know if a ChromeClient is an empty
        client or not. We already have a (slightly less horrible) way to do that.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

2013-05-16  Tim Horton  <timothy_horton@apple.com>

        PDFPlugins don't load when plugins are disabled, but they should
        https://bugs.webkit.org/show_bug.cgi?id=75790
        <rdar://problem/11650197>

        Reviewed by Anders Carlsson.

        * WebView.cpp:
        (WebView::canShowMIMEType):
        Previously, this caller depended on pluginData() returning null if
        plug-ins were disabled. Since that is no longer the case, we have to
        check if we can use plug-ins, and otherwise ignore non-application-plug-ins.

2013-05-16  Andreas Kling  <akling@apple.com>

        Page::chrome() should return a reference.
        <http://webkit.org/b/116185>

        Reviewed by Anders Carlsson.

2013-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        Revert the previous commit.

        * WebKit.vcproj/WebKitExports.def.in:

2013-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt after r150160.

        * WebKit.vcproj/WebKitExports.def.in:

2013-05-15  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt after r150156.

        * WebKit.vcproj/WebKitExports.def.in:

2013-05-13  Anders Carlsson  <andersca@apple.com>

        Frame::editor() should return a reference
        https://bugs.webkit.org/show_bug.cgi?id=116037

        Reviewed by Darin Adler.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::searchWithGoogle):
        * WebFrame.cpp:
        (WebFrame::hasSpellingMarker):
        (WebFrame::setTextDirection):
        (WebFrame::selectedString):
        (WebFrame::selectAll):
        * WebView.cpp:
        (WebView::execCommand):
        (WebView::handleEditingKeyboardEvent):
        (WebView::executeCoreCommandByName):
        (WebView::selectedText):
        (WebView::deleteEnabled):
        (WebView::editingEnabled):
        (WebView::replaceSelectionWithText):
        (WebView::copy):
        (WebView::cut):
        (WebView::paste):
        (WebView::copyURL):
        (WebView::delete_):
        (WebView::checkSpelling):
        (WebView::showGuessPanel):
        (WebView::clearUndoRedoOperations):
        (WebView::prepareCandidateWindow):
        (WebView::resetIME):
        (WebView::updateSelectionForIME):
        (WebView::onIMEComposition):
        (WebView::onIMEEndComposition):
        (WebView::onIMERequestCharPosition):
        (WebView::onIMERequest):
        (WebView::setCompositionForTesting):
        (WebView::hasCompositionForTesting):
        (WebView::confirmCompositionForTesting):
        (WebView::compositionRangeForTesting):
        (WebView::firstRectForCharacterRangeForTesting):
        (WebView::selectedRangeForTesting):

2013-05-15  Patrick Gansterer  <paroga@webkit.org>

        Remove unnecessary dependecy on CoreFoundation from WebDatabaseManager
        https://bugs.webkit.org/show_bug.cgi?id=115993

        Reviewed by Anders Carlsson.

        Using COMPropertyBag instead of CFDictionaryPropertyBag also reduces
        the total lines of code needed for the same functionality.

        * WebDatabaseManager.cpp:
        (WebDatabaseManager::dispatchDidModifyDatabase):

2013-05-12  Timothy Hatcher  <timothy@apple.com>

        Add support for updating the Web Inspector toolbar height.

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

        Reviewed by Joseph Pecoraro and Benjamin Poulain.

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

2013-05-13  Roger Fong  <roger_fong@apple.com>

        Unreviewed. AppleWin VS2005 build fix.

        * WebKit.vcproj/WebKitExports.def.in:

2013-05-12  Anders Carlsson  <andersca@apple.com>

        Stop including UnusedParam.h
        https://bugs.webkit.org/show_bug.cgi?id=116003

        Reviewed by Sam Weinig.

        UnusedParam.h is empty now so there's no need to include it anymore.

        * WebSecurityOrigin.cpp:

2013-05-09  Max Feil  <mfeil@rim.com>

        shouldUsePluginDocument() needs to be respected when a document is created
        https://bugs.webkit.org/show_bug.cgi?id=110308

        Reviewed by Rob Buis.

        Renaming shouldUsePluginDocument() to shouldAlwaysUsePluginDocument()
        for clarity.

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

2013-05-06  Darin Adler  <darin@apple.com>

        Use adoptCF and adoptNS in more places
        https://bugs.webkit.org/show_bug.cgi?id=115657

        Reviewed by Sam Weinig.

        This is similar to my last set of changes, but covers code that I missed with
        global replace using the Safari Xcode workspace.

        * CFDictionaryPropertyBag.cpp:
        (CFDictionaryPropertyBag::Write):
        * WebCache.cpp:
        (WebCache::statistics):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin):
        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorFrontendClient::localizedStringsURL):
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::dispatchDidModifyDatabase):
        * WebDownloadCFNet.cpp:
        (WebDownload::init):
        (WebDownload::initWithRequest):
        (WebDownload::initToResumeWithBundle):
        (WebDownload::cancelForResume):
        (WebDownload::useCredential):
        (WebDownload::didReceiveAuthenticationChallenge):
        * WebError.cpp:
        (WebError::sslPeerCertificate):
        * WebHistory.cpp:
        (createUserInfoFromArray):
        (createUserInfoFromHistoryItem):
        (WebHistory::WebHistory):
        (WebHistory::loadFromURL):
        (WebHistory::loadHistoryGutsFromURL):
        (WebHistory::saveToURL):
        (WebHistory::saveHistoryGuts):
        (WebHistory::removeAllItems):
        (WebHistory::removeItem):
        (WebHistory::addItem):
        (WebHistory::itemForURL):
        (WebHistory::addItemToDateCaches):
        (getDayBoundaries):
        * WebIconDatabase.cpp:
        (postDidAddIconNotification):
        * WebLocalizableStrings.cpp:
        (cfBundleForStringsBundle):
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::mutableCopy):
        * WebPreferences.cpp:
        (cfNumber):
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::valueForKey):
        (WebPreferences::setStringValue):
        (WebPreferences::load):
        (WebPreferences::migrateWebKitPreferencesToCFPreferences):
        (WebPreferences::setPreferenceForTest):
        * WebView.cpp:
        (WebView::setCacheModel):
        (WebView::notifyPreferencesChanged):
        Use adoptCF and adoptNS.

2013-05-06  Roger Fong  <roger_fong@apple.com>

        Unreviewed. AppleWin build fix.

        * WebKit.vcproj/WebKitExports.def.in:

2013-05-04  Dean Jackson  <dino@apple.com>

        Animations and Transitions should not start when globally suspended
        https://bugs.webkit.org/show_bug.cgi?id=114915

        Reviewed by Sam Weinig.

        Export AnimationController::isSuspended

        * WebKit.vcproj/WebKitExports.def.in:

2013-05-01  Sergio Villar Senin  <svillar@igalia.com>

        Show a block cursor in overtype mode
        https://bugs.webkit.org/show_bug.cgi?id=114819

        Reviewed by Ryosuke Niwa.

        Export three more WebCore symbols.

        * WebKit.vcproj/WebKitExports.def.in:

2013-04-29  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Remove pthread paths for WebKit build.
        https://bugs.webkit.org/show_bug.cgi?id=115390

        Reviewed by Tim Horton.

        Update Visual Studio property sheets to remove include paths and
        link references for the pthreadsVC2.dll, which is no longer used.


        * WebKit.vcproj/WebKitExportGeneratorCommon.vsprops:
        * WebKit.vcproj/WebKitLibCommon.vsprops:

2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Stop using "in" keyword in IDL files
        https://bugs.webkit.org/show_bug.cgi?id=115418

        Reviewed by Kentaro Hara.

        Remove "in" keyword from IDL files as this is no longer part of the Web
        IDL specification.

        * Interfaces/DOMEvents.idl:
        * Interfaces/DOMPrivate.idl:
        * Interfaces/DOMWindow.idl:

2013-04-30  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Replace "Optional" extended attribute by proper Web IDL "optional" keyword
        https://bugs.webkit.org/show_bug.cgi?id=115380

        Reviewed by Kentaro Hara.

        Replace [Optional] by optional.

        * Interfaces/DOMWindow.idl:

2013-04-28  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix.

        * WebKit.vcproj/WebKitExports.def.in:

2013-04-25  Ryosuke Niwa  <rniwa@webkit.org>

        StaticHashSetNodeList is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=115219

        Reviewed by Antonio Gomes.

        * WebKit.vcproj/WebKitExports.def.in:

2013-04-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ConsoleMessage should include line and column number where possible
        https://bugs.webkit.org/show_bug.cgi?id=114929

        Reviewed by Timothy Hatcher.

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

2013-04-24  Andreas Kling  <akling@apple.com>

        Wild build fix attempt.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

2013-04-22  Jessie Berlin  <jberlin@apple.com>

        Speculative Windows build fix.

        * WebKit.vcproj/WebKitExports.def.in:

2013-04-22  Benjamin Poulain  <bpoulain@apple.com>

        Another Windows build fix after r148921

        Unreviewed.

        * AccessibleBase.cpp: Add missing header include.

2013-04-22  Benjamin Poulain  <benjamin@webkit.org>

        Remove the memory instrumentation code
        https://bugs.webkit.org/show_bug.cgi?id=114931

        Reviewed by Andreas Kling.

        * WebKit.vcproj/WebKitExports.def.in:

2013-04-21  Benjamin Poulain  <benjamin@webkit.org>

        Improve StringImpl code density for older ARM hardware
        https://bugs.webkit.org/show_bug.cgi?id=114898

        Reviewed by Geoffrey Garen.

        * WebKit.vcproj/WebKitExports.def.in:

2013-04-17  Geoffrey Garen  <ggaren@apple.com>

        Renamed JSGlobalData to VM
        https://bugs.webkit.org/show_bug.cgi?id=114777

        Reviewed by Phil Pizlo.

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):

2013-04-13  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix for Windows.

        * WebCoreSupport/WebContextMenuClient.cpp:
        * WebCoreSupport/WebDragClient.cpp:
        * WebFrame.cpp:

2013-04-16  Brent Fulgham  <bfulgham@webkit.org>

        [Windows] Unreviewed build correction.

        * WebKit.vcproj/WebKitExportGeneratorCommon.vsprops: Add correct
        ICU link library to avoid mixture of ICU 4.0 and 4.6 symbols
        during link.

2013-04-15  peavo@outlook.com  <peavo@outlook.com>

        Crash when favicon is requested
        https://bugs.webkit.org/show_bug.cgi?id=114624

        Reviewed by Brent Fulgham.

        * WebIconDatabase.cpp:
        (WebIconDatabase::getOrCreateDefaultIconBitmap): Added NULL pointer check.

2013-04-12  Anders Carlsson  <andersca@apple.com>

        All tests crash on Windows
        https://bugs.webkit.org/show_bug.cgi?id=114522

        Reviewed by Ryosuke Niwa.

        In the MSVC++ ABI, a member function pointer will have a different size depending on whether the
        class it belongs to is defined or not. Because of this, when passing member function pointers as parameters
        it's important to ensure that the class is known by both the caller and the callee.

        * WebFrame.cpp:
        Include PolicyChecker.h

2013-04-12  Jer Noble  <jer.noble@apple.com>

        TimeRanges::nearest() returns incorrect results.
        https://bugs.webkit.org/show_bug.cgi?id=114483

        Reviewed by Eric Carlson.

        Add symbols needed by WebCoreTestSupport to the exports list.

        * WebKit.vcproj/WebKitExports.def.in:

2013-04-11  Rune Lillesveen  <rune@opera.com>

        Incorrect evaluation of resolution media queries
        https://bugs.webkit.org/show_bug.cgi?id=114029

        Reviewed by Kenneth Rohde Christiansen.

        Removed setResolutionOverride from exports.

        * WebKit.vcproj/WebKitExports.def.in:

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

        Remove unneeded headers from FrameLoader.h
        https://bugs.webkit.org/show_bug.cgi?id=114223

        Reviewed by Geoffrey Garen.

        Include HistoryController.h from WebCore.

        * WebView.cpp:

2013-04-05  Roger Fong  <roger_fong@apple.com>

        Build fix.

        * WebKit.vcproj/WebKitExports.def.in:

2013-04-04  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [Cairo] Fix canvas drawing of SVG-based patterns and remove NativeImageCairo
        https://bugs.webkit.org/show_bug.cgi?id=113929

        Reviewed by Martin Robinson.

        Remove outdated symbols now that NativeImageCairo was removed.

        * WebKit.vcproj/WebKitExports.def.in:

2013-04-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Should close select popup when the element loses focus
        https://bugs.webkit.org/show_bug.cgi?id=113220

        Reviewed by Kent Tamura.

        * WebKit.vcproj/WebKitExports.def.in: export WebCore::HTMLNames::selectTag for Internals

2013-04-02  Timothy Hatcher  <timothy@apple.com>

        Provide a user default that can be used to disable docking of the Web Inspector.

        The user default is "WebKit Web Inspector Setting - inspectorAttachDisabled".

        https://webkit.org/b/113779
        rdar://problem/13446021

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient::inspectorAttachDisabled): Added.
        (WebInspectorClient::setInspectorAttachDisabled): Added.

2013-03-28  Matt Falkenhagen  <falken@chromium.org>

        Refactoring: Replace Element::disabled and isEnabledFormControl with isDisabledFormControl
        https://bugs.webkit.org/show_bug.cgi?id=113273

        Reviewed by Kent Tamura.

        Element::disabled is about form controls and Element::isEnabledFormControl
        is redundant with it, so replace them with a single function
        Element::isDisabledFormControl.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::disabled):

2013-03-27  Mark Lam  <mark.lam@apple.com>

        Rolling out r147044.
        https://bugs.webkit.org/show_bug.cgi?id=113352.

        Not Reviewed.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-27  Mark Lam  <mark.lam@apple.com>

        Greening the Apple Win bot (debug build).
        https://bugs.webkit.org/show_bug.cgi?id=113352.

        Not Reviewed.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-27  Mark Lam  <mark.lam@apple.com>

        Greening the Apple Win bot.
        https://bugs.webkit.org/show_bug.cgi?id=113352.

        Not Reviewed.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-27  Ryosuke Niwa  <rniwa@webkit.org>

        Another Windows build fix attempt after r147004.

        * WebKit.vcproj/WebKitExports.def.in:

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

        Add support for dock-to-right of the Web Inspector in the Mac port.

        Unfortunately this requires Safari changes, so it is disabled in the nightly builds.

        https://webkit.org/b/113341
        rdar://problem/10368152

        Reviewed by Joseph Pecoraro.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::frontendLoaded):
        (WebInspectorFrontendClient::attachWindow):
        (WebInspectorFrontendClient::setAttachedWindowWidth):
        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorFrontendClient):

2013-03-27  Kent Tamura  <tkent@chromium.org>

        Rename HTMLFormControlElement::readOnly to isReadOnly
        https://bugs.webkit.org/show_bug.cgi?id=113297

        Reviewed by Alexey Proskuryakov.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::readOnly):

2013-03-26  Hayato Ito  <hayato@chromium.org>

        Allow ShadowContents in HitTests by default.
        https://bugs.webkit.org/show_bug.cgi?id=113171

        Reviewed by Dimitri Glazkov.

        * WebView.cpp:
        (WebView::gestureNotify):

2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>

        The second part of the build fix for r146702. This should do it.
        I had to see the mangled name for the new signature.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-22  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt after r146702.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-21  peavo@outlook.com  <peavo@outlook.com>

        WinCairo build fails to link.
        https://bugs.webkit.org/show_bug.cgi?id=112892

        Reviewed by Kentaro Hara.

        * WebKit.vcproj/WebKitExports.def.in: Added ENABLE(VIDEO_TRACK) guard.

2013-03-20  Michael Pruett  <michael@68k.org>

        [JSC] Implement EnforceRange IDL attribute for integer conversions
        https://bugs.webkit.org/show_bug.cgi?id=112506

        Reviewed by Kentaro Hara.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-20  Rouslan Solomakhin  <rouslan@chromium.org>

        Copy-paste should not spellcheck when continuous spellcheck is turned off
        https://bugs.webkit.org/show_bug.cgi?id=112464

        Reviewed by Ryosuke Niwa.

        * WebKit.vcproj/WebKitExports.def.in: Export WebCore::Editor::isContinuousSpellCheckingEnabled() and WebCore::Editor::toggleContinuousSpellChecking() for use by internals.

2013-03-18  Roger Fong  <roger_fong@apple.com>

        Fix typo on Windows following r145849 that was causing DRT to crash 100% of the time.

        * WebView.cpp:
        (WebView::setSmartInsertDeleteEnabled):
        (WebView::setSelectTrailingWhitespaceEnabled):

2013-03-15  Nate Chapin  <japhet@chromium.org>

        Hide MainResourceLoader from the outside world
        https://bugs.webkit.org/show_bug.cgi?id=109971

        Reviewed by Adam Barth.

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

2013-03-15  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112401

        Reviewed by Stephen Chenney.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::frameRectsChanged):
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::redirectDataToPlugin):

2013-03-14  Manuel Rego Casasnovas  <rego@igalia.com>

        Add selectTrailingWhitespaceEnabled setting to WebCore::Page
        https://bugs.webkit.org/show_bug.cgi?id=109404

        Reviewed by Tony Chang.

        Use new settings for smartInsertDeleteEnabled and
        selectTrailingWhitespaceEnabled.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::smartInsertDeleteEnabled):
        (WebEditorClient::isSelectTrailingWhitespaceEnabled):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::setSmartInsertDeleteEnabled):
        (WebView::smartInsertDeleteEnabled):
        (WebView::setSelectTrailingWhitespaceEnabled):
        (WebView::isSelectTrailingWhitespaceEnabled):
        * WebView.h:
        (WebView):

2013-03-14  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Move platform-specific typedefs to PlatformMenuDescription.h
        https://bugs.webkit.org/show_bug.cgi?id=111876

        Reviewed by Caio Marcelo de Oliveira Filho.

        Rename NativeMenuItem to PlatformContextMenuItem and the getter
        function call.

        * WebCoreSupport/WebContextMenuClient.cpp:
        (WebContextMenuClient::customizeMenu):
        (WebContextMenuClient::contextMenuItemSelected):
        * WebView.cpp:
        (WebView::handleContextMenuEvent):

2013-03-14  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112296

        Reviewed by Kentaro Hara.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * WebView.cpp:
        (WebView::enterFullscreenForNode):

2013-03-13  Nate Chapin  <japhet@chromium.org>

        Expose symbols for internals
        https://bugs.webkit.org/show_bug.cgi?id=112194

        Reviewed by Alexey Proskuryakov.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-13  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: get rid of hiddenPanels filter
        https://bugs.webkit.org/show_bug.cgi?id=112252

        Reviewed by Vsevolod Vlasov.

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

2013-03-12  Abhishek Arya  <inferno@chromium.org>

        Replace static_casts with to* helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=112164

        Reviewed by Philip Rogers.

        to* helper functions are preferred over static_cast calls since they
        help to catch bad casts easily on the testing infrastructure.

        * DOMHTMLClasses.cpp:
        (DOMHTMLElement::idName):
        (DOMHTMLElement::innerText):
        (DOMHTMLElement::setInnerText):

2013-03-11  Jochen Eisinger  <jochen@chromium.org>

        Rename DefinitelyProcessingUserGesture to DefinitelyProcessingNewUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=111959

        Reviewed by Alexey Proskuryakov.

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

2013-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt after r144547.

        * WebKit.vcproj/WebKitExports.def.in:

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

        Unreviewed, rolling out r144567.
        http://trac.webkit.org/changeset/144567
        https://bugs.webkit.org/show_bug.cgi?id=111266

        Does not compile on apple-win (Requested by abarth on
        #webkit).

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        That was a wrong fix. Revert r144569.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt after r144567.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-02  Benjamin Poulain  <benjamin@webkit.org>

        Export a missing symbol after r144547.

        Unreviewed.

        * WebKit.vcproj/WebKitExports.def.in:

2013-03-02  Ryosuke Niwa  <rniwa@webkit.org>

        Redo r144538 (after r144530).

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        * WebCoreSupport/WebFrameNetworkingContext.h:
        * WebCoreSupport/WebPlatformStrategies.cpp:

2013-03-02  Ryosuke Niwa  <rniwa@webkit.org>

        Yet another build fix attempt after r144530.

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        * WebCoreSupport/WebPlatformStrategies.cpp:

2013-03-02  Ryosuke Niwa  <rniwa@webkit.org>

        Another build fix attempt after r144530.

        * WebCoreSupport/WebFrameNetworkingContext.cpp:

2013-03-01  Benjamin Poulain  <bpoulain@apple.com>

        Add a missing symbol after r144524.

        Unreviewed.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-26  Alexey Proskuryakov  <ap@apple.com>

        Don't add a body to platform request until necessary
        https://bugs.webkit.org/show_bug.cgi?id=110900

        Reviewed by Brady Eidson.

        WebKit1 behavior is unchanged, body is added on every conversion.

        * WebDownloadCFNet.cpp:
        (WebDownload::init):
        (WebDownload::initWithRequest):
        (WebDownload::willSendRequest):
        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::cfRequest):
        (WebMutableURLRequest::mutableCopy):
        * WebView.cpp:
        (WebView::canHandleRequest):

2013-02-26  Roger Fong  <roger_fong@apple.com>

        Unreviewed AppleWin build fix.

        * WebKit.vcproj/WebKitExportGeneratorCommon.vsprops:

2013-02-24  Alexey Proskuryakov  <ap@apple.com>

        Clarify meaning of default default encoding localizable string
        https://bugs.webkit.org/show_bug.cgi?id=110714

        Reviewed by Eric Carlson.

        * WebPreferences.cpp: Updated a comment.

2013-02-24  Benjamin Poulain  <benjamin@webkit.org>

        REGRESSION(r143837): Broke build on AppleWin http://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29.
        https://bugs.webkit.org/show_bug.cgi?id=110713

        Unreviewed.

        * WebKit.vcproj/WebKitExports.def.in: Add the missing symbol after r143837.

2013-02-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143536.
        http://trac.webkit.org/changeset/143536
        https://bugs.webkit.org/show_bug.cgi?id=110523

        Causing a bunch of tests to fail on Windows, requires
        rebaselining (Requested by rfong on #webkit).

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

2013-02-20  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Remove references to SAFARI_THEME from Windows Solution.
        <rdar://problem/13258710>

        * WebKitClassFactory.cpp:
        * WebView.cpp:

2013-02-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r143338.
        http://trac.webkit.org/changeset/143338
        https://bugs.webkit.org/show_bug.cgi?id=110301

        False alarm, no need to export the symbol (Requested by
        aandrey on #webkit).

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-19  Tony Chang  <tony@chromium.org>

        Unreviewed, force file to recompile to fix win build.

        * WebView.cpp:

2013-02-19  Tony Chang  <tony@chromium.org>

        Unreviewed, fix the Windows build after r143398.
        Add new setters to the export list.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-19  Andrey Adaikin  <aandrey@chromium.org>

        Unreviewed, adding external symbol ?didBeginFrame@InspectorCanvasAgent@WebCore@@QAEXXZ.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-19  Andrey Adaikin  <aandrey@chromium.org>

        Unreviewed, Web Inspector: follow up to r143328 fixing Win Debug Build
        https://bugs.webkit.org/show_bug.cgi?id=110227

        Adding external symbol ?didBeginFrame@InspectorCanvasAgent@WebCore@@QAEXXZ.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-18  Simon Fraser  <simon.fraser@apple.com>

        Clean up the boolean argument to visibleContentRect
        https://bugs.webkit.org/show_bug.cgi?id=110167

        Reviewed by Simon Fraser.

        Replace the boolean argument to visibleContentRect() with
        an enum.

        * WebFrame.cpp:
        (WebFrame::visibleContentRect):
        (WebFrame::frameBounds):

2013-02-18  Zan Dobersek  <zdobersek@igalia.com>

        Stop placing std::isfinite and std::signbit inside the global scope
        https://bugs.webkit.org/show_bug.cgi?id=109817

        Reviewed by Darin Adler.

        Prefix calls to the isfinite and signbit methods with std:: as the two
        methods are no longer being imported into the global scope.

        * FullscreenVideoController.cpp:
        (timeToString):

2013-02-15  Rik Cabanier  <cabanier@adobe.com>

        Add platform support for -webkit-background-blend-mode to CG context
        https://bugs.webkit.org/show_bug.cgi?id=108549

        Reviewed by Dean Jackson.

        Fixed build issue.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-15  Allan Sandfeld Jensen  <allan.jensen@digia.com>

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

        Reviewed by Julien Chaffraix.

        Update calls to new API.

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read):
        * WebKit.vcproj/WebKitExports.def.in:
        * WebView.cpp:
        (WebView::handleContextMenuEvent):
        (WebView::elementAtPoint):

2013-02-14  Tony Chang  <tony@chromium.org>

        Unreviewed, set svn:eol-style native for .sln, .vcproj, and .vsprops files.
        https://bugs.webkit.org/show_bug.cgi?id=96934

        * WebKit.vcproj/WebKit.sln: Modified property svn:eol-style.
        * WebKit.vcproj/WebKit.submit.sln: Modified property svn:eol-style.
        * WebKit.vcproj/WebKitCFLite.vsprops: Added property svn:eol-style.
        * WebKit.vcproj/WebKitExportGeneratorCommon.vsprops: Added property svn:eol-style.
        * WebKit.vcproj/WebKitExportGeneratorDebug.vsprops: Added property svn:eol-style.
        * WebKit.vcproj/WebKitExportGeneratorDebugAll.vsprops: Added property svn:eol-style.
        * WebKit.vcproj/WebKitExportGeneratorDebugCairoCFLite.vsprops: Added property svn:eol-style.
        * WebKit.vcproj/WebKitExportGeneratorProduction.vsprops: Added property svn:eol-style.
        * WebKit.vcproj/WebKitExportGeneratorRelease.vsprops: Added property svn:eol-style.
        * WebKit.vcproj/WebKitExportGeneratorReleaseCairoCFLite.vsprops: Added property svn:eol-style.

2013-02-14  Tony Chang  <tony@chromium.org>

        Unreviewed, set svn:eol-style CRLF for .sln files.

        * WebKit.vcproj/WebKit.sln: Modified property svn:eol-style.
        * WebKit.vcproj/WebKit.submit.sln: Modified property svn:eol-style.

2013-02-14  Andrey Kosyakov  <caseq@chromium.org>

        Web Inspector: expose did{Begin,Cancel}Frame() and {will,did}Composite() on WebDebToolsAgent
        https://bugs.webkit.org/show_bug.cgi?id=109192

        Reviewed by Pavel Feldman.

        * WebKit.vcproj/WebKit.sln: Modified property svn:eol-style.
        * WebKit.vcproj/WebKit.submit.sln: Modified property svn:eol-style.

2013-02-11  Ryosuke Niwa  <rniwa@webkit.org>

        Disable delete button controller on non-Mac ports and delete EditorClient::shouldShowDeleteInterface
        https://bugs.webkit.org/show_bug.cgi?id=109534

        Reviewed by Anders Carlsson.

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

2013-02-11  Benjamin Poulain  <benjamin@webkit.org>

        Build fix for Windows after r142509

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-08  Benjamin Poulain  <bpoulain@apple.com>

        Move workerThreadCount from TestRunner to WebCore Internals
        https://bugs.webkit.org/show_bug.cgi?id=109239

        Reviewed by Darin Adler.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-07  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Corrections the exports definition file.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-05  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-05  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Get rid of redundant exports in export definitions file.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-01  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Copy some resource files for VS2010 solution.
        https://bugs.webkit.org/show_bug.cgi?id=106989.

        * WebKit.resources/WebKit.rc: Added.
        * WebKit.resources/deleteButton.png: Added.
        * WebKit.resources/deleteButtonPressed.png: Added.
        * WebKit.resources/fsVideoAudioVolumeHigh.png: Added.
        * WebKit.resources/fsVideoAudioVolumeLow.png: Added.
        * WebKit.resources/fsVideoExitFullscreen.png: Added.
        * WebKit.resources/fsVideoPause.png: Added.
        * WebKit.resources/fsVideoPlay.png: Added.
        * WebKit.resources/missingImage.png: Added.
        * WebKit.resources/nullplugin.png: Added.
        * WebKit.resources/panEastCursor.png: Added.
        * WebKit.resources/panIcon.png: Added.
        * WebKit.resources/panNorthCursor.png: Added.
        * WebKit.resources/panNorthEastCursor.png: Added.
        * WebKit.resources/panNorthWestCursor.png: Added.
        * WebKit.resources/panSouthCursor.png: Added.
        * WebKit.resources/panSouthEastCursor.png: Added.
        * WebKit.resources/panSouthWestCursor.png: Added.
        * WebKit.resources/panWestCursor.png: Added.
        * WebKit.resources/searchCancel.png: Added.
        * WebKit.resources/searchCancelPressed.png: Added.
        * WebKit.resources/searchMagnifier.png: Added.
        * WebKit.resources/searchMagnifierResults.png: Added.
        * WebKit.resources/textAreaResizeCorner.png: Added.
        * WebKit.resources/verticalTextCursor.png: Added.
        * WebKit.resources/zoomInCursor.png: Added.
        * WebKit.resources/zoomOutCursor.png: Added.

2013-02-04  Benjamin Poulain  <bpoulain@apple.com>

        Kill suspendAnimation(), resumeAnimation() and numberOfActiveAnimations() from DRT/WTR; use Internals
        https://bugs.webkit.org/show_bug.cgi?id=108741

        Reviewed by Tony Chang.

        * WebKit.vcproj/WebKitExports.def.in:

2013-02-04  Enrica Casucci  <enrica@apple.com>

        Add specific EditActions for Bold and Italic commands.
        https://bugs.webkit.org/show_bug.cgi?id=108842.
        <rdar://problem/13098252>

        Reviewed by Ryosuke Niwa.

        * WebCoreSupport/WebEditorClient.cpp:
        (undoNameForEditAction):

2013-02-03  KwangYong Choi  <ky0.choi@samsung.com>

        Fix build warning after r141473
        https://bugs.webkit.org/show_bug.cgi?id=108782

        Reviewed by Kentaro Hara.

        Fix -Wunused-parameter build warning.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::getClientPasteboardDataForRange):

2013-02-01  Philip Rogers  <pdr@google.com>

        Change hasAlpha to isKnownToBeOpaque and correct the return value for SVG images.
        https://bugs.webkit.org/show_bug.cgi?id=106966

        Reviewed by Stephen White.

        * WebKit.vcproj/WebKitExports.def.in:

2013-01-31  Aurimas Liutikas  <aurimas@chromium.org>

        Editor::m_compositionNode not updated on HTMLInputElement::setValue()
        https://bugs.webkit.org/show_bug.cgi?id=107737

        Reviewed by Ryosuke Niwa.

        * WebView.cpp:
        (WebView::updateSelectionForIME):
            Adding a call to the newly refactored method.

2013-01-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r141479.
        http://trac.webkit.org/changeset/141479
        https://bugs.webkit.org/show_bug.cgi?id=108564

        breaks chromium test (Requested by morrita on #webkit).

        * WebView.cpp:
        (WebView::updateSelectionForIME):

2013-01-31  Aurimas Liutikas  <aurimas@chromium.org>

        Editor::m_compositionNode not updated on HTMLInputElement::setValue()
        https://bugs.webkit.org/show_bug.cgi?id=107737

        Reviewed by Ryosuke Niwa.

        * WebView.cpp:
        (WebView::updateSelectionForIME):
            Adding a call to the newly refactored method.

2013-01-31  Enrica Casucci  <enrica@apple.com>

        WebKit2: provide new bundle APIs to allow bundle clients to be notified of pasteboard access.
        https://bugs.webkit.org/show_bug.cgi?id=108396.
        <rdar://problem/12920461>

        Reviewed by Alexey Proskuryakov.

        Adds stub implementation for WebKit of the new EditorClient methods.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::willWriteSelectionToPasteboard):
        (WebEditorClient::getClientPasteboardDataForRange):
        * WebCoreSupport/WebEditorClient.h:

2013-01-29  Shinya Kawanaka  <shinyak@chromium.org>

        [Chromium] Cannot copy text when selecting readonly (or disabled) input elements
        https://bugs.webkit.org/show_bug.cgi?id=106287

        Reviewed by Hajime Morita.

        * WebKit.vcproj/WebKitExports.def.in:

2013-01-29  Elliott Sprehn  <esprehn@chromium.org>

        Refactor ShadowRoot exception handling
        https://bugs.webkit.org/show_bug.cgi?id=108209

        Reviewed by Dimitri Glazkov.

        * WebKit.vcproj/WebKitExports.def.in: Swap ShadowRoot::create export with Element::createShadowRoot.

2013-01-29  Nate Chapin  <japhet@chromium.org>

        Enable reuse of cached main resources
        https://bugs.webkit.org/show_bug.cgi?id=105667

        Reviewed by Adam Barth.

        * WebKit.vcproj/WebKitExports.def.in: Expose some MemoryCache symbols for use in Internals.

2013-01-27  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Fixing atomicIncrement implementation for Windows by dropping support before XP SP2.
        https://bugs.webkit.org/show_bug.cgi?id=106740

        Reviewed by Benjamin Poulain.

        * WebKitPrefix.h:

2013-01-26  Alexey Proskuryakov  <ap@apple.com>

        Remove code for handling NetworkProcess authentication challenges in WebProcess
        https://bugs.webkit.org/show_bug.cgi?id=108003

        Reviewed by Sam Weinig.

        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::initWithProtectionSpace):
        Adapted for new AuthenticationChallenge constructor signature.

2013-01-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        Objective-C API: Rename JSValue.h/APIJSValue.h to JSCJSValue.h/JSValue.h
        https://bugs.webkit.org/show_bug.cgi?id=107327

        Reviewed by Filip Pizlo.

        We're renaming these two files, so we have to replace the names everywhere.

        * WebFrame.cpp:
        * WebView.cpp:

2013-01-23  Tony Chang  <tony@chromium.org>

        Unreviewed, set svn:eol-style to CRLF on Windows .sln files.

        * WebKit.vcproj/WebKit.sln: Modified property svn:eol-style.
        * WebKit.vcproj/WebKit.submit.sln: Modified property svn:eol-style.

2013-01-23  Pavel Feldman  <pfeldman@chromium.org>

        Follow up to 140539, adding exports for Win build.

        Not reviewed.

        * WebKit.vcproj/WebKitExports.def.in:

2013-01-22  Anders Carlsson  <andersca@apple.com>

        Use a platforom strategy for local storage
        https://bugs.webkit.org/show_bug.cgi?id=107600

        Reviewed by Andreas Kling.

        Update for new storage strategy.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createStorageStrategy):
        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2013-01-18  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix. Remove deleted symbol from windows export list.

        * WebKit.vcproj/WebKitExports.def.in:

2013-01-18  Seokju Kwon  <seokju.kwon@gmail.com>

        Add explicit keyword to constructors in platform-specific InspectorClient
        https://bugs.webkit.org/show_bug.cgi?id=107255

        Reviewed by Kentaro Hara.

        Add explicit keyword to constructors that take one argument
        in platform-specific implementation of InspectorClient.

        * WebCoreSupport/WebInspectorClient.h:
        (WebInspectorClient):

2013-01-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r140005.
        http://trac.webkit.org/changeset/140005
        https://bugs.webkit.org/show_bug.cgi?id=107235

        broke downstream Chromium interactive_ui_tests (Requested by
        dominicc on #webkit).

        * WebKit.vcproj/WebKitExports.def.in:

2013-01-17  Nate Chapin  <japhet@chromium.org>

        Enable reuse of cached main resources
        https://bugs.webkit.org/show_bug.cgi?id=105667

        Reviewed by Antti Koivisto.

        * WebKit.vcproj/WebKitExports.def.in: Expose some MemoryCache symbols for use in Internals.

2013-01-15  peavo@outlook.com  <peavo@outlook.com>

        Crash when saving history with no items in it.
        https://bugs.webkit.org/show_bug.cgi?id=104261

        Reviewed by Darin Adler.

        * WebHistory.cpp:
        (WebHistory::saveHistoryGuts): Added null pointer check

2013-01-09  Levi Weintraub <leviw@chromium.org>

        Rolling out r139683. It broke a bunch of webkit_unit_tests. 

2013-01-09  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Distribution related code on ElementShadow should be minimized.
        https://bugs.webkit.org/show_bug.cgi?id=106294

        Reviewed by Dimitri Glazkov.

        * WebKit.vcproj/WebKit.def.in:

2013-01-09  Roger Fong  <roger_fong@apple.com>

        Rename export files to make them more easily findable.
        https://bugs.webkit.org/show_bug.cgi?id=98695.

        Reviewed by Timothy Horton.

        * WebKit.vcproj/WebKit.def.in: Removed.
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitExportGenerator.vcproj:
        * WebKit.vcproj/WebKitExportGeneratorBuildCmd.cmd:
        * WebKit.vcproj/WebKitExportGeneratorPostBuild.cmd:
        * WebKit.vcproj/WebKitExportGeneratorPreBuild.cmd:
        * WebKit.vcproj/WebKitExports.def.in: Copied from Source/WebKit/win/WebKit.vcproj/WebKit.def.in.
        * WebKit.vcproj/WebKitLibCommon.vsprops:

2013-01-09  Roger Fong  <roger_fong@apple.com>

        Add WebPreferences for Seamless IFrames on Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=106468.

        Rubberstamped by Eric Seidel.

        * Interfaces/IWebPreferences.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::areSeamlessIFramesEnabled):
        (WebPreferences::setSeamlessIFramesEnabled):
        * WebPreferences.h:
        (WebPreferences):
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2013-01-09  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Link fix after r138759
        https://bugs.webkit.org/show_bug.cgi?id=106323

        Reviewed by Kentaro Hara.

        * WebKit.vcproj/WebKitLibDebugCairoCFLite.vsprops: Include WebKitCFLite.vsprops.
        * WebKit.vcproj/WebKitLibReleaseCairoCFLite.vsprops: Include WebKitCFLite.vsprops.

2013-01-08  Hajime Morrita  <morrita@google.com>

        [Shadow DOM] Distribution related code on ShadowRoot should be minimized.
        https://bugs.webkit.org/show_bug.cgi?id=106282

        Reviewed by Dimitri Glazkov.

        * WebKit.vcproj/WebKit.def.in:

2013-01-08  Mark Lam  <mark.lam@apple.com>

        Removed the need for the ProposedDatabase mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=106292.

        Reviewed by Sam Weinig.

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

2013-01-04  Roger Fong  <roger_fong@apple.com>

        Make private browsing work on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=106032.

        Reviewed by Alexey Proskuryakov.

        Code path never called ensurePrivateBrowsingSession which is what starts up the private browsing session.
        This was causing many tests to involving private browsing to fail.

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

2013-01-03  Roger Fong  <roger_fong@apple.com>

        Remove all traces of Windows from WebKit2 folder.
        https://bugs.webkit.org/show_bug.cgi?id=105585.

        Reviewed by Sam Weinig.

        WebKitExportGenerator project needs to be moved out of the WebKit2/win folder and into WebKit/win.

        * WebKit.vcproj/WebKit.def.in: Added.
        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitCFLite.vsprops: Added.
        * WebKit.vcproj/WebKitExportGenerator.vcproj: Added.
        * WebKit.vcproj/WebKitExportGeneratorBuildCmd.cmd: Added.
        * WebKit.vcproj/WebKitExportGeneratorCommon.vsprops: Added.
        * WebKit.vcproj/WebKitExportGeneratorDebug.vsprops: Added.
        * WebKit.vcproj/WebKitExportGeneratorDebugAll.vsprops: Added.
        * WebKit.vcproj/WebKitExportGeneratorDebugCairoCFLite.vsprops: Added.
        * WebKit.vcproj/WebKitExportGeneratorPostBuild.cmd: Added.
        * WebKit.vcproj/WebKitExportGeneratorPreBuild.cmd: Added.
        * WebKit.vcproj/WebKitExportGeneratorProduction.vsprops: Added.
        * WebKit.vcproj/WebKitExportGeneratorRelease.vsprops: Added.
        * WebKit.vcproj/WebKitExportGeneratorReleaseCairoCFLite.vsprops: Added.
        * WebKit.vcproj/WebKitLibCommon.vsprops:

2013-01-03  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix after r138656 to make GIT-SVN repositories happy.

        * WebKit.vcproj/WebKitApple.vsprops: Added property svn:eol-style. Removed property svn:mime-type.
        * WebKit.vcproj/WebKitDirectX.vsprops: Added property svn:eol-style. Removed property svn:mime-type.

2013-01-02  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix after reintroducing r138331.

        Attempted to remove WebKit2 from Apple Windows port in r138331 but two vsprops files were missing.

        * WebKit.vcproj/WebKitApple.vsprops: Added.
        * WebKit.vcproj/WebKitDirectX.vsprops: Added.

2013-01-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r138403.
        http://trac.webkit.org/changeset/138403
        https://bugs.webkit.org/show_bug.cgi?id=105950

        Fixing e138331 which was rolled out in r138403 (Requested by
        rfong on #webkit).

        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitLibCommon.vsprops:
        * WebKit.vcproj/WebKitLibDebug.vsprops:
        * WebKit.vcproj/WebKitLibDebugAll.vsprops:
        * WebKit.vcproj/WebKitLibProduction.vsprops:
        * WebKit.vcproj/WebKitLibRelease.vsprops:

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

        <rdar://problem/12808377> Network process should respect cookie accept policy
        https://bugs.webkit.org/show_bug.cgi?id=105684

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        * WebCoreSupport/WebPlatformStrategies.h:
        CookiesStrategy no longer has notifyCookiesChanged(). This port didn't use it anyway.

2012-12-22  Alexey Proskuryakov  <ap@apple.com>

        Add a separate class for networking related storage
        https://bugs.webkit.org/show_bug.cgi?id=105676

        Reviewed by Sam Weinig.

        * WebCookieManagerCFNet.cpp:
        * WebView.cpp:
        Updated includes.

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        * WebCoreSupport/WebFrameNetworkingContext.h:
        This class is now simpler, with most session tracking being in WebCore.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::cookiesForDOM):
        (WebPlatformStrategies::setCookiesFromDOM):
        (WebPlatformStrategies::cookiesEnabled):
        (WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebPlatformStrategies::getRawCookies):
        (WebPlatformStrategies::deleteCookie):
        * WebCoreSupport/WebPlatformStrategies.h:
        We no longer need a function for default storage! Other functions now take a session.

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

        Unreviewed, rolling out r138331.
        http://trac.webkit.org/changeset/138331
        https://bugs.webkit.org/show_bug.cgi?id=105668

        Broke Windows clean builds; can't figure out how to fix it
        (Requested by rniwa on #webkit).

        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitLibCommon.vsprops:
        * WebKit.vcproj/WebKitLibDebug.vsprops:
        * WebKit.vcproj/WebKitLibDebugAll.vsprops:
        * WebKit.vcproj/WebKitLibProduction.vsprops:
        * WebKit.vcproj/WebKitLibRelease.vsprops:

2012-12-20  Anders Carlsson  <andersca@apple.com>

        Stop building WebKit2 for Windows
        https://bugs.webkit.org/show_bug.cgi?id=105585

        Reviewed by Brian Weinstein.

        Stop building WebKit2 on Windows, and change WebKit.vcproj to build WebKit.dll again.

        * WebKit.vcproj/WebKit.sln:
        * WebKit.vcproj/WebKit.vcproj:
        * WebKit.vcproj/WebKitApple.vsprops: Added.
        * WebKit.vcproj/WebKitDirectX.vsprops: Added.
        * WebKit.vcproj/WebKitLibCommon.vsprops:
        * WebKit.vcproj/WebKitLibDebug.vsprops:
        * WebKit.vcproj/WebKitLibDebugAll.vsprops:
        * WebKit.vcproj/WebKitLibProduction.vsprops:
        * WebKit.vcproj/WebKitLibRelease.vsprops:

2012-12-20  Anders Carlsson  <andersca@apple.com>

        Copy WebKit2.rc to back to WebKit/win/WebKit.vcproj.

        Rubber-stamped by Tim Horton.

        * WebKit.vcproj/WebKit.rc: Added.

2012-12-20  Anders Carlsson  <andersca@apple.com>

        Copy files from WebKit2/win (back) to WebKit/win/WebKit.vcproj.

        Rubber-stamped by Tim Horton.

        * WebKit.vcproj/deleteButton.png: Added.
        * WebKit.vcproj/deleteButtonPressed.png: Added.
        * 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/missingImage.png: Added.
        * WebKit.vcproj/nullplugin.png: Added.
        * WebKit.vcproj/panEastCursor.png: Added.
        * WebKit.vcproj/panIcon.png: Added.
        * WebKit.vcproj/panNorthCursor.png: Added.
        * WebKit.vcproj/panNorthEastCursor.png: Added.
        * WebKit.vcproj/panNorthWestCursor.png: Added.
        * WebKit.vcproj/panSouthCursor.png: Added.
        * WebKit.vcproj/panSouthEastCursor.png: Added.
        * WebKit.vcproj/panSouthWestCursor.png: Added.
        * WebKit.vcproj/panWestCursor.png: Added.
        * WebKit.vcproj/searchCancel.png: Added.
        * WebKit.vcproj/searchCancelPressed.png: Added.
        * WebKit.vcproj/searchMagnifier.png: Added.
        * WebKit.vcproj/searchMagnifierResults.png: Added.
        * WebKit.vcproj/textAreaResizeCorner.png: Added.
        * WebKit.vcproj/verticalTextCursor.png: Added.
        * WebKit.vcproj/zoomInCursor.png: Added.
        * WebKit.vcproj/zoomOutCursor.png: Added.

2012-12-19  Anders Carlsson  <andersca@apple.com>

        Build WebKit2ExportGenerator before WebKitLib
        https://bugs.webkit.org/show_bug.cgi?id=105487

        Reviewed by Tim Horton.

        * WebKit.vcproj/WebKit.sln:

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

        Remove unnecessary functions from CookiesStrategy
        https://bugs.webkit.org/show_bug.cgi?id=105369

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        * WebCoreSupport/WebPlatformStrategies.h:

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

        Rename FrameLoaderClient::download to convertMainResourceLoadToDownload
        https://bugs.webkit.org/show_bug.cgi?id=105122

        Reviewed by Andreas Kling.

        Update for WebCore changes.

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

2012-12-15  Mark Lam  <mark.lam@apple.com>

        Re-landing patch for "Introducing the DatabaseStrategy and database servers".
        https://bugs.webkit.org/show_bug.cgi?id=104934.

        Not reviewed.

        Merged from r137767. Previously reviewed by Sam Weinig.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createDatabaseStrategy):
        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2012-12-14  Mark Lam  <mark.lam@apple.com>

        The WebView should initialize the platform strategies before initializing other sub-systems.
        https://bugs.webkit.org/show_bug.cgi?id=105083.

        Reviewed by Alexey Proskuryakov.

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

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

        Unreviewed, rolling out r137767.
        http://trac.webkit.org/changeset/137767
        https://bugs.webkit.org/show_bug.cgi?id=105062

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

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

2012-12-14  Mark Lam  <mark.lam@apple.com>

        Introducing the DatabaseStrategy and database servers.
        https://bugs.webkit.org/show_bug.cgi?id=104934.

        Reviewed by Sam Weinig.

        The database server is currently a placeholder that does nothing.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createDatabaseStrategy):
        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2012-12-13  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/12838354> Per-Tab WebProcess: DOM cookie access functions should respect private browsing
        https://bugs.webkit.org/show_bug.cgi?id=104691

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebFrameNetworkingContext.cpp:
        (WebFrameNetworkingContext::inPrivateBrowsingMode):
        (WebFrameNetworkingContext::storageSession):
        * WebCoreSupport/WebFrameNetworkingContext.h:
        Implemented inPrivateBrowsingMode().

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

        Encapsulate externally used webdatabase APIs in DatabaseManager.
        https://bugs.webkit.org/show_bug.cgi?id=104741.

        Reviewed by Sam Weinig.

        Use DatabaseManager instead of accessing DatabaseTracker, AbstractDatabase,
        and DatabaseContext directly. This is to prepare for upcoming webkit2
        refactoring.

        * WebDatabaseManager.cpp:
        (WebDatabaseManager::sharedWebDatabaseManager):
        (WebDatabaseManager::origins):
        (WebDatabaseManager::databasesWithOrigin):
        (WebDatabaseManager::detailsForDatabase):
        (WebDatabaseManager::deleteAllDatabases):
        (WebDatabaseManager::deleteOrigin):
        (WebDatabaseManager::deleteDatabase):
        (WebDatabaseManager::setQuota):
        (WebKitInitializeWebDatabasesIfNecessary):
        * WebDatabaseManager.h:
        (WebDatabaseManager):
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::usage):
        (WebSecurityOrigin::quota):
        (WebSecurityOrigin::setQuota):
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2012-12-12  Alexey Proskuryakov  <ap@apple.com>

        Make LOG() work in WebProcess and NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=104718

        Reviewed by Tim Horton.

        * WebView.cpp: Updated for a new include file to use in WebKits.

2012-12-11  Mike West  <mkwst@chromium.org>

        Web Inspector: ConsoleTypes should not expose MessageType - it should be private to inspector.
        https://bugs.webkit.org/show_bug.cgi?id=66371

        Reviewed by Pavel Feldman.

        Drops WebCore::MessageType from the addMessageToConsole method.

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

2012-12-10  Xueqing Huang  <huangxueqing@baidu.com>

        ASSERTION failed in Windows: css3/css3-modsel-33.html
        https://bugs.webkit.org/show_bug.cgi?id=104472

        Reviewed by Tim Horton.

        In WebFrameLoaderClient::dispatchDidLayout, milestones maybe
        DidFirstLayout & DidFirstVisualNonEmptyLayout, we should
        use seperate COMPtrs for the two cases rather than reuse one. 

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

2012-12-08  Seokju Kwon  <seokju.kwon@gmail.com>

        Remove unused headers
        https://bugs.webkit.org/show_bug.cgi?id=104428

        Reviewed by Kentaro Hara.

        Header inclusion cleanup.
        Remove <WebCore/NotImplement.h>.

        * WebCoreSupport/WebInspectorClient.cpp:
        * WebMutableURLRequest.cpp:

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

        Remove WebKit2 related projects from WebKit.sln
        https://bugs.webkit.org/show_bug.cgi?id=104395

        Reviewed by Tim Horton.

        * WebKit.vcproj/WebKit.sln:

2012-11-30  Brent Fulgham  <bfulgham@webkit.org>

        [Windows, WinCairo] Generate library export definition file.
        https://bugs.webkit.org/show_bug.cgi?id=103687

        Reviewed by Tim Horton.

        Update project solutions to use the new generated *.def files.

        * WebKit.vcproj/WebKit.sln: Update for new project and file
        locations.

2012-11-30  Mihai Maerean  <mmaerean@adobe.com>

        [CSSRegions] when WebKit uses V8, there should be a single variable to store if the CSS Regions feature is enabled
        https://bugs.webkit.org/show_bug.cgi?id=101192

        Reviewed by Hajime Morita.

        Removed the CSS Regions flag in Settings and switched to using the new flag I have added in RuntimeEnabledFeatures.

        Tests: No new tests because there is no functional change.

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

2012-11-29  Alexey Proskuryakov  <ap@apple.com>

        [WK2] Forward cookie jar calls to NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=103457

        Reviewed by Darin Adler.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::cookiesForDOM):
        (WebPlatformStrategies::setCookiesFromDOM):
        (WebPlatformStrategies::cookiesEnabled):
        (WebPlatformStrategies::cookieRequestHeaderFieldValue):
        (WebPlatformStrategies::getRawCookies):
        (WebPlatformStrategies::deleteCookie):
        (WebPlatformStrategies::getHostnamesWithCookies):
        (WebPlatformStrategies::deleteCookiesForHostname):
        (WebPlatformStrategies::deleteAllCookies):

2012-11-27  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        * WebFrame.cpp:
        (WebFrame::loadRequest):
        (WebFrame::loadData):

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

        Unreviewed, rolling out r135786.
        http://trac.webkit.org/changeset/135786
        https://bugs.webkit.org/show_bug.cgi?id=103379

        It made 3 plugin tests timeout on several platforms (Requested
        by Ossy on #webkit).

        * WebFrame.cpp:
        (WebFrame::loadRequest):
        (WebFrame::loadData):

2012-11-26  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        * WebFrame.cpp:
        (WebFrame::loadRequest):
        (WebFrame::loadData):

2012-11-21  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Disambiguate innerNodeFramePoint and mainFramePoint
        https://bugs.webkit.org/show_bug.cgi?id=98139

        Reviewed by Julien Chaffraix.

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

2012-11-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r135295.
        http://trac.webkit.org/changeset/135295
        https://bugs.webkit.org/show_bug.cgi?id=102834

        This patch causes assertion to some layout tests on chromium
        (Requested by jianli on #webkit).

        * WebFrame.cpp:
        (WebFrame::loadRequest):
        (WebFrame::loadData):

2012-11-20  James Simonsen  <simonjam@chromium.org>

        Consolidate FrameLoader::load() into one function taking a FrameLoadRequest
        https://bugs.webkit.org/show_bug.cgi?id=102151

        Reviewed by Adam Barth.

        * WebFrame.cpp:
        (WebFrame::loadRequest):
        (WebFrame::loadData):

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

        Add an integer identifier field to AuthenticationChallengeBase.
        https://bugs.webkit.org/show_bug.cgi?id=102593

        Reviewed by Darin Adler.

        * WebURLAuthenticationChallenge.cpp:
        (WebURLAuthenticationChallenge::initWithProtectionSpace): Adopt the new constructor with a dummy identifier.

2012-11-16  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix after r134960.

        Avoid including Mac-specific headers.

        * WebCoreSupport/WebFrameNetworkingContext.cpp: Stub out
        CFNetwork-based implementations.
        * WebCoreSupport/WebFrameNetworkingContext.h: Exclude
        CFNetwork data types.
        * WebCoreSupport/WebPlatformStrategies.cpp: Stub out
        CFNetwork-based implementations.
        * WebCoreSupport/WebPlatformStrategies.h: Exclude
        CFNetwork data types.

2012-11-15  Alexey Proskuryakov  <ap@apple.com>

        Private Browsing is a per-page setting that sets a global value
        https://bugs.webkit.org/show_bug.cgi?id=67870

        Reviewed by Sam Weinig.

        * WebCookieManagerCFNet.cpp: (WebCookieManager::cookieStorage): We can't get
        current session without any context, but the code was not correct anyway, the client
        is clearly interested in a getter to match override setter.

        * WebCoreSupport/WebFrameNetworkingContext.cpp: Moved code for tracking global
        sessions from WebCore to WebKit. The behavior is unchanged, but lower levels are
        now cleaner.

        * WebCoreSupport/WebFrameNetworkingContext.h: Ditto.

        * WebCoreSupport/WebPlatformStrategies.h:
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::defaultCookieStorage): Added. Use WebFrameNetworkingContext
        for tracking the default session.

        * WebView.cpp: (updateSharedSettingsFromPreferencesIfNeeded):
        Use WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts. Updating only
        the current session is not sufficient, and did not match Mac.

2012-11-14  George Tsoumalis  <tsumalis96@gmail.com>

        Implementation for mehods in WebMutableURLRequest.cpp
        https://bugs.webkit.org/show_bug.cgi?id=83671

        Reviewed by Brent Fulgham..

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::addValue):
        (WebMutableURLRequest::setMainDocumentURL):
        (WebMutableURLRequest::setHTTPShouldHandleCookies):


2012-11-12  Roger Fong  <roger_fong@apple.com>

        REGRESSION(r130643): Assertion failure when running DRT in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=101791

        Reviewed by Darin Adler.

        When running DRT in debug mode, we hit an assertion failure in initializing the WebKit instance.
        This failure started occuring in r130643 and this work around follows the work around in r132302.

        * WebKitCOMAPI.cpp:
        (CLSIDHashTraits):

2012-11-12  Roger Fong  <roger_fong@apple.com>

        Web Inspector: Fix docking behaviour on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=101978

        Reviewed by Brian Weinstein.

        There are a number of problems with docking behaviour on Windows.
        For starters, it does not ever constrain the inspector's size properly while docked.
        It also does not properly set the whether or not the inspector can be docked/undocked.
        This patch fixes both issues.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorFrontendClient::frontendLoaded): 
        (WebInspectorFrontendClient::attachWindow):
        Call restoreAttachedWindowHeight so that when first loading or reattaching the inspector,
        we resize the inspector window properly.

2012-11-05  Simon Fraser  <simon.fraser@apple.com>

        Fix layer borders to cleaning appear and disappear on switching
        https://bugs.webkit.org/show_bug.cgi?id=101136

        Reviewed by Sam Weinig.

        Remove the GraphicsLayerClient methods showDebugBorders() and
        showRepaintCounter().

        * WebView.cpp:
        * WebView.h:

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

        String::createCFString should return a RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=100419

        Reviewed by Andreas Kling.

        Update callers of String::createCFString.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin):
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::dispatchDidModifyDatabase):
        * WebHistory.cpp:
        (WebHistory::visitedURL):
        (WebHistory::itemForURLString):
        * WebHistoryItem.cpp:
        (WebHistoryItem::dictionaryRepresentation):
        * WebIconDatabase.cpp:
        (WebIconDatabase::iconDatabaseNotificationUserInfoURLKey):
        (postDidAddIconNotification):
        * WebLocalizableStrings.cpp:
        (createWebKitBundle):
        (copyLocalizedStringFromBundle):
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        * WebView.cpp:
        (WebView::setCacheModel):
        (WebView::notifyPreferencesChanged):

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

        Add a strategy for loader customization.
        https://bugs.webkit.org/show_bug.cgi?id=100278

        Reviewed by Alexey Proskuryakov.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createLoaderStrategy):
        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

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

        Add a strategy for shared workers
        https://bugs.webkit.org/show_bug.cgi?id=100165

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createPasteboardStrategy):
        (WebPlatformStrategies::createSharedWorkerStrategy):
        (WebPlatformStrategies::createVisitedLinkStrategy):
        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

2012-10-22  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix "ASSERTION FAILED: !document->inPageCache()" when loading a page
        https://bugs.webkit.org/show_bug.cgi?id=98514

        Reviewed by Kenneth Rohde Christiansen.

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

2012-10-21  Andreas Kling  <kling@webkit.org>

        Remove Page::javaScriptURLsAreAllowed setting.
        <http://webkit.org/b/99944>

        Reviewed by Anders Carlsson.

        Have WebView::setJavaScriptURLsAreAllowed() do nothing and return E_NOTIMPL
        to prevent COM ABI breakage.

        * WebView.cpp:
        (WebView::setJavaScriptURLsAreAllowed):

2012-10-18  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Build fix after r131701 and r131777.

        * WebKit.vcproj/WebKit.sln:

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

        Fix the windows build.

        * WebView.cpp:
        (toStringVector):

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

        Switch ResourceLoader::resourceData() from SharedBuffer to ResourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=98976

        Reviewed by Anders Carlsson.

        * WebDataSource.cpp:
        (WebDataSource::data):

2012-10-10  Jon Lee  <jonlee@apple.com>

        [WK2] Activate plugins when user clicks on snapshot
        https://bugs.webkit.org/show_bug.cgi?id=98328
        <rdar://problem/12426681>

        Reviewed by Brady Eidson.

        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient::recreatePlugin): Stub implementation of recreatePlugin().

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

        Switch CachedResource over from SharedBuffer to a new ResourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=98541

        Reviewed by Anders Carlsson.

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

2012-10-08  Simon Fraser  <simon.fraser@apple.com>

        Some GraphicsLayer cleanup to separate the concepts of using a tile cache, and being the main tile cache layer
        https://bugs.webkit.org/show_bug.cgi?id=98574

        Reviewed by Dean Jackson.

        GraphicsLayerCA assumed that using a TileCache equated to being the main page tile
        cache layer, which has some special considerations. Make these two concepts separate
        to get closer to being able to use TileCaches in place of CATiledLayer.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::LayerClient::platformCALayerShowRepaintCounter):

2012-10-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * COMPropertyBag.h:
        (::Read):
        (::GetPropertyInfo):
        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::getPluginInfo):
        * WebHistory.cpp:
        (WebHistory::removeItemFromDateCaches):
        * WebKitCOMAPI.cpp:
        (classFactory):
        * WebKitStatistics.cpp:
        (WebKitStatistics::comClassNameCounts):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::postNotificationInternal):
        (WebNotificationCenter::addObserver):
        (WebNotificationCenter::removeObserver):

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Final part of "sync" to "flush" renaming
        https://bugs.webkit.org/show_bug.cgi?id=98430

        Reviewed by Tim Horton.

        Change method names on GraphicsLayer and GraphicsLayerClient that
        refer to "sync" to use the term "flush" instead, to be consistent
        with the rest of the code.

        * WebView.cpp:
        (WebView::notifyFlushRequired):
        (WebView::flushPendingGraphicsLayerChanges):
        * WebView.h:

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Standardize on "flush" terminology for compositing layer flushing/syncing
        https://bugs.webkit.org/show_bug.cgi?id=98321

        Reviewed by Simon Fraser.

        Rename compositing-related methods that refer to "syncing" to instead
        refer to "flushing".

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::scheduleCompositingLayerFlush):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebView.cpp:
        (WebView::flushPendingGraphicsLayerChanges):

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

        Change most GraphicsLayer::create calls to use the version that takes a GraphicsLayerFactory
        https://bugs.webkit.org/show_bug.cgi?id=98217

        Reviewed by Andreas Kling.

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

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

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

        Reviewed by Maciej Stachowiak.

        Nuke the performImport() IconDatabaseClient method.

        * WebIconDatabase.cpp:
        * WebIconDatabase.h:
        (WebIconDatabase):

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

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

        Reviewed by Sam Weinig.

        Remove dispatchDidFirstLayout, 
        dispatchDidFirstVisuallyNonEmptyLayout, and 
        dispatchDidNewFirstVisuallyNonEmptyLayout. Their functionality 
        is now replaced by dispatchDidLayout(LayoutMilestoneOptions)
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidLayout):
        * WebCoreSupport/WebFrameLoaderClient.h:
        (WebFrameLoaderClient):

        It is now necessary to opt into getting any of the 
        "layout milestone" notifications.
        * WebView.cpp:
        (WebView::initWithFrame):

2012-09-19  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Use BString in favour of BSTR to improve memory management
        https://bugs.webkit.org/show_bug.cgi?id=93128

        Reviewed by Anders Carlsson.

        BString automatically calls SysFreeString() in its destructor which helps
        avoiding memory leaks. So it should be used instead of BSTR directly.
        Add operator& to BString to allow its usage for out parameters too (like COMPtr).
        This fixes already a few memory leaks in the existing code.

        * DefaultPolicyDelegate.cpp:
        (DefaultPolicyDelegate::decidePolicyForNavigationAction):
        (DefaultPolicyDelegate::decidePolicyForMIMEType):
        (DefaultPolicyDelegate::unableToImplementPolicyWithError):
        * MarshallingHelpers.cpp:
        (MarshallingHelpers::KURLToBSTR):
        (MarshallingHelpers::CFStringRefToBSTR):
        (MarshallingHelpers::stringArrayToSafeArray):
        (MarshallingHelpers::safeArrayToStringArray):
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::runJavaScriptPrompt):
        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::checkGrammarOfString):
        (WebEditorClient::getGuessesForWord):
        * WebFrame.cpp:
        (WebFrame::canProvideDocumentSource):
        * WebHistory.cpp:
        (WebHistory::removeItem):
        (WebHistory::addItem):
        * WebIconDatabase.cpp:
        (WebIconDatabase::startUpIconDatabase):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::postNotification):
        * WebPreferences.cpp:
        (WebPreferences::setStringValue):
        * WebView.cpp:
        (toAtomicString):
        (toString):
        (toKURL):
        (PreferencesChangedOrRemovedObserver::onNotify):
        (WebView::close):
        (WebView::canShowMIMEType):
        (WebView::initWithFrame):
        (WebView::setApplicationNameForUserAgent):
        (WebView::setCustomUserAgent):
        (WebView::userAgentForURL):
        (WebView::setCustomTextEncodingName):
        (WebView::customTextEncodingName):
        (WebView::setPreferences):
        (WebView::searchFor):
        (WebView::executeCoreCommandByName):
        (WebView::markAllMatchesForText):
        (WebView::setGroupName):
        (WebView::registerURLSchemeAsLocal):
        (WebView::replaceSelectionWithText):
        (WebView::onNotify):
        (WebView::notifyPreferencesChanged):
        (WebView::MIMETypeForExtension):
        (WebView::standardUserAgentWithApplicationName):
        (WebView::addAdditionalPluginDirectory):
        (WebView::registerEmbeddedViewMIMEType):
        (WebView::addOriginAccessWhitelistEntry):
        (WebView::removeOriginAccessWhitelistEntry):
        (WebView::geolocationDidFailWithError):
        (WebView::setDomainRelaxationForbiddenForURLScheme):
        (WebView::setCompositionForTesting):
        (WebView::confirmCompositionForTesting):

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

        Unreviewed, rolling out r128809.
        http://trac.webkit.org/changeset/128809
        https://bugs.webkit.org/show_bug.cgi?id=96958

        Broke the Windows build. (Requested by andersca on #webkit).

        * DefaultPolicyDelegate.cpp:
        (DefaultPolicyDelegate::decidePolicyForNavigationAction):
        (DefaultPolicyDelegate::decidePolicyForMIMEType):
        (DefaultPolicyDelegate::unableToImplementPolicyWithError):
        * MarshallingHelpers.cpp:
        (MarshallingHelpers::KURLToBSTR):
        (MarshallingHelpers::CFStringRefToBSTR):
        (MarshallingHelpers::stringArrayToSafeArray):
        (MarshallingHelpers::safeArrayToStringArray):
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::runJavaScriptPrompt):
        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::checkGrammarOfString):
        (WebEditorClient::getGuessesForWord):
        * WebFrame.cpp:
        (WebFrame::canProvideDocumentSource):
        * WebHistory.cpp:
        (WebHistory::removeItem):
        (WebHistory::addItem):
        * WebIconDatabase.cpp:
        (WebIconDatabase::startUpIconDatabase):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::postNotification):
        * WebPreferences.cpp:
        (WebPreferences::setStringValue):
        * WebView.cpp:
        (PreferencesChangedOrRemovedObserver::onNotify):
        (WebView::close):
        (WebView::canShowMIMEType):
        (WebView::initWithFrame):
        (WebView::setApplicationNameForUserAgent):
        (WebView::setCustomUserAgent):
        (WebView::userAgentForURL):
        (WebView::setCustomTextEncodingName):
        (WebView::customTextEncodingName):
        (WebView::setPreferences):
        (WebView::searchFor):
        (WebView::executeCoreCommandByName):
        (WebView::markAllMatchesForText):
        (WebView::setGroupName):
        (WebView::registerURLSchemeAsLocal):
        (WebView::replaceSelectionWithText):
        (WebView::onNotify):
        (WebView::notifyPreferencesChanged):
        (WebView::MIMETypeForExtension):
        (WebView::standardUserAgentWithApplicationName):
        (WebView::addAdditionalPluginDirectory):
        (WebView::registerEmbeddedViewMIMEType):
        (toString):
        (toKURL):
        (WebView::addOriginAccessWhitelistEntry):
        (WebView::removeOriginAccessWhitelistEntry):
        (WebView::geolocationDidFailWithError):
        (WebView::setDomainRelaxationForbiddenForURLScheme):
        (WebView::setCompositionForTesting):
        (WebView::confirmCompositionForTesting):

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

        Added MSVC project changes to enable building the llint.
        https://bugs.webkit.org/show_bug.cgi?id=96175.

        Reviewed by Geoff Garen.

        This only adds the ability to build the llint, but currently, only the
        C++ backend is supported. By default, the Windows port will remain
        running with the baseline JIT.  The llint will not be enabled.

        * WebKit.vcproj/WebKit.sln:

2012-09-13  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build fix.

        * WebCookieManagerCurl.cpp: Remove unused 'using WebCore'
        declaration that prevented the build from completing.

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

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

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

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read):
        * WebView.cpp:
        (WebView::handleContextMenuEvent):
        (WebView::elementAtPoint):

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

        https://bugs.webkit.org/show_bug.cgi?id=96158
        Need API to suppress scrollbar animations
        -and corresponding-
        <rdar://problem/12210972>

        Reviewed by Sam Weinig.

        ScrollableArea::isOnActivePage() has been re-named to
        ScrollableArea:: scrollbarsCanBeActive().
        * WebScrollBar.cpp:
        (WebScrollBar::scrollbarsCanBeActive):
        * WebScrollBar.h:
        (WebScrollBar):

2012-09-10  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Update Windows port accessible role mappings to fix some tests
        https://bugs.webkit.org/show_bug.cgi?id=96219

        Reviewed by Chris Fleizach.

        Update a bunch of accessible role mappings to fix tests and improve win
        accessibility.

        * AccessibleBase.cpp:
        (MSAARole):

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

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

        Reviewed by Antonio Gomes.

        Update calls to new API.

        * WebActionPropertyBag.cpp:
        (WebActionPropertyBag::Read):
        * WebView.cpp:
        (WebView::handleContextMenuEvent):
        (WebView::elementAtPoint):

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

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

        Reviewed by Adam Barth.

        Remove PlatformString.h

        * DOMCSSClasses.cpp:
        * DefaultPolicyDelegate.cpp:
        * MarshallingHelpers.cpp:
        * WebCoreSupport/WebInspectorClient.h:
        * WebDownload.h:
        * WebFrame.h:
        * WebHistoryItem.h:
        * WebIconDatabase.cpp:
        * WebKitDLL.h:
        * WebKitGraphics.cpp:
        * WebKitSystemBits.cpp:
        * WebLocalizableStrings.cpp:
        * WebNotificationCenter.cpp:
        * WebResource.h:

2012-09-06  Patrick Gansterer  <paroga@webkit.org>

        Remove String::operator+=() from windows platform code
        https://bugs.webkit.org/show_bug.cgi?id=95904

        Reviewed by Benjamin Poulain.

        Use StringBuilder and operator+() to concatenate strings instead of operator+=().

        * AccessibleBase.cpp:
        (AccessibleBase::get_accKeyboardShortcut):
        * WebDownload.cpp:
        (WebDownload::bundlePathForTargetPath):
        * WebView.cpp:
        (imeCompositionArgumentNames):

2012-09-05  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [DRT] LTC:: Move printing related APIs from LayoutTestController to Internals
        https://bugs.webkit.org/show_bug.cgi?id=92735

        Reviewed by Hajime Morita.

        Move numberOfPages, pageProperty & pageSizeAndMarginsInPixels in Internals and remove duplicated code from DumprenderTree & WebkitTestRunner.
        Kept the function defination and declaration to keep binary compatibility for IWebFramePrivate.idl

        * WebFrame.cpp:
        (WebFrame::numberOfPages):

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

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

        Reviewed by Geoffrey Garen.

        Replace UString by String.

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

2012-08-29  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Canvas should have a distinct role
        https://bugs.webkit.org/show_bug.cgi?id=95248

        Reviewed by Chris Fleizach.

        Map new CanvasRole to the same as ImageRole.

        * AccessibleBase.cpp:
        (MSAARole):

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

        Unreviewed, rolling out r126972.
        http://trac.webkit.org/changeset/126972
        https://bugs.webkit.org/show_bug.cgi?id=95349

        accessibility/canvas-description-and-role.html has been
        failing consistently on several bots and Dominic needs some
        time to investigate why (Requested by jchaffraix on #webkit).

        * AccessibleBase.cpp:
        (MSAARole):

2012-08-29  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Canvas should have a distinct role
        https://bugs.webkit.org/show_bug.cgi?id=95248

        Reviewed by Chris Fleizach.

        Map new CanvasRole to the same as ImageRole.

        * AccessibleBase.cpp:
        (MSAARole):

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

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

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

        * COMPropertyBag.h:
        (::Read):
        (::GetPropertyInfo):
        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::getPluginInfo):
        * WebHistory.cpp:
        (WebHistory::removeItemFromDateCaches):
        * WebKitCOMAPI.cpp:
        (classFactory):
        * WebKitStatistics.cpp:
        (WebKitStatistics::comClassNameCounts):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::postNotificationInternal):
        (WebNotificationCenter::addObserver):
        (WebNotificationCenter::removeObserver):

2012-08-28  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * COMPropertyBag.h:
        (::Read):
        (::GetPropertyInfo):
        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::getPluginInfo):
        * WebHistory.cpp:
        (WebHistory::removeItemFromDateCaches):
        * WebKitCOMAPI.cpp:
        (classFactory):
        * WebKitStatistics.cpp:
        (WebKitStatistics::comClassNameCounts):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::postNotificationInternal):
        (WebNotificationCenter::addObserver):
        (WebNotificationCenter::removeObserver):

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

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

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

        * COMPropertyBag.h:
        (::Read):
        (::GetPropertyInfo):
        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::getPluginInfo):
        * WebHistory.cpp:
        (WebHistory::removeItemFromDateCaches):
        * WebKitCOMAPI.cpp:
        (classFactory):
        * WebKitStatistics.cpp:
        (WebKitStatistics::comClassNameCounts):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::postNotificationInternal):
        (WebNotificationCenter::addObserver):
        (WebNotificationCenter::removeObserver):

2012-08-27  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * COMPropertyBag.h:
        (::Read):
        (::GetPropertyInfo):
        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::getPluginInfo):
        * WebHistory.cpp:
        (WebHistory::removeItemFromDateCaches):
        * WebKitCOMAPI.cpp:
        (classFactory):
        * WebKitStatistics.cpp:
        (WebKitStatistics::comClassNameCounts):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::postNotificationInternal):
        (WebNotificationCenter::addObserver):
        (WebNotificationCenter::removeObserver):

2012-08-23  Adrienne Walker  <enne@google.com>

        Convert ScrollableArea ASSERT_NOT_REACHED virtuals
        https://bugs.webkit.org/show_bug.cgi?id=93306

        Reviewed by Darin Adler.

        Add implementations where necessary to make derived classes concrete.
        Add OVERRIDE for ScrollableArea functions.

        * WebScrollBar.cpp:
        (WebScrollBar::visibleHeight):
        (WebScrollBar::visibleWidth):
        (WebScrollBar::contentsSize):
        (WebScrollBar::isOnActivePage):
        (WebScrollBar::scrollableAreaBoundingBox):
        * WebScrollBar.h:
        (WebScrollBar):

2012-08-22  Nikhil Bhargava  <nbhargava@google.com>

        Reduce Font.h includes across project -- improves RenderObject.h compile time
        https://bugs.webkit.org/show_bug.cgi?id=93629

        Reviewed by Eric Seidel.

        Adds includes due to change in RenderStyle.h

        * DOMCoreClasses.cpp:

2012-08-15  Ryosuke Niwa  <rniwa@webkit.org>

        Update manual tests and comments to refer to TestRunner instead of LayoutTestController
        https://bugs.webkit.org/show_bug.cgi?id=94168

        Reviewed by Kent Tamura.

        * Interfaces/IWebPreferencesPrivate.idl:

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

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

        Reviewed by Eric Seidel.

        * WebFrame.cpp:
        (WebFrame::DOMWindow):
        (WebFrame::pendingFrameUnloadEventCount):

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

        [chromium] release FrameLoaderClientImpl::m_pluginWidget refptr upon Plugin Document detach.
        https://bugs.webkit.org/show_bug.cgi?id=93283

        Reviewed by Eric Seidel.

        Change the client redirectDataToPlugin method(s) to expect the possibility of
        a NULL argument, keeping existing behaviour otherwise.

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

2012-08-05  Patrick Gansterer  <paroga@webkit.org>

        [WIN] Use sizeof() for cbWndExtra values
        https://bugs.webkit.org/show_bug.cgi?id=93179

        Reviewed by Eric Carlson.

        Using sizof() instead of hardcoding the pointer size of
        the 32bit platform allows us to use the code on 64bit too.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::registerHUDWindowClass):
        * WebView.cpp:
        (WebView::registerWebViewWindowClass):

2012-07-26  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [Mac] Fix build break on Apple win bot after r123711
        https://bugs.webkit.org/show_bug.cgi?id=92354

        Reviewed by Adam Barth.

        Missing return value.

        * WebFrame.cpp:
        (WebFrame::pageNumberForElementById):

2012-07-26  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [DRT] LTC:: pageNumberForElementById() could be moved to Internals
        https://bugs.webkit.org/show_bug.cgi?id=92091

        Reviewed by Adam Barth.

        Moved the pageNumberForElementById from LayoutTestCotroller to Internals and
        remove the old platform specific implementations as it exclusively tests WebCore functionality.

        * WebFrame.cpp: Added comment for removing the function. Removed implementation.

2012-07-25  Roger Fong  <roger_fong@apple.com>

        Changes to the WebFrame API cause dependent apps to crash.
        https://bugs.webkit.org/show_bug.cgi?id=91656
        <rdar://problem/11904605>
        
        Reviewed by Jon Honeycutt.
        
        Changes to the WebFrame API cause certain apps to crash because of inconsistencies in the COM interface.
        The resumeAnimations and suspendAnimations are removed, which are still needed.
        The counterValueByElementId method was also removed, although is not needed there.
        However, for all of these methods, no method stubs were added where appropriate after removal.
        
        * Interfaces/IWebFramePrivate.idl:
        Added resumeAnimations() and suspendAnimations() methods back in. Added unused method stub for counterValueByElementId method.
        
        * WebFrame.cpp:
        (WebFrame::resumeAnimations):
        Added this method back in.
        (WebFrame::suspendAnimations):
        Added this method back in.
        
        * WebFrame.h:
        (Re)added methods and unused method stubs. 

2012-07-23  Patrick Gansterer  <paroga@webkit.org>

        Build fix if NOMINMAX is defined by the build system.

        * COMEnumVariant.h: Added #ifndef NOMINMAX around #define NOMINMAX.
        * COMPropertyBag.h: Ditto.

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

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

        Reviewed by Ryosuke Niwa.

        Remove numTouchEventHandlersChanged stub.

        * WebCoreSupport/WebChromeClient.h:

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

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

        Reviewed by Pavel Feldman.

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

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

2012-07-14  Eric Carlson  <eric.carlson@apple.com>

        Enable AVCF hardware video decoding
        https://bugs.webkit.org/show_bug.cgi?id=90015
        <rdar://problem/10770317>

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::graphicsDeviceAdapter): New, return the view's graphics adapter.
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

        * WebView.cpp:
        (WebView::graphicsDeviceAdapter): New, return the layer tree host's graphics adapter.
        * WebView.h:
        (WebCore):
        (WebView):

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

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

        Reviewed by Eric Seidel.

        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::setHixie76WebSocketProtocolEnabled):
        (WebPreferences::hixie76WebSocketProtocolEnabled):
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

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

        Make HTMLCollection RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=90414

        Reviewed by Sam Weinig.

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::forms):
        (DOMHTMLSelectElement::options):

2012-07-03  Mihai Balan  <mibalan@adobe.com>

        [CSS Regions] Enabling regions on Windows lead to crash-on-launch for WebKit.exe
        https://bugs.webkit.org/show_bug.cgi?id=90435

        Reviewed by Csaba Osztrogonác.

        Initial patch for enabling regions led to WebKit crashing on launch. Moving the
        IDL declarations for CSS regions getter/setter at the end of the file solves the
        problem. As per http://trac.webkit.org/changeset/95650 seems it has to do with
        binary compatibility.

        * Interfaces/IWebPreferences.idl: Mover getter/setter for CSS regions at the end of file

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

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

        Reviewed by Simon Fraser.

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

2012-06-29  Mihai Balan  <mibalan@adobe.com>

        [CSS Regions] Adding feature defines for CSS Regions for Windows
        https://bugs.webkit.org/show_bug.cgi?id=88645

        Reviewed by Tony Chang.

        Re-trying to enable CSS regions on Windows. This time only enabling
        regions since exclusions lead to some very strange compiling/linking
        problems. This time adding preferences code to make sure the settings
        get propagated to DRT (previous experiments by abucur showed they
        didn't.).

        * WebPreferenceKeysPrivate.h: Added preference key for CSS regions
        * Interfaces/IWebPreferences.idl: Added getters and setters for CSS regions settings
        * WebPreferences.cpp: ditto
        (WebPreferences::initializeDefaultSettings):
        (WebPreferences::isCSSRegionsEnabled):
        (WebPreferences::setCSSRegionsEnabled):
        * WebPreferences.h: ditto
        (WebPreferences):
        * WebView.cpp: Added settings code to handle CSS regions, too
        (WebView::notifyPreferencesChanged):

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

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

        Reviewed by Geoffrey Garen.

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

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebFrame.cpp:
        (WebFrame::stringByEvaluatingJavaScriptInScriptWorld):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):
        (WebView::reportException):
        (WebView::elementFromJS):

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

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

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

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebFrame.cpp:
        (WebFrame::stringByEvaluatingJavaScriptInScriptWorld):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):
        (WebView::reportException):
        (WebView::elementFromJS):

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

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

        Reviewed by Gavin Barraclough.

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

        * WebCoreStatistics.cpp:
        (WebCoreStatistics::javaScriptObjectsCount):
        (WebCoreStatistics::javaScriptGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectsCount):
        (WebCoreStatistics::javaScriptProtectedGlobalObjectsCount):
        (WebCoreStatistics::javaScriptProtectedObjectTypeCounts):
        * WebFrame.cpp:
        (WebFrame::stringByEvaluatingJavaScriptInScriptWorld):
        * WebJavaScriptCollector.cpp:
        (WebJavaScriptCollector::objectCount):
        * WebView.cpp:
        (WebView::stringByEvaluatingJavaScriptFromString):
        (WebView::reportException):
        (WebView::elementFromJS):

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

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

        Reviewed by Adam Barth.

        * WebView.cpp:
        (WebView::setCookieEnabled):
        (WebView::cookieEnabled):

2012-06-20  Julien Chaffraix  <jchaffraix@webkit.org>

        Use IntSize in RenderLayer to represent scroll offsets
        https://bugs.webkit.org/show_bug.cgi?id=89154

        Reviewed by Eric Seidel.

        * WebView.cpp:
        (WebView::gesture):
        Updated to pass an IntSize to scrollByRecursively.

2012-06-11  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        [DRT] LTC:: counterValueForElementById() could be moved to Internals.
        https://bugs.webkit.org/show_bug.cgi?id=84406

        Reviewed by Hajime Morita.

        Move the counterValueForElementById from LayoutTestCotroller to Internals and
        remove the old platform specific implementations as it exclusively tests WebCore functionality.

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

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

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

        Reviewed by Dan Bernstein.

        * WebFrame.cpp:
        (WebFrame::setIsDisconnected):
        (WebFrame::setExcludeFromTextSearch):
        Stop doing anything in these functions.

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

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

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

        * WebFrame.cpp:
        (WebFrame::setIsDisconnected):
        (WebFrame::setExcludeFromTextSearch):

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

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

        Reviewed by Dan Bernstein.

        * WebFrame.cpp:
        (WebFrame::setIsDisconnected):
        (WebFrame::setExcludeFromTextSearch):
        Stop doing anything in these functions.

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

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

        Reviewed by Ryosuke Niwa.

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

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

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

        Reviewed by Eric Seidel.

        * WebInspector.cpp:
        (WebInspector::setJavaScriptProfilingEnabled):

2012-05-25  Lynn Neir  <lynn.neir@skype.net>

        Added methods needed to implement backend for DRT's TextInputController on windows, https://bugs.webkit.org/show_bug.cgi?id=32021

        Reviewed by Eric Seidel.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::setCompositionForTesting):
        (WebView::hasCompositionForTesting):
        (WebView::confirmCompositionForTesting):
        (WebView::compositionRangeForTesting):
        (WebView::firstRectForCharacterRangeForTesting):
        (WebView::selectedRangeForTesting):
        * WebView.h:
        (WebView):

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

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

        Reviewed by Hajime Morita and Kenneth Rohde Christiansen.

        Remove Win private API to get/set the editing behavior. Follow the previous
        removals that keep the virtual functions there but failing.

        * Interfaces/IWebPreferences.idl:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::unused5):
        (WebPreferences::unused6):
        * WebPreferences.h:
        (WebPreferences):
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

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

        Another unreviewed attempt to fix build breakage on r117572.

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

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

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

        Reviewed by Ryosuke Niwa.

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

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

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

        Reviewed by Ryosuke Niwa.

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

        No new tests, no change in behavior.

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

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

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

        Reverted r117428.

        * Interfaces/IWebViewPrivate.idl:
        * WebView.cpp:
        (WebView::setDomainRelaxationForbiddenForURLScheme):
        * WebView.h:
        (WebView):

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

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

        Reviewed by Eric Seidel.

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

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

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

        Reviewed by Sam Weinig.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::shouldUnavailablePluginMessageBeButton):
        (WebChromeClient::unavailablePluginButtonClicked):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

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

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

        Reviewed by Ryosuke Niwa.

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

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

2012-05-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Refactor windowClipRectForLayer to remove the explicit RenderLayer dependency
        https://bugs.webkit.org/show_bug.cgi?id=84090

        Reviewed by David Hyatt.

        * WebCoreSupport/EmbeddedWidget.cpp:
        (EmbeddedWidget::windowClipRect):
        Updated after windowClipRectForLayer name and signature change.

        * WebCoreSupport/EmbeddedWidget.h:
        (EmbeddedWidget):
        (EmbeddedWidget::EmbeddedWidget):
        Updated the internal DOM pointer to be an HTMLPlugInElement
        as it was what was passed in anyway. Also fixed some style
        issues detected by our tools.

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

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

        Reviewed by Simon Fraser.

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

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Jian Li.

        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::requestPermission):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:
        (WebDesktopNotificationsDelegate): Add stub implementation of requestPermission.

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

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

        Reviewed by Andy Estes.

        * WebFrame.h:
        Fix function stub for new parameter.

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

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

        Reviewed by Eric Seidel.

        * WebView.cpp:

2012-04-20  Emil A Eklund  <eae@chromium.org>

        [win] Update windows platform code to use pixel snapped values
        https://bugs.webkit.org/show_bug.cgi?id=84283

        Reviewed by Eric Seidel.

        * AccessibleBase.cpp:
        (AccessibleBase::accLocation):

2012-04-18  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: Disabling Inspector causes build failure on Windows
        https://bugs.webkit.org/show_bug.cgi?id=83557

        Reviewed by Pavel Feldman.

        The calls to inspector APIs are not put under ENABLE(INSPECTOR) guard.
        This change brings all such API calls under the guard.

        * WebCoreSupport/WebInspectorClient.cpp:
        * WebInspector.cpp:
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::WebNodeHighlight):
        (WebNodeHighlight::update):
        * WebNodeHighlight.h:
        (WebNodeHighlight):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::close):
        (WebView::initWithFrame):
        (WebView::inspector):
        * WebView.h:
        (WebView):

2012-04-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r113836.
        http://trac.webkit.org/changeset/113836
        https://bugs.webkit.org/show_bug.cgi?id=83705

        Broke all the WebKit2 inspector tests (Requested by andersca
        on #webkit).

        * WebCoreSupport/WebInspectorClient.cpp:
        (registerWindowClass):
        * WebInspector.cpp:
        (WebInspector::setTimelineProfilingEnabled):
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::WebNodeHighlight):
        (WebNodeHighlight::update):
        * WebNodeHighlight.h:
        (WebNodeHighlight):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::close):
        (WebView::initWithFrame):
        (WebView::inspector):
        * WebView.h:
        (WebView):

2012-04-11  Vivek Galatage  <vivekgalatage@gmail.com>

        Web Inspector: Disabling Inspector causes build failure on Windows
        https://bugs.webkit.org/show_bug.cgi?id=83557

        Reviewed by Pavel Feldman.

        The calls to inspector APIs are not put under ENABLE(INSPECTOR) guard.
        This change brings all such API calls under the guard.
        
        * WebCoreSupport/WebInspectorClient.cpp:
        * WebInspector.cpp:
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::WebNodeHighlight):
        (WebNodeHighlight::update):
        * WebNodeHighlight.h:
        (WebNodeHighlight):
        * WebView.cpp:
        (WebView::WebView):
        (WebView::close):
        (WebView::initWithFrame):
        (WebView::inspector):
        * WebView.h:
        (WebView):

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

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

        Reviewed by Adam Barth.

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

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

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

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

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

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

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

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

        Reviewed by Ryosuke Niwa.

        Update code to use AddResult instead of a pair.

        * WebKitCOMAPI.cpp:
        (classFactory):

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

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

        Reviewed by Adam Barth.

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

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

        Reviewed by Eric Seidel.

        Update call site to new function name.

        * WebFrame.cpp:
        (WebFrame::dispatchWillSubmitForm):

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

        ASSERT(!needsLayout) in RenderView.cpp when visiting http://www.panic.com/blog/
        https://bugs.webkit.org/show_bug.cgi?id=81953
        <rdar://problem/11086998>

        Reviewed by Sam Weinig.

        Update for changes to WebCore.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::LayerClient::platformCALayerDidCreateTiles):

2012-03-20  Steve Falkenburg  <sfalken@apple.com>

        Move WTF-related Windows project files out of JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=80680

        Reviewed by Jessie Berlin.

        * WebKit.vcproj/WebKit.sln:

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

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

        Reviewed by Ryosuke Niwa.

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

        * Interfaces/IWebFramePrivate.idl:

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

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

        Reviewed by Eric Seidel.

        Remove FrameLoaderClient methods that no longer exist.

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

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

        Fix Windows build.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::LayerClient::platformCALayerDeviceScaleFactor):

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

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

        Reviewed by Jian Li.

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

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

        Update everything to be #if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS)
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::WebChromeClient):
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:

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

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

        Reviewed by Adam Barth.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):
        * WebCoreSupport/WebGeolocationClient.cpp:
        (WebGeolocationClient::lastPosition):
        * WebGeolocationPosition.cpp:
        (WebGeolocationPosition::initWithTimestamp):
        (core):
        * WebGeolocationPosition.h:
        (WebGeolocationPosition):
        (WebGeolocationPosition::impl):
        * WebView.cpp:
        (WebView::initWithFrame):
        (WebView::geolocationDidChangePosition):
        (WebView::geolocationDidFailWithError):

2012-03-12  Jessie Berlin  <jberlin@apple.com>

        More Windows build fixing.

        * MarshallingHelpers.cpp:
        * WebDatabaseManager.cpp:

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

        Rename NotificationPresenter to NotificationClient
        https://bugs.webkit.org/show_bug.cgi?id=80488
        <rdar://problem/10965558>

        Reviewed by Kentaro Hara.

        Refactor to use renamed WebCore::NotificationClient.
        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::notificationPresenter):
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::checkPermission):
        * WebCoreSupport/WebDesktopNotificationsDelegate.h:
        (WebDesktopNotificationsDelegate):

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

        Add roundedPoint to HitTestResult and change platform code to use it
        https://bugs.webkit.org/show_bug.cgi?id=80715

        Reviewed by James Robinson.

        Change ports to use roundedPoint to avoid exposing subpixel types to
        platform code.

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

2012-03-08  Steve Falkenburg  <sfalken@apple.com>

        Separate WTF parts of JavaScriptCoreGenerated into WTFGenerated for Windows build
        https://bugs.webkit.org/show_bug.cgi?id=80657

        Preparation for WTF separation from JavaScriptCore.
        The "Generated" vcproj files on Windows are necessary so Visual Studio can calculate correct
        dependencies for generated files.

        Reviewed by Jessie Berlin.

        * WebKit.vcproj/WebKit.sln: Add WTFGenerated, update dependent projects.

2012-03-03  Benjamin Poulain  <benjamin@webkit.org>

        Remove the redundant method KURL::protocolInHTTPFamily()
        https://bugs.webkit.org/show_bug.cgi?id=80216

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        (WebFrameLoaderClient::dispatchDidFailToStartPlugin):
        * WebHistory.cpp:
        (WebHistory::visitedURL):

2012-02-26  Hajime Morrita  <morrita@chromium.org>

        Move ChromeClient::showContextMenu() to ContextMenuClient
        https://bugs.webkit.org/show_bug.cgi?id=79427

        Reviewed by Adam Barth.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient):

2012-02-24  Shinya Kawanaka  <shinyak@chromium.org>

        SpellCheckRequest needs to know the context where the spellcheck happened.
        https://bugs.webkit.org/show_bug.cgi?id=79320

        Reviewed by Hajime Morita.

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

2012-02-21  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the remaining uses of CSSStyleDeclaration in Editor
        https://bugs.webkit.org/show_bug.cgi?id=78939

        Reviewed by Enrica Casucci.

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

2012-02-22  Ryosuke Niwa  <rniwa@webkit.org>

        Remove the remaining uses of CSSStyleDeclaration in Editor
        https://bugs.webkit.org/show_bug.cgi?id=78939

        Reviewed by Enrica Casucci.

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

2012-02-17  Kalev Lember  <kalevlember@gmail.com>

        Remove unused parameters from WTF threading API
        https://bugs.webkit.org/show_bug.cgi?id=78389

        Reviewed by Adam Roben.

        waitForThreadCompletion() had an out param 'void **result' to get the
        'void *' returned by ThreadFunction. However, the implementation in
        ThreadingWin.cpp ignored the out param, not filling it in. This had
        led to a situation where none of the client code made use of the param
        and just ignored it.

        To clean this up, the patch changes the signature of ThreadFunction to
        return void instead of void* and drops the the unused 'void **result'
        parameter from waitForThreadCompletion. Also, all client code is
        updated for the API change.

        As mentioned in https://bugs.webkit.org/show_bug.cgi?id=78389 , even
        though the change only affects internal API, Safari is using it
        directly and we'll need to keep the old versions around for ABI
        compatibility. For this, the patch adds compatibility wrappers with
        the old ABI.

        * WebKit.vcproj/WebKit_Cairo.def: Add the new functions.
        * WebKit.vcproj/WebKit_Cairo_debug.def: Ditto.

2012-02-15  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Notify ChromeClient when touch-event handlers are installed/removed.
        https://bugs.webkit.org/show_bug.cgi?id=77440

        Reviewed by Darin Fisher and Ryosuke Niwa.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::numTouchEventHandlersChanged):

2012-02-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
        https://bugs.webkit.org/show_bug.cgi?id=78541
        <rdar://problem/10036695>

        Reviewed by Kent Tamura.

        * WebPreferences.cpp: (WebPreferences::initializeDefaultSettings): Changed default value of
        the preference

2012-02-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Convert svg/animations to use SMIL methods for driving the timeline
        https://bugs.webkit.org/show_bug.cgi?id=78422

        Reviewed by Dirk Schulze.

        Remove SVG animation sampling functionality provided for DRT, which no longer uses it.
        Instead we switched the svg/animations tests to use SVGSVGElement.setCurrentTime.

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

2012-02-13  Andy Estes  <aestes@apple.com>

        Fix the Windows build.

        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::createPasteboardStrategy):
        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies):

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

        [Windows] Add API to enable inverted color drawing on a WebView
        https://bugs.webkit.org/show_bug.cgi?id=77382

        Reviewed by Adam Roben.

        Add a new private WebPreference key called "WebKitShouldInvertColors"
        and add private cover methods to get and set the preference. When this
        preference changes on a WebPreference object, all WebViews listening to
        that object will repaint to reflect the new value.

        * Interfaces/IWebPreferencesPrivate.idl: Add [setS|s]houldInvertColors()
        cover methods for WebKitShouldInvertColorsPreferenceKey.
        * WebPreferenceKeysPrivate.h: Add WebKitShouldInvertColorsPreferenceKey.
        * WebPreferences.cpp:
        (WebPreferences::shouldInvertColors):
        (WebPreferences::setShouldInvertColors):
        * WebPreferences.h:
        (WebPreferences):
        * WebView.cpp:
        (WebView::setShouldInvertColors): If m_shouldInvertColors changes,
        update the value on the WebView and in m_layerTreeHost, then repaint
        the view.
        (WebView::notifyPreferencesChanged):
        (WebView::setAcceleratedCompositing): When creating a new layer tree
        host, tell it whether it should be inverting colors.
        * WebView.h:

2012-02-07  MORITA Hajime  <morrita@google.com>

        Replacement text should be available from the marker.
        https://bugs.webkit.org/show_bug.cgi?id=77934

        Reviewed by Kent Tamura.

        * WebKit.vcproj/WebKit_Cairo.def:
        * WebKit.vcproj/WebKit_Cairo_debug.def:

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

        Clear shown notifications when context is no longer active
        https://bugs.webkit.org/show_bug.cgi?id=77363
        <rdar://problem/10568907>

        Reviewed by Darin Adler.

        * WebCoreSupport/WebDesktopNotificationsDelegate.h:
        (WebDesktopNotificationsDelegate): Add previously missing virtual functions.
        * WebCoreSupport/WebDesktopNotificationsDelegate.cpp:
        (WebDesktopNotificationsDelegate::notificationControllerDestroyed):
        (WebDesktopNotificationsDelegate::cancelRequestsForPermission):

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

        Another attempt to fix the Windows build.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::LayerClient::platformCALayerDidCreateTiles):

2012-01-26  Andy Estes  <aestes@apple.com>

        [Windows] Optionally invert colors when drawing to a WebView's backing store.
        https://bugs.webkit.org/show_bug.cgi?id=77168

        Reviewed by Sam Weinig.

        * WebView.cpp:
        (WebView::WebView): Initialize m_shouldInvertColors to false.
        (WebView::paintIntoBackingStore): If m_shouldInvertColors is true, draw
        an opaque white quad using the CompositeDifference blend mode. This
        blend operation instructs CoreGraphics to take the difference between
        the source pixel (white) and the background pixel, resulting in an
        inverted pixel.
        * WebView.h: Define m_shouldInvertColors.

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

        Show layer borders for scrollbar layers
        https://bugs.webkit.org/show_bug.cgi?id=76888

        Reviewed by Beth Dakin.

        Update for new signature of GraphicsLayerClient::showDebugBorders()
        and GraphicsLayerClient::showRepaintCounter().

        * WebView.cpp:
        (WebView::showDebugBorders):
        (WebView::showRepaintCounter):
        * WebView.h:

2012-01-23  David Levin  <levin@chromium.org>

        [windows] Convert usages of GetDC to HWndDC Part 2.
        https://bugs.webkit.org/show_bug.cgi?id=76750

        Reviewed by Adam Roben.

        * FullscreenVideoController.cpp:
        (createCompatibleDCForWindow): Moved out the code which creates a DC for a window
        to keep the same scope for the DC lifetime.
        (FullscreenVideoController::draw):  Switch to using OwnPtr<HDC>
        since createCompatibleDCForWindow returns a PassOwnPtr.
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::update): 
          Cleaned up leaks from calling GetDC without release.
          Note that there is a potential leak of hdc that previously existed
          and still does in an early exit scenario. (This could be easily fixed
          by using OwnPtr<HDC> but I was trying to keep this patch focused.)
        * WebView.cpp:
        (WebView::scrollBackingStore): Typical conversion.
        (WebView::updateBackingStore): Reduced the scope of windowDC to be
        right where it is being used.
        (WebView::performLayeredWindowUpdate): Typical conversion.
        (WebView::paintIntoBackingStore): Ditto.

2012-01-23  David Levin  <levin@chromium.org>

        [windows] Convert usages of GetDC to HWndDC Part 1.
        https://bugs.webkit.org/show_bug.cgi?id=76744

        Reviewed by Adam Roben.

        * WebIconDatabase.cpp:
        (createDIB): Changed GetDC to HWndDC and removed ReleaseDC.

2012-01-07  Andreas Kling  <awesomekling@apple.com>

        Windows build fix.

        * DOMHTMLClasses.cpp:
        (DOMHTMLDocument::forms):
        (DOMHTMLSelectElement::options):

2012-01-06  Jessie Berlin  <jberlin@apple.com>

        Windows build fix.

        * Interfaces/IWebViewPrivate.idl:

2012-01-05  Adam Roben  <aroben@apple.com>

        Add WebKitTestRunnerLauncher to WebKit.sln.

        It builds just after WebKitTestRunner.

        Part of <http://webkit.org/b/75486> <rdar://problem/10638124> NRWT fails to launch Apple's
        Windows port of DumpRenderTree/WebKitTestRunner

        Reviewed by Steve Falkenburg.

        * WebKit.vcproj/WebKit.sln:

2012-01-05  Adam Roben  <aroben@apple.com>

        Add DumpRenderTreeLauncher to WebKit.sln.

        It builds just after DumpRenderTree.

        Part of <http://webkit.org/b/75486> <rdar://problem/10638124> NRWT fails to launch Apple's
        Windows port of DumpRenderTree/WebKitTestRunner

        Reviewed by Steve Falkenburg.

        * WebKit.vcproj/WebKit.sln:

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

        Add ImageDiffLauncher to WebKit.sln

        It builds just after ImageDiff.

        Part of <http://webkit.org/b/75572> ImageDiff.exe can't be run without first munging PATH

        Reviewed by Anders Carlsson.

        * WebKit.vcproj/WebKit.sln:

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

        Add MiniBrowserLauncher to WebKit.sln

        It builds just after MiniBrowser.

        Part of <http://webkit.org/b/68576> <rdar://problem/10163853> MiniBrowser fails to launch
        when double-clicked

        Reviewed by Anders Carlsson.

        * WebKit.vcproj/WebKit.sln: Added MiniBrowserLauncher.

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

        Add WinLauncherLauncher to WebKit.sln

        It builds just after WinLauncher.

        Part of <http://webkit.org/b/68578> <rdar://problem/10163861> WinLauncher fails to launch
        when double-clicked

        Reviewed by Anders Carlsson.

        * WebKit.vcproj/WebKit.sln: Added WinLauncherLauncher.

2011-12-21  Jessie Berlin  <jberlin@apple.com>

        Expose to Windows the way to allow a scheme access to Local Storage and Databases while
        Private Browsing is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=75056

        Reviewed by Sam Weinig.

        Add the Windows WebKit API that corresponds to the Mac one added in r99439.

        * WebView.cpp:
        (WebView::registerURLSchemeAsSecure):
        (WebView::registerURLSchemeAsAllowingLocalStorageAccessInPrivateBrowsing):
        (WebView::registerURLSchemeAsAllowingDatabaseAccessInPrivateBrowsing):
        * WebView.h:

2011-12-20  Pavel Feldman  <pavel.feldman@gmail.com>

        Web Inspector: reproducible crash after closing web inspector and browser window  (iCab)
        https://bugs.webkit.org/show_bug.cgi?id=74255

        Reviewed by Yury Semikhatsky.

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

2011-12-19  Sam Weinig  <sam@webkit.org>

        More PlatformEvent cleanup
        https://bugs.webkit.org/show_bug.cgi?id=74831

        Reviewed by Dan Bernstein.

        * WebView.cpp:
        (WebView::handleMouseEvent):
        Update to use new names, access style.

2011-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Rename registerCommandFor(Undo|Redo) to register(Undo|Redo)Step
        https://bugs.webkit.org/show_bug.cgi?id=74748

        Reviewed by Eric Seidel.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorClient::registerUndoStep):
        (WebEditorClient::registerRedoStep):
        * WebCoreSupport/WebEditorClient.h:

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

        Give PlatformEvents a base class
        https://bugs.webkit.org/show_bug.cgi?id=74685

        Reviewed by Anders Carlsson.

        Add a base class for PlatformMouseEvent, PlatformKeyboardEvent, PlatformWheelEvent
        and PlatformGestureEvent and move Type enumeration and modifiers down to it.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accKeyboardShortcut):
        * WebDropSource.cpp:
        (generateMouseEvent):
        * WebView.cpp:
        (WebView::keyUp):
        (WebView::handleEditingKeyboardEvent):
        (WebView::keyDown):
        (WebView::keyPress):

2011-12-16  Ryosuke Niwa  <rniwa@webkit.org>

        Only EditCommandComposition should implement unapply and reapply
        https://bugs.webkit.org/show_bug.cgi?id=74490

        Reviewed by Eric Seidel.

        * WebCoreSupport/WebEditorClient.cpp:
        (WebEditorUndoCommand::WebEditorUndoCommand):
        (WebEditorUndoCommand::execute):
        (WebEditorClient::registerCommandForUndo):
        (WebEditorClient::registerCommandForRedo):
        * WebCoreSupport/WebEditorClient.h:

2011-12-14  Jing Zhao  <jingzhao@chromium.org>

        Opening two popup menus by dispatchEvent() makes problems.
        https://bugs.webkit.org/show_bug.cgi?id=73304

        Reviewed by Kent Tamura.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::hasOpenedPopup): Not implemented.
        * WebCoreSupport/WebChromeClient.h: Overrides hasOpenedPopup().

2011-12-14  Sam Weinig  <weinig@apple.com>

        Remove whitespace from InheritedPropertySheets attributes in
        vsprops files to appease the Visual Studio project migrator.

        Reviewed by Adam Roben.

        * WebKit.vcproj/InterfacesDebug.vsprops:
        * WebKit.vcproj/InterfacesDebugAll.vsprops:
        * WebKit.vcproj/InterfacesDebugCairoCFLite.vsprops:
        * WebKit.vcproj/InterfacesProduction.vsprops:
        * WebKit.vcproj/InterfacesRelease.vsprops:
        * WebKit.vcproj/InterfacesReleaseCairoCFLite.vsprops:
        * WebKit.vcproj/WebKitGUIDDebug.vsprops:
        * WebKit.vcproj/WebKitGUIDDebugAll.vsprops:
        * WebKit.vcproj/WebKitGUIDDebugCairoCFLite.vsprops:
        * WebKit.vcproj/WebKitGUIDProduction.vsprops:
        * WebKit.vcproj/WebKitGUIDRelease.vsprops:
        * WebKit.vcproj/WebKitGUIDReleaseCairoCFLite.vsprops:
        * WebKit.vcproj/WebKitLibDebug.vsprops:
        * WebKit.vcproj/WebKitLibDebugAll.vsprops:
        * WebKit.vcproj/WebKitLibDebugCairoCFLite.vsprops:
        * WebKit.vcproj/WebKitLibProduction.vsprops:
        * WebKit.vcproj/WebKitLibRelease.vsprops:
        * WebKit.vcproj/WebKitLibReleaseCairoCFLite.vsprops:

2011-12-07  Mary Wu  <mary.wu@torchmobile.com.cn>

        Change function name InitializeLoggingChannelsIfNecessary to follow coding style guideline
        https://bugs.webkit.org/show_bug.cgi?id=73986

        Reviewed by Kenneth Rohde Christiansen.

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

2011-12-05  Eric Carlson  <eric.carlson@apple.com>

        WebKit/mac part of: Add WebKit preferences for text track settings
        https://bugs.webkit.org/show_bug.cgi?id=73721

        Reviewed by John Sullivan.

        * Interfaces/IWebPreferences.idl: Declare getters and setters for new properties.

        * WebPreferenceKeysPrivate.h: Added #define for shouldDisplaySubtitles, shouldDisplayCaptions, 
        and shouldDisplayTextDescriptions properties.

        * WebPreferences.cpp:
        (WebPreferences::setShouldDisplaySubtitles): Added.
        (WebPreferences::shouldDisplaySubtitles): Ditto.
        (WebPreferences::setShouldDisplayCaptions): Ditto.
        (WebPreferences::shouldDisplayCaptions): Ditto.
        (WebPreferences::setShouldDisplayTextDescriptions): Ditto.
        (WebPreferences::shouldDisplayTextDescriptions): Ditto.
        * WebPreferences.h: Declare new methods.

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Updates WebCore settings from WebKit prefs.

2011-12-02  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Changes to localStorageDatabasePath don't have any effect on Windows
        https://bugs.webkit.org/show_bug.cgi?id=73606
        <rdar://problem/10491296>

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Propagate local storage path change to m_page's settings.

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

        Remove an unneeded argument from FrameLoaderClient::download
        https://bugs.webkit.org/show_bug.cgi?id=73486

        Reviewed by Andreas Kling.

        * WebFrame.cpp:
        (WebFrame::download):
        * WebFrame.h:
        Updated for the change.

2011-11-26  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove disconnectFromBackend from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=73127

        Reviewed by Yury Semikhatsky.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::inspectorDestroyed):
        (WebInspectorClient::closeInspectorFrontend):
        * WebCoreSupport/WebInspectorClient.h:

2011-11-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r101193.
        http://trac.webkit.org/changeset/101193
        https://bugs.webkit.org/show_bug.cgi?id=73158

        Breaks Windows and Qt minimal. (Requested by pfeldman on
        #webkit).

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::inspectorDestroyed):
        (WebInspectorFrontendClient::disconnectFromBackend):
        * WebCoreSupport/WebInspectorClient.h:

2011-11-26  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove disconnectFromBackend from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=73127

        Reviewed by Yury Semikhatsky.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::inspectorDestroyed):
        (WebInspectorClient::closeInspectorFrontend):
        * WebCoreSupport/WebInspectorClient.h:

2011-11-22  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: remove Inspector::bringToFront from the protocol.
        https://bugs.webkit.org/show_bug.cgi?id=72937

        Reviewed by Yury Semikhatsky.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::bringFrontendToFront):
        * WebCoreSupport/WebInspectorClient.h:

2011-11-21  Pavel Feldman  <pfeldman@google.com>

        Not reviewed: an attempt to fix windows build.

        * WebInspector.cpp:
        (WebInspector::isJavaScriptProfilingEnabled):
        (WebInspector::setJavaScriptProfilingEnabled):

2011-06-20  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: introduce InspectorFrontendAPI for actions initiated from the application menu.
        https://bugs.webkit.org/show_bug.cgi?id=62985

        Both: inspector protocol and WebCore/InspectorController have a number of unnecessary
        methods for plumbing the menu action handlers through the WebKit and WebCore.
        I intend to remove this menu support from the protocol and WebCore/InspectorController API.
        I am starting with exposing the new front-end API in the WebCore and using it in the WebKit/mac port.
        WebKit/win and WebKit2 to follow.

        Reviewed by Yury Semikhatsky.

        * WebInspector.cpp:
        (WebInspector::createInstance):
        (WebInspector::WebInspector):
        (WebInspector::webViewClosed):
        (WebInspector::showConsole):
        (WebInspector::isDebuggingJavaScript):
        (WebInspector::toggleDebuggingJavaScript):
        (WebInspector::isProfilingJavaScript):
        (WebInspector::toggleProfilingJavaScript):
        (WebInspector::isJavaScriptProfilingEnabled):
        (WebInspector::setJavaScriptProfilingEnabled):
        (WebInspector::isTimelineProfilingEnabled):
        (WebInspector::setTimelineProfilingEnabled):
        * WebInspector.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::close):
        (WebView::initWithFrame):
        (WebView::inspector):
        * WebView.h:

2011-10-17  Antonio Gomes  <agomes@rim.com>

        Pass a Frame* parameter in EditorClient::respondToChangedSelection
        https://bugs.webkit.org/show_bug.cgi?id=70248

        Reviewed by Ryosuke Niwa.

        * WebCoreSupport/WebEditorClient.cpp: Make use of the newly added Frame* parameter.
        (WebEditorClient::respondToChangedSelection):
        * WebCoreSupport/WebEditorClient.h:

2011-11-15  Jochen Eisinger  <jochen@chromium.org>

        Rename ReferrerPolicy to clarify its meaning
        https://bugs.webkit.org/show_bug.cgi?id=72420

        Reviewed by Nate Chapin.

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

2011-11-15  Anders Carlsson  <andersca@apple.com>

        HostWindow screenToWindow/windowToScreen should be screenToRootView/rootViewToScreen
        https://bugs.webkit.org/show_bug.cgi?id=72397

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::rootViewToScreen):
        (WebChromeClient::screenToRootView):
        * WebCoreSupport/WebChromeClient.h:

2011-11-14  Anders Carlsson  <andersca@apple.com>

        HostWindow invalidation functions should use root view coordinates
        https://bugs.webkit.org/show_bug.cgi?id=72338

        Reviewed by Dan Bernstein.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::invalidateRootView):
        (WebChromeClient::invalidateContentsAndRootView):
        * WebCoreSupport/WebChromeClient.h:

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

        Move static "policy" state from SecurityOrigin.cpp to SecurityPolicy.cpp
        https://bugs.webkit.org/show_bug.cgi?id=71755

        Reviewed by Eric Seidel.

        * WebView.cpp:
        (WebView::addOriginAccessWhitelistEntry):
        (WebView::removeOriginAccessWhitelistEntry):
        (WebView::resetOriginAccessWhitelists):

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

        Move DomainRelaxationForbidden scheme registry to SchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=71750

        Reviewed by Eric Seidel.

        * WebView.cpp:
        (WebView::setDomainRelaxationForbiddenForURLScheme):

2011-11-07  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=71490
        Support uiStateTransitionProgress for scrollbars
        -and corresponding-
        <rdar://problem/9849612>

        Reviewed by Sam Weinig.

        Scrollbar::mouseUp() now takes a PlatformMouseEvent as a parameter.
        * WebScrollBar.cpp:
        (WebScrollBar::handleMouseEvent):

2011-11-02  Darin Adler  <darin@apple.com>

        Change remaining callers of releaseRef to call leakRef
        https://bugs.webkit.org/show_bug.cgi?id=71422

        Reviewed by Darin Fisher.

        * WebCache.cpp:
        (WebCache::statistics):
        * WebDatabaseManager.cpp:
        (WebDatabaseManager::origins):
        (WebDatabaseManager::databasesWithOrigin):
        * WebHistoryItem.cpp:
        (WebHistoryItem::redirectURLs):
        * WebKitClassFactory.cpp:
        (leakRefFromCreateInstance):
        (WebKitClassFactory::CreateInstance):
        * WebScriptWorld.cpp:
        (WebScriptWorld::standardWorld):
        Use leakRef.

2011-11-02  Jon Lee  <jonlee@apple.com>

        Expand DragController to provide more information about the dragging session
        https://bugs.webkit.org/show_bug.cgi?id=71324
        <rdar://problem/10379175>

        Reviewed by Darin Adler.

        * WebView.cpp:
        (WebView::DragEnter): Minor refactoring because operation is stored in
        new DragSession struct.
        (WebView::DragOver): Ditto.

2011-11-02  Tom Sepez  <tsepez@chromium.org>

        XSSAuditor is silent
        https://bugs.webkit.org/show_bug.cgi?id=70973

        Reviewed by Adam Barth.

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

2011-10-28  Jochen Eisinger  <jochen@chromium.org>

        Rename a number of methods mentioning JavaScript to just Script instead
        https://bugs.webkit.org/show_bug.cgi?id=71105

        Reviewed by Adam Barth.

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

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

        Build fix: removed some cases of threadsafeCopy() that I missed in
        my previous patch.

        * WebDatabaseManager.cpp:
        (DidModifyOriginData::dispatchToMainThread):
        * WebDownloadCFNet.cpp:
        (WebDownload::initToResumeWithBundle):
        * WebIconDatabase.cpp:
        (WebIconDatabase::didImportIconURLForPageURL):

2011-10-24  Ryosuke Niwa  <rniwa@webkit.org>

        threadsafeCopy has been renamed to isolatedCopy.

        * WebDatabaseManager.cpp:
        (DidModifyOriginData::dispatchToMainThread):

2011-10-24  Adam Barth  <abarth@webkit.org>

        Attempt to fix Windows build by updating to the new interface.

        * DOMEventsClasses.cpp:
        (DOMEvent::createInstance):

2011-10-18  Adam Barth  <abarth@webkit.org>

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

        Reviewed by Eric Seidel.

        * Interfaces/DOMWindow.idl:

2011-10-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Remove layerX / layerY from the Windows API
        https://bugs.webkit.org/show_bug.cgi?id=70051

        Reviewed by Darin Adler.

        Renamed layerX to unused1 and layerY to unused2 to keep the
        binary compatibility.

        * DOMEventsClasses.cpp:
        (DOMUIEvent::unused1):
        (DOMUIEvent::unused2):
        * DOMEventsClasses.h:
        (DOMKeyboardEvent::unused1):
        (DOMKeyboardEvent::unused2):
        (DOMMouseEvent::unused1):
        (DOMMouseEvent::unused2):
        (DOMWheelEvent::unused1):
        (DOMWheelEvent::unused2):
        * Interfaces/DOMEvents.idl:

2011-10-11  Simon Fraser  <simon.fraser@apple.com>

        Make custom scrollbar theme for use in DRT, to reduce pixel diffs between platforms
        https://bugs.webkit.org/show_bug.cgi?id=68134

        Reviewed by Darin Adler.

        Use ScrollbarThemeMock when the setting to use mock scrollbars is enabled.
        
        Make ScrollbarTheme::nativeTheme() private, and add a new static theme() method
        that reads the setting, and returns the mock theme if set. All callers now use
        theme() rther than nativeTheme(). Add the new ScrollbarTheme.cpp file to the build.

        * WebScrollBar.cpp:
        (WebScrollBar::requestedWidth):
        (WebScrollBar::requestedHeight):
        * WebView.cpp:
        (WebView::WebViewWndProc):

2011-10-03  Anders Carlsson  <andersca@apple.com>

        Remove custom scrollbar painting hooks
        https://bugs.webkit.org/show_bug.cgi?id=69163

        Reviewed by Alexey Proskuryakov.

        Remove now unused WebPreferences and ChromeClient overrides.

        * Interfaces/IWebPreferences.idl:
        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebChromeClient.h:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::unused3):
        (WebPreferences::unused4):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged):

2011-09-23  Adam Roben  <aroben@apple.com>

        Remove WebKitAPITest

        WebKit part of <http://webkit.org/b/66560> WebKitAPITest and TestWebKitAPI have duplicate
        functionality (and names!)

        Reviewed by Anders Carlsson.

        * WebKit.vcproj/WebKit.sln: Removed WebKitAPITest.vcproj. Changed WebKitLauncherWin, which
        formerly depended on WebKitAPITest, to now depend on DumpRenderTree, which WebKitAPITest
        depended on.

2011-09-24  Adam Barth  <abarth@webkit.org>

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

        Reviewed by Eric Seidel.

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

2011-09-22  Adam Roben  <aroben@apple.com>

        Remove FindSafari from all our .sln files

        It isn't used anymore, so there's no point in building it.

        Part of <http://webkit.org/b/68628> Remove FindSafari

        Reviewed by Steve Falkenburg.

        * WebKit.vcproj/WebKit.sln: Also relinearized the build order while I was at it.

2011-09-22  Adam Roben  <aroben@apple.com>

        Add testRegExp.vcproj to WebKit.sln

        Fixes <http://webkit.org/b/68403> Windows bots don't build testRegExp.vcproj

        Reviewed by Brian Weinstein.

        * WebKit.vcproj/WebKit.sln: Added testRegExp. Made it build just after jsc, just like it
        does when built as part of JavaScriptCore.sln.

2011-09-21  Steve Falkenburg  <sfalken@apple.com>

        Branch builds don't launch on Windows when run against trunk WebKit
        https://bugs.webkit.org/show_bug.cgi?id=68546

        Reviewed by Darin Adler.

        * Interfaces/IWebPreferences.idl: Swap avFoundation and pictographicFontFamily
        in IDL for binary compatibility between branch and trunk.

2011-09-21  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Remove Qt specific code from css/SelectorChecker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=67702

        Reviewed by Csaba Osztrogonác.

        * WebCoreSupport/WebPlatformStrategies.cpp: Modify to match new prototype.
        (WebPlatformStrategies::isLinkVisited):
        * WebCoreSupport/WebPlatformStrategies.h: Ditto.

2011-09-17  Mihai Parparita  <mihaip@chromium.org>

        FrameLoaderClient BackForwardList-related methods are unsued
        https://bugs.webkit.org/show_bug.cgi?id=68293

        Reviewed by Darin Adler.

        Remove FrameLoaderClient methods that were added by r51629, since only        
        the old (since-deleted) Android port needed them.

        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.h:

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

        Rename ENABLE(DATABASE) to ENABLE(SQL_DATABASE)
        https://bugs.webkit.org/show_bug.cgi?id=68205

        Reviewed by Eric Seidel.

        * ForEachCoClass.h:
        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebChromeClient.h:
        * WebDatabaseManager.cpp:
        * WebDatabaseManager.h:
        * WebSecurityOrigin.cpp:
        (WebSecurityOrigin::usage):
        (WebSecurityOrigin::quota):
        (WebSecurityOrigin::setQuota):
        * WebView.cpp:
        (WebView::initWithFrame):
        (WebView::notifyPreferencesChanged):

2011-09-15  Kentaro Hara  <haraken@google.com>

        A single line must not be split into two pages.
        https://bugs.webkit.org/show_bug.cgi?id=65005

        Reviewed by David Hyatt.

        When the document width of a page is overflowed, the last line of the page can be
        split into the next page. This is the regression caused by r88737. r88737 tried to
        fix rounding errors in rendering calculations by expanding and shrinking a page
        using one common method, resizePageRectsKeepingRatio(), but overlooked the case where
        a document width gets overflowed.

        Test: printing/single-line-must-not-be-split-into-two-pages.html

        * WebFrame.cpp:
        (WebFrame::setPrinting): Passes an original page size to setPrinting().
        (WebFrame::setInPrintingMode): Ditto.
        * WebFrame.h:

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

        Rename confirmCompositionWithoutDisturbingSelection to cancelComposition
        https://bugs.webkit.org/show_bug.cgi?id=67569

        Reviewed by Antonio Gomes.

        * WebView.cpp:
        (WebView::resetIME):

2011-08-29  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * WebCookieManagerCFNet.cpp:
        (WebCookieManager::cookieStorage):
        (WebCookieManager::setCookieStorage):
        Changed the API to work with new functions in WebCore. It's a bit ugly, because cookieStorage()
        returns an unretained reference, which we cannot provide any more, but it should not be a
        practical issue.

        * WebView.cpp: (updateSharedSettingsFromPreferencesIfNeeded): Updated to use currentCFHTTPCookieStorage()
        instead of currentCookieStorage().

2011-08-30  Kaustubh Atrawalkar  <kaustubh@motorola.com>

        The unused ScrollView* argument can and should be removed from
        scrollRectIntoView.
        https://bugs.webkit.org/show_bug.cgi?id=67117

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::scrollRectIntoView):

2011-08-29  Ryosuke Niwa  <rniwa@webkit.org>

        Move setInnerTextValue from RenderTextControl to HTMLTextFormControlElement
        https://bugs.webkit.org/show_bug.cgi?id=67152

        Reviewed by Darin Adler.

        Updated call sites of lastChangeWasUserEdit since it's moved from RenderTextControl
        to HTMLTextFormControlElement.

        * DOMHTMLClasses.cpp:
        (DOMHTMLInputElement::isUserEdited):
        (DOMHTMLTextAreaElement::isUserEdited):

2011-08-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r93987, r93992, r93995, r93998, and
        r93999.
        http://trac.webkit.org/changeset/93987
        http://trac.webkit.org/changeset/93992
        http://trac.webkit.org/changeset/93995
        http://trac.webkit.org/changeset/93998
        http://trac.webkit.org/changeset/93999
        https://bugs.webkit.org/show_bug.cgi?id=67147

        Many failing tests (Requested by ap on #webkit).

        * WebCookieManagerCFNet.cpp:
        (WebCookieManager::cookieStorage):
        (WebCookieManager::setCookieStorage):
        * WebView.cpp:
        (updateSharedSettingsFromPreferencesIfNeeded):

2011-08-29  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * WebView.cpp:
        (updateSharedSettingsFromPreferencesIfNeeded):
        Updated for new function name and signature: currentCFHTTPCookieStorage().

2011-08-26  Alexey Proskuryakov  <ap@apple.com>

        DumpRenderTree should begin each test with an empty cookie store
        https://bugs.webkit.org/show_bug.cgi?id=63545
        <rdar://problem/5666907>

        Reviewed by Darin Adler.

        * WebCookieManagerCFNet.cpp:
        (WebCookieManager::cookieStorage):
        (WebCookieManager::setCookieStorage):
        Changed the API to work with new functions in WebCore. It's a bit ugly, because cookieStorage()
        returns an unretained reference, which we cannot provide any more, but it should not be a
        practical issue.

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

        Make WebCore keep track of the current device scale factor

        Fixes <http://webkit.org/b/66413> WebCore requires every WebKit port to keep track of the
        device scale factor

        Reviewed by Darin Adler.

        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebChromeClient.h:
        Removed deviceScaleFactor.

2011-08-15  Dmitry Titov  <dimich@chromium.org>

        FrameLoaderClient::transferLoadingResourceFromPage does not have enough parameters
        https://bugs.webkit.org/show_bug.cgi?id=66165

        Reviewed by Darin Fisher.

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

2011-08-15  Adam Roben  <aroben@apple.com>

        Touch a file to trigger a Windows build

        I'm trying to ferret out some issues with our Debug builder.

        * WebView.cpp: Sorted #includes.

2011-08-10  Adam Roben  <aroben@apple.com>

        Clear up scale factor terminology

        WebKit by and large deals with two scale factors: one intrinsic to the device on which the
        software is running, and one that is per-Page and can be controlled via API calls. This
        patch names the former "deviceScaleFactor" and the latter "pageScaleFactor", and makes the
        code use those names. It should introduce no behavior changes.

        Fixes <http://webkit.org/b/55787> WebKit uses multiple conflicting names to refer to the
        device scale factor

        Reviewed by Simon Fraser.

        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebChromeClient.h:

2011-08-13  Dan Bernstein  <mitz@apple.com>

        Changed the value of WebKitShowsToolTipOverTruncatedTextPreferenceKey to match the naming everywhere else.

        Reviewed by Joseph Pecoraro.

        * WebPreferenceKeysPrivate.h:

2011-08-13  Dan Bernstein  <mitz@apple.com>

        Build fix.

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

2011-08-12  Dan Bernstein  <mitz@apple.com>

        Add an option to automatically show tooltips (with the full text) over truncated text
        https://bugs.webkit.org/show_bug.cgi?id=66178

        Reviewed by Simon Fraser.

        * Interfaces/IWebPreferencesPrivate.idl: Added accessors.
        * WebPreferenceKeysPrivate.h: Defined a preference key.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Added a default value of
        false for the ShowsToolTipOverTruncatedText preference.
        (WebPreferences::showsToolTipOverTruncatedText): Added this getter.
        (WebPreferences::setShowsToolTipOverTruncatedText): Added this setter.
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Added call to Settings::setShowsToolTipOverTruncatedText().

2011-08-05  Brent Fulgham  <bfulgham@webkit.org>

        WebView::performLayeredWindowUpdate() crashes with
        NULL pointer when using layered window updates.
        https://bugs.webkit.org/show_bug.cgi?id=60618

        Reviewed by Adam Roben.

        During resize operations, the backing store will be destroyed if
        the window's size (either height or width) is set to zero. The
        bug was identified when a user first resized a WebView to zero
        dimensions, then attempted to perform a MoveWindow. The paint
        message triggered by the MoveWindow attempted to use the layered
        window update logic, which encountered the nulled backing store.

        * WebView.cpp:
        (WebView::performLayeredWindowUpdate): Add an early
         return when there is no backing store to blend with.

2011-08-05  Anders Carlsson  <andersca@apple.com>

        Remove PluginHalter
        https://bugs.webkit.org/show_bug.cgi?id=65729

        Reviewed by Darin Adler.

        Remove plug-in halter and associated classes.

        * Interfaces/IWebPluginHalterDelegate.idl: Removed.
        * Interfaces/IWebPreferencesPrivate.idl:
        * Interfaces/IWebViewPrivate.idl:
        * Interfaces/WebKit.idl:
        * WebCoreSupport/WebPluginHalterClient.cpp: Removed.
        * WebCoreSupport/WebPluginHalterClient.h: Removed.
        * WebKit.vcproj/Interfaces.vcproj:
        * WebKit.vcproj/WebKit.vcproj:
        * WebPreferenceKeysPrivate.h:
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings):
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::close):
        (WebView::initWithFrame):
        (WebView::notifyPreferencesChanged):
        (WebView::unused1):
        (WebView::unused2):
        (WebView::unused3):
        (WebView::unused4):
        (WebView::unused5):
        * WebView.h:

2011-08-04  Jeff Miller  <jeffm@apple.com>

        Add support for setting and getting whether AVFoundation is enabled to IWebPreferences
        https://bugs.webkit.org/show_bug.cgi?id=65718

        Reviewed by Adam Roben.

        * Interfaces/IWebPreferences.idl: Added setAVFoundationEnabled() and avFoundationEnabled().

        * WebPreferenceKeysPrivate.h: Added WebKitAVFoundationEnabledPreferenceKey.

        * WebPreferences.cpp:
        (WebPreferences::avFoundationEnabled): Added.
        (WebPreferences::setAVFoundationEnabled): Added.

        * WebPreferences.h: Added setAVFoundationEnabled() and avFoundationEnabled().

        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Keep settings for AVFoundation being enabled in sync.

2011-08-03  Kent Tamura  <tkent@chromium.org>

        [Windows] Fix build without ENABLE_VIDEO.

        * WebView.cpp:
        (WebView::enterFullscreenForNode):

2011-08-03  Kent Tamura  <tkent@chromium.org>

        Fix incorrect checks for HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=65590

        Reviewed by Dimitri Glazkov.

        <video> and <audio> can be an HTMLElement instance instead of
        HTMLMediaElement if MediaPlayer::isAvailable() returns false or
        the media feature is disabled at runtime.

        * WebView.cpp:
        (WebView::enterFullscreenForNode):

2011-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Web Inspector: Remove InspectorFrontendHost load/saveSessionSetting
        https://bugs.webkit.org/show_bug.cgi?id=65582

        Reviewed by Pavel Feldman.

        * WebCoreSupport/WebInspectorClient.cpp:
        * WebCoreSupport/WebInspectorClient.h:

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

        Windows nightly build fix after r91777

        * Interfaces/IWebPreferences.idl: Moved [set]PictographFontFamily to the end of the
        interface to maintain binary compatibility with Safari 5.1.

2011-08-03  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: [Timeline] Hover on paint events and see rect outline around that area.
        https://bugs.webkit.org/show_bug.cgi?id=65510

        Reviewed by Yury Semikhatsky.

        * WebNodeHighlight.cpp:
        (WebNodeHighlight::update):

2011-08-03  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remove Node parameter from the InspectorClient::highlight
        https://bugs.webkit.org/show_bug.cgi?id=65549

        Reviewed by Yury Semikhatsky.

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::highlight):
        * WebCoreSupport/WebInspectorClient.h:

2011-07-31  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the WinCairo Debug build after r92059 (https://bugs.webkit.org/show_bug.cgi?id=65419).

        * WebKit.vcproj/WebKit_Cairo.def: Export some symbols.
        * WebKit.vcproj/WebKit_Cairo_debug.def: Ditto.

2011-07-30  Patrick Gansterer  <paroga@webkit.org>

        Remove inclusion of MainThread.h from Threading.h
        https://bugs.webkit.org/show_bug.cgi?id=65081

        Reviewed by Darin Adler.

        Add missing include statements for MainThread.

        * WebKitClassFactory.cpp:
        * WebView.cpp:

2011-07-26  Sadrul Habib Chowdhury  <sadrul@chromium.org>

        Add support for download='filename' attribute in anchors.
        https://bugs.webkit.org/show_bug.cgi?id=64580

        Reviewed by Adam Barth.

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

2011-07-26  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/9842889> Add a generic pictograph font family
        https://bugs.webkit.org/show_bug.cgi?id=65197

        Reviewed by Anders Carlsson.

        * Interfaces/IWebPreferences.idl: Added pictographFontFamily() and
        setPictographFontFamily().
        * WebPreferenceKeysPrivate.h: Added WebKitPictographFontPreferenceKey.
        * WebPreferences.cpp:
        (WebPreferences::initializeDefaultSettings): Initialize the pictograph font
        preference to "Times New Roman".
        (WebPreferences::pictographFontFamily): Added this getter.
        (WebPreferences::setPictographFontFamily): Added this setter.
        * WebPreferences.h:
        * WebView.cpp:
        (WebView::notifyPreferencesChanged): Pass the preference value through to
        WebCore.

2011-07-18  Dean Jackson  <dino@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64742
        Expose WebPreferences for media playback requiring user gestures and inline playback

        Reviewed by Simon Fraser.

        Two new WebPreferences: MediaPlaybackRequiresUserGesture and
        MediaPlaybackAllowsInline.

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

2011-07-16  Simon Fraser  <simon.fraser@apple.com>

        Add code to attempt to align compositing layers to pixel boundaries when page scale changes
        https://bugs.webkit.org/show_bug.cgi?id=64658

        Reviewed by Dan Bernstein.

        Removed implementations of backingScaleFactor() and pageScaleFactor() now
        that GraphicsLayerClient has default implementations.

        * WebView.h:

2011-07-15  Simon Fraser  <simon.fraser@apple.com>

        Fix Windows build.
        
        * WebView.h:
        (WebView::backingScaleFactor):
        (WebView::pageScaleFactor):

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

        REGRESSION: Mouse cursor doesn’t hide when full screen video HUD hides
        https://bugs.webkit.org/show_bug.cgi?id=64615

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::setCursorHiddenUntilMouseMoves): Added this stub.
        * WebCoreSupport/WebChromeClient.h:

2011-07-12  Joseph Pecoraro  <joepeck@webkit.org>

        ApplicationCache update should not immediately fail when reaching per-origin quota
        https://bugs.webkit.org/show_bug.cgi?id=64177

        Reviewed by Alexey Proskuryakov.

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

2011-07-11  Hironori Bono  <hbono@chromium.org>

        Reviewed by Adam Roben.

        Implement layoutTestController.setTextDirection for WebKit2 and Windows.
        https://bugs.webkit.org/show_bug.cgi?id=61931

        This change implements layoutTextController.setTextDirection for WebKit2
        and Windows so we can run a layout test added by r87770 on them. Each
        implementation adds a wrapper function for Editor::setBaseWritingDirection()
        so LayoutTestController can call it.

        * Interfaces/IWebFramePrivate.idl: Added setTextDirection to allow
        LayoutTestController to change the text direction.
        * WebFrame.cpp: ditto.
        (WebFrame::setTextDirection):
        * WebFrame.h: ditto.

2011-07-08  Chang Shu  <cshu@webkit.org>

        Update calling sites after function renamed.
        https://bugs.webkit.org/show_bug.cgi?id=59114

        Reviewed by Alexey Proskuryakov.

        * WebKitGraphics.cpp:
        (WebDrawText):

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

        Reviewed by Dan Bernstein.

        More ScrollableArea scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=63678

        * WebScrollBar.h:
        (WebScrollBar::enclosingScrollableArea):
        Always return 0, WebScrollbar has no concept of an enclosing scrollable area.

2011-06-28  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Adam Barth.

        form.autocomplete="off" does not work
        https://bugs.webkit.org/show_bug.cgi?id=35823

        * WebFrame.cpp:
        (WebFrame::elementDoesAutoComplete): Updated callsite.

2011-06-27  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Avoid attempt to create a zero-size DIB.
        https://bugs.webkit.org/show_bug.cgi?id=63484.

        * WebNodeHighlight.cpp:
        (WebNodeHighlight::update): Check for zero-height (or zero-width)
        region for DIB, and exit early if attempting to create a zero-size
        DIB/BITMAP.

2011-06-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Add an option to enable legacy rounding hacks
        https://bugs.webkit.org/show_bug.cgi?id=63363

        * WebKitGraphics.cpp:
        (CenterTruncateStringToWidth): Enabled rounding hacks in the string truncator.
        (RightTruncateStringToWidth): Ditto.

2011-06-24  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Adam Barth.

        WebSocket: Add run-time flag for new HyBi protocol
        https://bugs.webkit.org/show_bug.cgi?id=60348

        Make a new flag (Setting::m_useHixie76WebSocketProtocol)
        switchable from WebView and WebPreferences.

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

2011-06-22  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Mark Rowe.

        Add window.internals to WebKit2's WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=61073

        * WebKit.vcproj/WebKit.sln: InjectedBundle depends on WebCoreTestSupport

2011-06-20  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        FileChooser should be only created when we need to choose files.
        https://bugs.webkit.org/show_bug.cgi?id=63039

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::runOpenPanel): Changed to use settings.

2011-06-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89354.
        http://trac.webkit.org/changeset/89354
        https://bugs.webkit.org/show_bug.cgi?id=63099

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

        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::WebInspectorClient):
        (WebInspectorClient::openInspectorFrontend):
        (WebInspectorFrontendClient::destroyInspectorView):
        * WebCoreSupport/WebInspectorClient.h:
        * WebInspector.cpp:
        (WebInspector::createInstance):
        (WebInspector::WebInspector):
        (WebInspector::webViewClosed):
        (WebInspector::showConsole):
        (WebInspector::isDebuggingJavaScript):
        (WebInspector::toggleDebuggingJavaScript):
        (WebInspector::isProfilingJavaScript):
        (WebInspector::toggleProfilingJavaScript):
        (WebInspector::isJavaScriptProfilingEnabled):
        (WebInspector::setJavaScriptProfilingEnabled):
        (WebInspector::isTimelineProfilingEnabled):
        (WebInspector::setTimelineProfilingEnabled):
        * WebInspector.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::close):
        (WebView::initWithFrame):
        (WebView::inspector):
        * WebView.h:

2011-06-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: introduce InspectorFrontendAPI for actions initiated from the application menu.
        https://bugs.webkit.org/show_bug.cgi?id=62985

        Both: inspector protocol and WebCore/InspectorController have a number of unnecessary
        methods for plumbing the menu action handlers through the WebKit and WebCore.
        I intend to remove this menu support from the protocol and WebCore/InspectorController API.
        I am starting with exposing the new front-end API in the WebCore and using it in the WebKit/mac port.
        WebKit/win and WebKit2 to follow.

        * WebInspector.cpp:
        (WebInspector::createInstance):
        (WebInspector::WebInspector):
        (WebInspector::webViewClosed):
        (WebInspector::showConsole):
        (WebInspector::isDebuggingJavaScript):
        (WebInspector::toggleDebuggingJavaScript):
        (WebInspector::isProfilingJavaScript):
        (WebInspector::toggleProfilingJavaScript):
        (WebInspector::isJavaScriptProfilingEnabled):
        (WebInspector::setJavaScriptProfilingEnabled):
        (WebInspector::isTimelineProfilingEnabled):
        (WebInspector::setTimelineProfilingEnabled):
        * WebInspector.h:
        * WebView.cpp:
        (WebView::WebView):
        (WebView::close):
        (WebView::initWithFrame):
        (WebView::inspector):
        * WebView.h:

2011-06-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Separate concerns of loading file icons and choosing files.
        https://bugs.webkit.org/show_bug.cgi?id=62931

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::loadIconForFiles): Renamed.
        * WebCoreSupport/WebChromeClient.h:

2011-06-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89026.
        http://trac.webkit.org/changeset/89026
        https://bugs.webkit.org/show_bug.cgi?id=62804

        These patches were likely correct.  I'll investigate the
        browser_test failures. (Requested by abarth on #webkit).

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::play):
        (FullscreenVideoController::pause):

2011-06-16  Vitaly Repeshko  <vitalyr@chromium.org>

        Unreviewed.

        Revert Adam's user gesture patch series r89002, r89005, r89007, r89018
        https://bugs.webkit.org/show_bug.cgi?id=62796

        The patches broke chromium browser tests.

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::play):
        (FullscreenVideoController::pause):

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

        Reviewed by Eric Seidel.

        Remove HTMLVideoElement::processingUserGesture
        https://bugs.webkit.org/show_bug.cgi?id=62784

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::play):
        (FullscreenVideoController::pause):

2011-06-13  Kentaro Hara  <haraken@google.com>

        Reviewed by Alexey Proskuryakov.

        Add resizePageRectsKeepingRatio(), which expands/shrinks a page, keeping the ratio of the original page
        https://bugs.webkit.org/show_bug.cgi?id=61256

        In order to prevent rounding error caused by expanding/shrinking a page
        using different calculation here and there, I added a common calculation
        method, resizePageRectsKeepingRatio(), which expands/shrinks a page,
        keeping the ratio of width and height of the original page.
        WebFrame::setInPrintingMode() uses resizePageRectsKeepingRatio() to
        expand/shrink a page.

        Test: printing/page-count-with-one-word.html

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

2011-06-12  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r88625.
        http://trac.webkit.org/changeset/88625
        https://bugs.webkit.org/show_bug.cgi?id=61073

        Breaks SL Webkit2 Tests

        * WebKit.vcproj/WebKit.sln:

2011-06-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Rename FrameLoaderClient::interruptForPolicyChangeError to use the past tense
        https://bugs.webkit.org/show_bug.cgi?id=62516

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

2011-06-12  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Hajime Morita.

        Add window.internals to WebKit2's WebKitTestRunner.
        https://bugs.webkit.org/show_bug.cgi?id=61073

        * WebKit.vcproj/WebKit.sln: InjectedBundle depends on WebCoreTestSupport

2011-06-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove trival "forward-to-client" member functions from FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=62510

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

2011-06-06  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        Fonts returned by FontCache::getFontDataForCharacters() are never released
        https://bugs.webkit.org/show_bug.cgi?id=61875

        This change allows fonts allocated as system fallback fonts to be
        released.  Previously, the reference counts for these fonts grew
        without bound.  This is implemented as an auto release class that wraps
        accesses to the cache for system fallback fonts. All such accesses are
        via the method FontCache::getFontDataForCharacters. The new class is
        called FontCachePurgePreventer. When such an object exists, it protects
        these fonts from deletion.

        See more comments for this defect in Source/WebCore/ChangeLog.

        * WebKitGraphics.cpp:
        (CenterTruncateStringToWidth):
        (RightTruncateStringToWidth):
        Wrapped code accessing fallback fonts with local
        FontCachePurgePreventer in these methods.

2011-06-04  Dominic Cooney  <dominicc@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add WebCoreTestSupport project containing window.internals.
        https://bugs.webkit.org/show_bug.cgi?id=61076

        * WebKit.vcproj/WebKit.sln:

2011-05-18  Anthony Johnson <anthony.johnson@flexsim.com>

        Reviewed by Brent Fulgham.

        Implement the ability to add C++ event listeners to html dom
        elements and dom window. 
        https://bugs.webkit.org/show_bug.cgi?id=60269

        * DOMCoreClasses.cpp: Add new DOMWindow class and implementations.
        (DOMNode::QueryInterface): Report that the DOMNode implements
         the IDomEventTarget interface.
        (DOMNode::addEventListener): Add implementation of a COM-based
         event listener.
        (DOMNode::removeEventListener):
        (DOMNode::dispatchEvent): 
        (DOMDocument::createInstance):
        (DOMWindow::QueryInterface): New implementation.
        (DOMWindow::document): New implementation.
        (DOMWindow::getComputedStyle): Stub.
        (DOMWindow::getMatchedCSSRules): Stub.
        (DOMWindow::devicePixelRatio): Stub.
        (DOMWindow::addEventListener): New implementation.
        (DOMWindow::removeEventListener): New implementation.
        (DOMWindow::dispatchEvent): New implementation.
        (DOMWindow::DOMWindow): New implementation.
        (DOMWindow::~DOMWindow): New implementation.
        (DOMWindow::createInstance): New implementation.
        * DOMCoreClasses.h: Add new DOMWindow class and declarations.
        (DOMWindow::AddRef): New declaration.
        (DOMWindow::Release): New declaration.
        (DOMWindow::throwException): New declaration.
        (DOMWindow::callWebScriptMethod): New declaration.
        (DOMWindow::evaluateWebScript): New declaration.
        (DOMWindow::removeWebScriptKey): New declaration.
        (DOMWindow::stringRepresentation): New declaration.
        (DOMWindow::webScriptValueAtIndex): New declaration.
        (DOMWindow::setWebScriptValueAtIndex): New declaration.
        (DOMWindow::setException): New declaration.
        (DOMWindow::window): New declaration.
        * DOMEventsClasses.cpp: Add new WebEventListener and implementation.
        (DOMEventListener::handleEvent): New implementation.
        (WebEventListener::WebEventListener): New implementation.
        (WebEventListener::~WebEventListener): New implementation.
        (WebEventListener::operator==): New implementation.
        (WebEventListener::handleEvent): New implementation.
        (WebEventListener::create): New implementation.
        * DOMEventsClasses.h: Add new WebEventListener class declaration.
        * Interfaces/IWebFrame.idl: Add new DOMWindow accessor to the
         main Web Frame interface.
        * WebFrame.cpp: Add implementation of new DOMWindow creation method.
        (WebFrame::DOMWindow):
        * WebFrame.h: Add DOMWindow declaration.

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

        Reviewed by Sam Weinig.

        numberOfActiveAnimations() can include animations from documents in the page cache
        https://bugs.webkit.org/show_bug.cgi?id=53641

        Pass the Frame's document as the one to count animations on.

        * WebFrame.cpp:
        (WebFrame::numberOfActiveAnimations):

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

        Reviewed by Maciej Stachowiak.

        Win: non-full-screen content is briefly seen when entering full-screen mode (and vice versa)
        https://bugs.webkit.org/show_bug.cgi?id=61108

        * WebView.cpp:
        (WebView::fullScreenClientForceRepaint): Repaint the view and immediately notify the 
            full screen controller.
        * WebView.h:

2011-05-13  Jon Lee  <jonlee@apple.com>

        Reviewed by Simon Fraser.

        Can't horizontally scroll iframes and overflow because wheel events are always accepted
        https://bugs.webkit.org/show_bug.cgi?id=60779

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::shouldRubberBandInDirection): Default impl of new ChromeClient method
        (WebChromeClient::numWheelEventHandlersChanged): Default impl of new ChromeClient method

2011-05-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Prune #includes from FrameView.h (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=60748

        - Update files that were depending on FrameView.h #including Frame.h or
          Page.h.

        * WebCoreSupport/WebChromeClient.cpp:
        * WebCoreSupport/WebDragClient.cpp:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebFrame.cpp:
        (WebFrame::setPrinting):
        * WebView.cpp:

2011-05-12  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Enable OwnPtr strict mode in PluginHalter
        https://bugs.webkit.org/show_bug.cgi?id=60681

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

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

        A little gtest cleanup after r86287

        * WebKit.vcproj/WebKit.sln:
            - Move gtest into the Tools folder
            - Make gtest build just before TestWebKitAPIGenerated
            - Use gtest's new Debug_All and Production configurations as appropriate

2011-05-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        String operator+ reallocates unnecessarily when concatting > 2 strings
        https://bugs.webkit.org/show_bug.cgi?id=58420

        Provide a faster String append operator. See Source/JavaScriptCore/ChangeLog for details.

        * AccessibleBase.cpp:
        (AccessibleBase::get_accKeyboardShortcut): Explicitely cast to Strings first, so operator BString() can be invoked.

2011-05-11  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=59561
        Switch TestWebKitAPI to GTest

        Fixes Makefiles and WinCairo build as well

        * WebKit.vcproj/WebKit.sln:

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        * WebView.cpp:
        (WebView::setCacheModel):
        Pass 0 to wkCopyFoundationCacheDirectory so that it uses the default session.

2011-05-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86255.
        http://trac.webkit.org/changeset/86255
        https://bugs.webkit.org/show_bug.cgi?id=60660

        REGRESSION (r86255): Lots of tests crashing in
        CFWriteStreamCreateWithAllocatedBuffers on Windows 7 Release
        (WebKit2 Tests) (Requested by aroben on #webkit).

        * WebView.cpp:
        (WebView::setCacheModel):

2011-05-11  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        * WebView.cpp:
        (WebView::setCacheModel):
        Pass 0 to wkCopyFoundationCacheDirectory so that it uses the default session.

2011-05-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86108.
        http://trac.webkit.org/changeset/86108
        https://bugs.webkit.org/show_bug.cgi?id=60533

        Broke makefile based builds and Cairo (Requested by weinig on
        #webkit).

        * WebKit.vcproj/WebKit.sln:

2011-05-09  Dmitry Lomov  <dslomov@google.com>

        Reviewed by Sam Weinig.

        Switch TestWebKitAPI to GTest
        https://bugs.webkit.org/show_bug.cgi?id=59561

        * WebKit.vcproj/WebKit.sln:

2011-05-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86016.
        http://trac.webkit.org/changeset/86016
        https://bugs.webkit.org/show_bug.cgi?id=60445

        caused crashes on the WK2 Windows bots (Requested by
        jessieberlin on #webkit).

        * WebView.cpp:
        (WebView::setCacheModel):

2011-05-07  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Steve Falkenburg.

        [Windows WebKit2] Use cookies set in WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=60274

        * WebView.cpp:
        (WebView::setCacheModel):
        Pass 0 to wkCopyFoundationCacheDirectory so that it uses the default session.

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

        Touch WebKit.idl to fix the build

        I needed this on my own machine. Maybe others will need it, too.

        * Interfaces/WebKit.idl:

2011-05-04  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Dimitri Glazkov.

        Implement LayoutTestController::pseudoShadowId()
        https://bugs.webkit.org/show_bug.cgi?id=60034

        * DOMCoreClasses.cpp:
        (DOMElement::shadowPseudoId):
        * DOMCoreClasses.h:

2011-05-05  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Rename SelectionController to FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=60234

        * WebView.cpp:

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

        Windows build fix attempt after r85823

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::webView):
        * WebView.cpp:
        (kit):

2011-05-04  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Expose WebView directly through ChromeClient.
        https://bugs.webkit.org/show_bug.cgi?id=49902

        * WebCoreSupport/WebChromeClient.h:
        (WebChromeClient::webView):

2011-05-04  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Populate touch-icon url to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=59143

        Respect the interface change in FrameLoaderClient.

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

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

        Reviewed by Adam Roben.

        Implement FULLSCREEN_API on Windows, Part 3: WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=59845

        Implementation of WebFullScreenController has been moved into WebCore, and 
        required virutal functions of WebFullScreenControllerClient have been added to
        WebView.  These functions are mostly simple accessors of existing ivars, but 
        m_fullScreenElement and its accessors have also been added to WebView.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::enterFullScreenForElement):
        * WebFullScreenController.cpp: Removed.
        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::setFullScreenElement): Added accessor.
        (WebVIew::fullScreenElement): Ditto.
        (WebView::fullScreenClientWindow): Ditto.
        (WebView::fullScreenClientParentWindow): Ditto.
        (WebView::fullScreenClientSetParentWindow): Ditto.
        (WebView::fullScreenClientWillEnterFullScreen): Pass through to Document.
        (WebView::fullScreenClientDidEnterFullScreen): Ditto.
        (WebView::fullScreenClientWillExitFullScreen): Ditto.
        (WebView::fullScreenClientDidExitFullScreen): Ditto.
        * WebView.h:

2011-05-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Steve Falkenburg.

        REGRESSION(r84990): Nightly builds don't launch on Windows
        https://bugs.webkit.org/show_bug.cgi?id=60081
        <rdar://problem/9358635>
        
        Fix nightlies on Window by moving the layered window functions to the bottom
        of IWebViewPrivate and touch WebKit.idl to make sure Interfaces rebuild.

        * Interfaces/IWebViewPrivate.idl: Move functions added in r84990 to the bottom of the file.
        * Interfaces/WebKit.idl: Touch to force a rebuild.

2011-05-03  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/59838> Implement HTTP pipelining for CoreFoundation-based networking

        Reviewed by Antti Koivisto.

        * Interfaces/IWebViewPrivate.idl:
        (IWebViewPrivate::httpPipeliningEnabled): Added declaration.
        (IWebViewPrivate::setHTTPPipeliningEnabled): Added declaration.
        * WebView.cpp:
        (WebView::httpPipeliningEnabled): Added.
        (WebView::setHTTPPipeliningEnabled): Added.
        * WebView.h:
        (WebView::httpPipeliningEnabled): Added declaration.
        (WebView::setHTTPPipeliningEnabled): Added declaration.

2011-05-03  Adam Roben  <aroben@apple.com>

        Add some missing virtual keywords on derived-class destructors

        Darin Adler noticed one, I noticed the other. This doesn't change the generated code; it
        just matches our style of explicitly marking overrides "virtual".

        * WebCoreSupport/WebInspectorClient.h: Made the WebInspectorClient and
        WebInspectorFrontendClient destructors explicitly virtual.

2011-05-03  Adam Roben  <aroben@apple.com>

        Fix most strict PassOwnPtr violations on Windows

        Fixes <http://webkit.org/b/60025> Windows should (almost) build with strict PassOwnPtr
        enabled

        Reviewed by Anders Carlsson.

        * WebCoreSupport/WebInspectorClient.h: Made the destructor public, which is required now
        that this type is put into a PassOwnPtr. (Previously, only
        WebCore::InspectorFrontendClientLocal was put into a [Pass]OwnPtr.)

        * FullscreenVideoController.cpp:
        * WebCoreSupport/WebFrameLoaderClient.cpp:
        * WebCoreSupport/WebInspectorClient.cpp:
        * WebHistory.cpp:
        * WebHistoryItem.cpp:
        * WebView.cpp:

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

        Fix windows build.

        * WebFrame.cpp:

2011-05-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Fix OwnPtr strict issues in windows build
        https://bugs.webkit.org/show_bug.cgi?id=59878

        * FullscreenVideoController.cpp:
        (FullscreenVideoController::FullscreenVideoController):
        (FullscreenVideoController::createHUDWindow):
        * WebCoreSupport/WebInspectorClient.cpp:
        (WebInspectorClient::highlight):
        * WebElementPropertyBag.cpp:
        (WebElementPropertyBag::WebElementPropertyBag):
        * WebNodeHighlight.cpp:
        (WebNodeHighlight::update):
        * WebNotificationCenter.cpp:
        (WebNotificationCenter::WebNotificationCenter):
        * WebView.cpp:
        (WebView::close):
        (WebView::paint):
        (WebView::handleMouseEvent):
        (WebView::registerEmbeddedViewMIMEType):

2011-04-29  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adam Roben.

        Implement FULLSCREEN_API on Windows, Part 2: WebKit
        https://bugs.webkit.org/show_bug.cgi?id=59785

        Initial implementation of full screen API on windows.  No animation
        occurs when entering or exiting full screen.  Re-use existing window
        classes (MediaPlayerPrivateFullscreenWindow) to host the webView.

        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::supportsFullScreenForElement): Call into WebView.
        (WebChromeClient::enterFullScreenForElement): Call into WebFullScreenController.
        (WebChromeClient::exitFullScreenForElement): Ditto.
        * WebFullScreenController.cpp: Added.
        (WebFullScreenController::Private::Private): Private data storage class.
        (WebFullScreenController::Private::~Private):
        (WebFullScreenController::Private::fullscreenClientWndProc): Handle window
            message for full screen window.
        (WebFullScreenController::WebFullScreenController):
        (WebFullScreenController::~WebFullScreenController):
        (WebFullScreenController::setElement): Added.
        (WebFullScreenController::element): Added.
        (WebFullScreenController::isFullScreen): Added.
        (WebFullScreenController::enterFullScreen): Create and display full screen
            window, moving webView as child window.
        (WebFullScreenController::exitFullScreen): Destroy full screen window and
            move webView back where we found it.
        * WebFullScreenController.h: Added.
        * WebKit.vcproj/WebKit.vcproj:
        * WebView.cpp:
        (WebView::keyDown): Handle the ESC key.
        (WebView::notifyPreferencesChanged):
        (WebView::supportsFullScreenForElement): Do not support full screen if
            full screen preference is disabled, or if keyboard access is requested.
        (WebView::isFullScreen): Added.
        (WebView::fullScreenController): Added.
        * WebView.h:

2011-04-28  Jer Noble  <jer.noble@apple.com>

        Reviewed by Jon Honeycutt.

        Implement FULLSCREEN_API on Windows, Part 1: Stubs
        https://bugs.webkit.org/show_bug.cgi?id=59778

        Create all the stubs necessary to for enabling FULLSCREEN_API
        on Windows. This includes the COM interfaces for preferences and
        for overriding full screen behavior in a UI Delegate.

        * Interfaces/IWebPreferencesPrivate.idl: Add functions for enabling
            full screen preference.
        * Interfaces/IWebUIDelegatePrivate.idl: Add functions for overriding
            full screen behavior.
        * WebCoreSupport/WebChromeClient.cpp:
        (WebChromeClient::supportsFullScreenForElement): Added.
        (WebChromeClient::enterFullScreenForElement): Added.
        (WebChromeClient::exitFullScreenForElement): Added.
        * WebCoreSupport/WebChromeClient.h:
        * WebPreferenceKeysPrivate.h: Added WebKitFullScreenEnable key.
        * WebPreferences.cpp:
        (WebPreferences::isFullScreenEnabled): Added. Implements function
           defined in IWebUIDelegatePrivate.
        (WebPreferences::setFullScreenEnabled): Ditto.
        * WebPreferences.h:

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        Remove WML-related enumeration.

        * Interfaces/IWebFramePrivate.idl:

2011-04-26  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Adam Roben.

        Implement a transparent WebView under Windows.  This feature
        allows the user to create small web-based applications, similar
        to the dashboard on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=58300

        * Interfaces/IWebViewPrivate.idl: Add new set/get accessors to
        change the state of a WebView into a Layered Window, or back
        into a standard window.
        * Interfaces/WebKit.idl: touch to force clean build
        * WebView.cpp:
        (WebView::WebView): Set layered window state in constructor.
        (WebView::updateBackingStore): Cleanup old bitmap when finished.
        (WebView::performLayeredWindowUpdate): New method to do the work
        of calling ::UpdateLayeredWindow for the WebView with proper
        alpha blending.
        (WebView::paint): Small change to prevent accelerated compositing
        when using a layered window.  DirectX is not compatible with
        ::UpdateLayeredWindow (at least currently).
        (WebView::WebViewWndProc): Adjust main window procedure to avoid
        painting a default background on a layered window (this is handled
        by Windows during compositing), and to deal with paint messages
        properly in the layered window case.
        (WebView::active): The layered window is not a child window,
        so the active state logic is slightly different.
        (WebView::setUsesLayeredWindow): New set method for layered stated.
        When called, it will convert a WebView into a Layered Window.
        (WebView::usesLayeredWindow): Accessor
        * WebView.h:
        (WebView::setUsesLayeredWindow): Declare new accessor
        (WebView::usesLayeredWindow): Declare new accessor

2011-04-21  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix.

        * WebCoreSupport/WebEditorClient.h:

2011-04-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Sam Weinig.

        Add Frame* to the argument lists of canCopyCut and canPaste
        https://bugs.webkit.org/show_bug.cgi?id=59153

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

2011-04-20  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Martin Robinson.

        Provide missing implementation of WebMutableURLRequest::mutableCopy.
        This was preventing DumpRenderTree from working properly under
        the WinCairo port.
        https://bugs.webkit.org/show_bug.cgi?id=59034

        * WebMutableURLRequest.cpp:
        (WebMutableURLRequest::mutableCopy): Implement cURL version of the
        copy operation.

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