2011-02-16  Aparna Nandyal  <aparna.nand@wipro.com>

        Reviewed by Andreas Kling.

        [Qt] QWebFrame: When a relative url is loaded then it will make it absolute internally, however this strips out any query/fragments
        https://bugs.webkit.org/show_bug.cgi?id=29424

        ensureAbsoluteUrl function was stripping the query and the
        fragment part of the url. Corrected this.

        * Api/qwebframe.cpp:
        (ensureAbsoluteUrl):

2011-02-15  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        [Qt][V8] Buildfix. Add missing USE(JSC) guard.

        * Api/qwebelement.cpp:

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.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::defaultMinimumTimerInterval):
        (DumpRenderTreeSupportQt::setMinimumTimerInterval):
        * WebCoreSupport/DumpRenderTreeSupportQt.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/EditorClientQt.h:
        (WebCore::EditorClientQt::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/EditorClientQt.cpp:
        (WebCore::EditorClientQt::canCopyCut): Added.
        (WebCore::EditorClientQt::canPaste): Added.
        * WebCoreSupport/EditorClientQt.h:

2011-02-14  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Crash on application exit after constructing and destroying a QWebView twice
        https://bugs.webkit.org/show_bug.cgi?id=54000

        Test case to cover the crash.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::deleteQWebViewTwice):

2011-02-11  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] wmode gets overridden even if already windowless in QGraphicsWebView
        Do not override wmode if it is not set to "window".
        https://bugs.webkit.org/show_bug.cgi?id=50495

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2011-02-10  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Update calls to DocumentWriter.
        https://bugs.webkit.org/show_bug.cgi?id=50489

        * Api/qwebframe.cpp:
        (QWebFrame::setUrl):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::finishedLoading):

2011-02-10  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Ensure WebView press delay timer is cancelled when grab is taken
        https://bugs.webkit.org/show_bug.cgi?id=54242

        As reported in:
        http://bugreports.qt.nokia.com/browse/QTBUG-15529

        Flickable steals the grab, but the timer was not stopped and the
        keepGrab flag is set and the mouse grabbed. This means that the WebView
        now has the grab and subsequent clicks on another element are ignored.

        Original patch from Martin Jones <martin.jones@nokia.com>
        reviewed (there) by Joona Petrell
        52068f57f9c32098a90cc217730a530f85590f65

        * declarative/qdeclarativewebview.cpp:
        (GraphicsWebView::sceneEvent):
        * declarative/qdeclarativewebview_p.h:

2011-02-10  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Fix assert in QDeclarativeWebView
        https://bugs.webkit.org/show_bug.cgi?id=54240

        As reported in:
        http://bugreports.qt.nokia.com/browse/QTBUG-14278

        Instantiating a QDeclarativeWebView twice will trigger an assertion
        when in debug mode.

        Original patch from Thomas Hartmann <Thomas.Hartmann@nokia.com>,
        reviewed (there) by Aaron Kennedy
        f532679ca11914b453e22342f2ae5e9f790ce47a

        * declarative/qdeclarativewebview.cpp:
        (QDeclarativeWebView::init):

2011-02-10  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Misc documentation fixes/updates
        https://bugs.webkit.org/show_bug.cgi?id=54236

        There are a few commits in the Qt repository (master and 4.7 branches)
        with QtWebKit documentation fixes:

        84d278501a19eaccf9a77cccd95ca5d17a2dcd2b
        Clarified documentation of loadFinished() signal

        eebe205b306daaa3674d9746de11a73bef4bd0de
        Doc: Fixed QML, unindented snippet

        b0d64717d2c541976dc5524e4100c62f060e206f
        doc: Changed a table into 3 tables to eliminate a \raw.

        As these are all minor doc changes, I decided to group them
        into one single patch.

        * Api/qwebpage.cpp:
        * declarative/qdeclarativewebview.cpp:
        * docs/qtwebkit.qdoc:

2011-02-10  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Remove the use of deprecated qVariant*
        https://bugs.webkit.org/show_bug.cgi?id=54229

        This was applied on the Qt repository and affects QtWebKit there.
        (633f3f45e5420663cf4ceadea79e62fea44cd2eb)

        The side effect of this change is that we won't be able to build
        QtWebKit with MSVC 6, as it doesn't support member template functions
        (not sure if it's possible today anyway).

        Original patch from Olivier Goffart <olivier.goffart@nokia.com>, with
        review reported as being from the mailing list.

        The changes are result of the following commands:

            git grep -O"sed -i 's/qVariantValue</qvariant_cast</'" qVariantValue
            git grep -O"sed -i 's/qVariantSetValue(\([^&*\(),]*\), */\\1.setValue(/'" qVariantSetValue
            git grep -O"sed -i 's/qVariantSetValue *<\([^>]*\)> *(\([^&*\(),]*\), */\\2.setValue<\\1>(/'" qVariantSetValue
            git grep -O"sed -i 's/qVariantCanConvert *<\([^>]*\)> *(\([^&*\(),]*\))/\\2.canConvert<\\1>()/g'" qVariantCanConvert
            git grep -O"sed -i 's/qVariantCanConvert *<\([^>]*\)> *(\([^&*\(),]*([^&*\(),]*)\))/\\2.canConvert<\\1>()/g'" qVariantCanConvert
            git grep -O"sed -i 's/qVariantFromValue\( *[(<]\)/QVariant::fromValue\\1/'" qVariantFromValue


        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::nodesFromRect):
        * tests/qwebframe/tst_qwebframe.cpp:
        (MyQObject::myInvokableWithQObjectListArg):
        (MyQObject::myInvokableWithListOfIntArg):
        (MyQObject::myInvokableWithQObjectStarArg):
        (MyQObject::myInvokableWithQBrushArg):
        (MyQObject::myInvokableWithBrushStyleArg):
        (MyQObject::myInvokableWithVoidStarArg):
        (MyQObject::myInvokableWithAmbiguousArg):
        (MyQObject::myInvokableWithDefaultArgs):
        (MyQObject::myInvokableWithPointArg):
        (MyQObject::myOverloadedSlot):

2011-02-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Return menu items from eventSender.contextMenu()
        https://bugs.webkit.org/show_bug.cgi?id=53039

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (iterateContextMenu):
        (DumpRenderTreeSupportQt::contextMenu):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2011-02-10  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] In trunk with Qt Multimedia the full screen mode doesn't work.
        https://bugs.webkit.org/show_bug.cgi?id=54201

        Add a default fullscreen handler when there is no plaftform plugin
        installed. This handler creates a fullscreen QVideoWidget and plays
        the video. Space pause/resume the video playback and esc quit the
        fullscreen mode.

        * WebCoreSupport/FullScreenVideoQt.cpp:
        (WebCore::DefaultFullScreenVideoHandler::DefaultFullScreenVideoHandler):
        (WebCore::DefaultFullScreenVideoHandler::~DefaultFullScreenVideoHandler):
        (WebCore::DefaultFullScreenVideoHandler::requiresFullScreenForVideoPlayback):
        (WebCore::DefaultFullScreenVideoHandler::enterFullScreen):
        (WebCore::DefaultFullScreenVideoHandler::exitFullScreen):
        (WebCore::FullScreenVideoQt::FullScreenVideoQt):
        * WebCoreSupport/FullScreenVideoQt.h:
        * WebCoreSupport/FullScreenVideoWidget.cpp: Added.
        (WebCore::FullScreenVideoWidget::FullScreenVideoWidget):
        (WebCore::FullScreenVideoWidget::~FullScreenVideoWidget):
        (WebCore::FullScreenVideoWidget::show):
        (WebCore::FullScreenVideoWidget::closeEvent):
        (WebCore::FullScreenVideoWidget::event):
        (WebCore::FullScreenVideoWidget::keyPressEvent):
        (WebCore::FullScreenVideoWidget::hideCursor):
        (WebCore::FullScreenVideoWidget::showCursor):
        * WebCoreSupport/FullScreenVideoWidget.h: Added.

2011-02-10  kasthuri  <kasthuri.n-s@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] QWebFrame::setHtml doesn't emit loadFinished signal
        https://bugs.webkit.org/show_bug.cgi?id=38634

        QWebView->page()->mainFrame()->setHtml(html) is always emitting
        the loadFinished() signal for all types of html files.
        But the proposed test content was trying to catch the signal after
        calling setHtml() api and becuase of this the emitted signal for a 
        simple html page is never caught as its emitted before even the connect
        call was successful.

        updated the tst_QWebFrame::setHtml() in tst_qwebframe.cpp to check for 
        signal using the QSignalSpy.
         

        * tests/qwebframe/tst_qwebframe.cpp:

2011-02-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] REGRESSION (r73535): tst_QWebPage fails
        https://bugs.webkit.org/show_bug.cgi?id=51331

        Since r73535 a ContextMenu is only created when a context menu
        event is received, so QWebPage::updatePositionDependentActions()
        can't depend on one being there if it is called directly by
        the client. QtWebKit itself only ever calls updatePositionDependentActions()
        when a context menu event has been received.

        Update tst_QWebPage:contextMenuCrash to create a context menu.
        Add tst_QWebPage:updatePositionDependentActionsCrash to test for this crash.

        There doesn't seem to be a good reason for creating a context menu if
        clients call QWebPage::updatePositionDependentActions() when no
        context menu event has ever been received.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::contextMenuCrash):

2011-02-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] fast/dom/nodesFromRect-links-and-text.html crashes in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=53921

        QDRTNode needs a copy constructor and an operator= in order to keep
        proper refcounts.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (:m_node):
        (QDRTNode::operator=):
        (DumpRenderTreeSupportQt::nodesFromRect):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

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/ChromeClientQt.h:

2011-02-07  Aparna Nandyal  <aparna.nand@wipro.com>

        Reviewed by Andreas Kling.

        [Qt] - Context menu needs "Copy" as well when the selected text is a link.
        https://bugs.webkit.org/show_bug.cgi?id=40983

        Added a test case to create a context sensitive menu.
        A check is made if it has Copy menu item when user
        selects a link and opens context menu.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::contextMenuCopy):

2011-02-07  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] cookiesEnabled could create the cookieJar on the wrong thread.
        https://bugs.webkit.org/show_bug.cgi?id=52289

        Test if the cookie jar is created in the right thread when accessed from
        the navigator object.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::navigatorCookieEnabledForNetworkAccessManagerOnDifferentThread):

2011-02-07  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] enum QWebPage::WebAction doesn't have value QWebPage::CopyImageUrl
        https://bugs.webkit.org/show_bug.cgi?id=52974

        Add QWebPage::CopyImageUrlToClipboard into QWebPage::WebAction.

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::triggerAction):
        (QWebPage::action):
        * Api/qwebpage.h:
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::contextMenuItemTagCopyImageUrlToClipboard):
        * WebCoreSupport/WebPlatformStrategies.h:

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

2011-02-06  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Remove unnecessary QRect assignment
        https://bugs.webkit.org/show_bug.cgi?id=53873

        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderRelativeCoords):

2011-02-06  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Clear page's groupName even when not in DRT
        https://bugs.webkit.org/show_bug.cgi?id=53874

        Matches behaviour of other ports.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::closeWindowSoon):

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/InspectorClientQt.cpp:
        (WebCore::InspectorFrontendClientQt::InspectorFrontendClientQt):
        * WebCoreSupport/InspectorClientQt.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/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::didRunInsecureContent):
        * WebCoreSupport/FrameLoaderClientQt.h:

2011-02-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed Qt buildfix after r77286.

        https://bugs.webkit.org/show_bug.cgi?id=53520 
        Remove the physical terminology from IntRect and FloatRect.

        * WebCoreSupport/PopupMenuQt.cpp:
        (WebCore::PopupMenuQt::show):

2011-01-31  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebElements example from QtWebKit Bridge documentation does not work at all
        https://bugs.webkit.org/show_bug.cgi?id=46748

        Problem was that we need to register QWebElement's variant-type to Qt's meta type system at some point.
        This wasn't caught by previous tests inside tst_QWebFrame because it only appears when there's also a QWebElement property.
        Added a regression test to tst_QWebFrame.

        * tests/qwebframe/tst_qwebframe.cpp:
        (MyWebElementSlotOnlyObject::doSomethingWithWebElement):
        (MyWebElementSlotOnlyObject::tagName):

2011-01-31  Srikumar Bonda  <srikumar.b@gmail.com>

        Reviewed by Andreas Kling.

        [Qt] ContextMenuClientQt.cpp has coding-style errors
        "RefCounted.h" header inclusion style changed to <wtf/RefCounted.h> 
        https://bugs.webkit.org/show_bug.cgi?id=40243

        * WebCoreSupport/ContextMenuClientQt.cpp:

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

        * Api/qwebframe.cpp:
        (QWebFrame::url):

2011-01-27  Robert Hogan  <robert@webkit.org>

        Rubber-stamped by Andreas Kling.

        [Qt] Style Fix: correct indentation in FrameLoadeClientQt:createPlugin

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

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

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2011-01-24  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] QWebFramePrivate::renderRelativeCoords() calls QPainter::save/restore more than necessary
        https://bugs.webkit.org/show_bug.cgi?id=49915

        In the first loop of renderRelativeCoords() the call of QPainter::save/restore is useless, because
        the context is saved/stored within the loop.
        In the second loop the calls are also avoidable by using inverse translation on context.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderRelativeCoords):

2011-01-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Move project files into Source
        https://bugs.webkit.org/show_bug.cgi?id=52891

        * declarative/declarative.pro:
        * docs/docs.pri:
        * tests/tests.pri:

2011-01-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: next step in splitting InspectorController.

        #include "InspectorController.h" was added.

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

        * WebCoreSupport/InspectorServerQt.cpp:

2011-01-22  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Support layoutTestController.addURLToRedirect()
        https://bugs.webkit.org/show_bug.cgi?id=52956

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::addURLToRedirect):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        * WebCoreSupport/FrameLoaderClientQt.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.

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarValue):

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

        Fix build.

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarValue):

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

        Fix build.

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarValue):

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

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarValue):

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

        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQWidget::syncLayers): syncCompositingStateRecursive()
        was renamed to syncCompositingStateIncludingSubframes().

2011-01-19  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Laszlo Gombos and Tor Arne Vestbø.

        [Qt] Remove unnecessary "../Source" from paths
        after moving source files into Source is finished.

        * Api/DerivedSources.pro:

2011-01-18  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] http/tests/incremental/slow-utf8-text.pl fails
        https://bugs.webkit.org/show_bug.cgi?id=44282

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::responseMimeType):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2011-01-17  Alexey Proskuryakov  <ap@apple.com>

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

        * Api/qwebframe.cpp: (QWebFrame::print): Avoid breaking the build due to type mismatch.
        Longer term, this code should be changed to use an unsigned type for page count.

2011-01-17  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Extend the Platform Plugin to support full screen video handler
        https://bugs.webkit.org/show_bug.cgi?id=51249

        Add a new webkit platform plugin interface to support full screen video handler.

        * Api/qwebkitplatformplugin.h:
        (QWebFullScreenVideoHandler::QWebFullScreenVideoHandler):
        (QWebFullScreenVideoHandler::~QWebFullScreenVideoHandler):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::~ChromeClientQt):
        (WebCore::ChromeClientQt::fullScreenVideo):
        (WebCore::ChromeClientQt::supportsFullscreenForNode):
        (WebCore::ChromeClientQt::requiresFullscreenForVideoPlayback):
        (WebCore::ChromeClientQt::enterFullscreenForNode):
        (WebCore::ChromeClientQt::exitFullscreenForNode):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/FullScreenVideoQt.cpp: Added.
        (WebCore::FullScreenVideoQt::FullScreenVideoQt):
        (WebCore::FullScreenVideoQt::~FullScreenVideoQt):
        (WebCore::FullScreenVideoQt::enterFullScreenForNode):
        (WebCore::FullScreenVideoQt::exitFullScreenForNode):
        (WebCore::FullScreenVideoQt::aboutToClose):
        (WebCore::FullScreenVideoQt::mediaPlayer):
        (WebCore::FullScreenVideoQt::mediaPlayerForNode):
        (WebCore::FullScreenVideoQt::requiresFullScreenForVideoPlayback):
        * WebCoreSupport/FullScreenVideoQt.h: Added.
        (WebCore::FullScreenVideoQt::isValid):
        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::QtPlatformPlugin::createFullScreenVideoHandler):
        * WebCoreSupport/QtPlatformPlugin.h:
        * examples/platformplugin/WebPlugin.cpp:
        (FullScreenVideoWidget::FullScreenVideoWidget):
        (FullScreenVideoWidget::event):
        (FullScreenVideoWidget::keyPressEvent):
        (FullScreenVideoHandler::FullScreenVideoHandler):
        (FullScreenVideoHandler::~FullScreenVideoHandler):
        (FullScreenVideoHandler::requiresFullScreenForVideoPlayback):
        (FullScreenVideoHandler::enterFullScreen):
        (FullScreenVideoHandler::exitFullScreen):
        (WebPlugin::supportsExtension):
        (WebPlugin::createExtension):
        * examples/platformplugin/WebPlugin.h:
        (FullScreenVideoWidget::~FullScreenVideoWidget):
        * examples/platformplugin/platformplugin.pro:
        * examples/platformplugin/qwebkitplatformplugin.h:
        (QWebFullScreenVideoHandler::QWebFullScreenVideoHandler):
        (QWebFullScreenVideoHandler::~QWebFullScreenVideoHandler):

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

        * Api/DerivedSources.pro:
        * declarative/declarative.pro:
        * docs/docs.pri:
        * tests/tests.pri:

2011-01-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r75708.
        http://trac.webkit.org/changeset/75708
        https://bugs.webkit.org/show_bug.cgi?id=52521

        Breaks Qt build if mobility is not installed. (Requested by
        benjaminp on #webkit).

        * Api/qwebkitplatformplugin.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::~ChromeClientQt):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/FullScreenVideoQt.cpp: Removed.
        * WebCoreSupport/FullScreenVideoQt.h: Removed.
        * WebCoreSupport/QtPlatformPlugin.cpp:
        * WebCoreSupport/QtPlatformPlugin.h:
        * examples/platformplugin/WebPlugin.cpp:
        (WebPlugin::supportsExtension):
        (WebPlugin::createExtension):
        * examples/platformplugin/WebPlugin.h:
        * examples/platformplugin/platformplugin.pro:
        * examples/platformplugin/qwebkitplatformplugin.h:

2011-01-15  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] plugins/no-mime-with-valid-extension.html fails
        Check extension of resource against installed
        plugins when determining mime-type.

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):

2011-01-14  Sam Magnuson  <smagnuso@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Compile with QT_NO_GRAPHICSVIEW
        https://bugs.webkit.org/show_bug.cgi?id=49750

        * Api/qgraphicswebview.cpp:
        * Api/qgraphicswebview.h:
        * Api/qwebpage.cpp:
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * WebCoreSupport/PageClientQt.cpp:
        * WebCoreSupport/PageClientQt.h:

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::_q_cleanupLeakMessages):
        * Api/qwebsettings.cpp:
        (QWebSettings::clearMemoryCaches):
        (QWebSettings::setObjectCacheCapacities):

2011-01-14  Konstantin Tokarev  <annulen@yandex.ru>

        Reviewed by Laszlo Gombos.

        [Qt] Fixed compilation when QT_NO_SHORTCUT is defined
        https://bugs.webkit.org/show_bug.cgi?id=52460

        This patch fixes compilation when QT_NO_SHORTCUT is defined in Qt
        configuration.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent): Added QT_NO_SHORTCUT guards

2011-01-13  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Need a way to inform the application when a Netscape plugin is created.
        https://bugs.webkit.org/show_bug.cgi?id=30179

        Added "c" style static method for the application to hook up for
        receiving notifications when a plugin is created.

        * symbian/bwins/QtWebKitu.def:
        * symbian/eabi/QtWebKitu.def:

2011-01-13  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Extend the Platform Plugin to support full screen video handler
        https://bugs.webkit.org/show_bug.cgi?id=51249

        Add a new webkit platform plugin interface to support full screen video handler.

        * Api/qwebkitplatformplugin.h:
        (QWebFullScreenVideoHandler::QWebFullScreenVideoHandler):
        (QWebFullScreenVideoHandler::~QWebFullScreenVideoHandler):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::~ChromeClientQt):
        (WebCore::ChromeClientQt::fullScreenVideo):
        (WebCore::ChromeClientQt::supportsFullscreenForNode):
        (WebCore::ChromeClientQt::requiresFullscreenForVideoPlayback):
        (WebCore::ChromeClientQt::enterFullscreenForNode):
        (WebCore::ChromeClientQt::exitFullscreenForNode):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/FullScreenVideoQt.cpp: Added.
        (WebCore::FullScreenVideoQt::FullScreenVideoQt):
        (WebCore::FullScreenVideoQt::~FullScreenVideoQt):
        (WebCore::FullScreenVideoQt::enterFullScreenForNode):
        (WebCore::FullScreenVideoQt::exitFullScreenForNode):
        (WebCore::FullScreenVideoQt::aboutToClose):
        (WebCore::FullScreenVideoQt::mediaPlayer):
        (WebCore::FullScreenVideoQt::mediaPlayerForNode):
        (WebCore::FullScreenVideoQt::requiresFullScreenForVideoPlayback):
        * WebCoreSupport/FullScreenVideoQt.h: Added.
        (WebCore::FullScreenVideoQt::isValid):
        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::QtPlatformPlugin::createFullScreenVideoHandler):
        * WebCoreSupport/QtPlatformPlugin.h:
        * examples/platformplugin/WebPlugin.cpp:
        (FullScreenVideoWidget::FullScreenVideoWidget):
        (FullScreenVideoWidget::event):
        (FullScreenVideoWidget::keyPressEvent):
        (FullScreenVideoHandler::FullScreenVideoHandler):
        (FullScreenVideoHandler::~FullScreenVideoHandler):
        (FullScreenVideoHandler::requiresFullScreenForVideoPlayback):
        (FullScreenVideoHandler::enterFullScreen):
        (FullScreenVideoHandler::exitFullScreen):
        (WebPlugin::supportsExtension):
        (WebPlugin::createExtension):
        * examples/platformplugin/WebPlugin.h:
        (FullScreenVideoWidget::~FullScreenVideoWidget):
        * examples/platformplugin/platformplugin.pro:
        * examples/platformplugin/qwebkitplatformplugin.h:
        (QWebFullScreenVideoHandler::QWebFullScreenVideoHandler):
        (QWebFullScreenVideoHandler::~QWebFullScreenVideoHandler):

2011-01-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Search input field doesn't have cancel button

        Add a cancel button to the search field and make it customizable
        by the client. For now, use the close dialog button associated
        with the application's style as the default.

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

        * Api/qwebsettings.cpp:
        (graphics):
        * Api/qwebsettings.h:

2011-01-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r74344.
        http://trac.webkit.org/changeset/74344
        https://bugs.webkit.org/show_bug.cgi?id=52290

        broke QWebPluginFactory for unusual mime-types (Requested by
        kling on #webkit).

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2011-01-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove uses of QFuture since it isn't supported on all platforms.
        https://bugs.webkit.org/show_bug.cgi?id=51204

        * tests/qwebpage/tst_qwebpage.cpp:
        (QtNAMThread::QtNAMThread):
        (QtNAMThread::networkAccessManager):
        (QtNAMThread::run):

2011-01-11  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix tst_QWebPage::geolocationRequestJS()
        https://bugs.webkit.org/show_bug.cgi?id=46814

        Skip the test when WebKit is compiled without geolocation.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::geolocationRequestJS):

2011-01-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] Baseline qt_minimal configuration
        https://bugs.webkit.org/show_bug.cgi?id=51313

        * WebCoreSupport/PopupMenuQt.cpp:
        (WebCore::PopupMenuQt::show): Add QT_NO_COMBOBOX guard.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::populate): Add QT_NO_TOOLTIP guard.

        * tests/qwebframe/tst_qwebframe.cpp: Add QT_NO_COMBOBOX guard.
        * tests/qwebpage/tst_qwebpage.cpp:
        (PluginPage::createPlugin): Add QT_NO_INPUTDIALOG guard.

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

        Reviewed by Darin Adler.

        Introduce the notion of a "display-isolated" URL scheme for use by
        Chrome-internal URLs
        https://bugs.webkit.org/show_bug.cgi?id=50182

        Update to new function name.

        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::localSchemes):

2011-01-10  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Navigator.cookiesEnabled return true for Qt even if there is no cookie jar
        https://bugs.webkit.org/show_bug.cgi?id=52081

        Add an autotest for checking the result of Navigator.cookiesEnabled depending
        on the status of the cookie jar.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::navigatorCookieEnabled):

2011-01-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r75337.
        http://trac.webkit.org/changeset/75337
        https://bugs.webkit.org/show_bug.cgi?id=52137

        It made fast/dom/navigator-detached-no-crash.html crash
        (Requested by Ossy on #webkit).

        * tests/qwebpage/tst_qwebpage.cpp:

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

        * Api/qwebpage.cpp:
        (openNewWindow):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):

2011-01-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Navigator.cookiesEnabled return true for Qt even if there is no cookie jar
        https://bugs.webkit.org/show_bug.cgi?id=52081

        Add an autotest for checking the result of Navigator.cookiesEnabled depending
        on the status of the cookie jar.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::navigatorCookieEnabled):

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

        Update documentation to reference new location of WebCore.

        * docs/qtwebkit.qdoc:

2011-01-07  Andreas Kling  <kling@webkit.org>

        Reviewed by Adam Barth.

        [Qt] Add selectedHtml function to QWebView
        https://bugs.webkit.org/show_bug.cgi?id=35028

        Add QWebView::selectedHtml() and QWebPage::selectedHtml()
        which return the current selection range's HTML representation.

        * Api/qwebpage.cpp:
        (QWebPage::selectedHtml):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::selectedText):
        (QWebView::selectedHtml):
        * Api/qwebview.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::cursorMovements):
        (tst_QWebPage::textSelection):
        (tst_QWebPage::crashTests_LazyInitializationOfMainFrame):
        (tst_QWebPage::findText):

2011-01-06  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Introduce QDRTNode for passing WebCore::Node across JS bridge

        This allows LayoutTestController to pass WebCore::Node back to
        layout tests.

        Also amend nodesFromRect-links-and-text.html and
        nodesFromRect-inner-documents.html so that they do not produce
        platform-specific results.

        Unskip:
        fast/dom/nodesFromRect-links-and-text.html
        fast/dom/nodesFromRect-inner-documents.html

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (QDRTNode::QDRTNode):
        (QDRTNode::~QDRTNode):
        (DumpRenderTreeSupportQt::nodesFromRect):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2011-01-04  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.
        Acked by Aaron Kennedy <aaron.kennedy@nokia.com>

        [Qt] QML WebView does not transfer focus to underlying QGraphicsWebView

        QML WebView creates QGraphicsWebView as it's child. The WebView is not
        setup as a focus proxy of the QGraphicsWebView. Thus, even though the
        WebView gets focus, the QGraphicsWebView does not get focus.
        In QML, focus proxies or "focus scopes" are created using FocusScope.
        This change makes WebView a FocusScope and sets the focus on the
        QGraphicsWebView. 

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

        * declarative/qdeclarativewebview.cpp:
        (QDeclarativeWebView::init):

2011-01-05  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Sync qwebkitplatformplugin.h in the plugin example
        https://bugs.webkit.org/show_bug.cgi?id=51882

        Make examples/platformplugin/qwebkitplatformplugin.h exactly the same
        as the one in the Api folder.

        * examples/platformplugin/qwebkitplatformplugin.h:

2011-01-04  Zhe Su  <suzhe@chromium.org>

        Reviewed by Kenneth Russell.

        Fix test LayoutTests/fast/events/ime-composition-events-001.html.

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent): Calls editor->insertText() to
        insert the commit string when no composition text is available.

2011-01-03  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Add SelectAll option to the context menu for the editor
        https://bugs.webkit.org/show_bug.cgi?id=50049

        Enable SelectAll for the Qt context menu.

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::action):
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::contextMenuItemTagSelectAll):
        * WebCoreSupport/WebPlatformStrategies.h:

2011-01-03  Antonio Gomes  <agomes@rim.com>

        Unreviewed crash fix.

        Follow up of r74891: potential crash fix (bogus assertion).

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::editorCommandForKeyDownEvent):

2011-01-03  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] document.getElementById(...) doesn't return the right object in combination with QGraphicsWidget
        https://bugs.webkit.org/show_bug.cgi?id=51464

        Added a way to bind any QObject created as a plugin to JavaScript, 
        by adding a custom membe to WebCore::Widget. 
        Added a test to make sure plugins created as QGraphicsWidget are 
        accessible through JavaScript.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        * tests/qwebpage/tst_qwebpage.cpp:
        (PluginPage::createPlugin):
        (tst_QWebPage::graphicsWidgetPlugin):

2011-01-02  Antonio Gomes  <agomes@rim.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Refactor EditorClientQt::handleKeyboardEvent
        https://bugs.webkit.org/show_bug.cgi?id=51306

        EditorClientQt::handleKeyboardEvent relies on QWebPagePrivate::editorActionForKeyEvent()
        to handle all editor commands that have a QAction associted with it.
        In practice, that covers most of editor commands (as one can see in editorCommandWebActions,
        in qwebpage.cpp). However, there are some key down events that are associated to no QAction
        or need special handling when features like spatial navigation or
        caret browsing are enabled. Currently, these cases are being handled with confusing
        and nested if/else switch's statements in EditorClientQt::handleKeyboardEvent(),
        and the code is hardly readable.

        This patch introduces a mapping hash for those cases, simplifying much
        the code. Basically, nested switches statements mixed with if/else's were
        refactored, and early returns were added right after an event gets consumed
        by the Editor.

        Since it is a refactor only patch, there is no funcionality change at
        all, and then no new tests are being added.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::interpretKeyEvent):
        (WebCore::EditorClientQt::handleKeyboardEvent):

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_pch.h:
        * docs/qtwebkit.qdocconf:
          - Point to JavaScriptCore in its new location.

2010-12-29  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with Qt in namespace
        https://bugs.webkit.org/show_bug.cgi?id=51701

        * Api/qwebkitplatformplugin.h:
        * WebCoreSupport/InspectorServerQt.h:
        * tests/hybridPixmap/widget.h:

2010-12-23  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Alexey Proskuryakov.

        [Qt] Composition text is not removed from the editor when composition is cancelled
        https://bugs.webkit.org/show_bug.cgi?id=29391

        Ensure that the composition text is cleared when an empty QInputMethodEvent
        is received and the editor is in composition mode.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):

2010-12-23  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] copy and paste greek symbols to Word, TextEdit results in ?'s being shown
        https://bugs.webkit.org/show_bug.cgi?id=35635

        Test that QClipboard contains the charset information and unicode data
        after copying unicode text.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::macCopyUnicodeToClipboard):

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

2010-12-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Editor.h doesn't need to include SelectionController.h
        https://bugs.webkit.org/show_bug.cgi?id=51441

        Renamed SelectionController::EDirection to SelectionDirection.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2010-12-23  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add a 'hasSelection' function to QWebView and QWebPage.
        https://bugs.webkit.org/show_bug.cgi?id=48722

        This is a convenience API that optimizes the case where checking for
        the presence of selected content and accessing the selected content
        are two separate actions in the client. See comment #12 in the above
        bug report link for details.

        * Api/qwebpage.cpp:
        (QWebPage::hasSelection):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::hasSelection):
        * Api/qwebview.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textSelection):

2010-12-20  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Improve the readability of FrameLoaderClientQt::createPlugin()
        https://bugs.webkit.org/show_bug.cgi?id=51330

        Redefine the scopes to improve readability. Objects are now created in
        the scope they are used in.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2010-12-17  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Antonio Gomes.

        [Qt] GraphicsContext should respect QWebView render hints
        https://bugs.webkit.org/show_bug.cgi?id=51208

        Adjust the test since SmoothPixmapTransform is set by default.

        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::renderHints):

2010-12-05  Antonio Gomes  <agomes@rim.com>

        Reviewed by Ariya Hidayat.

        [Qt] Fix caret browsing navigation mode
        https://bugs.webkit.org/show_bug.cgi?id=50536

        Caret browsing can consume editing commands even when the start
        of current selection is not a editable content. r69582 missed this
        case because caret browsing feature testing is very poor today.

        This commit reintroduces part of the removed code in r69582 but
        guarded by a isCaretBrowsingEnabled() check. No regression found.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2010-12-17  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage sends out a RequestSoftwareInputPanel event 
        incorrectly in particular case
        https://bugs.webkit.org/show_bug.cgi?id=50419

        Add HitTestResult check before firing RequestSoftwareInputPanel event.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::handleSoftwareInputPanel):
        * Api/qwebpage_p.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (clickOnPage):
        (tst_QWebPage::inputMethods):

2010-12-17  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r74229.
        http://trac.webkit.org/changeset/74229
        https://bugs.webkit.org/show_bug.cgi?id=50536

        Broken on Snow Leopard and possibly other platforms

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2010-12-05  Antonio Gomes  <agomes@rim.com>

        Reviewed by Ariya Hidayat.

        [Qt] Fix caret browsing navigation mode
        https://bugs.webkit.org/show_bug.cgi?id=50536

        Caret browsing can consume editing commands even when the start
        of current selection is not a editable content. r69582 missed this
        case because caret browsing feature testing is very poor today.

        This commit reintroduces part of the removed code in r69582 but
        guarded by a isCaretBrowsingEnabled() check. No regression found.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2010-12-16  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] GraphicsContext should respect QWebView render hints
        https://bugs.webkit.org/show_bug.cgi?id=51208

        Add some checks to ensure that GraphicsContext (via QWebFrame)
        does not clobber the render hints.

        * Api/qwebview.cpp:
        (QWebViewPrivate::QWebViewPrivate):
        * tests/qwebframe/tst_qwebframe.cpp:

2010-12-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Fix tst_QWebPage::geolocationRequestJS()
        https://bugs.webkit.org/show_bug.cgi?id=46814

        Change the test case according to the changes introduced by
        r72603 and enable the test case.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::geolocationRequestJS):

2010-12-14  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Flash plugins should be windowless on QGraphicsWebView on Symbian
        Remove #idef SYMBIAN introduced by r69396.
        https://bugs.webkit.org/show_bug.cgi?id=50487

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

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/EditorClientQt.h:
        (WebCore::EditorClientQt::requestCheckingOfString):

2010-12-11  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Memory leaks for QWebPageClient
        https://bugs.webkit.org/show_bug.cgi?id=50267

        Use OwnPtr to solve this memory leak issue.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::overlay):
        (QGraphicsWebViewPrivate::QWebViewPrivate::pageClient):
        (QGraphicsWebViewPrivate::syncLayers):
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
        (QGraphicsWebViewPrivate::_q_scaleChanged):
        (QGraphicsWebViewPrivate::detachCurrentPage):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebViewPrivate::detachCurrentPage):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::platformPageClient):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2010-12-11  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] QWebFrame does not support QNetworkRequest::CacheLoadControl
        https://bugs.webkit.org/show_bug.cgi?id=35671

        Make QWebFrame respect the QNetworkRequest::CacheLoadControl attribute
        set on the request, if any.

        * Api/qwebframe.cpp:
        (cacheLoadControlToCachePolicy):
        (QWebFrame::load):
        * tests/qwebframe/tst_qwebframe.cpp:

2010-10-11  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Mock DeviceOrientation client for DRT
        https://bugs.webkit.org/show_bug.cgi?id=47490

        * WebCoreSupport/DeviceOrientationClientMockQt.cpp: Added.
        (WebCore::DeviceOrientationClientMockQt::client):
        (WebCore::DeviceOrientationClientMockQt::DeviceOrientationClientMockQt):
        (WebCore::DeviceOrientationClientMockQt::~DeviceOrientationClientMockQt):
        (WebCore::DeviceOrientationClientMockQt::setController):
        (WebCore::DeviceOrientationClientMockQt::startUpdating):
        (WebCore::DeviceOrientationClientMockQt::stopUpdating):
        (WebCore::DeviceOrientationClientMockQt::lastOrientation):
        (WebCore::DeviceOrientationClientMockQt::deviceOrientationControllerDestroyed):
        (WebCore::DeviceOrientationClientMockQt::setOrientation):
        * WebCoreSupport/DeviceOrientationClientMockQt.h: Added.
        * WebCoreSupport/DeviceOrientationClientQt.cpp:
        * WebCoreSupport/DeviceOrientationProviderQt.cpp:
        (WebCore::DeviceOrientationProviderQt::DeviceOrientationProviderQt):
        (WebCore::DeviceOrientationProviderQt::~DeviceOrientationProviderQt):
        (WebCore::DeviceOrientationProviderQt::changeDeviceOrientation):
        * WebCoreSupport/DeviceOrientationProviderQt.h:
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::activeMockDeviceOrientationClient):
        (DumpRenderTreeSupportQt::removeMockDeviceOrientation):
        (DumpRenderTreeSupportQt::setMockDeviceOrientation):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-12-10  Krithigassree Sambamurthy  <krithigassree.sambamurthy@nokia.com>

        Reviewed by Joseph Pecoraro.

        Bug 43455 - [Qt]: Implement Application Cache Quotas
        https://bugs.webkit.org/show_bug.cgi?id=43455

        Added new signal to report ApplicationCache Database
        quota.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:

        Added new functions to accomodate new appcache layout
        test origin-quota.html.

        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::setApplicationCacheQuota):
        * Api/qwebsecurityorigin.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::reachedApplicationCacheOriginQuota):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::clearAllApplicationCaches):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-12-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Support a QNetworkAccessManager affined to a different thread.
        https://bugs.webkit.org/show_bug.cgi?id=50080

        This patch introduce thread safe proxy classes for QNetworkAccessManager
        and QNetworkReply.
        If run in the same thread, these objects will forward the calls with
        Qt::DirectConnection bindings, while in the other case they will use
        Qt::QueuedConnection to carry requests accross threads.

        This patch basically:
        - Makes sure that all access goes through these objects
        - Reorders signal connections to make sure we are connected when the
          signal comes
        - Makes sure that no QObject in the WebCore thread is a child of the
          reply which might be in a different thread.
        - Forward the data directly in QByteArrays in signals instead of collecting
          the data when the signal is handled.

        New test: tst_QWebPage::networkAccessManagerOnDifferentThread

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::download):
        * tests/qwebpage/tst_qwebpage.cpp:
        (QtNAMThread::QtNAMThread):
        (QtNAMThread::~QtNAMThread):
        (QtNAMThread::networkAccessManager):
        (QtNAMThread::run):
        (tst_QWebPage::networkAccessManagerOnDifferentThread):

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

        Unreviewed, rolling out r73635.
        http://trac.webkit.org/changeset/73635
        https://bugs.webkit.org/show_bug.cgi?id=50778

        'Side-effects on 3 css tests needs closer review' (Requested
        by mwenge on #webkit).

        * Api/qwebsettings.cpp:
        (graphics):
        * Api/qwebsettings.h:

2010-12-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Search input field doesn't have cancel button

        Add a cancel button to the search field and make it customizable
        by the client. For now, use the close dialog button associated
        with the application's style as the default.

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

        * Api/qwebsettings.cpp:
        (graphics):
        * Api/qwebsettings.h:

2010-12-09  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        Use BUILDING_WEBKIT like other ports
        https://bugs.webkit.org/show_bug.cgi?id=50713

        * Api/qwebkitglobal.h: change BUILD_WEBKIT to BUILDING_WEBKIT

2010-12-08  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Support OrientationChange event
        https://bugs.webkit.org/show_bug.cgi?id=50685

        Get OrientationChange event from qtmobility then send to webkit.

        * Api/qwebframe.cpp:
        (QWebFrame::orientationChanged):
        (QWebFrame::QWebFrame):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

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.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        (QWebPage::updatePositionDependentActions):

2010-12-07  Darin Adler  <darin@apple.com>

        Try to fix build.

        * Api/qwebpage.cpp:
        (frameLoadRequest): Added missing parentheses.

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

        * Api/qwebpage.cpp:
        (frameLoadRequest): Pass security origin.

2010-12-07  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed, rolling out r73392.
        http://trac.webkit.org/changeset/73392
        https://bugs.webkit.org/show_bug.cgi?id=50489

        This commit caused crashes on the GTK+ bots

        * Api/qwebframe.cpp:
        (QWebFrame::setUrl):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::finishedLoading):

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

        Reviewed by Adam Barth.

        Update calls to DocumentWriter.
        https://bugs.webkit.org/show_bug.cgi?id=50489

        * Api/qwebframe.cpp:
        (QWebFrame::setUrl):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::finishedLoading):

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/EditorClientQt.cpp:
        (WebCore::EditorClientQt::getGuessesForWord):
        * WebCoreSupport/EditorClientQt.h:

2010-11-30  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement layoutTestController.findString
        https://bugs.webkit.org/show_bug.cgi?id=50236

        Add support for the new advanced findString().

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::findString):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-11-30  Ojan Vafai  <ojan@chromium.org>

        Revert r72876. It caused a ~30% perf regression in chromium's bloat-http test
        https://bugs.webkit.org/show_bug.cgi?id=50288

        2010-11-29 Adam Barth <abarth@webkit.org (:abarth) (r)>
        Reviewed by Darin Adler.
        Introduce the notion of a "display-isolated" URL scheme for use by Chrome-internal URLs
        https://bugs.webkit.org/show_bug.cgi?id=50182
        A display-isolated URL can only be displayed (e.g., put in an iframe,
        hyperlinked to) by documents from that scheme. In a sense, this is a
        generalization of some of the protections we give file URLs, but
        instead of lumping them all together into one "local" bucket, this
        patch creates a separate bucket for each scheme.
        For a while, I tried using a separate bucket for each origin. That
        would have played nicely with what Blob URLs are trying to do, but some
        "chrome" URL pages rely on being able to display other chrome URL
        pages, even in different origins. For example, the New Tab Page shows
        thumbnails from the "thumbnail" host.
        This patch also removes a bunch of unused code. I've also propagated
        the "deprecated" status of deprecatedCanDisplay to
        deprecatedShouldTreatURLAsLocal because that method has no other
        callers and is really asking for uppercase/lowercase bugs. I dream of
        someday removing these functions.
        2010-11-29 Adam Barth <abarth@webkit.org (:abarth) (r)>
        Reviewed by Darin Adler.
        Introduce the notion of a "display-isolated" URL scheme for use by Chrome-internal URLs
         https://bugs.webkit.org/show_bug.cgi?id=50182
        This patch adds a Chromium API for registering schemes as
        display-isolated. In a subsequent patch, I'll change the "chrome"
        scheme in Chrome to be display isolated instead of local. That will
        prevent file URLs from linking to chrome URLs.

        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::localSchemes):

2010-11-29  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Simon Fraser.

        Provide more fine grained control to ports over when to turn on accelerated
        compositing.
        https://bugs.webkit.org/show_bug.cgi?id=49998

        As part of this change, the old hasAcceleratedCompositing method on the ChromeClient
        has now been replaced by allowedCompositingTriggers which returns a bitfield of
        all the features which can trigger the compositor.


        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::allowedCompositingTriggers):
        * WebCoreSupport/ChromeClientQt.h:

2010-11-30  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QWebFrame::load(QNetworkRequest) should respect the CustomVerbAttribute

        For CustomOperation requests, pass the CustomVerbAttribute on to
        the WebCore::ResourceRequest.

        * Api/qwebframe.cpp:
        (QWebFrame::load):

2010-11-25  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Laszlo Gombos.

        Updated Symbian DEF file for ARM target due to API changes
        via committs r72600-72603 (see bug# 46810)

        * symbian/eabi/QtWebKitu.def:

2010-11-25  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling and Simon Hausmann.

        [Qt] Calculate the -webkit-pixel-radio using the device DPI.
        http://webkit.org/b/50059

        Also, update the documentation on what a DIP is and how to override
        the device DPI in the case the system reports the wrong one (which
        unfortunately is common on X11).

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::viewportAttributesForSize):
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scaleFactor):

2010-11-24  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Andreas Kling.

        Fixed handling of QInputMethodEvents with nonzero replacementLength.

        These types of events replace text that is already in the widget, but
        WebKit did not check for replacementLength at all.

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2010-11-24  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Make WebKit2 compile with !ENABLE(INSPECTOR).
        https://bugs.webkit.org/show_bug.cgi?id=49973

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setJavaScriptProfilingEnabled):

2010-11-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72650.
        http://trac.webkit.org/changeset/72650
        https://bugs.webkit.org/show_bug.cgi?id=50010

        breaks focus in scenes focus item other than graphicswebiview
        (Requested by tronical_ on #webkit).

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::QGraphicsWebViewPrivate):
        (QGraphicsWebView::QGraphicsWebView):
        (QGraphicsWebView::itemChange):
        * Api/qgraphicswebview.h:
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:

2010-11-24  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Html autofocus not working with QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=43169

        QGraphicsScene does not propagate Qt::ActivateWindowFocusReason focus
        events when there are no active items.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::QGraphicsWebViewPrivate):
        (QGraphicsWebView::QGraphicsWebView):
        (QGraphicsWebView::eventFilter):
        (QGraphicsWebView::itemChange):
        * Api/qgraphicswebview.h:
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (FocusPage::FocusPage):
        (FocusPage::event):
        (FocusPage::gotFocus):
        (tst_QGraphicsWebView::receivesFocusInOnShow):

2010-11-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Adapt to setShouldDelegateScrolling not being a real setting anymore.
        We now similarily to setUseFixedLayout and setPaintEntireContents
        set it on the FrameView wen transitioning to a new page.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2010-11-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix compilation with !ENABLE(INSPECTOR)
        https://bugs.webkit.org/show_bug.cgi?id=49942

        Add ENABLE(INSPECTOR) to the Qt specific files following r71981.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::openInspectorFrontend):
        (WebCore::InspectorClientQt::sendMessageToFrontend):
        * WebCoreSupport/InspectorServerQt.cpp:
        (WebCore::InspectorServerRequestHandlerQt::webSocketReadyRead):

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Restore binary compatibility with the QtWebKit 2.1 branch

        Re-order the enums by adding new enum entries to the end.

        * Api/qwebsettings.h:

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Renamed requestPermissionFromUser to featurePermissionRequested
        and cancelRequestsForPermission to featurePermissionRequestCanceled.

        * Api/qwebpage.h:
        * WebCoreSupport/GeolocationPermissionClientQt.cpp:
        (WebCore::GeolocationPermissionClientQt::requestGeolocationPermissionForFrame):
        (WebCore::GeolocationPermissionClientQt::cancelGeolocationPermissionRequestForFrame):
        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::requestPermission):
        (WebCore::NotificationPresenterClientQt::cancelRequestsForPermission):

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Rename setUserPermission to setFeaturePermission

        * Api/qwebpage.cpp:
        (QWebPage::setFeaturePermission):
        * Api/qwebpage.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (JSTestPage::requestPermission):

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Rename PermissionDomain to Feature, NotificationsPermissionDomain to Notifications
        and GeolocationPermissionDomain to Geolocation.

        * Api/qwebpage.cpp:
        (QWebPage::setUserPermission):
        * Api/qwebpage.h:
        * WebCoreSupport/GeolocationPermissionClientQt.cpp:
        (WebCore::GeolocationPermissionClientQt::requestGeolocationPermissionForFrame):
        (WebCore::GeolocationPermissionClientQt::cancelGeolocationPermissionRequestForFrame):
        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::requestPermission):
        (WebCore::NotificationPresenterClientQt::cancelRequestsForPermission):
        * tests/qwebpage/tst_qwebpage.cpp:
        (JSTestPage::requestPermission):
        (tst_QWebPage::geolocationRequestJS):

2010-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Review the setUserPermission & friends API
        https://bugs.webkit.org/show_bug.cgi?id=46810

        Add a ByUser suffix to PermissionGranted/Denied. In the future
        we can add PermissionGrantedByDefault.

        * Api/qwebpage.cpp:
        (QWebPage::setUserPermission):
        * Api/qwebpage.h:
        * WebCoreSupport/GeolocationPermissionClientQt.cpp:
        (WebCore::GeolocationPermissionClientQt::setPermission):
        * tests/qwebpage/tst_qwebpage.cpp:
        (JSTestPage::requestPermission):

2010-11-22  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebElement::appendInside() doesn't work on head elements
        https://bugs.webkit.org/show_bug.cgi?id=49166

        Make QWebElement::appendInside() call 
        Element::deprecatedCreateContextualFragment(), bypassing the check for
        the HEAD tag in the HTMLElement implementation of this function.

        * Api/qwebelement.cpp:
        (QWebElement::appendInside):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::addElementToHead):

2010-11-20  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Dragging a selection should use a rendering of the selection as "cursor" for the drag
        https://bugs.webkit.org/show_bug.cgi?id=49870

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag): Pass the DragImage to QDrag::setPixmap()

2010-11-20  Sam Magnuson  <smagnuso@gmail.com>

        Reviewed by Andreas Kling.

        [Qt] crash when attempting to add a JS object
        https://bugs.webkit.org/show_bug.cgi?id=49287

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

        Test: LayoutTests/fast/frames/sandboxed-iframe-plugins.html

2010-11-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72471.
        http://trac.webkit.org/changeset/72471
        https://bugs.webkit.org/show_bug.cgi?id=49865

        broke two IME tests on Qt (Requested by kling on #webkit).

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2010-11-19  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Andreas Kling.

        Fixed handling of QInputMethodEvents with nonzero replacementLength.

        These types of events replace text that is already in the widget, but
        WebKit did not check for replacementLength at all.

        Also made sure that the preeditString is always respected, even if
        there is committed text. This is how QLineEdit does it.

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2010-11-19  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Transition and animation do not work with QWebView anymore
        https://bugs.webkit.org/show_bug.cgi?id=49797

        Accelerated compositing should not be enabled on QWebView without
        texture mapper.

        * WebCoreSupport/PageClientQt.h:
        (WebCore::PageClientQWidget::allowsAcceleratedCompositing):

2010-11-19  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Memory leak in QWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=49765

        Delete QWebInspectorPrivate in ~QWebInspector()

        * Api/qwebinspector.cpp:
        (QWebInspector::~QWebInspector):

2010-11-19  Sam Magnuson  <smagnuso@gmail.com>

        Reviewed by Andreas Kling.

        [Qt] Compile with QT_NO_UNDOCOMMAND
        https://bugs.webkit.org/show_bug.cgi?id=49752

        * WebCoreSupport/EditCommandQt.cpp:
        (EditCommandQt::EditCommandQt):
        * WebCoreSupport/EditCommandQt.h:

2010-11-19  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        https://bugs.webkit.org/show_bug.cgi?id=49200
        [Qt] bugs in Composition mode for QWebPage::inputMethodEvent & inputMethodQuery()

        Make QWebPage work as following when editor is in composition mode:
        1. anchor position and cursor position are the same and always >= 0
        2. current selection is always null

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        (QWebPage::inputMethodQuery):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2010-11-18  Gavin Barraclough  <barraclough@apple.com>

        Build fix - update error messages folllowing r72360.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-11-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Static platform plugin support
        https://bugs.webkit.org/show_bug.cgi?id=49470

        Adding support for statically linked platform plugins.

        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::QtPlatformPlugin::loadStaticallyLinkedPlugin):
        (WebCore::QtPlatformPlugin::plugin):
        * WebCoreSupport/QtPlatformPlugin.h:

2010-11-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Reuse the size of the actualVisibleContentRect when loading a new page
        or navigating session history.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2010-11-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Converge means of querying a parent node into one way, which is Node::parentNode.
        https://bugs.webkit.org/show_bug.cgi?id=49686

        * Api/qwebelement.cpp:
        (QWebElement::prependOutside): Changed to use parentNode.
        (QWebElement::appendOutside): Ditto.
        (QWebElement::encloseContentsWith): Ditto.
        (QWebElement::encloseWith): Ditto.

2010-11-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Remove synchronous QWebPage::checkPermissions signal
        https://bugs.webkit.org/show_bug.cgi?id=46810

        As decided in the API review, we remove this signal and replace its only use currently
        with cached credentials.

        * Api/qwebpage.cpp:
        (QWebPage::setUserPermission): Pass the WebCore frame instead of the QWebFrame.
        * Api/qwebpage.h:
        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::checkPermission): Replaced explicit
        signal emission with hash lookup of previously granted permission (or not).
        (WebCore::NotificationPresenterClientQt::cancelRequestsForPermission): Remove
        any previously cached/granted permission for the given script execution context.
        (WebCore::NotificationPresenterClientQt::allowNotificationForFrame): Do not
        only serve pending permission requests but before calling the JS callbacks, remember
        the permission for subsequent synchronous checkPermission() calls.
        * WebCoreSupport/NotificationPresenterClientQt.h: Add cache for permissions.

2010-11-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY build fix.

        Fix test broken by earlier patch.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-11-15  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] ZoomTextOnly doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=49568

        Check QWebSettings::ZoomTextOnly attribute before applying zoom

        * Api/qwebframe.cpp:
        (QWebFrame::textSizeMultiplier):
        (QWebFrame::setZoomFactor):
        (QWebFrame::zoomFactor):
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):

2010-11-14  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        REGRESSION(r71895): API test javaScriptWindowObjectCleared fails
        https://bugs.webkit.org/show_bug.cgi?id=49466

        As of r71895 empty inline scripts are no longer executed and so
        the javaScriptWindowObjectCleared() signal is no longer triggered
        by <script></script>.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-11-12  Jacob Dinu  <dinu.jacob@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Update .def file for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=49456

        Added missing symbols from revisions r69825, r70470, r71806

        * symbian/eabi/QtWebKitu.def:

2010-11-12  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Need to implement WebKit::pluginWillHandleLoadError for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48764

        Add the missing error.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::pluginWillHandleLoadError):

2010-11-11  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QWebScriptWorld::world() may crash
        https://bugs.webkit.org/show_bug.cgi?id=49342

        * Api/qwebscriptworld.cpp:
        (QWebScriptWorld::world):

2010-11-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Add an API for overriding the actual visible content rect in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=49373

        * Api/qwebpage.cpp:
        (QWebPage::setActualVisibleContentRect):
        * Api/qwebpage.h:

2010-11-11  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        FrameView: Don't clip to visibleContentRect in paintEntireContents mode
        https://bugs.webkit.org/show_bug.cgi?id=49375

        Use paintEntireContents in combination with tiling, allowing to
        actually set visibleContentRect to something different from
        the actual contents size.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2010-11-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r71733.
        http://trac.webkit.org/changeset/71733
        https://bugs.webkit.org/show_bug.cgi?id=49319

        made qt bot crashy and sad (Requested by kling on #webkit).

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2010-11-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Use paintEntireContents in combination with tiling, allowing to
        actually set visibleContentRect to something different from
        the actual contents size.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2010-11-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] build error in WebKit/qt/Api/qwebpage.cpp in Qt 4.7.0
        https://bugs.webkit.org/show_bug.cgi?id=47427

        Add a missing guard in order to be able to compile when
        ENABLE(TOUCH_EVENTS) is not defined.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::touchEvent):

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/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::focusedNodeChanged): Removed unneeded namespace prefix.
        (WebCore::ChromeClientQt::focusedFrameChanged):
        * WebCoreSupport/ChromeClientQt.h:

2010-11-08  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Reorganized the textureMapper to be a member of QWebFramePrivate, to help with making
        TextureMapper thread-safe.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderCompositedLayers):
        * Api/qwebframe_p.h:
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PlatformLayerProxyQt::setTextureMapper):
        (WebCore::PlatformLayerProxyQt::textureMapper):
        (WebCore::PlatformLayerProxyQWidget::PlatformLayerProxyQWidget):
        (WebCore::PlatformLayerProxyQGraphicsObject::PlatformLayerProxyQGraphicsObject):

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

        * Api/qwebpage.cpp:
        * Api/qwebsettings.cpp:

2010-11-07  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        Add a helper function to avoid duplicated code.
        https://bugs.webkit.org/show_bug.cgi?id=49085

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::suspendAnimations):
        (DumpRenderTreeSupportQt::resumeAnimations):

2010-11-03  Antonio Gomes  <tonikitoo@webkit.org>, Andre Pedralho  <andre.pedralho@gmail.com>

        Reviewed by Kenneth Rohde Christiansen and Antti Koivisto.

        [Qt] Making effective use of nodesFromRect.
        https://bugs.webkit.org/show_bug.cgi?id=44089

        Patch adds a helper class (named TouchAdjuster) to improve tap actions
        on mobile touch devices. TouchAdjuster makes use of the newly added rect
        based hit test extension through the Document::nodesFromRect method.
        Given a rectangle as input, nodesFromRect returns a z-index ordered list
        of nodes whose boundaries intersect the rectangle.

        Basically the TouchAdjuster class intercepts the QGraphicsSceneMouseEvent
        passed to both QWebPagePrivate::mouse{Press,Release}Event methods before
        they are passed down to WebCore. The goal is to infer the target click position.
        For that, a rectangle is built up using the event position as a center point and
        expanding it based on the values and directions set in the Platform Plugin
        QWebTouchModifier::hitTestPadding.

        TouchAdjuster iterates over the list of nodes returned by nodesFromRect and
        picks the clickable one that has the largest intersection area with the hit
        test rectangle. The target position is then the center point of this intersection
        area.

        In case of no clickable node intersects the hit test area, the click position
        is not altered.

        TouchAdjuster is *only* working for QGraphicsWebView based views.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::adjustPointForClicking):
        (QWebPagePrivate::TouchAdjuster::TouchAdjuster):
        (QWebPagePrivate::TouchAdjuster::findCandidatePointForTouch):
        (isClickableElement):
        (hasMouseListener):
        (isValidFrameOwner):
        (nodeToElement):
        * Api/qwebpage_p.h:

2010-10-20  Chang Shu  <chang.shu@nokia.com>, Antonio Gomes <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        [Qt] Makes <input type=text> and <textarea> functional with
        Spatial Navigation enabled. Before this patch, the focus cannot
        move away from input box once it is in. This patch allows focus
        move to neighbor nodes when the caret reaches the edge of the texts.
        This patch does not support yet cases where the focused <input>
        has a JS handler for the arrow keys.
        https://bugs.webkit.org/show_bug.cgi?id=37153

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2010-11-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by David Hyatt.

        Delegate scrolling via a separate method
        https://bugs.webkit.org/show_bug.cgi?id=48988

        Implement delegatedScrollRequested and make it emit the
        scrollRequested signal for Qt.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::delegatedScrollRequested):
        * WebCoreSupport/ChromeClientQt.h:

2010-11-04  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Clarify expected return values of innerXml(), outerXml()

        If you put HTML in (e.g. using setHTML()) you will get HTML out,
        even if you marked it up as XML.

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

        * Api/qwebelement.cpp:

2010-11-03  Andre Pedralho  <andre.pedralho@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Using the Platform Plugin to define the default values for the padding of HitTestResult.
        https://bugs.webkit.org/show_bug.cgi?id=48450

        * Api/qwebkitplatformplugin.h:
        (QWebTouchModifier::~QWebTouchModifier):
        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::QtPlatformPlugin::createTouchModifier):
        * WebCoreSupport/QtPlatformPlugin.h:
        * examples/platformplugin/WebPlugin.cpp:
        (WebPlugin::supportsExtension):
        (WebPlugin::createExtension):
        * examples/platformplugin/WebPlugin.h:
        (TouchModifier::hitTestPaddingForTouch):
        * examples/platformplugin/qwebkitplatformplugin.h:
        (QWebTouchModifier::~QWebTouchModifier):

2010-11-03  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QGWV: Keep the scrolling delegation intact when switching pages

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage): Turn on/off
        scrolling delegation depending on the resizeToContents mode.
        (QGraphicsWebViewPrivate::detachCurrentPage): Turn off scrolling delegation.
        (QGraphicsWebView::setResizesToContents):

2010-11-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Make it possible to delegate scrolling to the UI
        https://bugs.webkit.org/show_bug.cgi?id=48907

        Enable scrolling delegation when setResizesToContents is active.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::setResizesToContents):

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

        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 Qt port.

        * Api/qwebframe.cpp:
        (QWebFrame::frameName):

2010-11-02  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Some refactor for texmap to enable WebKit2: remove globals, and allow TextureMapper to exist without a GraphicsContext.
        This will allow rendering the TextureMapperNode tree without an active QPainter, into the current GL context.
        Most of the changes simply move the globas in TextureMapperGL into members of that class.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderFromTiledBackingStore):
        (QWebFramePrivate::renderCompositedLayers):
        (QWebFramePrivate::renderRelativeCoords):
        * Api/qwebframe_p.h:

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/ChromeClientQt.h:
        (WebCore::ChromeClientQt::showContextMenu):

2010-10-31  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Support nodesFromRect in DRT

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::nodesFromRect):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-10-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Short-circuit QWebPage::selectedText() if frame has no selection
        https://bugs.webkit.org/show_bug.cgi?id=48736

        Do an early return if the selection is empty.

        No new tests, this is covered by tst_QWebPage::findText().

        * Api/qwebpage.cpp:
        (QWebPage::selectedText):

2010-10-30  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] IM: Don't manipulate selection via RenderTextControl
        https://bugs.webkit.org/show_bug.cgi?id=48700

        Go directly through the Frame's SelectionController instead.

        No new tests, this is covered by tst_QWebPage::inputMethods.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        (QWebPage::inputMethodQuery):

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.

        * Api/qwebframe.cpp:
        (QWebFrame::frameName):

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

        Adding support to Qt's DRTSupport class to test the newly introduced Unix editing behavior.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setEditingBehavior):

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

        * Api/qwebframe.cpp:
        (QWebFrame::frameName):

2010-10-29  Andreas Kling  <kling@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] QWebPage's InputMethod event handling calls ShortcutOverride handler too
        https://bugs.webkit.org/show_bug.cgi?id=48692

        * Api/qwebpage.cpp:
        (QWebPage::event): Add missing break statement.

2010-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Remove RenderTextControl::setSelectionRange
        https://bugs.webkit.org/show_bug.cgi?id=47870

        Converted RenderTextControll::setSelectionRange to a global function.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent): Calls setSelectionRange.

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

        * Api/qwebhistory.cpp:
        (QWebHistory::clear):
        * Api/qwebhistory_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        Use BackForwardListImpl.

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/FrameLoaderClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidBecomeFrameset):

2010-10-29  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix tst_QWebFrame on XVFB.
        https://bugs.webkit.org/show_bug.cgi?id=48637

        These tests relied on a window manager to activate the window.

        Fixes:
        - tst_QWebFrame::popupFocus()
        - tst_QwebFrame::inputFieldFocus()

        * tests/qwebframe/tst_qwebframe.cpp:

2010-10-28  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Build fix,

        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PlatformLayerProxyQGraphicsObject::PlatformLayerProxyQGraphicsObject):
        (WebCore::PageClientQGraphicsWidget::~PageClientQGraphicsWidget):
        (WebCore::PageClientQGraphicsWidget::setRootGraphicsLayer):
        * WebCoreSupport/PageClientQt.h:

2010-10-28  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] QWebElement: Don't retrieve CSS rules through DOMWindow.
        https://bugs.webkit.org/show_bug.cgi?id=48519

        JavaScript is prevented from retrieving cross-domain CSS rules since r70335.
        This patch allow QWebElement to retrive style without this limitation
        by asking the Document directly instead of going through DOMWindow.

        Fixes:
        - tst_QWebFrame::setHtmlWithResource()
        - tst_QWebElement::style()

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):

2010-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Make Qt viewportAttributesForSize not assert on (0, 0) size
        https://bugs.webkit.org/show_bug.cgi?id=48524

        We now return an invalid (isValid() == false) ViewportAttributes
        instance when the supplied size is (0, 0).

        * Api/qwebpage.cpp:
        (QWebPage::viewportAttributesForSize):

2010-10-27  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix tst_QWebFrame::popupFocus().
        https://bugs.webkit.org/show_bug.cgi?id=48432

        - Call setFocus() before show() to work around a but in Qt.
        - Remove the check on combo at the end since hidePopup() leads
          indirectly to its destruction and segfault.

        * tests/qwebframe/tst_qwebframe.cpp:

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/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transferLoadingResourceFromPage):
        Emtpy method.
        * WebCoreSupport/FrameLoaderClientQt.h:

2010-10-26  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Skipping popup focus test for symbian
        https://bugs.webkit.org/show_bug.cgi?id=48324

        * tests/qwebframe/tst_qwebframe.cpp:

2010-10-26  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Unit tests: setHtml("data:text/html,...") -> load(QUrl("data:text/html,..."))
        https://bugs.webkit.org/show_bug.cgi?id=48319

        These tests were failing since the new HTML parser.
        This patch removes the content type from the error page as well.

        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::crashOnViewlessWebPages):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::frame):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::loadFinished):
        (ErrorPage::extension):
        (tst_QWebPage::errorPageExtension):
        (tst_QWebPage::errorPageExtensionInIFrames):
        (tst_QWebPage::errorPageExtensionInFrameset):

2010-10-25  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Glue layer (WebCoreSupport) changes to allow connecting TextureMapper to a Qt PageClient, i.e.
        a QWebView or a QGraphicsWebView. This enables the new type, TextureMapperPlatformLayer, to be recognized both by
        the compositor and by the page client.
        Note that this is temporarily an opt-in, under USE(TEXTURE_MAPPER)

        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPage::setView):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::attachRootGraphicsLayer):
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PlatformLayerProxyQt::PlatformLayerProxyQt):
        (WebCore::PlatformLayerProxyQt::~PlatformLayerProxyQt):
        (WebCore::PlatformLayerProxyQt::setSizeChanged):
        (WebCore::PlatformLayerProxyQWidget::PlatformLayerProxyQWidget):
        (WebCore::PlatformLayerProxyQWidget::eventFilter):
        (WebCore::PlatformLayerProxyQWidget::setNeedsDisplay):
        (WebCore::PlatformLayerProxyQWidget::setNeedsDisplayInRect):
        (WebCore::PlatformLayerProxyQGraphicsObject::PlatformLayerProxyQGraphicsWidget):
        (WebCore::PlatformLayerProxyQGraphicsObject::setNeedsDisplay):
        (WebCore::PlatformLayerProxyQGraphicsObject::setNeedsDisplayInRect):
        (WebCore::PageClientQWidget::setRootGraphicsLayer):
        (WebCore::PageClientQWidget::markForSync):
        (WebCore::PageClientQWidget::syncLayers):
        (WebCore::PageClientQGraphicsWidget::updateCompositingScrollPosition):
        (WebCore::PageClientQGraphicsWidget::createOrDeleteOverlay):
        (WebCore::PageClientQGraphicsWidget::setRootGraphicsLayer):
        * WebCoreSupport/PageClientQt.h:
        (WebCore::PageClientQWidget::PageClientQWidget):
        (WebCore::PageClientQWidget::allowsAcceleratedCompositing):
        (WebCore::PageClientQGraphicsWidget::PageClientQGraphicsWidget):

2010-10-25  Johnny Ding  <jnd@chromium.org>

        Reviewed by Tony Chang.

        Dump the gesture status of frame in frame load callbacks in DumpRenderTree
        by adding a new method dumpUserGestureInFrameLoadCallbacks.
        Now only dump the gesture status in "DidStartProvisionalLoad" callback.
        https://bugs.webkit.org/show_bug.cgi?id=47849

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::dumpUserGestureInFrameLoader):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (drtPrintFrameUserGestureStatus):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidPushStateWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchDidReplaceStateWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchDidPopStateWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):
        * WebCoreSupport/FrameLoaderClientQt.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

        * Api/qwebpage.cpp:
        (openNewWindow):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchCreatePage):
        * WebCoreSupport/FrameLoaderClientQt.h:
        Add NavigationAction parameter.

2010-10-22  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] InspectorClientQt crashes when deleting a qwebpage which has an inspector
        https://bugs.webkit.org/show_bug.cgi?id=48079

        * Api/qwebpage.cpp:
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPage::~QWebPage):

2010-10-22  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] All widgets are rendered incorrectly when rendered through a cache
        https://bugs.webkit.org/show_bug.cgi?id=47767

        Add a new test for rendering with tiling.

        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::widgetsRenderingThroughCache):

2010-10-21  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Sending a QInputMethodEvent::Selection event forces the
             Editor to go into Composition mode

        Improve QWebPage handling of input method events:
         - Selections don't trigger entering composition mode.
         - Handle multiple selections

        Also remove redundant cancellation of composition in tst_qwebpage.
        There is no composition in progress at that point.

        Finally, move infiniteLoopJS() to the end of the tst_qwebpage unit
        tests - so you don't have to wait for it to complete when running
        other tests.

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        (QWebPage::inputMethodQuery):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2010-10-20  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antonio Gomes.

        [Qt] Wrong null check in PopupMenuQt
        https://bugs.webkit.org/show_bug.cgi?id=47945

        Wrong null check in PopupMenuQt.

        * WebCoreSupport/PopupMenuQt.cpp:
        (WebCore::PopupMenuQt::hide):

2010-10-18  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Export QWebPage::ViewportAttributes class.
        https://bugs.webkit.org/show_bug.cgi?id=47845

        * Api/qwebpage.h:
        * symbian/eabi/QtWebKitu.def:

2010-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Simon Fraser.

        Web Inspector: [crash] when Inspector Open in CSSStyleSelector::loadPendingImages().
        https://bugs.webkit.org/show_bug.cgi?id=46224

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::sendMessageToFrontend):

2010-10-18  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] AC rendering bugs

        This fixes a regression that was introduced by making scrolling in accelerated compositing automatic,
        which made our explicit function to scroll the compositing layers superfluous, making the scrolling behavior
        when graphics layers are present incorrect. The fix simply removes those redundant functions.

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

        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQGraphicsWidget::scroll):
        (WebCore::PageClientQGraphicsWidget::update):
        (WebCore::PageClientQGraphicsWidget::setRootGraphicsLayer):
        * WebCoreSupport/PageClientQt.h:

2010-10-18  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Fix the build with MSVC.

        Splitting the condition in two to prevent qmake parentheses issues.

        * Api/DerivedSources.pro:

2010-10-18  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Antonio Gomes.

        [QT] Unable to load pages on QtTestBrowser after canceling a page load. 
        https://bugs.webkit.org/show_bug.cgi?id=43827

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2010-10-15  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] window.close() doesn't work in qt
        https://bugs.webkit.org/show_bug.cgi?id=46186

        Introduce new attribute in QWebSettings to trigger "setAllowScriptsToCloseWindow"

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2010-10-15  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Unbreak scrolling the ContentsLayer with QWebView

        r69777 broke scrolling the contents layer in QWebView by not restoring
        the painter clip after painting each part of the dirty region.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderRelativeCoords):

2010-09-27 Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Andreas Kling.

        [Qt] Added functions for obtaining and checking the supported content types.
        http://webkit.org/b/37880

        * Api/qwebpage.cpp:
        (extractContentTypeFromHash):
        (extractContentTypeFromPluginVector):
        (QWebPage::supportedContentTypes):
        (QWebPage::supportsContentType):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::supportedContentType):

2010-10-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69795.
        http://trac.webkit.org/changeset/69795
        https://bugs.webkit.org/show_bug.cgi?id=47687

        'See discussion at webkit.org/b/47609' (Requested by mwenge on
        #webkit).

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canHandleRequest):
        (WebCore::FrameLoaderClientQt::dispatchUnableToImplementPolicy):

2010-10-14  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Fix http/tests/misc/redirect-to-external-url.html

        Support the test in FrameLoaderClientQt and unskip.

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canHandleRequest):
        (WebCore::FrameLoaderClientQt::dispatchUnableToImplementPolicy):

2010-10-14  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Allow rendering of accelerated-compositing with TextureMapper, inside a QWebFrame. The frame will render the regular content,
        either normally or through tiled backingstore, then let the TextureMapper layer render itself to the active context, and
        then render the scrollbar and pan icon. This is different from the current implementation, which uses additional QGraphicsItems for AC
        and the scrollbar overlay.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::paint):
        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderFromTiledBackingStore):
        (QWebFramePrivate::renderRelativeCoords):

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

2010-10-13  Dinu Jacob  <dinu.jacob@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Update .def file for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=47540

        Updated symbols for Symbian - added viewportAttributesForSize and
        made viewportConfigurationForSize absent based on the API change in
        47325

        * symbian/eabi/QtWebKitu.def:

2010-10-12  David Leong  <david.leong@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Enable Netscape plugin metadata caching on Linux 
        https://bugs.webkit.org/show_bug.cgi?id=46287
        
        QWebSettings::enablePersistentStorage will now store the netscape
        plugin cache to QDesktopServices::CacheLocation.
        
        * Api/qwebsettings.cpp:
        (QWebSettings::enablePersistentStorage):

2010-10-12  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Editing commands should not be executed on non-editable content.
        https://bugs.webkit.org/show_bug.cgi?id=47426

        Remove calls to editor()->command() when we are not in editable content.
        There is no value in doing that, and in some cases, it prevents scrolling.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2010-10-08  Hui Huang  <hui.2.huang@nokia.com>

        Reviewed by Simon Hausmann.

        ifdef out code that rewrites Flash Plug-in wmode for Symbian build
        https://bugs.webkit.org/show_bug.cgi?id=43484

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2010-10-07  Andreas Kling  <kling@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] API: ViewportConfiguration => ViewportArguments
        https://bugs.webkit.org/show_bug.cgi?id=47325

        * Api/qwebpage.cpp:
        (QWebPage::ViewportAttributes::ViewportAttributes):
        (QWebPage::ViewportAttributes::~ViewportAttributes):
        (QWebPage::ViewportAttributes::operator=):
        (QWebPage::viewportAttributesForSize):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        (QtViewportAttributesPrivate::QtViewportAttributesPrivate):

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

        Reviewed by Kenneth Rohde Christiansen.

        Fixing viewport meta tag user-scalable handling
        https://bugs.webkit.org/show_bug.cgi?id=47330

        user-scalable attribute was not considered in viewport meta tag handling.

        * Api/qwebpage.cpp:
        (QWebPage::viewportConfigurationForSize):

2010-10-05  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Hook up accelerometer data via Qt DeviceMotion
        https://bugs.webkit.org/show_bug.cgi?id=47105

        Get accelerometer necessary data via Qt mobility library using a
        provider class. Enable, also the RotationRate using the current device
        orientation provider.

        * WebCoreSupport/DeviceMotionClientQt.cpp:
        (WebCore::DeviceMotionClientQt::DeviceMotionClientQt):
        (WebCore::DeviceMotionClientQt::~DeviceMotionClientQt):
        (WebCore::DeviceMotionClientQt::startUpdating):
        (WebCore::DeviceMotionClientQt::stopUpdating):
        (WebCore::DeviceMotionClientQt::currentDeviceMotion):
        (WebCore::DeviceMotionClientQt::changeDeviceMotion):
        * WebCoreSupport/DeviceMotionClientQt.h:
        * WebCoreSupport/DeviceMotionProviderQt.cpp: Added.
        (WebCore::DeviceMotionProviderQt::DeviceMotionProviderQt):
        (WebCore::DeviceMotionProviderQt::~DeviceMotionProviderQt):
        (WebCore::DeviceMotionProviderQt::start):
        (WebCore::DeviceMotionProviderQt::stop):
        (WebCore::DeviceMotionProviderQt::filter):
        * WebCoreSupport/DeviceMotionProviderQt.h: Added.
        (WebCore::DeviceMotionProviderQt::currentDeviceMotion):

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

        Reviewed by Kenneth Rohde Christiansen.

        Some viewport meta tag api refactoring
        https://bugs.webkit.org/show_bug.cgi?id=47334

        WebCore::findConfigurationForViewportData renamed to computeViewportAttributes.
        WebCore::ViewportAttributes::layoutViewport renamed to layoutSize.

        * Api/qwebpage.cpp:
        (QWebPage::viewportConfigurationForSize):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::viewportAsText):

2010-10-07  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Update .def file for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=47336
        Fix and re-freeze symbols for symbian - viewportConfigurationForSize
        API changed, allowGeolocationRequest removed from API, several
        DumpRenderTree support calls added.

        * symbian/eabi/QtWebKitu.def:

2010-10-06  Ragner Magalhaes  <ragner.magalhaes@openbossa.org>

        Reviewed by Antonio Gomes.

        [Qt] Duplicated code in QWebPagePrivate
        https://bugs.webkit.org/show_bug.cgi?id=47195

        Remove duplicated code from QWebPagePrivate class for QGraphicsView and QWidget's mouse events.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseTripleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragLeaveEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):
        * Api/qwebpage_p.h:

2010-10-06  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Renaming WebCore::ViewportConfiguration to WebCore::ViewportAttributes
        https://bugs.webkit.org/show_bug.cgi?id=47268

        Renaming WebCore::ViewportConfiguration to WebCore::ViewportAttributes

        * Api/qwebpage.cpp:
        (QWebPage::viewportConfigurationForSize):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::viewportAsText):

2010-10-05  Andrew Wilson  <atwilson@chromium.org>

        Reviewed by Andreas Kling.

        Notification onclick() events don't act like user gestures
        https://bugs.webkit.org/show_bug.cgi?id=47137

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::notificationClicked):
        Use UserGestureIndicator to make sure click events are treated like user gestures.

2010-10-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix url conversion in QWebHistory

        Converting from KURL to WFT::String to QUrl does not
        permit proper percent encoding later.

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

        * Api/qwebhistory.cpp:
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::url):

2010-10-05  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Andreas Kling.

        [Qt] Make build work with QT_NO_CURSOR
        https://bugs.webkit.org/show_bug.cgi?id=46097

        Add a missing semicolon.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setCursor):

2010-10-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix.

        [Symbian] Fix build issue due to gaps in ordinals in the def file

        Restore previously removed symbols and mark them absent instead. We must
        not remove symbols from this file, because it breaks binary compatibility
        (when re-assigning the ordinals of the following symbols) or it causes build
        breakage when instead having a gap in the ordinal sequence. Instead removing
        a symbol is done by marking it as absent.

        * symbian/eabi/QtWebKitu.def:

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

        Reviewed by Darin Adler.

        Rename RedirectScheduler to NavigationScheduler
        https://bugs.webkit.org/show_bug.cgi?id=47037

        Update for name change.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2010-10-04  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Hook up DeviceOrientation data for Qt support
        https://bugs.webkit.org/show_bug.cgi?id=47052

        Get DeviceOrientation necessary data via Qt mobility library
        using a provider class.

        * WebCoreSupport/DeviceOrientationClientQt.cpp:
        (WebCore::DeviceOrientationClientQt::DeviceOrientationClientQt):
        (WebCore::DeviceOrientationClientQt::~DeviceOrientationClientQt):
        (WebCore::DeviceOrientationClientQt::startUpdating):
        (WebCore::DeviceOrientationClientQt::stopUpdating):
        (WebCore::DeviceOrientationClientQt::lastOrientation):
        (WebCore::DeviceOrientationClientQt::changeDeviceOrientation):
        * WebCoreSupport/DeviceOrientationClientQt.h:
        * WebCoreSupport/DeviceOrientationProviderQt.cpp: Added.
        (WebCore::DeviceOrientationProviderQt::DeviceOrientationProviderQt):
        (WebCore::DeviceOrientationProviderQt::~DeviceOrientationProviderQt):
        (WebCore::DeviceOrientationProviderQt::start):
        (WebCore::DeviceOrientationProviderQt::stop):
        (WebCore::DeviceOrientationProviderQt::filter):
        * WebCoreSupport/DeviceOrientationProviderQt.h: Added.
        (WebCore::DeviceOrientationProviderQt::isActive):
        (WebCore::DeviceOrientationProviderQt::orientation):
        (WebCore::DeviceOrientationProviderQt::hasAlpha):

2010-09-28  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport data change notifications
        https://bugs.webkit.org/show_bug.cgi?id=46755

        Regarding viewport meta tags, what matters for browser developers is to know when the viewport data has
        changed and its current value. Viewport data belongs to the document, but it is useful to keep the current
        viewport data in Page as a reference, to be able to send notifications only when the current viewport
        has changed.

        * Api/qwebframe.cpp:
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::viewportArguments):
        (QWebPage::viewportConfigurationForSize):
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::viewportDataChanged):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::viewportAsText):

2010-10-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        [Qt] Fix platform plugin support after r68128

        Replaced the qobject_cast from the QObject derived extension to a
        static_cast. qobject_cast works by comparing pointers to meta-object
        instances, of which there are two each: one compiled into WebKit and
        one compiled into the plugin.

        The platform plugin ensures the validity of the interface contract
        through its version and the initial safe qobject_cast from QObject
        to QWebKitPlatformPlugin. After that it is safe to use static_cast,
        and with the recent changes even required.

        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::QtPlatformPlugin::createSelectInputMethod):
        (WebCore::QtPlatformPlugin::createNotificationPresenter):
        (WebCore::QtPlatformPlugin::createHapticFeedbackPlayer):

2010-10-02  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Provide Qt support for DeviceMotion/Orientation clients
        https://bugs.webkit.org/show_bug.cgi?id=47051

        Dummy implementation of DeviceMotion/Orientation client classes
        to make possible to hook up motion/orientation data
        in further implementations.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * WebCoreSupport/DeviceMotionClientQt.cpp: Added.
        (WebCore::DeviceMotionClientQt::DeviceMotionClientQt):
        (WebCore::DeviceMotionClientQt::setController):
        (WebCore::DeviceMotionClientQt::startUpdating):
        (WebCore::DeviceMotionClientQt::stopUpdating):
        (WebCore::DeviceMotionClientQt::currentDeviceMotion):
        (WebCore::DeviceMotionClientQt::deviceMotionControllerDestroyed):
        * WebCoreSupport/DeviceMotionClientQt.h: Added.
        (WebCore::DeviceMotionClientQt::~DeviceMotionClientQt):
        * WebCoreSupport/DeviceOrientationClientQt.cpp: Added.
        (WebCore::DeviceOrientationClientQt::DeviceOrientationClientQt):
        (WebCore::DeviceOrientationClientQt::setController):
        (WebCore::DeviceOrientationClientQt::startUpdating):
        (WebCore::DeviceOrientationClientQt::stopUpdating):
        (WebCore::DeviceOrientationClientQt::lastOrientation):
        (WebCore::DeviceOrientationClientQt::deviceOrientationControllerDestroyed):
        * WebCoreSupport/DeviceOrientationClientQt.h: Added.
        (WebCore::DeviceOrientationClientQt::~DeviceOrientationClientQt):

2010-09-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Support for PlainTextController

        Unskip editing/text-iterator/basic-iteration.html

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::plainText):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-09-30  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] V8 port: Unbreak build

        Add missing <wtf/text/CString.h> include.

        * WebCoreSupport/InspectorServerQt.cpp:

2010-09-30  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Crash if an scene with accelerated compositing layout during the paint event
        https://bugs.webkit.org/show_bug.cgi?id=46812

        Delay the deletion of the overlay after the current event is processed.

        Removing the overlay can sometimes be done inside the rendering code of
        the overlay itself. When the rendering code is using the reference after
        the deletion of the overlay, WebKit crashes.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::overlay):
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQGraphicsWidget::~PageClientQGraphicsWidget):
        (WebCore::PageClientQGraphicsWidget::createOrDeleteOverlay):
        * WebCoreSupport/PageClientQt.h:
        (WebCore::PageClientQGraphicsWidget::PageClientQGraphicsWidget):

2010-09-30  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix tst_QWebPage::geolocationRequestJS()
        https://bugs.webkit.org/show_bug.cgi?id=46814

        Disable the test. This test cannot pass with a
        standard build of WebKit, it is disabled until the API is finilized.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::geolocationRequestJS):

2010-09-29  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Don't keep local reference to QGraphicsItemOverlay in QGWVPrivate
        https://bugs.webkit.org/show_bug.cgi?id=46812

        Get the QGraphicsItemOverlay* via the QWebPageClient (d->page->d->client)
        instead of keeping a local pointer to it.

        This is cleanup for a follow-up patch.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::overlay):
        (QGraphicsWebView::paint):
        (QGraphicsWebView::setPage):
        (QGraphicsWebView::updateGeometry):
        (QGraphicsWebView::setGeometry):

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

2010-09-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Clean up QWebPage::ViewportConfiguration API
        https://bugs.webkit.org/show_bug.cgi?id=46730

        - Pass QSize parameter as const-reference
        - Style fixes

        * Api/qwebpage.cpp:
        (QWebPage::viewportConfigurationForSize):
        * Api/qwebpage.h:

2010-09-28  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Undefined reference errors when linking due to gperf and inlining.
        webkit.org/b/29244

        EFL CMake changes by Leandro Pereira <leandro@profusion.mobi>

        Refactor gperf code generation and usage to fix the debug build with gcc>4.4.
        Hitherto gperf generated C code, these files were included in multiple C++ files across WebCore
        to access the functionality provided. This resulted in debug build failure with newer gcc versions
        because of a behaviour change of gcc, which disables C style inlining in debug mode.
        The make-hash-tools.pl script lets gperf generate C++ code for all gperf files now, which are compiled
        in their own compilation unit.
        The functionality provided by the generated code is wrapped behind HashTools.h, so there is no need
        for multiple inclusions of generated C files to access these functions.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2010-09-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Remove support for Qt 4.5
        https://bugs.webkit.org/show_bug.cgi?id=46718

        Remove the code for versions of Qt prior to 4.6.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
        (QGraphicsWebView::QGraphicsWebView):
        (QGraphicsWebView::sceneEvent):
        (QGraphicsWebViewPrivate::detachCurrentPage):
        * Api/qwebframe.cpp:
        (QWebFrame::load):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::handleSoftwareInputPanel):
        (QWebPagePrivate::inputMethodEvent):
        (QWebPagePrivate::touchEvent):
        (QWebPage::inputMethodQuery):
        (QWebPage::view):
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebViewPrivate::detachCurrentPage):
        (QWebView::event):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQWidget::setInputMethodHints):
        (WebCore::PageClientQGraphicsWidget::setInputMethodEnabled):
        (WebCore::PageClientQGraphicsWidget::inputMethodEnabled):
        (WebCore::PageClientQGraphicsWidget::setInputMethodHints):
        * WebCoreSupport/PageClientQt.h:
        (WebCore::QGraphicsItemOverlay::page):
        * tests/qwebframe/tst_qwebframe.cpp:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods_data):
        (inputMethodHints):
        (inputMethodEnabled):
        (tst_QWebPage::inputMethods):
        (tst_QWebPage::originatingObjectInNetworkRequests):
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::reusePage):

2010-09-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Clean up QWebPage initialization

        * Api/qwebpage.cpp:
        * Api/qwebpage_p.h:

2010-09-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] tst_QWebPage::testStopScheduledPageRefresh() fails on MeeGo handset
        https://bugs.webkit.org/show_bug.cgi?id=46706

        The test require the network to succeed or fail in order to work.
        On MeeGo, the network can simply timeout the because of the netword access
        management. This patch makes the test use local URLs to avoid the
        problem.

        * tests/qwebpage/tst_qwebpage.cpp:
        (TestNetworkManager::TestNetworkManager):

2010-09-27  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antonio Gomes.

        [Qt] Remove setDeviceSize methods
        https://bugs.webkit.org/show_bug.cgi?id=46347

        Remove our setDeviceHeight() API and obtain it automatically from the
        system. Also for testing purposes, make it possible to override the
        values via two newly introduced environment variables.

        * Api/qgraphicswebview.cpp:
        * Api/qgraphicswebview.h:
        * Api/qwebpage.cpp:
        (getintenv):
        (queryDeviceSizeForScreenContainingWidget):
        (QWebPage::viewportConfigurationForSize):
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQGraphicsWidget::windowRect):
        * symbian/eabi/QtWebKitu.def:

2010-09-27  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Antonio Gomes.

        Enable local rendering of NPAPI plugins on Maemo6.

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2010-09-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] tst_QWebFrame::popupFocus() randomly fail on MeeGo handset because the focus is not set on the window
        https://bugs.webkit.org/show_bug.cgi?id=46617

        This patch avoid the race condition by waiting for the window
        to be mapped on screen before attempting any actions.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-09-24  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Keep viewport information in Document
        https://bugs.webkit.org/show_bug.cgi?id=46385

        The viewport meta data (layout viewport, scale) needs to be set again when bringing
        back a page from the page cache. As the viewport metadata is only retrieved while parsing
        the document, we need to store it in the Document class.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::viewportArguments):
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPage::viewportConfigurationForSize):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::didReceiveViewportArguments):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::viewportAsText):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):

2010-09-23  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Fix QWebHapticFeedbackPlayer exposure via QWebKitPlatformPlugin

        [Qt] QWebHapticFeedbackPlayer needs correct exposure through QWebKitPlatformPlugin
        https://bugs.webkit.org/show_bug.cgi?id=46402

        QWebHapticFeedbackPlayer is exported through
        QWebKitPlatformPlugin::createExtension(), but
        createHapticFeedbackPlayer() and the correct
        inheritage are missing.

        * Api/qwebkitplatformplugin.h:
        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::QtPlatformPlugin::createHapticFeedbackPlayer):
        * WebCoreSupport/QtPlatformPlugin.h:

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

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2010-09-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Refactor QtWebKitPlatformPlugin interface

        Make it easier to keep source-compability for the 
        QtWebKitPlatformPlugin interface, and run qmake
        on the example (but not build) for convenience.

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

        * Api/qwebkitplatformplugin.h:
        * WebCoreSupport/QtPlatformPlugin.cpp:
        * examples/platformplugin/README:
        * examples/platformplugin/WebPlugin.cpp:
        * examples/platformplugin/WebPlugin.h:
        * examples/platformplugin/qwebkitplatformplugin.h:

2010-09-22  Andras Becsi  <abecsi@webkit.org>

        Speculative build fix for the Qt Windows bots.

        * Api/DerivedSources.pro:

2010-09-22  Jamey Hicks  <jamey.hicks@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Web Inspector: Remote Web Inspector support for QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=43988

        Runs a web debug server on port specified by QtTestBrowser
        argument -remote-inspector-port. Property
        _q_webInspectorServerPort of the QWebPage instance will be set
        according to the argument. All pages with that property set will
        be remotely inspectable.

        URL for remote inspection of first QWebPage is
            http://localhost:9222/webkit/inspector/inspector.html?page=1
        where 1 is the number of the QWebPage instance.

        The base URL yields an index page with links to the individual inspectors:
            http://localhost:9222/

        * Api/qwebinspector.cpp:
        (QWebInspectorPrivate::attachAndReplaceRemoteFrontend):
        (QWebInspectorPrivate::detachRemoteFrontend):
        * Api/qwebinspector_p.h:
        (QWebInspectorPrivate::QWebInspectorPrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::dynamicPropertyChangeEvent):
        (QWebPagePrivate::inspectorServerPort):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::InspectorClientQt):
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::openInspectorFrontend):
        (WebCore::InspectorClientQt::attachAndReplaceRemoteFrontend):
        (WebCore::InspectorClientQt::detachRemoteFrontend):
        (WebCore::InspectorClientQt::sendMessageToFrontend):
        * WebCoreSupport/InspectorClientQt.h:
        * WebCoreSupport/InspectorServerQt.cpp: Added.
        (WebCore::generateWebSocketChallengeResponse):
        (WebCore::parseWebSocketChallengeNumber):
        (WebCore::InspectorServerQt::server):
        (WebCore::InspectorServerQt::InspectorServerQt):
        (WebCore::InspectorServerQt::~InspectorServerQt):
        (WebCore::InspectorServerQt::listen):
        (WebCore::InspectorServerQt::close):
        (WebCore::InspectorServerQt::inspectorClientForPage):
        (WebCore::InspectorServerQt::registerClient):
        (WebCore::InspectorServerQt::unregisterClient):
        (WebCore::InspectorServerQt::newConnection):
        (WebCore::InspectorServerRequestHandlerQt::InspectorServerRequestHandlerQt):
        (WebCore::InspectorServerRequestHandlerQt::~InspectorServerRequestHandlerQt):
        (WebCore::InspectorServerRequestHandlerQt::tcpReadyRead):
        (WebCore::InspectorServerRequestHandlerQt::tcpConnectionDisconnected):
        (WebCore::InspectorServerRequestHandlerQt::webSocketSend):
        (WebCore::InspectorServerRequestHandlerQt::webSocketReadyRead):
        (WebCore::RemoteFrontendChannel::RemoteFrontendChannel):
        (WebCore::RemoteFrontendChannel::sendMessageToFrontend):
        * WebCoreSupport/InspectorServerQt.h: Added.

2010-09-22  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] PluginStrategy implementation is broken
        https://bugs.webkit.org/show_bug.cgi?id=46078

        Remove the QWebPage* member from WebPlatformStrategies.
        Get the originator QWebPage of the getPluginInfo call via
        the Page* argument.
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * WebCoreSupport/WebPlatformStrategies.cpp:
        (WebPlatformStrategies::initialize): 
        (WebPlatformStrategies::WebPlatformStrategies):
        (WebPlatformStrategies::getPluginInfo):
        Use the ChromeClient for accessing the originator QWebPage.
        * WebCoreSupport/WebPlatformStrategies.h:

2010-09-22  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Andreas Kling.

        [Qt] Buildfix for WinCE

        * Api/DerivedSources.pro:

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

        * WebCoreSupport/WebPlatformStrategies.cpp:
        * WebCoreSupport/WebPlatformStrategies.h:
        (WebPlatformStrategies::contextMenuItemTagOpenVideoInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagOpenAudioInNewWindow):
        (WebPlatformStrategies::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebPlatformStrategies::contextMenuItemTagToggleMediaControls)
        (WebPlatformStrategies::contextMenuItemTagToggleMediaLoop)
        (WebPlatformStrategies::contextMenuItemTagEnterVideoFullscreen)
        (WebPlatformStrategies::contextMenuItemTagMediaPlay)
        (WebPlatformStrategies::contextMenuItemTagMediaPause)
        (WebPlatformStrategies::contextMenuItemTagMediaMute)

2010-09-20  Jacob Dinu  <dinu.jacob@nokia.com>

        Reviewed by Adam Barth.

        Added a new qwebpage test for loading a cached page
        https://bugs.webkit.org/show_bug.cgi?id=41155

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::loadCachedPage):

2010-09-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix forward includes generation for MSVC when sh is in PATH.

        MSVC's nmake isn't affected by having sh in PATH.

        * Api/DerivedSources.pro:

2010-09-18  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Enable Platform Strategies on Qt

        [Qt] Turn on PLATFORM_STRATEGIES
        https://bugs.webkit.org/show_bug.cgi?id=45831

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate): Initialize the PlatformStrategy
        singleton.
        * WebCoreSupport/WebPlatformStrategies.cpp: Added, code was moved
        from platform/qt/Localizations.cpp and plugins/qt/PluginDataQt.cpp
        (WebPlatformStrategies::initialize): create the singleton,
        following the same "pattern" used by Mac and Win ports.
        (WebPlatformStrategies::WebPlatformStrategies):
        (WebPlatformStrategies::createPluginStrategy):
        (WebPlatformStrategies::createLocalizationStrategy):
        (WebPlatformStrategies::createVisitedLinkStrategy):
        (WebPlatformStrategies::refreshPlugins):
        (WebPlatformStrategies::getPluginInfo):
        (WebPlatformStrategies::inputElementAltText):
        (WebPlatformStrategies::resetButtonDefaultLabel):
        (WebPlatformStrategies::searchableIndexIntroduction):
        (WebPlatformStrategies::submitButtonDefaultLabel):
        (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::contextMenuItemTagShowSpellingPanel):
        (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::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::AXMenuListActionVerb):
        (WebPlatformStrategies::AXMenuListPopupActionVerb):
        (WebPlatformStrategies::AXLinkActionVerb):
        (WebPlatformStrategies::missingPluginText):
        (WebPlatformStrategies::crashedPluginText):
        (WebPlatformStrategies::multipleFileUploadText):
        (WebPlatformStrategies::unknownFileSizeText):
        (WebPlatformStrategies::imageTitle):
        (WebPlatformStrategies::mediaElementLoadingStateText):
        (WebPlatformStrategies::mediaElementLiveBroadcastStateText):
        (WebPlatformStrategies::localizedMediaControlElementString):
        (WebPlatformStrategies::localizedMediaControlElementHelpText):
        (WebPlatformStrategies::localizedMediaTimeDescription):
        (WebPlatformStrategies::validationMessageValueMissingText):
        (WebPlatformStrategies::validationMessageTypeMismatchText):
        (WebPlatformStrategies::validationMessagePatternMismatchText):
        (WebPlatformStrategies::validationMessageTooLongText):
        (WebPlatformStrategies::validationMessageRangeUnderflowText):
        (WebPlatformStrategies::validationMessageRangeOverflowText):
        (WebPlatformStrategies::validationMessageStepMismatchText):
        (WebPlatformStrategies::isLinkVisited):
        (WebPlatformStrategies::addVisitedLink):
        * WebCoreSupport/WebPlatformStrategies.h: Added, based on Mac and Win
        versions.

2010-09-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] V8 port: Add FrameLoaderClientQt::allowScriptExtension()
        https://bugs.webkit.org/show_bug.cgi?id=46034

        r67749 added FrameLoaderClient::allowScriptExtension() (V8-specific)
        Add a stub implementation that simply returns false for now.

        * WebCoreSupport/FrameLoaderClientQt.h:
        (WebCore::FrameLoaderClientQt::allowScriptExtension):

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

        * Api/qwebframe.cpp:
        (QWebFrame::setTextSizeMultiplier):
        (QWebFrame::textSizeMultiplier):
        (QWebFrame::setZoomFactor):
        (QWebFrame::zoomFactor):
        Call functions on Frame instead of FrameView.

2010-09-16  Darin Adler  <darin@apple.com>

        Fix build.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState): Updated for change
        in name of isUrlField to isURLField.

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::elementDoesAutoCompleteForElementWithId):
        Use isPasswordField.

2010-09-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Support globalhistory tests
        https://bugs.webkit.org/show_bug.cgi?id=45774

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::populateVisitedLinks):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::dumpHistoryCallbacks):
        (DumpRenderTreeSupportQt::dumpVisitedLinksCallbacks):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setTitle):
        (WebCore::FrameLoaderClientQt::updateGlobalHistory):
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryRedirectLinks):
        * WebCoreSupport/FrameLoaderClientQt.h:

2010-09-16  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove FrameLoaderClientQt::webFrame() to use NetworkingContext to get the WebFrame to avoid layering violations
        https://bugs.webkit.org/show_bug.cgi?id=42293

        * Api/qwebframe.cpp:
        (QWebFrame::childFrames):
        (QWebFramePrivate::kit):
        * Api/qwebpage.cpp:
        (QWebPage::currentFrame):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::contentsSizeChanged):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::chooseFile):
        * WebCoreSupport/FrameLoaderClientQt.h:

2010-09-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Update the Symbian def files

        Re-freeze with the viewport meta tag updates.

        * symbian/eabi/QtWebKitu.def:

2010-09-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] V8 port: Get inspector up and running
        https://bugs.webkit.org/show_bug.cgi?id=45771

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::ensureDebuggerScriptLoaded): Added, loads DebuggerScript.js into ScriptDebugServer.
        (WebCore::InspectorClientQt::openInspectorFrontend): Ensure that DebuggerScript.js is loaded
        before opening an inspector.

2010-09-14  Enrico Ros  <eros@codeaurora.org>

        Reviewed by Andreas Kling.

        [Qt] Respect title attribute on option elements
        https://bugs.webkit.org/show_bug.cgi?id=45084

        Set the tooltip in the combo box model, so it's reflected in the view.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::populate):

2010-09-13  Daniel Bates  <dbates@rim.com>

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

        Fix the Qt build. I missed this when reviewing the patch
        for Bug #45732.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::suspendActiveDOMObjects): Change enum value ActiveDOMObject::JavaScriptPaused to
        ActiveDOMObject::JavaScriptDebuggerPaused

2010-09-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Daniel Bates.

        [Qt] DumpRenderTreeSupportQt::suspendActiveDOMObjects needs a new parameter
        https://bugs.webkit.org/show_bug.cgi?id=45732

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::suspendActiveDOMObjects): Pass ActiveDOMObject::JavaScriptPaused
        to suspendActiveDOMObjects.

2010-09-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Paste should be implemented in WebCore like Copy and Cut for Mac also.
        https://bugs.webkit.org/show_bug.cgi?id=45494
        <rdar://problem/7660537>

        On the Mac platform, the implementation of the paste operation is all done
        at the WebKit level. In order to support it on WebKit2 it is necessary to
        refactor the code and move this functionality at the level of WebCore like
        we already have on Windows.
        The original code relies on some in AppKit functions that call back into
        WebKit causing problems in WebKit2. All this functionality has been moved
        at the level of the editor client where it can be dealt with appropriately.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMETypeAsHTML): Added stub.
        * WebCoreSupport/FrameLoaderClientQt.h:

2010-08-27  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        Add a Qt API for the viewport meta tag support based on the
        following draft spec:

        http://people.opera.com/rune/TR/ED-css-viewport-20100806/

        Add common handling of viewport meta tag based on new Opera spec
        https://bugs.webkit.org/show_bug.cgi?id=44201

        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPage::ViewportConfiguration::ViewportConfiguration):
        (QWebPage::ViewportConfiguration::~ViewportConfiguration):
        (QWebPage::ViewportConfiguration::operator=):
        (QWebPage::viewportConfigurationForSize):
        (QWebPage::setPreferredContentsSize):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        (QtViewportConfigurationPrivate::QtViewportConfigurationPrivate):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::didReceiveViewportArguments):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::viewportAsText):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):

2010-09-12  Martin Smith  <martin.smith@nokia.com>

        Reviewed by Simon Hausmann.

        doc: Changed the title so lists of contents sort better.

        * docs/qtwebkit.qdoc:

2010-09-12  David Boddie  <david.boddie@nokia.com>

        Reviewed by Simon Hausmann.

        Doc: More work on the QML documentation.

        * declarative/qdeclarativewebview.cpp:

2010-09-12  Martin Jones  <martin.jones@nokia.com>

        Reviewed by Simon Hausmann.

        [Qml] Ensure WebView gets focus when an editable node is clicked on.

        Task-number: QTBUG-13342

        * declarative/qdeclarativewebview.cpp:
        (GraphicsWebView::mousePressEvent):

2010-09-12  David Boddie  <david.boddie@nokia.com>

        Reviewed by Simon Hausmann.

        Doc: qdoc fixes.

        * declarative/qdeclarativewebview.cpp:

2010-09-12  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] let WebKit inject itself into the qt configuration

        Task-number: QTBUG-12379

        * qt_webkit_version.pri: Use the faster + instead of *
        operator to add webkit to the config.

2010-09-12  Martin Smith  <martin.smith@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix group of declarative web view in QML docs.

        * declarative/qdeclarativewebview.cpp:

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Partial implementation of Qt bridge using V8 and QtScript.

        * Api/qwebelement.cpp:
        (QWebElement::evaluateJavaScript): Stub it out for now,
        to compile, until we have a conversion path between v8::Object
        and QScriptValue.
        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject): Implemented using
        few lines of QtScript code.
        (QWebFrame::evaluateJavaScript): Ditto.

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        Fix the build with V8.

        This is a temporary kludge until the scriptworld stuff is properly
        ported, as part of the upcoming DRT work.

        * Api/qwebscriptworld.cpp:
        (QWebScriptWorld::QWebScriptWorld):

2010-09-11  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] V8 port for Qt platform: Qt WebCoreSupport changes
        https://bugs.webkit.org/show_bug.cgi?id=45149

        Original patch by Vlad Burlik <volodimir.burlik@nokia.com>

        Implemented the V8 specifics needed in DumpRenderTreeSupportQt and
        FrameLoaderClientQt.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::javaScriptObjectsCount):
        (DumpRenderTreeSupportQt::garbageCollectorCollect):
        (DumpRenderTreeSupportQt::garbageCollectorCollectOnAlternateThread):
        (DumpRenderTreeSupportQt::evaluateScriptInIsolatedWorld):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::didCreateScriptContextForFrame):
        (WebCore::FrameLoaderClientQt::didDestroyScriptContextForFrame):
        (WebCore::FrameLoaderClientQt::didCreateIsolatedScriptContext):
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        * WebCoreSupport/FrameLoaderClientQt.h:

2010-09-11  Vlad Burlik  <volodimir.burlik@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] V8 port for QT platform: QT API implementation changes
        https://bugs.webkit.org/show_bug.cgi?id=45148

        V8 Implementation of QWebFrame::addToJavaScriptWindowObject()
        and QWebFrame::evaluateJavaScript()

        * Api/qwebelement.cpp:
        (setupScriptContext): JSC and V8 variations
        (QWebElement::evaluateJavaScript):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp: QObject injection to V8 world
        (QWebFrame::addToJavaScriptWindowObject):
        (QWebFrame::evaluateJavaScript):
        * Api/qwebpage.cpp: Use ScriptController type definitions instead of direct references to JSC or V8
        (QWebPagePrivate::QWebPagePrivate):

2010-09-10  yi shen  <yi.4.shen@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] selected text gets deleted when qgraphicswebview losts focus
        https://bugs.webkit.org/show_bug.cgi?id=45539

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

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

        Fix Qt build.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

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

        * Api/qwebframe.cpp:
        (QWebFrame::setTextSizeMultiplier):
        (QWebFrame::textSizeMultiplier):
        (QWebFrame::setZoomFactor):
        (QWebFrame::zoomFactor):
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        Move tracking of text only zoom here from WebCore.

2010-09-10  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Support click event for notifications
        https://bugs.webkit.org/show_bug.cgi?id=44836

        Propagate click events to JavaScript from either the
        platform plugn or from QSystemTrayIcon.
        Also added the method NotificationWrapper::openerPageUrl so that
        if the platform plugin can reopen the page that created the
        notification directly, when the user clicks the notification.

        Added DumpRenderTreeSupportQt::simulateDesktopNotificationClick
        for testing purpose.

        * Api/qwebkitplatformplugin.h:
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::simulateDesktopNotificationClick):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationWrapper::openerPageUrl):
        (WebCore::NotificationWrapper::notificationClicked):
        (WebCore::NotificationPresenterClientQt::displayNotification):
        (WebCore::NotificationPresenterClientQt::notificationClicked):
        * WebCoreSupport/NotificationPresenterClientQt.h:
        * examples/platformplugin/WebNotificationPresenter.cpp:
        (WebNotificationWidget::event):
        * examples/platformplugin/WebNotificationPresenter.h:
        (WebNotificationPresenter::WebNotificationPresenter):
        * examples/platformplugin/qwebkitplatformplugin.h:

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

        Attempt to fix the failign Qt tests.  This patch adapts code from
        Chromium.  The long-term fix is to remove the need for this code, but
        that's a bit too complicated for a buildfix patch.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::makeRepresentation):
        (WebCore::FrameLoaderClientQt::revertToProvisionalState):
        (WebCore::FrameLoaderClientQt::finishedLoading):
        * WebCoreSupport/FrameLoaderClientQt.h:

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

        Reviewed by Darin Fisher.

        Move code from WebKit-layer to DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=45569

        This code didn't know that setEncoding can be called multiple times.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        * WebCoreSupport/FrameLoaderClientQt.h:

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/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::committedLoad):

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

        * Api/qwebpage.cpp:
        (QWebPage::selectedText):
        (QWebPage::setContentEditable):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::firstRectForCharacterRange):
        Changed call sites to use editor().

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

        Reviewed by David Hyatt.

        Add smooth scrolling framework, and a Windows implementation.
        https://bugs.webkit.org/show_bug.cgi?id=32356

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarValue):

2010-09-06  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Update NetworkAccessManager in Qt FrameNetworkingContext
        https://bugs.webkit.org/show_bug.cgi?id=45231

        Make possible to get the current QNAM when NetwokingContext request it.

        * WebCoreSupport/FrameNetworkingContextQt.cpp:
        (WebCore::FrameNetworkingContextQt::networkAccessManager):

2010-09-06  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Antonio Gomes.

        Web Inspector: Tests crash on Qt bots revealed by r66720
        https://bugs.webkit.org/show_bug.cgi?id=45256

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::InspectorClientQt): m_frontendClient must be initialized by constructor

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

        Unreviewed. Attempt to fix random test crashes after r66720.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorFrontendClientQt::~InspectorFrontendClientQt):
        * WebCoreSupport/InspectorClientQt.h:

2010-09-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66801.
        http://trac.webkit.org/changeset/66801
        https://bugs.webkit.org/show_bug.cgi?id=45242

        'breaks editing/pasteboard/onpaste-text-html.html' (Requested
        by mwenge4 on #webkit).

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addMessageToConsole):

2010-09-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] utf8 encoding of console() messages

        http/tests/security/xssAuditor/embed-tag-null-char.html
        http/tests/security/xssAuditor/object-embed-tag-null-char.html

        both fail because ChromeClientQt::addMessageToConsole() is
        casting String to QString rather than String::utf8().data()

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

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addMessageToConsole):

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 Qt's specific implementation of NetworkingContext.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::createNetworkingContext):
        * WebCoreSupport/FrameLoaderClientQt.h:
        * WebCoreSupport/FrameNetworkingContextQt.cpp:
        (WebCore::FrameNetworkingContextQt::FrameNetworkingContextQt):
        (WebCore::FrameNetworkingContextQt::create):
        (WebCore::FrameNetworkingContextQt::originatingObject):
        (WebCore::FrameNetworkingContextQt::networkAccessManager):

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

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::openInspectorFrontend):
        (WebCore::InspectorClientQt::releaseFrontendPage):
        (WebCore::InspectorFrontendClientQt::closeWindow):
        (WebCore::InspectorFrontendClientQt::disconnectFromBackend):
        (WebCore::InspectorFrontendClientQt::destroyInspectorView):
        (WebCore::InspectorFrontendClientQt::inspectorClientDestroyed):
        * WebCoreSupport/InspectorClientQt.h:

2010-09-02  Andreas Kling  <andreas.kling@nokia.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] REGRESSION(r62898): tst_QWebFrame crashing
        https://bugs.webkit.org/show_bug.cgi?id=43039

        Rolling out the offending change <http://trac.webkit.org/changeset/62898>

        * tests/qwebframe/tst_qwebframe.cpp:
        (tst_QWebFrame::evalJSV):

2010-09-01  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] QWebPage::allowGeolocationRequest should be async API
        https://bugs.webkit.org/show_bug.cgi?id=41364

        Provides a new async API for geolocation permission. Using
        Notification API approach from qtwebkit. GeolocationPermissionClientQt 
        maintains list of pending requests from WebCore and intimates them
        when client either allowes/denies the request. Also implements
        ChromeClientQt::cancelGeolocationPermissionRequestForFrame.  

        * Api/qwebpage.cpp:
        (QWebPage::setUserPermission):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::requestGeolocationPermissionForFrame):
        (WebCore::ChromeClientQt::cancelGeolocationPermissionRequestForFrame):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/GeolocationPermissionClientQt.cpp: Added.
        (WebCore::GeolocationPermissionClientQt::geolocationPermissionClient):
        (WebCore::GeolocationPermissionClientQt::GeolocationPermissionClientQt):
        (WebCore::GeolocationPermissionClientQt::~GeolocationPermissionClientQt):
        (WebCore::GeolocationPermissionClientQt::requestGeolocationPermissionForFrame):
        (WebCore::GeolocationPermissionClientQt::cancelGeolocationPermissionRequestForFrame):
        (WebCore::GeolocationPermissionClientQt::setPermission):
        * WebCoreSupport/GeolocationPermissionClientQt.h: Added.
        * tests/qwebpage/tst_qwebpage.cpp:
        (JSTestPage::requestPermission):
        (tst_QWebPage::geolocationRequestJS):

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.

        * Api/qwebelement.cpp:
        (QWebElement::render):
        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderRelativeCoords):

2010-08-31  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] tst_QWebPage::originatingObjectInNetworkRequests() fails on trunk
        https://bugs.webkit.org/show_bug.cgi?id=45001

        Fix the test, we should not use data encoded URL since we are not
        setting an URL but setting the substituteData directly.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::originatingObjectInNetworkRequests):

2010-08-31  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        JSC TimeoutChecker::didTimeOut overflows on ARM
        https://bugs.webkit.org/show_bug.cgi?id=38538

        Re-enabled the test that was skipped for Maemo 5.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::infiniteLoopJS):

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/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::openInspectorFrontend):
        (WebCore::InspectorClientQt::releaseFrontendPage):
        (WebCore::InspectorFrontendClientQt::closeWindow):
        * WebCoreSupport/InspectorClientQt.h:

2010-08-28  Daniel Bates  <dbates@rim.com>

        Attempt to fix the Qt Windows and Qt Linux Release minimal builds
        after changeset 66297 <http://trac.webkit.org/changeset/66297>.

        * Api/qwebplugindatabase.cpp:
        (QWebPluginDatabase::plugins): Wrap the call to PluginPackage::ensurePluginLoaded
        in #if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE).

2010-08-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] tst_QWebView::focusInputTypes() fails on MeeGo Handset with WebKit 2.1
        https://bugs.webkit.org/show_bug.cgi?id=44761

        Make the test more robust to changes in the execution environment. The click
        are now correctly simulated, and the position are determined from the content.

        The test also create the view and page on the stack to avoid the leak when the
        test is failing.

        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::focusInputTypes):

2010-08-27  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Cache plugin info to a persistent database

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

        Implement a cache of NPAPI plugin metadata. Write the metadata to aa
        file that gets rewritten if any plugin is added / removed.  Compilation
        of the feature is controlled by #if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE)

        Currently only enabled for Qt UNIX flavors.

        * Api/qwebplugindatabase.cpp:
        (QWebPluginDatabase::plugins):  Match previous behavior: ensure all returned plugins are loaded.
        * Api/qwebsettings.cpp:
        (QWebSettings::enablePersistentStorage): Set plugin cache path.

2010-08-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] tst_QWebFrame::inputFieldFocus() fails on MeeGo Handset with QtWebKit 2.1
        https://bugs.webkit.org/show_bug.cgi?id=44703

        Make the test more robust to changes in the execution environment.
        The position where the mouse events are sent is now computed from the element geometry,
        this make the test less dependent on the fonts.

        The test now also make sure the window manager mapped the window on screen
        before attempting to send the events.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-08-27  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] tst_QWebFrame::hitTestContent() fails on Meego Handset
        https://bugs.webkit.org/show_bug.cgi?id=44701

        Make the test more robust. The position of the text is not relying
        on the size of the fonts anymore.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-08-26  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add support for automatically creating new windows in QWebView
        https://bugs.webkit.org/show_bug.cgi?id=29847

        Improved the documentation of createWindow methods of both QWebView and
        QWebPage by mentioning that for any of them be called, QWebSettings'
        JavaScriptCanOpenWindows attribute must be set to true.

        * Api/qwebpage.cpp:
        * Api/qwebview.cpp:

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/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::openInspectorFrontend):
        (WebCore::InspectorClientQt::releaseFrontendPage):
        (WebCore::InspectorFrontendClientQt::closeWindow):
        (WebCore::InspectorFrontendClientQt::disconnectFromBackend):
        (WebCore::InspectorFrontendClientQt::destroyInspectorView):
        (WebCore::InspectorFrontendClientQt::inspectorClientDestroyed):
        * WebCoreSupport/InspectorClientQt.h:

2010-08-26  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Antonio Gomes.

        [Qt] Remove dead code.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::statusbarVisible):

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

        Unreviewed. Revert r66103 since Qt tests are failing.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorFrontendClientQt::closeWindow):
        * WebCoreSupport/InspectorClientQt.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/InspectorClientQt.cpp:
        (WebCore::InspectorFrontendClientQt::closeWindow):
        (WebCore::InspectorFrontendClientQt::disconnectFromBackend):
        (WebCore::InspectorFrontendClientQt::destroyInspectorView):
        * WebCoreSupport/InspectorClientQt.h:

2010-08-26  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] tst_QWebFrame::popupFocus() hardcode the element position
        https://bugs.webkit.org/show_bug.cgi?id=44674

        This patch dynamically find the position of the combo element instead
        of hardcoding a position to click.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-08-25  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by Simon Hausmann.

        In FrameLoaderClientQt::createFrame we should call loadURLIntoChildFrame
        with parent frame's loader instead of child frame's loader.
        https://bugs.webkit.org/show_bug.cgi?id=43930

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2010-08-25  Gabor Loki  <loki@webkit.org>

        Reviewed by Gavin Barraclough.

        Avoid increasing required alignment of target type warning
        https://bugs.webkit.org/show_bug.cgi?id=43963

        Fix alignment warnings on Qt.

        * Api/qwebelement.cpp:
        (QWebElement::evaluateJavaScript):
        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2010-08-24  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Fix predeclared variables for Symbian to be able to build QtWebKit for Symbian on Linux.

        * Api/DerivedSources.pro:

2010-08-20  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Ariya Hidayat.

        [Qt] Allow wmode=transparent in QWebView on Maemo5 after r65775.
        
        https://bugs.webkit.org/show_bug.cgi?id=44043

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2010-08-22  Marc Mutz  <marc.mutz@kdab.com>

        Reviewed by Antonio Gomes.

        [Qt] Actually emit the QWebView::selectionChanged() signal

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

        * Api/qwebview.cpp:
        (QWebView::setPage): Connect QWebPage::selectionChanged() to QWebView::selectionChanged()

2010-08-20  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Ariya Hidayat.

        [Qt] constify core() and kit() parameters
        https://bugs.webkit.org/show_bug.cgi?id=44347

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * Api/qwebframe_p.h:
        * Api/qwebhistory.cpp:
        (QWebHistoryItemPrivate::core):
        * Api/qwebhistory_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::core):
        * Api/qwebpage_p.h:

2010-08-19  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        [Qt] Fix cursor change propagation
        https://bugs.webkit.org/show_bug.cgi?id=44250

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setCursor): Implemented. Propagete the callback forward to the PageClient.

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX #3: <http://webkit.org/b/44285> Fix compilation with NETSCAPE_PLUGIN_API disabled

        Still trying to make Qt Linux Release minimal buildbot happy.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin): Wrap code that
        handles Netscape plugins in #if ENABLE(NETSCAPE_PLUGIN_API)
        and #endif.

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: FrameLoaderClientQt.h should include ResourceError.h

        * WebCoreSupport/FrameLoaderClientQt.h: Include ResourceError.h.

2010-08-19  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Kenneth Christiansen.

        [Qt] Inject wmode=opaque for both QWebView and QGraphicsWebView on Maemo5
        as Flash XEmbed support is flaky.

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2010-08-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, trivial Symbian build fix.

        [Qt] Remove unnecessary QtGui include from NotificationPresenterClientQt.cpp

        * WebCoreSupport/NotificationPresenterClientQt.cpp:

2010-08-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] [Symbian] Consistently use Q_OS_SYMBIAN to guard all Symbian platform dependencies
        https://bugs.webkit.org/show_bug.cgi?id=44124

        Q_WS_S60 is not defined for Symbian^4 devices as Q_WS_S60 used to guard
        Avkon UI framework dependencies. Use Q_OS_SYMBIAN everywhere to mark
        Symbian dependencies.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::populate):

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

2010-08-17  Hui Huang  <hui.2.huang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix ARM5 compiling error in FrameLoaderClientQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43927

        In the Symbian build chain QT_USE_FAST_OPERATOR_PLUS is defined,
        which means that the '+' will automatically be performed as the
        QStringBuilder '%'. Create a QString explicitly to make sure that
        toLocal8bit() member is available that the qPrintable Macro uses.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2010-08-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Christiansen.

        [Qt] Implement ChromeClient's windowToScreen() and screenToWindow()

        * WebCoreSupport/ChromeClientQt.cpp:

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

        Propagate name change to Qt.

        * Api/qwebelement.cpp:
        (QWebElement::appendInside):
        (QWebElement::prependInside):
        (QWebElement::prependOutside):
        (QWebElement::appendOutside):
        (QWebElement::encloseContentsWith):
        (QWebElement::encloseWith):

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

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

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

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

        Reviewed by Adam Barth.

        Some settings are linked to the PageGroup not the Page.  Create a new class for those.
        https://bugs.webkit.org/show_bug.cgi?id=43794

        Change WebSettings to use the new GroupSettings class rather than Settings for the
        settings that moved.  This is sub-optimal since the settings aren't really
        per-view, but I don't see how we can change the API at this point.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2010-08-11  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Update the Symbian def files

        Re-freeze with various QGraphicsWebView and DRT updates.
        The uppper part of the diff is just whitespace, so 
        diff -w will show the real diff.

        * symbian/eabi/QtWebKitu.def:

2010-08-10  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Don't connect to microFocusChanged() if _q_updateMicroFocus is a noop.
        https://bugs.webkit.org/show_bug.cgi?id=40580

        _q_updateMicroFocus() is a noop unless this ifdef evaluates to true:
        #if !defined(QT_NO_IM) && (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN))

        In such cases there's no need to carry the overhead of the extra
        signal/slot connection.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::_q_updateMicroFocus):
        (QGraphicsWebView::setPage):

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
        
        Qt specific API. Missing symbian symbol defines in:
        
            WebKit/qt/symbian/bwins/QtWebKitu.def
            WebKit/qt/symbian/eabi/QtWebKitu.def

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::suspendAnimations):
        (DumpRenderTreeSupportQt::resumeAnimations):
        * WebCoreSupport/DumpRenderTreeSupportQt.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::).

        * WebCoreSupport/FrameLoaderClientQt.h:
        * WebCoreSupport/InspectorClientQt.h:

2010-08-08  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Antonio Gomes.

        Inconsistent Qt version checks
        https://bugs.webkit.org/show_bug.cgi?id=43695

        Use QT_VERSION_CHECK macro instead of encoded hex.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::QGraphicsWebView):
        (QGraphicsWebViewPrivate::detachCurrentPage):
        * Api/qwebframe.cpp:
        (QWebFrame::load):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::inputMethodEvent):
        (QWebPage::inputMethodQuery):
        (QWebPage::view):
        * Api/qwebview.cpp:
        (QWebViewPrivate::detachCurrentPage):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * WebCoreSupport/PageClientQt.cpp:
        * WebCoreSupport/PageClientQt.h:

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

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

        * WebCoreSupport/FrameLoaderClientQt.h:
        * WebCoreSupport/InspectorClientQt.h:

2010-08-06  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Move Qt's popup menu implementation from WebCore to WebKit layer
        https://bugs.webkit.org/show_bug.cgi?id=43427

        After PopupMenu changes in bug 42592 class QtAbstractWebPopup became unecessary and
        there is no need to keep any Qt specific code for popup menus in WebCore/platform/qt.

        PopupMenuQt has been moved from WebCore/platform/qt to WebKit/qt/WebCoreSupport and
        assumed the responsibilities of QtAbstractWebPopup. SearchPopupMenuQt has been moved
        to WebKit/qt/WebCoreSupport as well.

        All classes that previously inherited from QtAbstractWebPopup now inherit from
        QWebSelectMethod and QtPlatformPlugin's method createSelectInputMethod now returns an
        instance of class QWebSelectMethod instead of QtAbstractWebPopup.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createSelectPopup):
        (WebCore::ChromeClientQt::createPopupMenu):
        (WebCore::ChromeClientQt::createSearchPopupMenu):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/PopupMenuQt.cpp: Added.
        (SelectData::SelectData):
        (SelectData::itemText):
        (SelectData::itemToolTip):
        (SelectData::itemIsEnabled):
        (SelectData::itemCount):
        (SelectData::itemIsSelected):
        (SelectData::multiple):
        (SelectData::itemType):
        (WebCore::PopupMenuQt::PopupMenuQt):
        (WebCore::PopupMenuQt::~PopupMenuQt):
        (WebCore::PopupMenuQt::disconnectClient):
        (WebCore::PopupMenuQt::show):
        (WebCore::PopupMenuQt::didHide):
        (WebCore::PopupMenuQt::hide):
        (WebCore::PopupMenuQt::updateFromElement):
        (WebCore::PopupMenuQt::selectItem):
        * WebCoreSupport/PopupMenuQt.h: Added.
        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopupCombo::hidePopup):
        (WebCore::QtFallbackWebPopup::QtFallbackWebPopup):
        (WebCore::QtFallbackWebPopup::show):
        (WebCore::QtFallbackWebPopup::populate):
        (WebCore::QtFallbackWebPopup::activeChanged):
        (WebCore::QtFallbackWebPopup::pageClient):
        * WebCoreSupport/QtFallbackWebPopup.h:
        (WebCore::QtFallbackWebPopup::setGeometry):
        (WebCore::QtFallbackWebPopup::geometry):
        (WebCore::QtFallbackWebPopup::setFont):
        (WebCore::QtFallbackWebPopup::font):
        * WebCoreSupport/QtMaemoWebPopup.cpp:
        (WebCore::Maemo5Popup::populateList):
        (WebCore::QtMaemoWebPopup::QtMaemoWebPopup):
        (WebCore::QtMaemoWebPopup::createSingleSelectionPopup):
        (WebCore::QtMaemoWebPopup::createMultipleSelectionPopup):
        (WebCore::QtMaemoWebPopup::createPopup):
        (WebCore::QtMaemoWebPopup::show):
        (WebCore::QtMaemoWebPopup::popupClosed):
        (WebCore::QtMaemoWebPopup::itemClicked):
        (WebCore::Maemo5SingleSelectionPopup::Maemo5SingleSelectionPopup):
        (WebCore::Maemo5MultipleSelectionPopup::Maemo5MultipleSelectionPopup):
        * WebCoreSupport/QtMaemoWebPopup.h:
        (WebCore::Maemo5Popup::Maemo5Popup):
        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::QtPlatformPlugin::createSelectInputMethod):
        * WebCoreSupport/QtPlatformPlugin.h:
        * WebCoreSupport/SearchPopupMenuQt.cpp: Added.
        (WebCore::SearchPopupMenuQt::SearchPopupMenuQt):
        (WebCore::SearchPopupMenuQt::popupMenu):
        (WebCore::SearchPopupMenuQt::saveRecentSearches):
        (WebCore::SearchPopupMenuQt::loadRecentSearches):
        (WebCore::SearchPopupMenuQt::enabled):
        * WebCoreSupport/SearchPopupMenuQt.h: Added.

2010-08-06  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Add support for the Android viewport meta tag extensions.
        http://webkit.org/b/43567

        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::didReceiveViewportArguments):

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

        * WebCoreSupport/FrameLoaderClientQt.h:
        * WebCoreSupport/InspectorClientQt.h:

2010-08-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Clean up the input method handling
        https://bugs.webkit.org/show_bug.cgi?id=43545

        Replace the way of individually setting input method hints by
        many calls to QWidget::setInputMethodHints with one single call.

        This is more efficient by requiring less updates in the input
        method hint.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQWidget::setInputMethodHints):
        (WebCore::PageClientQGraphicsWidget::setInputMethodHints):
        * WebCoreSupport/PageClientQt.h:

2010-08-05  David Leong  <david.leong@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Input mode states are not reset after entering a password field
        https://bugs.webkit.org/show_bug.cgi?id=43530

        Input mode hints are not reset if clicking on password <input> elements then 
        clicking on <textarea> elements

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * tests/qwebview/resources/input_types.html:
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::focusInputTypes):


2010-08-04  Pierre Rossi  <pierre.rossi@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] QWebFrame::setContent() does not respect charset provided in the mimeType
        https://bugs.webkit.org/show_bug.cgi?id=43125

        * Api/qwebframe.cpp:
        (QWebFrame::setContent):
        * tests/qwebframe/tst_qwebframe.cpp:

2010-08-03  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Edits to bridge documentation
        https://bugs.webkit.org/show_bug.cgi?id=43012

        * docs/qtwebkit-bridge.qdoc:
        * docs/webkitsnippets/qtwebkit_bridge_snippets.cpp:
        (wrapInFunction):

2010-08-03  Kim Grönholm  <kim.1.gronholm@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Platform plugin interface for Haptics
        https://bugs.webkit.org/show_bug.cgi?id=43143

        Platform plugin interface for playing haptic feedback

        * Api/qwebkitplatformplugin.h:
        (QWebHapticFeedbackPlayer::):
        (QWebKitPlatformPlugin::):
        * examples/platformplugin/WebPlugin.h:
        (WebPlugin::createHapticFeedbackPlayer):
        * examples/platformplugin/qwebkitplatformplugin.h:
        (QWebHapticFeedbackPlayer::):
        (QWebKitPlatformPlugin::):

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

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

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

        Reviewed by Simon Fraser.

        Enabling view modes to all platforms
        https://bugs.webkit.org/show_bug.cgi?id=37505

        As view mode media feature is now supported by WebCore there is no need
        to keep its implementation here. QtWebKit now uses WebCore's view mode media feature
        implementation.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dynamicPropertyChangeEvent):
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        * WebCoreSupport/ChromeClientQt.h:

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::reachedApplicationCacheOriginQuota):
        * WebCoreSupport/ChromeClientQt.h:

2010-07-29  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Antonio Gomes.

        QWebFrame and QWebView documentation fix.

        The QWebFrame and the QWebView setHtml() methods are a bit confusing.
        There are a few registered bugs in Webkit's bugzilla that source is
        in a bad usage of the function.
        Additional information were added.

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

        * Api/qgraphicswebview.cpp:
        * Api/qwebframe.cpp:
        * Api/qwebview.cpp:

2010-07-28  Kim Grönholm  <kim.1.gronholm@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Decouple QTouchEvent's accepted flag from JS prevent default
        https://bugs.webkit.org/show_bug.cgi?id=42892

        Added comments to the touch event handling code.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::sceneEvent):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::touchEvent):
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::event):

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2010-07-27  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Incorrect input method hints
        https://bugs.webkit.org/show_bug.cgi?id=43037

        Properly set or reset all input method hints when
        activating input fields.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::focusInputTypes): Extended unit test to verify that we
        reset hints.

2010-07-27  Kim Grönholm  <kim.1.gronholm@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Decouple QTouchEvent's accepted flag from JS prevent default
        https://bugs.webkit.org/show_bug.cgi?id=42892

        We need to always accept the QTouchEvents in order to get TouchUpdate and
        TouchEnd events. QWebPage::event() return value is used to indicate
        whether the default action was prevented for the touch events.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::sceneEvent):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::touchEvent):
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::event):

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

        Reviewed by Simon Hausmann.

        [Qt] Change default font from sans-serif to serif

        This matches what other ports and browser engines do.

        We now also use QFont's defaultFontFamily() to resolve the
        correct fonts for each platform. For Qt >= 4.7 we can take
        advantage of the new enums for generic font families.

        * Api/qwebsettings.cpp:

2009-10-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use the default timeout interval for JS as the HTML tokenizer delay for setHtml()

        This ensures that long-running JavaScript (for example due to a modal alert() dialog),
        will not trigger a deferred load after only 500ms (the default tokenizer delay) while
        still giving a reasonable timeout (10 seconds) to prevent deadlock.

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

        * Api/qwebframe.cpp: Document the behaviour
        * WebCoreSupport/FrameLoaderClientQt.cpp: set the custom tokenizer delay for substitute loads
        * tests/qwebframe/tst_qwebframe.cpp: Add test

2010-07-23  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Fixed incorrect QML property type.

        * declarative/qdeclarativewebview.cpp:

2010-07-23  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build fix for Qt apps

        Add webkit to QT_CONFIG. qconfig.pri will read qt_webkit_version.pri and
        that's how it will pick up webkit in QT_CONFIG.

        * qt_webkit_version.pri:

2010-07-22  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] QtWebKit needs public API for Notifications.
        https://bugs.webkit.org/show_bug.cgi?id=41413

        Remove DumpRenderTree private API and introduce new API.
        Also add support for informing the UI when a notification request is cancelled.

        * Api/qwebpage.cpp:
        (QWebPage::setUserPermission):
        * Api/qwebpage.h:
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::requestPermission):
        (WebCore::NotificationPresenterClientQt::checkPermission):
        (WebCore::NotificationPresenterClientQt::cancelRequestsForPermission):
        (WebCore::NotificationPresenterClientQt::allowNotificationForFrame):
        (WebCore::NotificationPresenterClientQt::toPage):
        (WebCore::NotificationPresenterClientQt::toFrame):
        * WebCoreSupport/NotificationPresenterClientQt.h:

2010-07-22  Jamey Hicks  <jamey.hicks@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable binding of QObjects to JavaScript environment for inspector frontend

        This patch enables QObjects to be bound to global variables in the
        javascript environment of the inspector frontend. This is useful
        for writing alternate inspector frontends in javascript which need
        additional native functionality. It's a lighter-weight alternative
        than using an NPAPI plugin.
 
        The code which instantiates QWebInspector uses this by setting the
        dynamic property "q_inspectorJavaScriptWindowObjects" on the
        QWebInspector. The value of this property should be a
        QMap<QString,QVariant> mapping global variable name to QObject.

        I have used this to add support for eclipse/chrome remote
        debugging in QtTestBrowser.

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

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::InspectorClientWebPage):
        (WebCore::InspectorClientWebPage::javaScriptWindowObjectCleared):
        (WebCore::InspectorClientQt::openInspectorFrontend):

2010-07-22  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Library versioning.

        2.1 is branched, trunk will become 2.2.

        * Api/qwebkitglobal.h:
        * qt_webkit_version.pri:

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

        * Api/qwebpage.cpp:
        (QWebPage::acceptNavigationRequest):
        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::addLocalScheme):
        (QWebSecurityOrigin::removeLocalScheme):
        (QWebSecurityOrigin::localSchemes):

2010-07-20  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        [Qt] Add API to define device-width and height for use with the viewport meta tag
        https://bugs.webkit.org/show_bug.cgi?id=42597

        Reviewed by Antonio Gomes.

        Add a new API for setting the deviceSize for use in conjunction with
        out viewport meta tag API.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::setDeviceSize):
        (QGraphicsWebView::deviceSize):
        * Api/qgraphicswebview.h:
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQGraphicsWidget::windowRect):
        * WebCoreSupport/PageClientQt.h:
        (WebCore::PageClientQGraphicsWidget::PageClientQGraphicsWidget):

2010-07-20  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT sideeffect revealed by r63657
        https://bugs.webkit.org/show_bug.cgi?id=42578

        Don't set an automatic timeout for notifications when running in DRT.
        This fixes an issue with cancel() notifications in unrelated tests.

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::displayNotification):

2010-07-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] tst_QWebPage fails cursorMovements and textSelection
        https://bugs.webkit.org/show_bug.cgi?id=42531

        Correct the HTML used by these tests.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::cursorMovements):
        (tst_QWebPage::textSelection):
        (tst_QWebPage::textEditing):

2010-07-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] tst_QWebElement fails firstChildNextSibling and lastChildPreviousSibling
        https://bugs.webkit.org/show_bug.cgi?id=42527

        Correct the HTML used by these tests.

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::firstChildNextSibling):
        (tst_QWebElement::lastChildPreviousSibling):

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

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/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setCursor):
        * WebCoreSupport/ChromeClientQt.h:
        Change prototype to match new one.

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.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setDeferMainResourceDataLoad):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        * WebCoreSupport/FrameLoaderClientQt.h:

2010-07-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        NotificationPresenter needs a cancelRequestPermission API
        https://bugs.webkit.org/show_bug.cgi?id=41783

        Updated NotificationPresenter API to use ScriptExecutionContext instead of origin
        and added a new NotificationPresenter::cancelRequestsForPermission API.
        The new API will be implemented in a followup patch.

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::requestPermission):
        (WebCore::NotificationPresenterClientQt::checkPermission):
        (WebCore::NotificationPresenterClientQt::cancelRequestsForPermission):
        * WebCoreSupport/NotificationPresenterClientQt.h:

2010-07-09  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Skip test that never terminates on maemo5

        Due to https://bugs.webkit.org/show_bug.cgi?id=38538
        the tst_QWebPage::infiniteLoopJS() autotest never terminates.
        Skip the test so that the test case may run to completion.

        Patch by Dominik Holland <dominik.holland@nokia.com>

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::infiniteLoopJS):

2010-07-09  Simon Hausmann <simon.hausmann@nokia.com>

        Unreviewed trivial Symbian build fix.

        [Qt] Fix the Symbian build when compiling without S60

        Use Q_OS_SYMBIAN instead of Q_WS_S60 for the user agent
        determination.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2010-07-09  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fixed Qt symbian/linux-armcc mkspec when configured with -qtlibinfix.

        * declarative/declarative.pro: Use QT_LIBINFIX.

2010-07-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Remove superfluous function calls
        https://bugs.webkit.org/show_bug.cgi?id=40353

        QWebFrame::setUrl() calls ensureAbsoluteUrl() twice. It's better to
        store a local variable and reuse this one.

        QWebFrame::load(QUrl) calls QWebFrame::load(QNetworkRequest) which in
        turn will get the QUrl from the request and make sure it's absolute by
        calling ensureAbsoluteUrl() on it.

        * Api/qwebframe.cpp:
        (QWebFrame::setUrl):
        (QWebFrame::load):

2010-07-08  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Simon Hausmann.

        [Qt] instance objects created for QObjects are somtimes GC'd
        https://bugs.webkit.org/show_bug.cgi?id=40352

        Improved the test to check for jsObjects that that are garbage collected.

        * tests/qwebframe/tst_qwebframe.cpp:
        (tst_QWebFrame::):

2010-07-08  Aaron Boodman  <aa@chromium.org>

        Unreviewed change to fix qt build after c62876.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::addUserStyleSheet):

2010-07-07  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add DRT support for pageProperty etc.

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::isPageBoxVisible):
        (DumpRenderTreeSupportQt::pageSizeAndMarginsInPixels):
        (DumpRenderTreeSupportQt::pageProperty):
        (DumpRenderTreeSupportQt::addUserStyleSheet):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-07-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41826
        Convert BackForwardList to an abstract base class and add BackForwardListImpl
        as the concrete implementation of it.

        * Api/qwebhistory.cpp:
        (QWebHistory::clear):
        (QWebHistory::back):
        (QWebHistory::forward):
        (QWebHistory::goToItem):
        (operator>>):
        (QWebHistoryPrivate::page):

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

        Reviewed by Simon Hausmann.

        Remove unused WEBKIT_VERSION define from qwebpage.cpp

        We now use qWebKitVersion()

        * Api/qwebpage.cpp:

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.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2010-07-07  Marc Mutz  <marc.mutz@kdab.com>

        Reviewed by Adam Barth.

        [Qt] QWebSettings: Don't leak native pixmaps

        When Q_GLOBAL_STATIC gets around to deleting the QHash with the
        pixmaps in, the QApplication destructor has already been
        completed. This makes it impossible for ~QPixmap to return the
        native pixmap to the OS, thus leaking them.

        This patch adds a post routine (executed as part of ~QApplication)
        that clears the hash so Q_GLOBAL_STATIC's destruction doesn't have
        to execute ~QPixmap's anymore.

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

        * Api/qwebsettings.cpp:
        (earlyClearGraphics): New. Clears the pixmap hash.
        (graphics): add earlyClearGraphics as a qAddPostRoutine()

2010-07-06  Csaba Osztrogonác  <ossy@webkit.org>

        Rubber-stamped by Kenneth Rohde Christiansen.

        Client errors should set "WebKitErrorDomain" domain instead of "WebKit" to match Mac.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::blockedError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):

2010-07-06  Darin Adler  <darin@apple.com>

        Fix crash caused by my fix to the Qt build.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorFrontendClientQt::closeWindow): Release pointer into
        a local OwnPtr instead of calling clear. Another fix, probably better,
        would be to change OwnPtr::clear to zero out the pointer before deleting,
        but that affects many more call sites, so I will do that separately.

2010-07-06  Darin Adler  <darin@apple.com>

        Fix Qt build.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorFrontendClientQt::closeWindow): Call clear instead of
        calling delete on the result of leakPtr.

2010-06-19  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: js function name was fixed.
        dispatchMessageToFrontend -> dispatchMessageFromBackend.
        https://bugs.webkit.org/show_bug.cgi?id=40675

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::sendMessageToFrontend):

2010-07-03  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Return usable property names from DRT's computedStyleIncludingVisitedInfo()

        Object property names such as 'background-color' need to be returned in camel
        case, i.e. backgroundColor so that JS can reference them. Add support for this
        to DumpRenderTreeSupportQt.

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (convertToPropertyName):
        (DumpRenderTreeSupportQt::computedStyleIncludingVisitedInfo):

2010-07-01  Robert Hogan <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] dump frames in ascending alphabetical order of title

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

        Unskip:
        http/tests/navigation/metaredirect-frames.html
        http/tests/navigation/redirect302-frames.html
        http/tests/navigation/redirect302-subframeload.html
        http/tests/navigation/timerredirect-frames.html

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::getChildHistoryItems):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-07-01  Bea Lam  <bea.lam@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Doc improvements for QDeclarativeWebView

        * declarative/qdeclarativewebview.cpp:

2010-07-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Create QComboBoxes when clicked and destroy on hide.
        https://bugs.webkit.org/show_bug.cgi?id=41451

        Currently a QComboBox is created for each RenderMenuList and
        it gets destroyed either when the RenderMenuList or the
        QWebView (its Qt parent) is destroyed. This cause a crash
        when the QWebView is destroyed before the render tree (which
        is kept in cache).

        This patch aim to destroy the QComboBox as soon as its popup
        gets hidden, and likewise, create it only when the popup is
        requested to be shown.
        It also removes the unneeded reference to the QGraphicsProxyWidget,
        destroying the QComboBox automatically destroys its bound
        proxywidget.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopupCombo::hidePopup):
        (WebCore::QtFallbackWebPopup::QtFallbackWebPopup):
        (WebCore::QtFallbackWebPopup::~QtFallbackWebPopup):
        (WebCore::QtFallbackWebPopup::show):
        (WebCore::QtFallbackWebPopup::hide):
        (WebCore::QtFallbackWebPopup::destroyPopup):
        (WebCore::QtFallbackWebPopup::populate):
        * WebCoreSupport/QtFallbackWebPopup.h:

2010-07-01  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Rendering the speech button in input elements.
        https://bugs.webkit.org/show_bug.cgi?id=40984

        * Api/qwebsettings.cpp:
        (graphics):
        * Api/qwebsettings.h:

2010-06-30  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make sure we catch closed QComboBox popups.
        https://bugs.webkit.org/show_bug.cgi?id=39019

        The way it works currently is using the QComboBox::show/hidePopup
        virtual method to catch popup requests in the middle. There is
        some cases however that the popup widget gets closed without
        going through the hidePopup method.

        This patch adds an event filter to the popup's view to know when
        it gets closed and calls hidePopup to call our handling code.
        This may get hidePopup called twice but this shouldn't have any
        effect.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopupCombo::QtFallbackWebPopupCombo):
        (WebCore::QtFallbackWebPopupCombo::eventFilter):
        * WebCoreSupport/QtFallbackWebPopup.h:

2010-06-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Symbian build fix.

        [Qt] Update the def files to link DumpRenderTree.

        * symbian/eabi/QtWebKitu.def:

2010-06-30  Samuel Nevala  <samuel.nevala@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Auto test wont compile from \3rdparty\webkit\WebKit\qt\tests
        https://bugs.webkit.org/show_bug.cgi?id=38720
        
        Load qttest_p4.prf under QTDIR_build.

        * tests/tests.pri:

2010-06-29  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] support dumpResourceResponseMIMETypes
        https://bugs.webkit.org/show_bug.cgi?id=41260

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::dumpResourceResponseMIMETypes):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        * WebCoreSupport/FrameLoaderClientQt.h:

2010-06-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed Symbian build fix.

        [Qt] Update the def file after r61879.

        * symbian/eabi/QtWebKitu.def:

2010-06-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] QGraphicsWebView crash when calling setScale() before setUrl()
        https://bugs.webkit.org/show_bug.cgi?id=40000

        Check 'page' before dereference in _q_scaleChanged()
        Autotest included.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::_q_scaleChanged):
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::crashOnSetScaleBeforeSetUrl):

2010-06-26  Simon Hausmann  <hausmann@webkit.org>

        [Qt] Prospective build fix for MSVC

        In order for the forward declaration of QWebScriptWorldPrivate
        to work with QExplicitlySharedDataPointer, then copy constructor
        and assignment operators must not be compiler generated, to
        avoid them ending up in places where the private class is not
        declared.

        * Api/qwebscriptworld.cpp:
        (QWebScriptWorld::QWebScriptWorld):
        (QWebScriptWorld::operator=):
        * Api/qwebscriptworld.h:

2010-06-26  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT Support for setCustomPolicyDelegate

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setCustomPolicyDelegate):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (drtDescriptionSuitableForTestResult):
        (WebCore::navigationTypeToString):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        * WebCoreSupport/FrameLoaderClientQt.h:

2010-06-25  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtWebKit crashes if <select>'s render changes in its onchange event
        https://bugs.webkit.org/show_bug.cgi?id=41164

        QtWebKit crashes if <select>'s renderer changes in its onchange event.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::~QtFallbackWebPopup):

2010-06-25  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Support evaluateScriptInIsolatedWorld()

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

        Remove evaluateScriptInIsolatedWorld() from QtWebKit API.
        Remove QWebScriptWorld from exported headers.
        Confine support to DumpRenderTreeSupportQt so that the tests can pass.

        * Api/headers.pri:
        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::clearScriptWorlds):
        (DumpRenderTreeSupportQt::evaluateScriptInIsolatedWorld):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-06-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Symbian build fix.

        The QML WebKit integration needs to be part of QtWebKit.sis

        * declarative/declarative.pro: Removed non-working deployment.

2010-06-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, Symbian build fix.

        [Qt] Update the def file after r61478.

        * symbian/eabi/QtWebKitu.def:

2010-06-23  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Doc: Fixed documentation errors.

        * docs/qtwebkit-bridge.qdoc:

2010-06-23  Alessandro Portale  <alessandro.portale@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Provide the Webkit Qml plugin with a UID3 on Symbian

        ...otherwise we cannot Symbian sign it.

        * declarative/declarative.pro:

2010-06-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt package build fix.

        When building without build-webkit, set OUTPUT_DIR if necessary, like
        in the other .pro files.

        * declarative/declarative.pro:

2010-06-22  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with QT_NO_COMBOBOX.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createSelectPopup):

2010-06-21  Robert Hogan  <robert@webkit.org>

        [Qt] Build fix for Qt on Windows MSVC2008

        Unreviewed, build fix.

        Fix by Jocelyn Turcotte.

        * Api/qwebframe.cpp:

2010-06-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Fix MSVC build.

        The max macro was replacing the max function used in StringImpl.h
        when compiling moc_NotificationPresenterClientQt.cpp.

        * WebCoreSupport/NotificationPresenterClientQt.cpp:

2010-06-21  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, Symbian build fix.

        [Qt] Update the def file with recent new exports.

        * symbian/eabi/QtWebKitu.def:

2010-06-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed build fix.

        [Qt] Fix package builds

        Don't use rpath unless we're building inside the trunk.

        * declarative/declarative.pro:

2010-06-20  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        The QWebHistory regression fix.

        After change r51629 and r61207 QWebHistory's function back(),
        forward(), goToItem() got broken.

        Use page->goToItem() instead of direct actions on the BackForwardList.

        [Qt] REGRESSION(r61207): qwebhistory unit test hangs
        https://bugs.webkit.org/show_bug.cgi?id=40672

        * Api/qwebhistory.cpp:
        (QWebHistory::back):
        (QWebHistory::forward):
        (QWebHistory::goToItem):
        * tests/qwebhistory/tst_qwebhistory.cpp:
        (tst_QWebHistory::init):
        (tst_QWebHistory::back):
        (tst_QWebHistory::forward):

2010-06-19  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Platform plugin's multi-select does not take OptGroup into account
        https://bugs.webkit.org/show_bug.cgi?id=40718

        Make sure that SelectData is valid throughout the lifetime of the dialog.
        This is mostly important for the Orbt based plugin.
        Added virtual desctructors where they were missing.

        * Api/qwebkitplatformplugin.h:
        (QWebSelectData::~QWebSelectData):
        (QWebSelectMethod::~QWebSelectMethod):
        (QWebNotificationData::~QWebNotificationData):
        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::SelectInputMethodWrapper::SelectInputMethodWrapper):
        (WebCore::SelectInputMethodWrapper::~SelectInputMethodWrapper):
        (WebCore::SelectInputMethodWrapper::show):
        * WebCoreSupport/QtPlatformPlugin.h:
        * examples/platformplugin/WebPlugin.cpp:
        * examples/platformplugin/qwebkitplatformplugin.h:
        (QWebSelectData::~QWebSelectData):
        (QWebSelectMethod::~QWebSelectMethod):
        (QWebNotificationData::~QWebNotificationData):

2010-06-19  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        Bridge documentation: some snippets have the wrong indentation
        https://bugs.webkit.org/show_bug.cgi?id=40717

        Fixed code snippets

        * docs/webkitsnippets/qtwebkit_bridge_snippets.cpp:
        (wrapInFunction):

2010-06-02  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        [Qt] Support evaluateScriptInIsolatedWorld()

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

        * Api/headers.pri:
        * Api/qwebframe.cpp:
        (QWebFrame::evaluateScriptInIsolatedWorld):
        * Api/qwebframe.h:
        * Api/qwebscriptworld.cpp: Added.
        (QWebScriptWorld::QWebScriptWorld):
        (QWebScriptWorld::world):
        (QWebScriptWorld::~QWebScriptWorld):
        * Api/qwebscriptworld.h: Added.
        * Api/qwebscriptworld_p.h: Added.
        (QWebScriptWorldPrivate::QWebScriptWorldPrivate):
        (QWebScriptWorldPrivate::~QWebScriptWorldPrivate):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-06-19  Olivier Goffart  <olivier.goffart@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Compilation in QWebPagePrivate::timerEvent with clang
        https://bugs.webkit.org/show_bug.cgi?id=40714

        QObject::timerEvent is protected and cannot be accessed by QWebPagePrivate
        with clang

        QWebPagePrivate is a friend of QWebPage and then should have access to
        all protected members of parents of QWebPage, including QObject.
        But the clang team do not want to conform to this aspect of the specification
        because "It is either a drafting error or a horrible mistake."
        See http://llvm.org/bugs/show_bug.cgi?id=6840

        This change is better because QWebPage does not reimplement the timerEvent
        (QWebPagePrivate::timerEvent is called from QWebPage::event)
        So customers that would reimplement their own timerEvent
        for their own timer now get a chance to catch them.


        * Api/qwebpage.cpp:
        (QWebPagePrivate::timerEvent):

2010-06-19  Mirko Damiani  <mirko@develer.com>

        Reviewed by Simon Hausmann.

        [Qt] Avoid truncation of zoom factor in QWebFrame's print function.
        https://bugs.webkit.org/show_bug.cgi?id=40662

        The zoom factor is a qreal number but its value is truncated to an
        integer. So a cast to qreal is needed to avoid this issue.

        * Api/qwebframe.cpp:
        (QWebFrame::print):

2010-06-18  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] pass plugins/open-and-close-window-with-plugin.html on Qt

        Capture logDestroy messages from the test plugin. DRT's WebPage
        is already destroyed by the time they are emitted.

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

        Unskip:
        plugins/open-and-close-window-with-plugin.html
        plugins/geturlnotify-during-document-teardown.html

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptConsoleMessage):

2010-06-18  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix documentation for the declarative module import.

        * declarative/qdeclarativewebview.cpp:

2010-06-18  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Simon Hausmann.

        Fix documentation issue on the onAlert handler.
        Fix compilation issue with QT_NO_ACTION.

        * declarative/qdeclarativewebview.cpp:
        * declarative/qdeclarativewebview_p.h:

2010-06-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Antti Koivisto.

        REGRESSION(r60958) [Qt] qwebpage::inputMethods auto-test fails
        https://bugs.webkit.org/show_bug.cgi?id=40830

        When activating a regular input method field, always set or unset the ImhHiddenText
        input method hint.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):

2010-06-18  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Change the target path to QtWebKit.

        * declarative/declarative.pro:

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

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2010-06-17  Robert Hogan  <robert@webkit.org>

        [Qt] Build fix

        Unreviewed.

        Remove includes in qdeclarativewebview*.* that rely on an installation
        of QtWebKit.

        * declarative/qdeclarativewebview.cpp:
        * declarative/qdeclarativewebview_p.h:

2010-06-17  Robert Hogan  <robert@webkit.org>

        Unreviewed, rolling out r61346.
        http://trac.webkit.org/changeset/61346
        https://bugs.webkit.org/show_bug.cgi?id=33333

        Broke inspector tests on Qt

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptConsoleMessage):

2010-06-17  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] pass plugins/open-and-close-window-with-plugin.html on Qt

        Capture logDestroy messages from the test plugin. DRT's WebPage
        is already destroyed by the time they are emitted.

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

        Unskip:
        plugins/open-and-close-window-with-plugin.html
        plugins/geturlnotify-during-document-teardown.html

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptConsoleMessage):

2010-06-17  Jesus Sanchez-Palencia  <jesus@webkit.org>, Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] QtWebKit does not support viewport meta tag
        https://bugs.webkit.org/show_bug.cgi?id=39902

        Add viewport meta tag support to QtWebKit API layer.

        This implements didReceiveViewportArguments in our ChromeClientQt
        which is hooked up with QWebPage::viewportChangeRequested().
        This signal does not affect the current default behavior.
        The documentation of the signal explains how to make use of this new feature.

        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        Store information about whether the page has been laid out or not.
        * Api/qwebpage.cpp:
        (QWebPage::viewportChangeRequested):
        * Api/qwebpage_p.h:
        Added class QtViewportHintsPrivate.
        * Api/qwebpage.h:
        (QWebPage::setPreferredContentsSize):
        Improved documentation and now only layout if the page had already
        passed layout phase.
        Added class QWebPage::ViewportHints.
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::windowRect):
        Modified to work as intended by the DOM, for both QWebView
        and QGraphicsWebView.
        (WebCore::ChromeClientQt::didReceiveViewportArguments):
        Emits the signal QWebPage::viewportChangeRequested.
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
        Update information about whether the page has been laid out or not.
        If the page has been laid out we ignore any further viewport meta data.
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQWidget::windowRect):
        (WebCore::PageClientQGraphicsWidget::windowRect):
        (WebCore::PageClientQGraphicsWidget::graphicsItemVisibleRect):
        * WebCoreSupport/PageClientQt.h:
        The PageClient is now responsible for providing the right window rect.

2010-06-17  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Upstream the WebKit QML integration plugin
        https://bugs.webkit.org/show_bug.cgi?id=40050

        Add to the Qt port the QML WebKit integration plugin.
        QDeclarativeWebView is creating the item and expose
        properties. The C++ API is not public, only the
        properties are.

        * declarative/declarative.pro: Added.
        * declarative/plugin.cpp: Added.
        (WebKitQmlPlugin::registerTypes):
        * declarative/qdeclarativewebview.cpp: Added.
        (QDeclarativeWebViewPrivate::QDeclarativeWebViewPrivate):
        (QDeclarativeWebViewPrivate::):
        (QDeclarativeWebViewPrivate::windowObjectsAppend):
        (GraphicsWebView::GraphicsWebView):
        (GraphicsWebView::mousePressEvent):
        (GraphicsWebView::mouseReleaseEvent):
        (GraphicsWebView::mouseDoubleClickEvent):
        (GraphicsWebView::timerEvent):
        (GraphicsWebView::mouseMoveEvent):
        (QDeclarativeWebView::QDeclarativeWebView):
        (QDeclarativeWebView::~QDeclarativeWebView):
        (QDeclarativeWebView::init):
        (QDeclarativeWebView::componentComplete):
        (QDeclarativeWebView::status):
        (QDeclarativeWebView::progress):
        (QDeclarativeWebView::doLoadStarted):
        (QDeclarativeWebView::doLoadProgress):
        (QDeclarativeWebView::pageUrlChanged):
        (QDeclarativeWebView::doLoadFinished):
        (QDeclarativeWebView::url):
        (QDeclarativeWebView::setUrl):
        (QDeclarativeWebView::preferredWidth):
        (QDeclarativeWebView::setPreferredWidth):
        (QDeclarativeWebView::preferredHeight):
        (QDeclarativeWebView::setPreferredHeight):
        (QDeclarativeWebView::evaluateJavaScript):
        (QDeclarativeWebView::updateDeclarativeWebViewSize):
        (QDeclarativeWebView::initialLayout):
        (QDeclarativeWebView::updateContentsSize):
        (QDeclarativeWebView::geometryChanged):
        (QDeclarativeWebView::javaScriptWindowObjects):
        (QDeclarativeWebView::qmlAttachedProperties):
        (QDeclarativeWebViewPrivate::updateWindowObjects):
        (QDeclarativeWebView::renderingEnabled):
        (QDeclarativeWebView::setRenderingEnabled):
        (QDeclarativeWebView::heuristicZoom):
        (QDeclarativeWebView::pressGrabTime):
        (QDeclarativeWebView::setPressGrabTime):
        (QDeclarativeWebView::backAction):
        (QDeclarativeWebView::forwardAction):
        (QDeclarativeWebView::reloadAction):
        (QDeclarativeWebView::stopAction):
        (QDeclarativeWebView::title):
        (QDeclarativeWebView::icon):
        (QDeclarativeWebView::setStatusText):
        (QDeclarativeWebView::windowObjectCleared):
        (QDeclarativeWebView::statusText):
        (QDeclarativeWebView::page):
        (QDeclarativeWebView::settingsObject):
        (QDeclarativeWebView::setPage):
        (QDeclarativeWebView::load):
        (QDeclarativeWebView::html):
        (QDeclarativeWebView::setHtml):
        (QDeclarativeWebView::setContent):
        (QDeclarativeWebView::history):
        (QDeclarativeWebView::settings):
        (QDeclarativeWebView::createWindow):
        (QDeclarativeWebView::newWindowComponent):
        (QDeclarativeWebView::setNewWindowComponent):
        (QDeclarativeWebView::newWindowParent):
        (QDeclarativeWebView::setNewWindowParent):
        (QDeclarativeWebView::contentsSize):
        (QDeclarativeWebView::contentsScale):
        (QDeclarativeWebView::setContentsScale):
        (QDeclarativeWebView::elementAreaAt):
        (QDeclarativeWebPage::QDeclarativeWebPage):
        (QDeclarativeWebPage::~QDeclarativeWebPage):
        (QDeclarativeWebPage::chooseFile):
        (QDeclarativeWebPage::javaScriptAlert):
        (QDeclarativeWebPage::javaScriptConfirm):
        (QDeclarativeWebPage::javaScriptPrompt):
        (QDeclarativeWebPage::viewItem):
        (QDeclarativeWebPage::createWindow):
        * declarative/qdeclarativewebview_p.h: Added.
        (QDeclarativeWebView::):
        (QDeclarativeWebView::isComponentCompletePublic):
        (QDeclarativeWebViewAttached::QDeclarativeWebViewAttached):
        (QDeclarativeWebViewAttached::windowObjectName):
        (QDeclarativeWebViewAttached::setWindowObjectName):
        (QDeclarativeWebSettings::QDeclarativeWebSettings):
        (QDeclarativeWebSettings::standardFontFamily):
        (QDeclarativeWebSettings::setStandardFontFamily):
        (QDeclarativeWebSettings::fixedFontFamily):
        (QDeclarativeWebSettings::setFixedFontFamily):
        (QDeclarativeWebSettings::serifFontFamily):
        (QDeclarativeWebSettings::setSerifFontFamily):
        (QDeclarativeWebSettings::sansSerifFontFamily):
        (QDeclarativeWebSettings::setSansSerifFontFamily):
        (QDeclarativeWebSettings::cursiveFontFamily):
        (QDeclarativeWebSettings::setCursiveFontFamily):
        (QDeclarativeWebSettings::fantasyFontFamily):
        (QDeclarativeWebSettings::setFantasyFontFamily):
        (QDeclarativeWebSettings::minimumFontSize):
        (QDeclarativeWebSettings::setMinimumFontSize):
        (QDeclarativeWebSettings::minimumLogicalFontSize):
        (QDeclarativeWebSettings::setMinimumLogicalFontSize):
        (QDeclarativeWebSettings::defaultFontSize):
        (QDeclarativeWebSettings::setDefaultFontSize):
        (QDeclarativeWebSettings::defaultFixedFontSize):
        (QDeclarativeWebSettings::setDefaultFixedFontSize):
        (QDeclarativeWebSettings::autoLoadImages):
        (QDeclarativeWebSettings::setAutoLoadImages):
        (QDeclarativeWebSettings::javascriptEnabled):
        (QDeclarativeWebSettings::setJavascriptEnabled):
        (QDeclarativeWebSettings::javaEnabled):
        (QDeclarativeWebSettings::setJavaEnabled):
        (QDeclarativeWebSettings::pluginsEnabled):
        (QDeclarativeWebSettings::setPluginsEnabled):
        (QDeclarativeWebSettings::privateBrowsingEnabled):
        (QDeclarativeWebSettings::setPrivateBrowsingEnabled):
        (QDeclarativeWebSettings::javascriptCanOpenWindows):
        (QDeclarativeWebSettings::setJavascriptCanOpenWindows):
        (QDeclarativeWebSettings::javascriptCanAccessClipboard):
        (QDeclarativeWebSettings::setJavascriptCanAccessClipboard):
        (QDeclarativeWebSettings::developerExtrasEnabled):
        (QDeclarativeWebSettings::setDeveloperExtrasEnabled):
        (QDeclarativeWebSettings::linksIncludedInFocusChain):
        (QDeclarativeWebSettings::setLinksIncludedInFocusChain):
        (QDeclarativeWebSettings::zoomTextOnly):
        (QDeclarativeWebSettings::setZoomTextOnly):
        (QDeclarativeWebSettings::printElementBackgrounds):
        (QDeclarativeWebSettings::setPrintElementBackgrounds):
        (QDeclarativeWebSettings::offlineStorageDatabaseEnabled):
        (QDeclarativeWebSettings::setOfflineStorageDatabaseEnabled):
        (QDeclarativeWebSettings::offlineWebApplicationCacheEnabled):
        (QDeclarativeWebSettings::setOfflineWebApplicationCacheEnabled):
        (QDeclarativeWebSettings::localStorageDatabaseEnabled):
        (QDeclarativeWebSettings::setLocalStorageDatabaseEnabled):
        (QDeclarativeWebSettings::localContentCanAccessRemoteUrls):
        (QDeclarativeWebSettings::setLocalContentCanAccessRemoteUrls):
        * declarative/qmldir: Added.
        * docs/qtwebkit.qdocconf:

2010-06-17  Mark Brand  <mabrand@mabrand.nl>

        Reviewed by Simon Hausmann.

        [Qt] use "win32-g++*" scope to match all MinGW makespecs

        The scope "win32-g++" comes from the name of the makespec. However, it
        is frequently used to check for MinGW. This works fine as long as
        win32-g++ is the only makespec for MinGW. Now we need the wildcard
        to cover "win32-g++-cross" as well.

        * Api/DerivedSources.pro:

2010-05-28  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Simon Hausmann, Antti Koivisto

        [Qt] Add internal Qt Api to configure repaint throttling parameters. 
        https://bugs.webkit.org/show_bug.cgi?id=38401

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dynamicPropertyChangeEvent):

2010-06-16  Alexis Menard <alexis.menard@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix tiled backing store painting when calling QGraphicsWebView::setPage() after setResizesToContents(true)

        When calling setPage() after setResizesToContents, the value of the property wasn't propagated
        to the page client. Therefore the visible rect for the tiled backing store was incorrect.

        Simply move the variable assignment into updateResizesToContentsForPage(), which is always called.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
        (QGraphicsWebView::setResizesToContents):

2010-06-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Swap WebGL and SiteSpecificQuirks attributes in the QWebSettings
        enum, to allow for binary compatibility with qtwebkit-2.0, where
        WebGL is not in the settings but SiteSpecificQuirks will be.

        * Api/qwebsettings.h:

2010-06-15  Darin Adler  <darin@apple.com>

        Fix build.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::shouldClose): Call loader()->shouldClose().

2010-06-15  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Rename NotificatioIconWrapper to NotificationWrapper
        https://bugs.webkit.org/show_bug.cgi?id=40571

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationWrapper::NotificationWrapper):
        (WebCore::NotificationWrapper::close):
        (WebCore::NotificationWrapper::title):
        (WebCore::NotificationWrapper::message):
        (WebCore::NotificationWrapper::iconData):
        (WebCore::NotificationWrapper::notificationClosed):
        (WebCore::NotificationPresenterClientQt::displayNotification):
        (WebCore::NotificationPresenterClientQt::cancel):
        (WebCore::NotificationPresenterClientQt::notificationForWrapper):
        * WebCoreSupport/NotificationPresenterClientQt.h:
        (WebCore::NotificationWrapper::~NotificationWrapper):

2010-06-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, Symbian build fix.

        [Qt] Update the def file with recent new exports.

        * symbian/eabi/QtWebKitu.def:

2010-06-15  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed.

        Fix typo in reviewer name in r61187

2010-06-15  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Fraser.

        [Qt] Build fix for Qt minimal after r61121
        https://bugs.webkit.org/show_bug.cgi?id=40624

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationIconWrapper::NotificationIconWrapper):
        (WebCore::NotificationIconWrapper::close):
        (WebCore::NotificationIconWrapper::title):
        (WebCore::NotificationIconWrapper::message):
        (WebCore::NotificationIconWrapper::iconData):
        (WebCore::NotificationIconWrapper::notificationClosed):
        * WebCoreSupport/NotificationPresenterClientQt.h:
        (WebCore::NotificationIconWrapper::~NotificationIconWrapper):

2010-06-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, Symbian build fix.

        [Qt] Update the def file with recent new exports.

        * symbian/eabi/QtWebKitu.def:

2010-06-13  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Platform plugin support for Notifications UI
        https://bugs.webkit.org/show_bug.cgi?id=40005

        Add an interface to the platform plugin to display notifications.
        Implemented the notification in the example platform plugin. 
        This interface is enabled by default, but could be turned off with
        a build flag. The platform plugin should control its own lifecycle,
        so now the close timer applies only when using the QSystemTrayIcon.
        That's because QSystemTrayIcon does not inform its caller when it
        is closed.

        Changed the way NotificationPresenterClientQt is deleted because it
        is being accessed when GC is deleting the Notification objects.
        NotificationPresenterClientQt is now detaching itself from the
        Notifications before it is deleted.

        * Api/qwebkitplatformplugin.h:
        (QWebNotificationPresenter::QWebNotificationPresenter):
        (QWebNotificationPresenter::~QWebNotificationPresenter):
        (QWebKitPlatformPlugin::):
        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationIconWrapper::NotificationIconWrapper):
        (WebCore::NotificationIconWrapper::title):
        (WebCore::NotificationIconWrapper::message):
        (WebCore::NotificationIconWrapper::iconData):
        (WebCore::NotificationPresenterClientQt::~NotificationPresenterClientQt):
        (WebCore::NotificationIconWrapper::notificationClosed):
        (WebCore::NotificationPresenterClientQt::displayNotification):
        (WebCore::NotificationPresenterClientQt::cancel):
        (WebCore::NotificationPresenterClientQt::notificationForWrapper):
        (WebCore::NotificationPresenterClientQt::removeReplacedNotificationFromQueue):
        (WebCore::NotificationPresenterClientQt::detachNotification):
        * WebCoreSupport/NotificationPresenterClientQt.h:
        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::QtPlatformPlugin::createNotificationPresenter):
        * WebCoreSupport/QtPlatformPlugin.h:
        * examples/platformplugin/WebNotificationPresenter.cpp: Added.
        (WebNotificationWidget::WebNotificationWidget):
        (WebNotificationWidget::~WebNotificationWidget):
        (WebNotificationWidget::showNotification):
        (WebNotificationWidget::event):
        * examples/platformplugin/WebNotificationPresenter.h: Added.
        (WebNotificationPresenter::WebNotificationPresenter):
        (WebNotificationPresenter::~WebNotificationPresenter):
        (WebNotificationPresenter::showNotification):
        * examples/platformplugin/WebPlugin.cpp:
        (WebPlugin::supportsExtension):
        * examples/platformplugin/WebPlugin.h:
        (WebPlugin::createNotificationPresenter):
        * examples/platformplugin/platformplugin.pro:
        * examples/platformplugin/qwebkitplatformplugin.h:
        (QWebNotificationPresenter::QWebNotificationPresenter):
        (QWebNotificationPresenter::~QWebNotificationPresenter):
        (QWebKitPlatformPlugin::):

2010-06-14  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] navigator.geolocation support for Qt port
        https://bugs.webkit.org/show_bug.cgi?id=39724

        Implement ChromeClientQt::requestGeolocationPermissionForFrame() which delegates call to QWebPage::allowGeolocationRequest
        Layout and unit test cases for the are also added. 

        * Api/qwebpage.cpp:
        (QWebPage::allowGeolocationRequest):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::requestGeolocationPermissionForFrame):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setMockGeolocationPosition):
        (DumpRenderTreeSupportQt::setMockGeolocationError):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (JSTestPage::shouldInterruptJavaScript):
        (JSTestPage::allowGeolocationRequest):
        (JSTestPage::setGeolocationPermission):
        (tst_QWebPage::geolocationRequestJS):

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/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::InspectorClientQt):
        (WebCore::InspectorClientQt::openInspectorFrontend):
        (WebCore::InspectorClientQt::releaseFrontendPage):
        (WebCore::InspectorClientQt::sendMessageToFrontend):
        * WebCoreSupport/InspectorClientQt.h:

2010-06-13  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos.

        Fix the QtWebKit which doesn't recognize the MIME type of HTML/TEXT in uppercase
        https://bugs.webkit.org/show_bug.cgi?id=39492

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMEType):

2010-06-08  Robert Hogan  <robert@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] Add support for callShouldCloseOnWebView() to DRT
        https://bugs.webkit.org/show_bug.cgi?id=40330

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::shouldClose):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-06-12  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Kenneth Rohde Christiansen.

        Added an attribute to enable/disable site specific quirks mode in WebKit. 
        The attribute is enabled by default.

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

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2010-06-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix tst_qwebframe regression from http://trac.webkit.org/changeset/61062

        Only use cacheableBindingRootObject() if the object has QtOwnership.

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

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2010-06-13  Robert Hogan  <robert@webkit.org>

        Reviewed by Alexey Proskuryakov.

        FrameLoader::clear() clears JS objects that cached pages later rely on

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

        Fix the following tests for Qt:

        fast/events/pageshow-pagehide-on-back-cached.html
        fast/events/pageshow-pagehide-on-back-cached-with-frames.html
        fast/loader/input-element-page-cache-crash.html
        fast/dom/Window/timer-resume-on-navigation-back.html
        loader/go-back-to-different-window-size.html
        fast/dom/javascript-url-crash-function.html
        fast/dom/location-new-window-no-crash.html
        http/tests/security/javascriptURL/xss-ALLOWED-from-javascript-url-window-open.html

        which currently fail because the page's Qt-bindings runtime objects are
        cleared when navigating away from the page containing them.

        Track Qt-bindings objects in a separate ScriptController::cacheableRootBindingObject().
        RuntimeObjects tracked by this root object will not get invalidated on page navigations,
        so they will still be available when the pages containing them are retrieved from the
        b/f cache.

        This means the Qt bindings objects will only get cleared on Frame::pageDestroyed().

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2010-06-12  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add documentation to the QtWebkit bridge
        https://bugs.webkit.org/show_bug.cgi?id=35861

        The previous accepted patch was actually a faulty one; It was hard to trace since it's just a documentation
        change. The new patch amends that, with the correct snippets and grammar fixes.

        * docs/qtwebkit-bridge.qdoc:
        * docs/webkitsnippets/qtwebkit_bridge_snippets.cpp:
        (wrapInFunction):

2010-06-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Back-forward list dumping is incorrect

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

        Support dumping child history items in DRT.

        Unskip:

        fast/loader/frame-src-change-added-to-history.html
        fast/loader/frame-src-change-not-added-to-history.html
        fast/loader/frame-location-change-not-added-to-history.html

        * Api/qwebhistory.cpp:
        (QWebHistoryItemPrivate::core):
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::isTargetItem):
        (DumpRenderTreeSupportQt::historyItemTarget):
        (DumpRenderTreeSupportQt::getChildHistoryItems):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-06-11  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Typo error in QWebPluginFactory Documentation
        https://bugs.webkit.org/show_bug.cgi?id=40490

        * Api/qwebpluginfactory.cpp:

2010-06-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Second fix attempt for the build break introduced by r61002.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2010-06-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Fix build break introduced by r61002.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2010-05-31  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement the simple text code path.
        https://bugs.webkit.org/show_bug.cgi?id=40077

        Remove the FONT_FAST_PATH macro and use the Qt's
        fast text implementation instead of the one of WebKit.

        The Qt::TextBypassShaping flag is used to tell Qt to
        only use the glyph advances.

        Qt 4.7 is needed to get this flag thus the complex path is always
        used if QtWebKit is compiled against an earlier version.

        Contrary to the WebKit's implementation, the complex code path
        is taken if the text is RightToLeft, justified or is formatted
        with non-zero letter or word spacing.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2010-06-10  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Support for loading notification icons
        https://bugs.webkit.org/show_bug.cgi?id=40004

        Take into use the icon that was loaded for the notification.

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::show):

2010-06-10  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Memory leak in qwebpage unit test cases
        https://bugs.webkit.org/show_bug.cgi?id=40405

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::infiniteLoopJS):

2010-06-10  Raine Makelainen  <raine.makelainen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Impossible to set input method hints based HTML5 input types
        https://bugs.webkit.org/show_bug.cgi?id=40107

        EditorClientQt to set input method hints for "number", "tel",
        "email", and "url" HTML input elements.

        Tests for HTML input elements and input method hints added for
        QGraphicsWebView and QWebView.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * tests/qgraphicswebview/resources/input_types.html: Added.
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (GraphicsWebView::GraphicsWebView):
        (GraphicsWebView::fireMouseClick):
        (tst_QGraphicsWebView::focusInputTypes):
        * tests/qgraphicswebview/tst_qgraphicswebview.qrc: Added.
        * tests/qwebview/resources/input_types.html: Added.
        * tests/qwebview/tst_qwebview.cpp:
        (WebView::fireMouseClick):
        (tst_QWebView::focusInputTypes):
        * tests/qwebview/tst_qwebview.qrc:

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

        * Api/qwebframe.cpp:
         - Include RenderLayer.h since it's used in this file.

2010-06-10  Andy Shaw  <andy.shaw@nokia.com>

        Reviewed by Simon Hausmann.

        REGRESSION: [Qt] When dragging onto a page that handles the drag in Javascript it will be a move and not a copy by default
        https://bugs.webkit.org/show_bug.cgi?id=40401

        The correct pattern in Qt for Dnd events is to use acceptProposedAction() instead
        of accept().

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):

2010-06-09  Pierre Rossi  <pierre.rossi@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        QWebPage::findText() does not clear selection when passed empty string
        https://bugs.webkit.org/show_bug.cgi?id=31779

        * Api/qwebpage.cpp:
        (QWebPage::findText):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::findText):

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] PageClientQt.h has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40257

        * WebCoreSupport/PageClientQt.h:

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] InspectorClientQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40255

        * WebCoreSupport/InspectorClientQt.cpp:

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] FrameLoaderClientQt.h has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40251

        * WebCoreSupport/FrameLoaderClientQt.h:
        (WebCore::FrameLoaderClientQt::dispatchWillSendSubmitEvent):

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] EditorClientQt.h has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40249

        * WebCoreSupport/EditorClientQt.h:

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] EditCommandQt.cpp/h have coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40248

        * WebCoreSupport/EditCommandQt.cpp:
        (EditCommandQt::EditCommandQt):
        (EditCommandQt::~EditCommandQt):
        (EditCommandQt::redo):
        (EditCommandQt::undo):
        * WebCoreSupport/EditCommandQt.h:

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] DumpRenderTreeSupportQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40247

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::firstRectForCharacterRange):

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] DragClientQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40246

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Laszlo Gombos.

        [Qt] ContextMenuClientQt.h has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40242

        * WebCoreSupport/ContextMenuClientQt.h:

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] ChromeClientQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40240

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::pageRect):
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::print):
        (WebCore::ChromeClientQt::attachRootGraphicsLayer):
        (WebCore::ChromeClientQt::visibleRectForTiledBackingStore):

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/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::InspectorClientQt):
        (WebCore::InspectorClientQt::openInspectorFrontend):
        (WebCore::InspectorFrontendClientQt::InspectorFrontendClientQt):
        (WebCore::InspectorFrontendClientQt::closeWindow):
        * WebCoreSupport/InspectorClientQt.h:

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/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::InspectorClientQt):
        (WebCore::InspectorClientQt::openInspectorFrontend):
        (WebCore::InspectorClientQt::releaseFrontendPage):
        (WebCore::InspectorClientQt::sendMessageToFrontend):
        * WebCoreSupport/InspectorClientQt.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.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setEditingBehavior):

2010-06-07  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] NotificationPresenterClientQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40256

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::show):

2010-06-06  Antonio Gomes  <tonikitoo@webkit.org>, Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Christiansen, Eric Seidel.

        [Qt] Expose the editing behavior setting in DRT to test all editing code paths
        https://bugs.webkit.org/show_bug.cgi?id=39680

        Make setEditingBehavior() a no-operation if the editingBehavior
        argument is not recognized to avoid using an uninitialized variable.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setEditingBehavior):

2010-06-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Symbian build fix.

        [Qt] Updated the def file with recent new exports.

        * symbian/eabi/QtWebKitu.def:

2010-06-03  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Don't send notifications event after the page was navigated away
        https://bugs.webkit.org/show_bug.cgi?id=40127

        Added a check before sending events to the notification and before logging.

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::cancel):
        (WebCore::NotificationPresenterClientQt::sendEvent):

2010-06-02  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Shinichiro Hamaji.

        [Qt] Fix compilation with QT_NO_PROPERTIES
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * Api/qwebpage.cpp:
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::openInspectorFrontend):

2010-06-02  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Shared platform plugin
        https://bugs.webkit.org/show_bug.cgi?id=39968

        Allow several instances of class QtPlatformPlugin to share the QWebKitPlatformPlugin
        object provided by a plugin.

        Updated plugin interface version number due to ABI breaking change.

        * Api/qwebkitplatformplugin.h:
        (QWebKitPlatformPlugin::~QWebKitPlatformPlugin):
        * WebCoreSupport/QtPlatformPlugin.cpp:
        (WebCore::QtPlatformPlugin::load):
        (WebCore::QtPlatformPlugin::~QtPlatformPlugin):
        (WebCore::QtPlatformPlugin::plugin):
        * WebCoreSupport/QtPlatformPlugin.h:
        * examples/platformplugin/qwebkitplatformplugin.h:
        (QWebKitPlatformPlugin::~QWebKitPlatformPlugin):

2010-06-02  Raine Makelainen  <raine.makelainen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] On Maemo6 platform auto upper case and predictive text input method hints are not disabled for password field.
        https://bugs.webkit.org/show_bug.cgi?id=40062
       
        Introducing Q_WS_MAEMO_6 for Maemo6 specific code. Enabling code that sets input 
        method hints Qt::ImhNoAutoUppercase and Qt::ImhNoPredictiveText true for Maemo6.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):

2010-06-01  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix the lifecycle of notification objects
        https://bugs.webkit.org/show_bug.cgi?id=40003

        Notification objects are not tightly related to the page that created them,
        and should be decoupled from the page.
        Create one NotificationPresenter that handles all notifications.
        Add ref/deref to the notification objects when they are added/removed from
        the queue of active notifications. The same technique is used for XMLHttpRequest.
        Instead of deleting all notifications associated with a page when the page is navigated,
        delete them on a timer, using the same timeout that QSystemTrayIcon is using.
        Break up the show() method into smaller methods.
        Use OwnPtr instead of raw pointer for QSystemTrayIcon.
        Move creating the QIcon to just before showing it in the QSyetemTrayIcon.

        No new tests as this is just a refactoring. Existing notifications test cover the code.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::notificationPresenter):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setNotificationsReceiver):
        (DumpRenderTreeSupportQt::allowNotificationForOrigin):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidClearWindowObjectInWorld):
        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (WebCore::NotificationPresenterClientQt::notificationPresenter):
        (WebCore::NotificationIconWrapper::NotificationIconWrapper):
        (WebCore::NotificationIconWrapper::~NotificationIconWrapper):
        (WebCore::NotificationIconWrapper::close):
        (WebCore::NotificationPresenterClientQt::NotificationPresenterClientQt):
        (WebCore::NotificationPresenterClientQt::removeClient):
        (WebCore::NotificationPresenterClientQt::show):
        (WebCore::NotificationPresenterClientQt::displayNotification):
        (WebCore::NotificationPresenterClientQt::cancel):
        (WebCore::NotificationPresenterClientQt::notificationObjectDestroyed):
        (WebCore::NotificationPresenterClientQt::requestPermission):
        (WebCore::NotificationPresenterClientQt::sendEvent):
        (WebCore::NotificationPresenterClientQt::removeReplacedNotificationFromQueue):
        (WebCore::NotificationPresenterClientQt::dumpReplacedIdText):
        (WebCore::NotificationPresenterClientQt::dumpShowText):
        * WebCoreSupport/NotificationPresenterClientQt.h:
        (WebCore::NotificationPresenterClientQt::addClient):

2010-06-01  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add documentation to the QtWebkit bridge
        https://bugs.webkit.org/show_bug.cgi?id=35861

        This patch includes comprehensive qdoc documentation for the QtWebkit bridge.

        * docs/qtwebkit-bridge.qdoc: Added.
        * docs/qtwebkit.qdoc:
        * docs/webkitsnippets/doc_src_qtscript.qdoc: Added.
        * docs/webkitsnippets/qtwebkit_bridge_snippets.cpp: Added.
        (wrapInFunction):

2010-06-01  Raine Makelainen  <raine.makelainen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt]: REGRESSION(r58703): QWebSettings::JavascriptCanAccessClipboard has wrong case in "Javascript" part.
        https://bugs.webkit.org/show_bug.cgi?id=39878        

        QWebSettings::JavaScriptCanAccessClipboard reverted back to
        QWebSettings::JavascriptCanAccessClipboard. QWebSettings::DOMPasteAllowed enum removed.

        Value of QWebSettings::JavascriptCanAccessClipboard to setDOMPasteAllowed and 
        setJavaScriptCanAccessClipboard of WebCore::Settings.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2010-06-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Rename versioning .pri file to what Qt's mkspecs/features/qt.pri expects.

        * qt_webkit_version.pri: Renamed from WebKit/qt/qtwebkit_version.pri.

2010-05-31  Lyon Chen  <liachen@rim.com>

        Reviewed by Kent Tamura.

        Enum value FORWARD, BACKWARD, RIGHT, LEFT are causing macro conflicts.
        https://bugs.webkit.org/show_bug.cgi?id=35530

        Change enum EAlteration from { MOVE, EXTEND } to { AlterationMove, AlterationExtend } and enum EDirection { FORWARD, BACKWARD, RIGHT, LEFT} to { DirectionForward, DirectionBackward, DirectionRight, DirectionLeft } to avoid macro conflict, and also better coding style conformance.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2010-05-31  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Escape backslashes in the .pro files

        qmake in Qt 4.7 warns about unescaped backspaces and deprecates them.

        * Api/DerivedSources.pro:
        * docs/docs.pri:

2010-05-30  Lyon Chen  <liachen@rim.com>

        Reviewed by Kent Tamura.

        This is a coding style cleanup before fixing to bug 35530.

        Enum value FORWARD, BACKWARD, RIGHT, LEFT are causing macro conflicts.
        https://bugs.webkit.org/show_bug.cgi?id=35530

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::registerCommandForUndo):
        (WebCore::EditorClientQt::handleKeyboardEvent):

2010-05-29  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Kenneth Rohde Christiansen.

        Added a WebAction to stop all pending page refresh/redirect
        requests set through the <meta http-equiv="refresh"...> tag.

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

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):
        * Api/qwebpage.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::testStopScheduledPageRefresh):

2010-05-28  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.
    
        Add a missing #if ENABLE(), some null checking.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dynamicPropertyChangeEvent):

2010-05-28  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=39874
        [Qt] Make tiled backing store more configurable
    
        Make tile size, tile creation delay and tiling area dynamically configurable.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dynamicPropertyChangeEvent):

2010-05-28  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed build fix after r60348.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setNotificationsReceiver):

2010-05-28  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Pass all web notification layout tests
        https://bugs.webkit.org/show_bug.cgi?id=39146

        Add support for multiple simultaneous notifications.
        Add a private callback mechanism to the client for security checks. 
        Notifications are disabled if the client does not set the callbacks. 
        Support replaceId and cancel.
        Send close and display events when needed.   

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setNotificationsReceiver):
        (DumpRenderTreeSupportQt::allowNotificationForOrigin):
        (DumpRenderTreeSupportQt::setCheckPermissionFunction):
        (DumpRenderTreeSupportQt::setRequestPermissionFunction):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidClearWindowObjectInWorld):
        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (NotificationIconWrapper::NotificationIconWrapper):
        (NotificationIconWrapper::~NotificationIconWrapper):
        (NotificationPresenterClientQt::NotificationPresenterClientQt):
        (NotificationPresenterClientQt::show):
        (NotificationPresenterClientQt::cancel):
        (NotificationPresenterClientQt::notificationObjectDestroyed):
        (NotificationPresenterClientQt::requestPermission):
        (NotificationPresenterClientQt::checkPermission):
        (NotificationPresenterClientQt::allowNotificationForOrigin):
        (NotificationPresenterClientQt::clearNotificationsList):
        (NotificationPresenterClientQt::sendEvent):
        * WebCoreSupport/NotificationPresenterClientQt.h:
        (WebCore::NotificationPresenterClientQt::~NotificationPresenterClientQt):
        (WebCore::NotificationPresenterClientQt::setReceiver):

2010-05-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Platform plugin example
        https://bugs.webkit.org/show_bug.cgi?id=39489

        Adding a Qt platform plugin example to repository.

        * examples/platformplugin/README: Added.
        * examples/platformplugin/WebPlugin.cpp: Added.
        (Popup::populateList):
        (Popup::onItemSelected):
        (WebPopup::WebPopup):
        (WebPopup::~WebPopup):
        (WebPopup::createSingleSelectionPopup):
        (WebPopup::createMultipleSelectionPopup):
        (WebPopup::createPopup):
        (WebPopup::show):
        (WebPopup::hide):
        (WebPopup::popupClosed):
        (WebPopup::itemClicked):
        (SingleSelectionPopup::SingleSelectionPopup):
        (MultipleItemListDelegate::MultipleItemListDelegate):
        (MultipleItemListDelegate::paint):
        (MultipleSelectionPopup::MultipleSelectionPopup):
        (WebPlugin::supportsExtension):
        * examples/platformplugin/WebPlugin.h: Added.
        (Popup::Popup):
        (WebPlugin::createSelectInputMethod):
        * examples/platformplugin/platformplugin.pro: Added.
        * examples/platformplugin/qwebkitplatformplugin.h: Copied from WebKit/qt/Api/qwebkitplatformplugin.h.
        (QWebSelectData::~QWebSelectData):
        (QWebSelectData::):
        (QWebSelectMethod::~QWebSelectMethod):
        (QWebKitPlatformPlugin::~QWebKitPlatformPlugin):
        (QWebKitPlatformPlugin::):

2010-05-25  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ojan Vafai.

        [Qt] Expose the editing behavior setting in DRT to test all editing code paths
        https://bugs.webkit.org/show_bug.cgi?id=39680

        Add support to Qt's DRT to setting the editing behavior. Patch is a follow up of
        bug 38603, which just stubbed out the Qt bits of it.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp: Implementation of editing behavior control.
        (DumpRenderTreeSupportQt::setEditingBehavior):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-05-24  Robert Hogan  <robert@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] DRT Support for removeOriginAccessWhitelistEntry

        Unskips http/tests/xmlhttprequest/origin-whitelisting-removal.html

        [Qt] DRT Support for removeOriginAccessWhitelistEntry
        https://bugs.webkit.org/show_bug.cgi?id=39565

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::removeWhiteListAccessFromOrigin):
        * WebCoreSupport/DumpRenderTreeSupportQt.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

        * Api/qwebframe.cpp:
        (QWebFrame::setTextSizeMultiplier): Call functions on FrameView.
        (QWebFrame::textSizeMultiplier): Ditto.
        (QWebFrame::setZoomFactor): Ditto.
        (QWebFrame::zoomFactor): Ditto.
        * Api/qwebpage.cpp:
        (QWebPage::setContentEditable): Removed call to empty function,
        removeEditingStyleFromBodyElement.

2010-05-23  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: The rocket animation doesn't scroll together with the page
        https://bugs.webkit.org/show_bug.cgi?id=39517

        A previous fix to this issue was overridden by the PageClientQt refactor. Reapplying.

        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQGraphicsWidget::update):

2010-05-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Update the Symbian version for the user agent
        https://bugs.webkit.org/show_bug.cgi?id=38389

        Fixes a regression introduced by r58648. Ensure that the "Symbian" string
        is only listed one time in the User Agent string.

        In addition make an effort to align the User Agent string to already
        released WebKit based products for Symbian.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2010-05-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Symbian build fix.

        [Qt] Updated the wins def file with one new export.

        The DRT symbols are still missing, but I can't build DRT ;(

        * symbian/bwins/QtWebKitu.def:

2010-05-20  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] WINSCW compile fix for qwebframe test
        https://bugs.webkit.org/show_bug.cgi?id=38722

        WINSCW cannot determine template type up the hierarchy
        to common base class.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-05-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Remove unused "old style" private APIs

        These symbols were introduced after QtWebKit v4.6
        so no-one should be using them

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:

2010-05-20  Rajiv Ramanasankaran  <rajiv.ramanasankaran@nokia.com>

        Reviewed by Simon Hausmann.
        
        [Qt] QWebPage::inputMethodQuery() returns wrong values for Qt::ImCursorPosition, Qt::ImAnchorPosition
        https://bugs.webkit.org/show_bug.cgi?id=38779

        The earlier implementation was written with the assumption that in this scenario the 
        anchor position always corresponds to the START index and that the current cursor position
        always corresponds to the END index in WebKit.

        Updated the implementation of QWebPage::inputMethodQuery(Qt::ImCursorPosition) and 
        QWebPage::inputMethodQuery(Qt::ImAnchorPosition) for the case where the Editor is not in
        composition mode. In the non-composition mode, the Anchor and the Current cursor positions
        correspond to the Base and Extent position offsets in WebKit.

        Also added the auto-tests for the RIGHT to LEFT and LEFT to RIGHT selections.

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery): Now returning correct values for Qt::ImCursorPosition and
        Qt::ImAnchorPosition when the Editor is not in composition mode. 
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods): Added auto-tests for RIGHT to LEFT and LEFT to RIGHT selections

2010-05-20  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Skipping popup focus test for maemo
        https://bugs.webkit.org/show_bug.cgi?id=39314

        Skipping popup focus test for maemo in qwebframe auto test.

        The test method tst_QWebFrame::popupFocus() was testing popup focus AND input
        field focus. The input field focus has been removed from the method popupFocus()
        and a new test method named inputFieldFocus() has been added. Finally the test 
        method popupFocus() has been skipped for maemo.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-05-19  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Crash fix in the HistoryController.

        The problem was casued by a documented feature of the QWebFrame::setHtml().
        The method doesn't affect a browsing history (doesn't create a HistoryItem instance), so
        m_currentItem and m_previousItem are not set.

        A null check was added.

        [Qt] The QWebPage crashes on history.pushState().
        https://bugs.webkit.org/show_bug.cgi?id=38840

        * tests/qwebhistory/tst_qwebhistory.cpp:
        (tst_QWebHistory::popPushState_data):
        (tst_QWebHistory::popPushState):

2010-05-19  Antti Koivisto  <koivisto@iki.fi>

        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] TiledBackingStore updates broken when not using resizesToContents mode
        https://bugs.webkit.org/show_bug.cgi?id=39359
        
        Put the back logic that was lost in refactoring.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::visibleRectForTiledBackingStore):
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQGraphicsWidget::graphicsItemVisibleRect):
        * WebCoreSupport/PageClientQt.h:
        (WebCore::PageClientQWidget::viewResizesToContentsEnabled):
        (WebCore::PageClientQGraphicsWidget::viewResizesToContentsEnabled):

2010-05-19  Simon Hausmann  <simon.hausmann@nokia.com>

        Symbian build fix.

        [Qt] Updated the def file with exports needed for DumpRenderTree.

        * symbian/eabi/QtWebKitu.def:

2010-05-19  Denis Dzyubenko <denis.dzyubenko@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        When creating the UA, do not sassmue the language code is a
        two-letter iso639-1 code.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2010-05-18  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Move visible rect calculation from QGraphicsWebViewPrivate to PageClientQGraphicsWidget
        https://bugs.webkit.org/show_bug.cgi?id=39294

        * Api/qgraphicswebview.cpp:
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQGraphicsWidget::graphicsItemVisibleRect):
        * WebCoreSupport/PageClientQt.h:

2010-05-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Symbian build fix.

        [Qt] Updated the def file with new exports after r59335.

        * symbian/eabi/QtWebKitu.def:

2010-05-18  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix QWebHistory serialization.

        Regression was caused by bug 33224. The streaming function
        should generate a documentSequenceNumber for all loaded values.

        [Qt] tst_QWebHistory::serialize_2() fails
        https://bugs.webkit.org/show_bug.cgi?id=37322

        * Api/qwebhistory.cpp:
        (operator>>):

2010-05-17  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix compilation with QT_NO_COMBOBOX
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createSelectPopup):
        * WebCoreSupport/QtFallbackWebPopup.cpp:
        * WebCoreSupport/QtFallbackWebPopup.h:

2010-05-17  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=39218
        [Qt] Tiled backing store tiles sometimes flicker when exiting a zoom animation
        
        Tiles sometimes flicker when exiting a zoom animation. This happens as a result
        of the visible rectangle being momentarily out of sync.
        
        Instead of updating the visible rect by explicitly setting it, pull it through
        the client and recompute in WebKit the level.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::paint):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::visibleRectForTiledBackingStore):
        * WebCoreSupport/ChromeClientQt.h:

2010-05-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Unskip fast/loader/main-document-url-for-non-http-loads.html

        Fix FrameLoaderClientQt.cpp to print relative filename paths correctly.

        Move qt_* functions in FrameLoaderClientQt, EditorClientQt, and NotificationPresenterClientQt
        to DumpRenderTreeSupportQt. Create new functions to replace them in DumpRenderTreeSupportQt.
        Support for the old function names is retained until confirmed that no one uses them outside
        QtWebKit.

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::dumpFrameLoader):
        (DumpRenderTreeSupportQt::dumpResourceLoadCallbacks):
        (DumpRenderTreeSupportQt::dumpResourceLoadCallbacksPath):
        (DumpRenderTreeSupportQt::setWillSendRequestReturnsNullOnRedirect):
        (DumpRenderTreeSupportQt::setWillSendRequestReturnsNull):
        (DumpRenderTreeSupportQt::setWillSendRequestClearHeaders):
        (DumpRenderTreeSupportQt::dumpEditingCallbacks):
        (DumpRenderTreeSupportQt::dumpSetAcceptsEditing):
        (DumpRenderTreeSupportQt::dumpNotification):
        (qt_dump_frame_loader):
        (qt_dump_resource_load_callbacks):
        (qt_dump_resource_load_callbacks_path):
        (qt_set_will_send_request_returns_null_on_redirect):
        (qt_set_will_send_request_returns_null):
        (qt_set_will_send_request_clear_headers):
        (qt_dump_editing_callbacks):
        (qt_dump_set_accepts_editing):
        (qt_dump_notification):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        * WebCoreSupport/EditorClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (drtDescriptionSuitableForTestResult):
        * WebCoreSupport/FrameLoaderClientQt.h:
        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        * WebCoreSupport/NotificationPresenterClientQt.h:

2010-05-16  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt]Unskip security/set-form-autocomplete-attribute.html

        Add support for layoutTestController.elementDoesAutoCompleteForElementWithId().

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

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::elementDoesAutoCompleteForElementWithId):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-05-16  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Prospective Qt/Mac build fix.

        The friend declaration of QGraphicsWidget confuses gcc and thinks that it's an implicit
        forward declaration, moving the class into the WebCore namespace (WebCore::QGraphicsWidget).

        The declaration seems useless as no method of QGraphicsWidget is going to call anything
        in this class.

        * WebCoreSupport/PageClientQt.h:

2010-05-15  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by Simon Hausmann.

        This patch fixes the build failure of WebKit on Linux for Qt4.5
        https://bugs.webkig.org/show_bug.cgi?id=39108

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::syncLayers):
        * WebCoreSupport/QtPlatformPlugin.cpp:

2010-05-14  Kent Hansen <kent.hansen@nokia.com>, Jocelyn Turcotte <jocelyn.turcotte@nokia.com>, Tor Arne Vestbø <tor.arne.vestbo@nokia.com>, Henry Haverinen <henry.haverinen@nokia.com>, Jedrzej Nowacki <jedrzej.nowacki@nokia.com>, Andreas Kling <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Merge overhaul of the QtWebKit API documentation

        Numerous improvements in wording, qdoc warning fixes and
        clarifications, done in a team work effort.

        No functional changes.

        * Api/qwebdatabase.cpp:
        * Api/qwebelement.cpp:
        * Api/qwebframe.cpp:
        * Api/qwebhistoryinterface.cpp:
        * Api/qwebinspector.cpp:
        * Api/qwebkitversion.cpp:
        * Api/qwebpage.cpp:
        * Api/qwebpluginfactory.cpp:
        * Api/qwebsecurityorigin.cpp:
        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:
        * docs/qtwebkit.qdoc:
        * docs/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp:
        (wrapInFunction):
        * docs/webkitsnippets/webelement/main.cpp:
        (findButtonAndClick):
        (autocomplete1):
        (autocomplete2):
        (main):

2010-05-14  Martin Smith  <msmith@trolltech.com>

        Reviewed by Simon Hausmann.

        Documentation: Fix overview grouping.

        * docs/qtwebkit.qdoc:

2010-05-14  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Laszlo Gombos.

        [QT] Update the Symbian version for the user agent
        https://bugs.webkit.org/show_bug.cgi?id=38389

        Update the user agent for Symbian^2 to Symbian^4

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2010-05-14  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

        Implemented createJavaAppletWidget to activate Java applet support.

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):

2010-05-13  Simon Hausmann  <hausmann@webkit.org>

        Symbian build fix.

        [Qt] Updated the def file with new exports.

        * symbian/eabi/QtWebKitu.def: Add missing gc symbol for QtLauncher

2010-05-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Symbian build fix.

        [Qt] Updated the def file with new exports.

        * symbian/eabi/QtWebKitu.def:

2010-05-11  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] tst_QWebPage::inputMethods failing on Maemo5
        https://bugs.webkit.org/show_bug.cgi?id=38685

        Check if the SIP (Software Input Panel) is triggered, which normally
        happens on mobile platforms, when a user input form receives a mouse click.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2010-05-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] REGRESSION(r58497) tst_QGraphicsWebView::crashOnViewlessWebPages() is failing
        https://bugs.webkit.org/show_bug.cgi?id=38655

        Fix double free by moving the connect till after the resize.

        The bug is causes by the fact that a resize of an empty page causes a
        layout, thus deleting the qgraphicswebview before setHtml is called,
        which then deletes it again, causing a double free.

        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::crashOnViewlessWebPages):

2010-05-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Regression(r59152): QGraphicsPageClient is not forwarding scroll and update events to view
        https://bugs.webkit.org/show_bug.cgi?id=39016

        Some forward calls got lost during the refatory.

        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQGraphicsWidget::scroll):
        (WebCore::PageClientQGraphicsWidget::update):

2010-05-13  Antonio Gomes  <tonikitoo@webkit.org>, Yi Shen <yi.4.shen@nokia.com>

        Reviewed by Kenneth Christiansen.

        [Qt] Add LayoutTestController interface: computedStyleIncludingVisitedInfo
        https://bugs.webkit.org/show_bug.cgi?id=37759

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::markerTextForListItem):
        (DumpRenderTreeSupportQt::computedStyleIncludingVisitedInfo):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-05-12  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Nested overflow div does not scroll
        https://bugs.webkit.org/show_bug.cgi?id=38641

        Modify qtwebkit_webframe_scrollOverflow, if the current node's render layer
        does not scroll it will try and scroll the parent's render layer. Also export
        qtwebkit_webframe_scrollOverflow so we can use it independently of
        qtwebkit_webframe_scrollRecursively

        * Api/qwebframe.cpp:
        (qtwebkit_webframe_scrollOverflow):
        (qtwebkit_webframe_scrollRecursively):

2010-05-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Remove the unneeded check for QWidgetPageClient @QGraphicsWebView::detachCurrentPage
        https://bugs.webkit.org/show_bug.cgi?id=38989

        Reasons:
        - There is no need to check for a QWidgetPageClient-based in QGraphicsWebView.
        - The client has always to be deleted anyways.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::detachPage):

2010-05-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        Add a comment to explain the web inspector dynamic property url hook
        and that it's there on purpose :)

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

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::openInspectorFrontend):

2010-05-11  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Implement a detachCurrentPage method for QGraphicsWebView and QWebView
        https://bugs.webkit.org/show_bug.cgi?id=38939

        unsetPageIfExists method was renamed to detachCurrentPage method and is now responsible
        for doing all the unset logic of page and pageClient references previously done by
        the Q{Graphics}WebView destructor(s).

        It is a code clean up, no behaviour change.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::~QGraphicsWebViewPrivate):
        (QGraphicsWebView::~QGraphicsWebView):
        (QGraphicsWebViewPrivate::detachCurrentPage):
        (QGraphicsWebView::setPage):
        * Api/qwebview.cpp:
        (QWebViewPrivate::~QWebViewPrivate):
        (QWebView::~QWebView):
        (QWebViewPrivate::detachCurrentPage):
        (QWebView::setPage):

2010-05-11  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] emit initialLayoutCompleted signal from FrameLoaderClientQt::dispatchDidFirstVisuallyNonEmptyLayout
        https://bugs.webkit.org/show_bug.cgi?id=38921

        Emit initialLayoutCompleted signal from FrameLoaderClientQt::dispatchDidFirstVisuallyNonEmptyLayout
        instead of FrameLoaderClientQt::dispatchDidFirstLayout , because the former ensures that a
        visual content layed out on the frame.

        It matches to QWebFrame::initialLayoutCompleted signal documentation at:

        "... This is the first time you will see contents displayed on the frame ..."

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientQt::dispatchDidFirstVisuallyNonEmptyLayout):

2010-05-11  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add PageClientQGraphicsWidget specific implementation.
        QGraphicsWebViewPrivate doesn't inherit QWebPageClient anymore
        and the needed functions were moved to this new PageClient class,
        including Tiling and Accelerated Composite specific ones.

        [Qt] PageClientQt specific implementation for QGraphicsWidget
        https://bugs.webkit.org/show_bug.cgi?id=37866

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::QGraphicsWebViewPrivate):
        (QGraphicsWebViewPrivate::~QGraphicsWebViewPrivate):
        (QGraphicsWebViewPrivate::syncLayers):
        (QGraphicsWebViewPrivate::_q_scaleChanged):
        (QGraphicsWebView::event):
        (QGraphicsWebView::setPage):
        (QGraphicsWebView::updateGeometry):
        (QGraphicsWebView::setGeometry):
        (QGraphicsWebView::setResizesToContents):
        * WebCoreSupport/PageClientQt.cpp:
        (WebCore::PageClientQGraphicsWidget::~PageClientQGraphicsWidget):
        (WebCore::PageClientQGraphicsWidget::scroll):
        (WebCore::PageClientQGraphicsWidget::update):
        (WebCore::PageClientQGraphicsWidget::createOrDeleteOverlay):
        (WebCore::PageClientQGraphicsWidget::syncLayers):
        (WebCore::PageClientQGraphicsWidget::setRootGraphicsLayer):
        (WebCore::PageClientQGraphicsWidget::markForSync):
        (WebCore::PageClientQGraphicsWidget::updateCompositingScrollPosition):
        (WebCore::PageClientQGraphicsWidget::updateTiledBackingStoreScale):
        (WebCore::PageClientQGraphicsWidget::setInputMethodEnabled):
        (WebCore::PageClientQGraphicsWidget::inputMethodEnabled):
        (WebCore::PageClientQGraphicsWidget::setInputMethodHint):
        (WebCore::PageClientQGraphicsWidget::cursor):
        (WebCore::PageClientQGraphicsWidget::updateCursor):
        (WebCore::PageClientQGraphicsWidget::palette):
        (WebCore::PageClientQGraphicsWidget::screenNumber):
        (WebCore::PageClientQGraphicsWidget::ownerWidget):
        (WebCore::PageClientQGraphicsWidget::geometryRelativeToOwnerWidget):
        (WebCore::PageClientQGraphicsWidget::pluginParent):
        (WebCore::PageClientQGraphicsWidget::style):
        * WebCoreSupport/PageClientQt.h:
        (WebCore::QGraphicsItemOverlay::page):
        (WebCore::QGraphicsItemOverlay::boundingRect):
        (WebCore::QGraphicsItemOverlay::paint):
        (WebCore::QGraphicsItemOverlay::prepareGraphicsItemGeometryChange):
        (WebCore::PageClientQGraphicsWidget::PageClientQGraphicsWidget):
        (WebCore::PageClientQGraphicsWidget::isQWidgetClient):
        (WebCore::PageClientQGraphicsWidget::allowsAcceleratedCompositing):
        (WebCore::PageClientQGraphicsWidget::):

2010-05-09  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Crash in QGraphicsWebViewPrivate::~QGraphicsWebViewPrivate when animation were used
        https://bugs.webkit.org/show_bug.cgi?id=38574

        The fix uses a QWeakPointer for rootGraphicsLayer, protecting from a crash in case the layer is deleted before the QGraphicsWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::QGraphicsWebViewPrivate):
        (QGraphicsWebViewPrivate::~QGraphicsWebViewPrivate):
        (QGraphicsWebViewPrivate::setRootGraphicsLayer):
        (QGraphicsWebViewPrivate::updateCompositingScrollPosition):

2010-05-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Platform plugin
        https://bugs.webkit.org/show_bug.cgi?id=38438

        Select popups delegate private API. To provide select popup delegates
        a plugin that implements QWebKitPlatformPlugin must be found
        in QCoreApplication::libraryPaths.

        * Api/headers.pri:
        * Api/qwebkitplatformplugin.h: Added.
        (QWebSelectData::~QWebSelectData):
        (QWebSelectData::):
        (QWebSelectMethod::~QWebSelectMethod):
        (QWebKitPlatformPlugin::~QWebKitPlatformPlugin):
        (QWebKitPlatformPlugin::):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createSelectPopup):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/QtPlatformPlugin.cpp: Added.
        (WebCore::SelectData::SelectData):
        (WebCore::SelectData::itemText):
        (WebCore::SelectData::itemToolTip):
        (WebCore::SelectData::itemIsEnabled):
        (WebCore::SelectData::itemCount):
        (WebCore::SelectData::itemIsSelected):
        (WebCore::SelectData::multiple):
        (WebCore::SelectData::itemType):
        (WebCore::SelectInputMethodWrapper::SelectInputMethodWrapper):
        (WebCore::SelectInputMethodWrapper::show):
        (WebCore::SelectInputMethodWrapper::hide):
        (WebCore::SelectInputMethodWrapper::selectItem):
        (WebCore::SelectInputMethodWrapper::didHide):
        (WebCore::getPluginObject):
        (WebCore::QtPlatformPlugin::~QtPlatformPlugin):
        (WebCore::QtPlatformPlugin::plugin):
        (WebCore::QtPlatformPlugin::createSelectInputMethod):
        * WebCoreSupport/QtPlatformPlugin.h: Added.
        (WebCore::QtPlatformPlugin::QtPlatformPlugin):

2010-05-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Document a limitation of QWebPage::linkClicked
        https://bugs.webkit.org/show_bug.cgi?id=37694

        * Api/qwebpage.cpp:

2010-05-02  Simon Hausmann  <hausmann@webkit.org>

        [Qt] Unreviewed, QtWebKit versioning for the trunk.

        The next version is going to be 2.1, based off the trunk.

        * Api/qwebkitglobal.h:

2010-05-07  Simon Hausmann  <simon.hausmann@nokia.com>

        Symbian build fix.

        [Qt] Updated the def file with absent exports.

        * symbian/eabi/QtWebKitu.def:

2010-05-06  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Patch to fix compilation warnings for QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=37428

        Patch by Alexis Menard <alexis.menard@nokia.com>

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::itemChange):

2010-05-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Replace public inspector url with private property for QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=35340

        Replace the public API with a private dynamic property until this feature
        is ready.

        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::openInspectorFrontend):
        * symbian/bwins/QtWebKitu.def:
        * symbian/eabi/QtWebKitu.def:

2010-05-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage viewMode property
        https://bugs.webkit.org/show_bug.cgi?id=38119

        Rename the property from wrt_viewMode to _q_viewMode.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dynamicPropertyChangeEvent):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::viewModes):

2010-05-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        [Qt] Preserve binary compatibility with qtwebkit-2.0 branch

        Moved the WebGL attribute in QWebSettings to the end of the enum,
        to ensure that the numeric values of the enum values following it
        are the same as in the release branch.

        * Api/qwebsettings.h:

2010-05-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Expose HTMLTokenizer yielding parameters
        https://bugs.webkit.org/show_bug.cgi?id=37023

        Enables to set TimeDelay and ChunkSize for 
        HTMLTokenizer.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dynamicPropertyChangeEvent):

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

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2010-05-03  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add "willSendSubmitEvent" hook to WebFrameClient and FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=38397

        No tests (functionality is exposed only through native WebKit API.)

        * WebCoreSupport/FrameLoaderClientQt.h:
        (WebCore::FrameLoaderClientQt::dispatchWillSendSubmitEvent):

2010-05-03  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Prune dead code in QWebPage

        * Api/qwebpage.cpp:

2010-05-02  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation with QT_NO_BEARERMANAGEMENT
        https://bugs.webkit.org/show_bug.cgi?id=38324

        * Api/qwebsettings.cpp:

2010-04-29  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtWebKit versioning added
        https://bugs.webkit.org/show_bug.cgi?id=37207

        QtWebkit releases separated from Qt release cycle.

        * qtwebkit_version.pri: Added.

2010-05-02  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage::userAgentForUrl is terrible API
        https://bugs.webkit.org/show_bug.cgi?id=33875

        Simplify the creation of the user agent string to avoid some
        overhead for each loaded url.

        The static part of the user agent is cached so it only have
        to be made once.
        This creation has been made in order to simplify the code.

        The two variable: application name and current language are
        set dynamically when needed.
        The default locale is non longer created if the widget locale
        is used.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::userAgentApplicationName):
        (tst_QWebPage::userAgentLocaleChange):

2010-05-02  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: animation incorrect when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=38371

        This is a regression introduced with the invalidate-on-scroll code path, that uses QGraphicsWebViewPrivate::update()
        instead of QGraphicsWebViewPrivate::scroll(). The patch makes sure that the scrolling position is correct on
        each content update - this shouldn't have a performance impact - the only overhead is an additional value-test on each update.

        Tested by http://www.the-art-of-web.com/css/css-animation/

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::update):

2010-05-01  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add smart paste support

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate): Enable smart paste support by default.

2010-04-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Reinstate qt_drt_ symbol exports as of QtWebKit 4.6 release
        https://bugs.webkit.org/show_bug.cgi?id=38304

        This change provides backward compatibility with some previously
        exported private symbols. No new functionality introduced.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (qt_resumeActiveDOMObjects):
        (qt_suspendActiveDOMObjects):
        (qt_drt_clearFrameName):
        (qt_drt_garbageCollector_collect):
        (qt_drt_garbageCollector_collectOnAlternateThread):
        (qt_drt_javaScriptObjectsCount):
        (qt_drt_numberOfActiveAnimations):
        (qt_drt_overwritePluginDirectories):
        (qt_drt_pauseAnimation):
        (qt_drt_pauseTransitionOfProperty):
        (qt_drt_resetOriginAccessWhiteLists):
        (qt_drt_run):
        (qt_drt_setJavaScriptProfilingEnabled):
        (qt_drt_whiteListAccessFromOrigin):
        (qt_webpage_groupName):
        (qt_webpage_setGroupName):

2010-04-29  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Get rid of forceLayout() on FrameView
        https://bugs.webkit.org/show_bug.cgi?id=38199

        The function FrameView::forceLayout() is missleading
        because it does not actually force the layout, the call is
        equivalent to layout().

        This patch replace the call to forceLayout() by layout() in Qt
        to avoid the misunderstanding/improve readability.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dynamicPropertyChangeEvent):
        (QWebPage::setPreferredContentsSize):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setMediaType):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::forceLayout):

2010-04-29  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        Remove unnecessary call to FrameView::forceLayout() in setViewportSize()
        This prevents a double relayout on resize.

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

        Thanks to Nate Whetsell <nathan.whetsell@gmail.com> for spotting this.

        * Api/qwebpage.cpp:
        (QWebPage::setViewportSize):

2010-04-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] REGRESSION(r57982): tst_qwebpage::showModalDialog() crashes
        https://bugs.webkit.org/show_bug.cgi?id=38314

        Make sure that there's always a main frame when returning from createWindow()
        to the caller in WebCore.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):

2010-04-28  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, Qt build fix.

        [Qt] Guard the body of the function instead of the function for
        exported functions.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::webInspectorExecuteScript):
        (DumpRenderTreeSupportQt::webInspectorClose):
        (DumpRenderTreeSupportQt::webInspectorShow):
        (DumpRenderTreeSupportQt::setTimelineProfilingEnabled):

2010-04-28  Antonio Gomes  <tonikitoo@webkit.org>, Yi Shen <yi.4.shen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] tst_QWebHistoryInterface::visitedLinks() fails
        https://bugs.webkit.org/show_bug.cgi?id=37323

        Patch fixes styleProperty method of QWebElement to make use of
        CSSComputedStyleDeclaration::computedStyle 'allowVisitedStyle' parameter
        and the corresponding failing QWebHistoryInterface::visitedLinks method.

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):
        * tests/qwebhistoryinterface/tst_qwebhistoryinterface.cpp:
        (tst_QWebHistoryInterface::visitedLinks):

2010-04-28  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QWebPage viewMode property
        https://bugs.webkit.org/show_bug.cgi?id=38119

        Replacing method qt_wrt_setViewMode by wrt_viewMode property.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dynamicPropertyChangeEvent):
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::wrt_viewModes):

2010-04-28  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann <simon.hausmann@nokia.com>

        [Qt] WINS DEF file freeze

        Updated WINSCW def file with added and removed symbols.

        * symbian/bwins/QtWebKitu.def:

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate): Add call to initializeMainThread.

2010-04-26  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix the include header <qstring.h> -> <QtCore/qstring.h>

        The module/header.h style inclusion removes the need to have -I$QTDIR/include/depending-module
        in the include search path for the application.

        * Api/qwebkitversion.h:

2010-04-26  Bruno Schmidt  <bruno.schmidt@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Exposing an QVariantMap containing QObjectStar to Javascript
        causes Segmentation Fault
        https://bugs.webkit.org/show_bug.cgi?id=34729

        If an QVariantMap containing QObjectStar is added to the to QtWebkit
        Javascript, it's use causes Segmentation Fault.
        It happens because, in the case QMetaType::QVariantMap, the "root"
        object that is inside of a PassRefPtr is passed recursively inside a
        loop to recover the content of the map, but the PassRefPtr semantics
        prohibit its use inside a loop, so the "root" object mus be passed
        using the method "PassRefPtr::get" in order to keep the current
        reference.

        * tests/qwebframe/tst_qwebframe.cpp:
        (MyQObject::MyQObject): new property variantMapProperty
        (MyQObject::variantMapProperty): read variantMapProperty
        (MyQObject::setVariantMapProperty): write variantMapProperty

2010-04-25  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Simon Hausmann.

        [Qt] layoutTestController.counterValueForElementById crashes for a nonexistent ID
        https://bugs.webkit.org/show_bug.cgi?id=34573

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::counterValueForElementById):

2010-04-20  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add more support for textInputController

        Add support for selectedRange(), setMarkedText(), insertText(),
        and firstRectForCharacterRange().

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::selectedRange):
        (DumpRenderTreeSupportQt::firstRectForCharacterRange):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2010-04-22  John Pavan  <john.pavan@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] inputMethodQuery returns coordinates in web page coordinates rather than in item coordinates.
        https://bugs.webkit.org/show_bug.cgi?id=37163


        QWebPage::inputMethodQuery is modified so that it
        returns coordinates in the widget's coordinate system.
        Tests are added for QGraphicsWebView and QWebView
        to verify that this behavior is correct after the webpage
        has been scrolled.

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::microFocusCoordinates):
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::microFocusCoordinates):

2010-04-22  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Fix createPlugin() tests in tst_qwebpage to match behaviour of Qt plugins
             when PluginsEnabled is false.

        tst_qwebpage should have been updated as part of r56662.
        (See https://bugs.webkit.org/show_bug.cgi?id=32196)

        Updated documentation of QWebPage::createPlugin and QWebSetting::pluginsEnabled
            to match the new behaviour.

        * Api/qwebpage.cpp: Update docs.
        * Api/qwebsettings.cpp: Update docs.
        * tests/qwebpage/tst_qwebpage.cpp:
        (createPlugin):
        (tst_QWebPage::createPluginWithPluginsEnabled):
        (tst_QWebPage::createPluginWithPluginsDisabled):

2010-04-22  Dave Moore  <davemoore@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added notification when the favicons for a page are changed
        from a script.
        The Document object will notify the frame loader, which will
        notify the client. Implementations of FrameLoaderClient will
        have to add one method; dispatchDidChangeIcons().

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidChangeIcons):
        (WebCore::FrameLoaderClientQt::didChangeTitle):
        * WebCoreSupport/FrameLoaderClientQt.h:

2010-04-22  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove translatable strings from the hybridPixmap test.
        https://bugs.webkit.org/show_bug.cgi?id=37867

        * tests/hybridPixmap/widget.ui:

2010-04-22  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix autotests .qrc file paths when built in Qt.

        Compiling auto-tests from qt/tests/auto/qweb* produced
        failing tests since these .pro files include the
        ones in WebKit/qt/tests and the .qrc file was
        not added to RESOURCES

        * tests/benchmarks/loading/loading.pro:
        * tests/benchmarks/painting/painting.pro:
        * tests/qgraphicswebview/qgraphicswebview.pro:
        * tests/qwebelement/qwebelement.pro:
        * tests/qwebframe/qwebframe.pro:
        * tests/qwebhistory/qwebhistory.pro:
        * tests/qwebhistoryinterface/qwebhistoryinterface.pro:
        * tests/qwebinspector/qwebinspector.pro:
        * tests/qwebpage/qwebpage.pro:
        * tests/qwebplugindatabase/qwebplugindatabase.pro:
        * tests/qwebview/qwebview.pro:
        * tests/tests.pri:

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.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

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

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2010-04-21  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add PageClientQWidget implementation based on the old
        QWebPageWidgetClient to PageClientQt files. Also fix
        QWebPage::setView() to use PageClientQWidget.

        [Qt] PageClientQt specific implementation for QWidget
        https://bugs.webkit.org/show_bug.cgi?id=37858

        * Api/qwebpage.cpp:
        (QWebPage::setView):
        * WebCoreSupport/PageClientQt.cpp: Added.
        (WebCore::PageClientQWidget::scroll):
        (WebCore::PageClientQWidget::update):
        (WebCore::PageClientQWidget::setInputMethodEnabled):
        (WebCore::PageClientQWidget::inputMethodEnabled):
        (WebCore::PageClientQWidget::setInputMethodHint):
        (WebCore::PageClientQWidget::cursor):
        (WebCore::PageClientQWidget::updateCursor):
        (WebCore::PageClientQWidget::palette):
        (WebCore::PageClientQWidget::screenNumber):
        (WebCore::PageClientQWidget::ownerWidget):
        (WebCore::PageClientQWidget::geometryRelativeToOwnerWidget):
        (WebCore::PageClientQWidget::pluginParent):
        (WebCore::PageClientQWidget::style):
        * WebCoreSupport/PageClientQt.h: Added.
        (WebCore::PageClientQWidget::PageClientQWidget):
        (WebCore::PageClientQWidget::isQWidgetClient):

2010-04-21  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Darin Adler.

        List item markers are not always updated after changes in the DOM.
        https://bugs.webkit.org/show_bug.cgi?id=37060

        * Api/qwebelement.h: Make DumpRenderTreeSupportQt a friend class.
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::markerTextForListItem): Add a private API to get the marker text for a list item.

2010-04-21  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Check the request empty or not in ChromeClientQt::createWindow()
        https://bugs.webkit.org/show_bug.cgi?id=37821

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):

2010-04-21  Shu Chang  <chang.shu@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix Symbian build where QT_NO_SYSTEMTRAYICON is defined.
        https://bugs.webkit.org/show_bug.cgi?id=37442

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (NotificationPresenterClientQt::show):
        * WebCoreSupport/NotificationPresenterClientQt.h:

2010-04-21  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r57963.
        http://trac.webkit.org/changeset/57963
        https://bugs.webkit.org/show_bug.cgi?id=37759

        Three tests started crashing on the Qt bot.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::isCommandEnabled):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-04-21  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add LayoutTestController interface: computedStyleIncludingVisitedInfo
        https://bugs.webkit.org/show_bug.cgi?id=37759

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::computedStyleIncludingVisitedInfo):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-04-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Fraser.

        [Qt] Fix or remove the runtime flag for accelerated compositing.
        https://bugs.webkit.org/show_bug.cgi?id=37313

        This lets the QWebPageClient "veto" the settings value for accelerated compositing.
        In this case we allow accelerated compositing only on QGraphicsWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::allowsAcceleratedCompositing):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::allowsAcceleratedCompositing):
        * WebCoreSupport/ChromeClientQt.h:

2010-04-20  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix.

        * Api/qwebframe.cpp:
        (QWebFrame::setUrl):

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/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):

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

2010-04-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compilation against namespaced Qt.

        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/QtFallbackWebPopup.h:

2010-04-18  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add support for LayoutTestController commands:
                   setSmartInsertDeleteEnabled
                   setSelectTrailingWhitespaceEnabled
                   execCommand
                   isCommandEnabled

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage_p.h:
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setSmartInsertDeleteEnabled):
        (DumpRenderTreeSupportQt::setSelectTrailingWhitespaceEnabled):
        (DumpRenderTreeSupportQt::executeCoreCommandByName):
        (DumpRenderTreeSupportQt::isCommandEnabled):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::smartInsertDeleteEnabled):
        (WebCore::EditorClientQt::toggleSmartInsertDelete):
        (WebCore::EditorClientQt::isSelectTrailingWhitespaceEnabled):
        * WebCoreSupport/EditorClientQt.h:

2010-04-15  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Mark QWebFrame::overloadedSlots autotest as expected failure

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

        * tests/qwebframe/tst_qwebframe.cpp:

2010-04-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen and Tor Arne Vestbø.

        REGRESSION(r56552): Broken scrollbars size
        https://bugs.webkit.org/show_bug.cgi?id=36853

        The regression was caused by r56552, which introduced a fix to bug
        webkit.org/b/21300. The bug solved an issue with the resize handle on mac,
        but did it in a way that affected all Qt platforms and thus broke the behavior
        on non-mac platforms.

        This patch makes the mac specific change ifdef'ed and only applied for the mac
        platform.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::windowResizerRect):

2010-04-15  Bruno Schmidt  <bruno.schmidt@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Null QObjects properties cause Segmentation Fault
        https://bugs.webkit.org/show_bug.cgi?id=34730

        QObjects exported to the QWebkit javascript with properties that are
        a null "QObject*" cause Segmentation Fault.

        If an QObject is added to the javascript context and it contains
        properties of the type QObject* with NULL value, calling the property
        causes Segmentation Fault.

        Follow the tests for the corrections done over WebCore.

        * tests/qwebframe/tst_qwebframe.cpp:
        (MyQObject::MyQObject): init the field m_objectStar
        (MyQObject::objectStarProperty): read the Object* prop
        (MyQObject::setObjectStarProperty): write the Object* prop
        (tst_QWebFrame::getSetStaticProperty): new tests for the new prop

2010-04-14  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Changing view mode names due to specification changes
        https://bugs.webkit.org/show_bug.cgi?id=37615

        test: fast/media/media-feature-wgt-view-mode.html

        specification: http://dev.w3.org/2006/waf/widgets-vmmf/

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::isWindowed):
        (WebCore::ChromeClientQt::isFullscreen):
        (WebCore::ChromeClientQt::isMaximized):
        (WebCore::ChromeClientQt::isMinimized):
        * WebCoreSupport/ChromeClientQt.h:

2010-04-14  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Moving setViewMode from DumpRenderTreeSupportQt to qwebpage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=37622

        Method qt_wrt_setViewMode was removed from qwebpage.cpp by mistake in r57433
        (bug 35844). Moving it back.

        * Api/qwebpage.cpp:
        (qt_wrt_setViewMode):
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::setMediaType):
        * WebCoreSupport/DumpRenderTreeSupportQt.h:

2010-04-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Rendering artifacts on Qt plugins when scrolling the page
        https://bugs.webkit.org/show_bug.cgi?id=37152

        Because we no longer repaint the entire viewport on scroll,
        we must trigger a repaint of QtPluginWidgets when their geometry changes.

        * WebCoreSupport/FrameLoaderClientQt.cpp:

2010-04-14  Aaron Boodman  <aa@chromium.org>

        Reviewed by David Levin.

        Support relative URLs for notifications on Chromium. They weren't working previously because WebCore was inserting
        the relative URL into a KURL instance, but when KURL is backed by GURL as it is on Chromium, relative URLs are
        unsupported. Fixed by resolving the relative URL first.

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

        Adding tests for this is difficult because we don't currently have DRT support for notifications on Mac, only Windows.

        * WebCoreSupport/NotificationPresenterClientQt.cpp:
        (NotificationPresenterClientQt::show): Return type of NotificationContents::iconURL() changed.

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.

        * WebCoreSupport/DumpRenderTreeSupportQt.cpp:
        (DumpRenderTreeSupportQt::whiteListAccessFromOrigin):
        (DumpRenderTreeSupportQt::resetOriginAccessWhiteLists):

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/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):

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/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):

2010-04-11  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add setWillSendRequestReturnsNull and setWillSendRequestClearHeader

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (qt_set_will_send_request_returns_null):
        (qt_set_will_send_request_clear_headers):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):

2010-04-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Refactor Qt DRT support in QtWebKit

        Move all QT DRT support functions to a static class.

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

        * Api/qwebframe.cpp: Remove static functions.
        * Api/qwebframe.h: Make DumpRenderTreeSupportQt a friend.
        * Api/qwebpage.cpp: Remove static functions.
        * Api/qwebpage.h: Make DumpRenderTreeSupportQt a friend.
        * Api/qwebsecurityorigin.cpp: Remove static functions.
        * WebCoreSupport/DumpRenderTreeSupportQt.cpp: Added.
        (DumpRenderTreeSupportQt::DumpRenderTreeSupportQt):
        (DumpRenderTreeSupportQt::~DumpRenderTreeSupportQt):
        (DumpRenderTreeSupportQt::overwritePluginDirectories):
        (DumpRenderTreeSupportQt::workerThreadCount):
        (DumpRenderTreeSupportQt::setDumpRenderTreeModeEnabled):
        (DumpRenderTreeSupportQt::setFrameFlatteningEnabled):
        (DumpRenderTreeSupportQt::webPageSetGroupName):
        (DumpRenderTreeSupportQt::webPageGroupName):
        (DumpRenderTreeSupportQt::webInspectorExecuteScript):
        (DumpRenderTreeSupportQt::webInspectorClose):
        (DumpRenderTreeSupportQt::webInspectorShow):
        (DumpRenderTreeSupportQt::setTimelineProfilingEnabled):
        (DumpRenderTreeSupportQt::hasDocumentElement):
        (DumpRenderTreeSupportQt::setJavaScriptProfilingEnabled):
        (DumpRenderTreeSupportQt::pauseAnimation):
        (DumpRenderTreeSupportQt::pauseTransitionOfProperty):
        (DumpRenderTreeSupportQt::pauseSVGAnimation):
        (DumpRenderTreeSupportQt::numberOfActiveAnimations):
        (DumpRenderTreeSupportQt::clearFrameName):
        (DumpRenderTreeSupportQt::javaScriptObjectsCount):
        (DumpRenderTreeSupportQt::garbageCollectorCollect):
        (DumpRenderTreeSupportQt::garbageCollectorCollectOnAlternateThread):
        (DumpRenderTreeSupportQt::counterValueForElementById):
        (DumpRenderTreeSupportQt::pageNumberForElementById):
        (DumpRenderTreeSupportQt::numberOfPages):
        (DumpRenderTreeSupportQt::suspendActiveDOMObjects):
        (DumpRenderTreeSupportQt::resumeActiveDOMObjects):
        (DumpRenderTreeSupportQt::evaluateScriptInIsolatedWorld):
        (DumpRenderTreeSupportQt::whiteListAccessFromOrigin):
        (DumpRenderTreeSupportQt::resetOriginAccessWhiteLists):
        (DumpRenderTreeSupportQt::setDomainRelaxationForbiddenForURLScheme):
        (DumpRenderTreeSupportQt::setCaretBrowsingEnabled):
        (DumpRenderTreeSupportQt::setMediaType):
        (DumpRenderTreeSupportQt::setViewMode):
        * WebCoreSupport/DumpRenderTreeSupportQt.h: Added.
        * WebCoreSupport/EditorClientQt.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::multiplePageGroupsAndLocalStorage):
        (tst_QWebPage::inputMethodsTextFormat):
        (tst_QWebPage::protectBindingsRuntimeObjectsFromCollector):

2010-04-11  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Update layoutTestController.DumpResourceLoadCallbacks to match other ports.

        Unskip  http/tests/xmlhttprequest/abort-should-cancel-load.html
                http/tests/misc/will-send-request-returns-null-on-redirect.html
                fast/loader/user-style-sheet-resource-load-callbacks.html
                http/tests/misc/window-dot-stop.html
                http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag-parent-same-origin-allow.html
                http/tests/security/XFrameOptions/x-frame-options-deny.html
                http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-allow.html
                http/tests/security/XFrameOptions/x-frame-options-parent-same-origin-deny.html
                http/tests/xmlhttprequest/abort-should-cancel-load.html

        QNetworkReply::OperationCanceledError has a value of 5, so update expected results accordingly.

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (qt_set_will_send_request_returns_null_on_redirect):
        (drtDescriptionSuitableForTestResult):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):

2010-04-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement Desktop Notifications API for QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=35503

        Map WebKit notifications to Qt's SystemTray API and
        implement DRT tracing.

        This patch does not implement the security part of
        WebKit notifications.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::notificationPresenter):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/NotificationPresenterClientQt.cpp: Added.
        (qt_dump_notification):
        (NotificationPresenterClientQt::NotificationPresenterClientQt):
        (NotificationPresenterClientQt::show):
        (NotificationPresenterClientQt::cancel):
        (NotificationPresenterClientQt::notificationObjectDestroyed):
        (NotificationPresenterClientQt::requestPermission):
        (NotificationPresenterClientQt::checkPermission):
        * WebCoreSupport/NotificationPresenterClientQt.h: Added.

2010-04-09  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt]Fix compile error with QT_NO_IM
        https://bugs.webkit.org/show_bug.cgi?id=36533

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopupCombo::hidePopup):

2010-04-09  Yi Shen  <yi.4.shen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] tst_QWebFrame::popupFocus() fails
        https://bugs.webkit.org/show_bug.cgi?id=37320

        The QWebPopup class has been moved & renamed, so tst_QWebFrame::popupFocus() should use
        the class name "QComboBox", rather than "WebCore::QWebPopup" to find the popup menu.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-04-09  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Holger Freyther.

        Removing the use of topLevelWidget of QWidget class since it is deprecated/obsolete
        since Qt 4.5. window() method is being used instead now.

        See http://doc.trolltech.com/4.5/qwidget-obsolete.html#topLevelWidget for more info.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::windowRect):
        (WebCore::ChromeClientQt::show):
        (WebCore::ChromeClientQt::windowResizerRect):

2010-04-09  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix compile error with QT_NO_ACTION
        https://bugs.webkit.org/show_bug.cgi?id=36529

        Make sure QT_NO_ACTION is not defined to use QAction

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::pageAction):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPage::updatePositionDependentActions):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:

2010-04-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Lars Knoll.

        [Qt] tests/qgraphicswebview fails
        https://bugs.webkit.org/show_bug.cgi?id=37317

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl): Don't crash if the ownerWidget is null.

2010-04-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Warnings when compiling InspectorClientQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=37266

        Add a default: for the switch()-case to avoid
        warnings.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::variantToSetting):

2010-04-01  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by David Hyatt.

        [Qt] REGRESSION:(r50665) QWebFrame::setScrollBarPolicy(Qt::Vertical,Qt::ScrollBarAlwaysOff) has no effect.
        https://bugs.webkit.org/show_bug.cgi?id=29431

        Make use of the new lock parameter of set{Vertical,Horizontal}ScrollbarMode.

        Always added a qt auto test for set scrollbar policy feature.

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarPolicy):
        * tests/qwebframe/tst_qwebframe.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (FrameLoaderClientQt::transitionToCommittedForNewPage):

2010-04-08  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] WebKit crashes while input text through input method.
        The formatted text underline painting crashes when painting with invalid indexes.
        https://bugs.webkit.org/show_bug.cgi?id=36870

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethodsTextFormat_data):
        (tst_QWebPage::inputMethodsTextFormat):

2010-04-08  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] qtwebkit_webframe_scrollRecursively scrolls when body.style.overflow="hidden"
        https://bugs.webkit.org/show_bug.cgi?id=36674

        The scrolling check was based on the frameview's scrolloffset, and
        maximumScrollPosition, which does not acknowledge the overflow properties.

        I am now basing the scrolling off the scrollbar position. The scrollbars are
        affected by the overflow properties indicating when not to scroll. The scrollbar
        positions also continue to work for CSS ::-webkit-scrollbar styles.

        * Api/qwebframe.cpp:
        (qtwebkit_webframe_scrollRecursively):

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

2010-04-07  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

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

        Updated the WebCore::shouldTreatAsAttachement function call with the
        new more generic replacement WebCore::contentDispositionType.

        See comments 39-42 in https://bugs.webkit.org/show_bug.cgi?id=36395

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):

2010-04-07  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] When providing a widget for the PDF mime type it will cause a crash

        m_pluginView may actually be a Widget (for embedded Qt widgets),
        so always check isPluginView() before calling PluginView specific methods.

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):

2010-04-06  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Add mechanism to detect QtWebKit 2.0 via the preprocessor
        https://bugs.webkit.org/show_bug.cgi?id=36538

        * Api/qwebkitglobal.h:

2010-04-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] [Symbian] Rebaseline Symbian def file
        https://bugs.webkit.org/show_bug.cgi?id=37038

        Switch the ordinal numbers for qtwebkit_webframe_scrollRecursively
        and QWebInspector::closeEvent to match QtWebkit 4.6 branch

        Fix the signature for qt_drt_setFrameFlatteningEnabled
        after r56718.

        Add new QtWebKit API symbols introduced not listed in the file yet.

        * symbian/eabi/QtWebKitu.def:

2010-03-30  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Adam Treat.

        Stored focused frame and document in a vars, instead of querying for them many times.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mousePressEvent(QEvent* ev)):
        (QWebPagePrivate::mousePressEvent(QGraphicsSceneMouseEvent* ev):

2010-04-02  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Eric Seidel.

        [Qt]Fix compile error with QT_NO_SETTINGS
        https://bugs.webkit.org/show_bug.cgi?id=36533

        If QT_NO_SETTINGS is defined, QSettings is not available.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::populateSetting):
        (WebCore::InspectorClientQt::storeSetting):

2010-04-02  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - customized popup for <select multiple> elements
        https://bugs.webkit.org/show_bug.cgi?id=36368

        Using QtMaemoWebPopup instead of QtFallbackWebPopup for Maemo.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createSelectPopup):
        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::show):
        (WebCore::QtFallbackWebPopup::populate):

2010-04-01  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add Single and Multiple Selection Popup for Maemo 5.

        [Qt] Maemo5 theme - popup dialogs
        https://bugs.webkit.org/show_bug.cgi?id=36789

        * WebCoreSupport/QtMaemoWebPopup.cpp:
        (WebCore::Maemo5Popup::populateList):
        (WebCore::Maemo5Popup::onItemSelected):
        (WebCore::QtMaemoWebPopup::createSingleSelectionPopup):
        (WebCore::QtMaemoWebPopup::createMultipleSelectionPopup):
        (WebCore::Maemo5SingleSelectionPopup::Maemo5SingleSelectionPopup):
        (WebCore::MultipleItemListDelegate::MultipleItemListDelegate):
        (WebCore::MultipleItemListDelegate::paint):
        (WebCore::Maemo5MultipleSelectionPopup::Maemo5MultipleSelectionPopup):
        * WebCoreSupport/QtMaemoWebPopup.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/ChromeClientQt.h:
        (WebCore::ChromeClientQt::cancelGeolocationPermissionRequestForFrame):

2010-03-31  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=36446
        [Qt] QWebSettings::TiledBackingStoreEnabled attribute lacks documentation and default value

        * Api/qgraphicswebview.cpp:
        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

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

        * Api/qwebelement.cpp:

2010-03-30  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QGraphicsScene mousePressEvent does not set the clickCausedFocus flag
        https://bugs.webkit.org/show_bug.cgi?id=35259

        The clickCausedFocus flag is not being set in method
        mousePressEvent(QGraphicsSceneMouseEvent* ev). This flag is used 
        in conjunction with QStyle::RSIP_OnMouseClickAndAlreadyFocused when
        deciding to launch the software input panel.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mousePressEvent):

2010-03-30  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Maemo5 theme - QtMaemoWebPopup class
        https://bugs.webkit.org/show_bug.cgi?id=36790

        A new QtAbstractWebPopup descendant class to be used for maemo menu lists.
        This is the first step. The next step will be the dialogs implementation that
        will come in bug 36789 and finally to use QtMaemoWebPopup instead of QtFallbackWebPopup
        that will come in bug 36368.

        * WebCoreSupport/QtMaemoWebPopup.cpp: Added.
        (WebCore::QtMaemoWebPopup::QtMaemoWebPopup):
        (WebCore::QtMaemoWebPopup::~QtMaemoWebPopup):
        (WebCore::QtMaemoWebPopup::createSingleSelectionPopup):
        (WebCore::QtMaemoWebPopup::createMultipleSelectionPopup):
        (WebCore::QtMaemoWebPopup::createPopup):
        (WebCore::QtMaemoWebPopup::show):
        (WebCore::QtMaemoWebPopup::hide):
        (WebCore::QtMaemoWebPopup::popupClosed):
        (WebCore::QtMaemoWebPopup::itemClicked):
        * WebCoreSupport/QtMaemoWebPopup.h: Added.
        (WebCore::Maemo5Popup::Maemo5Popup):

2010-03-29  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

        [Qt] Added support for handling the HTTP "Content-Disposition" header.

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

        Whenever a server response contains a "Content-Disposition: attachment..." header, 
        treat the request as a download and emit the unsupportedContent signal.

        * Api/qwebpage.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):

2010-03-22  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Fraser.

        Add support for Widgets 1.0: View Mode Media Feature
        https://bugs.webkit.org/show_bug.cgi?id=35446

        Add an internal Qt API for changing the view mode media feature
        (http://www.w3.org/TR/widgets-vmmf/).

        * Api/qwebpage.cpp:
        (qt_wrt_setViewMode):
        (QWebPagePrivate::priv):
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::isDocked):
        (WebCore::ChromeClientQt::isFloating):
        (WebCore::ChromeClientQt::isApplication):
        (WebCore::ChromeClientQt::isFullscreen):
        * WebCoreSupport/ChromeClientQt.h:

2010-03-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Use 'Mobile Safari' instead of 'Safari' on mobile Qt platforms.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2010-03-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] unit tests don't compile inside of Qt

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

        * tests/tests.pri: Don't do the target substitution inside Qt and find the sources
        through VPATH instead of relying on the location of the .pro file exclusively.

2010-03-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Change due to renaming of frame flattening setting.

        * Api/qwebpage.cpp:
        (qt_drt_setFrameFlatteningEnabled):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * symbian/eabi/QtWebKitu.def:

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

        Build fix. Include WindowsKeyboardCodes.h instead of KeyboardCodes.h.

        * WebCoreSupport/EditorClientQt.cpp:

2010-03-26  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Compile with QT_USE_FAST_OPERATOR_PLUS

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::populateSetting):
        (WebCore::InspectorClientQt::storeSetting):

2010-03-26  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Doc: Simplified Commercial Editions for Qt 4.7.

        * docs/qtwebkit.qdoc:

2010-03-26  Simon Hausmann  <simon.hausmann@nokia.com>

        Symbian build fix.

        [Qt] Updated the def file with new exports used by QtLauncher.

        * symbian/eabi/QtWebKitu.def:

2010-03-25  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtLauncher crashes on Mac OS and Linux when exiting with QGraphicsView mode enabled
        https://bugs.webkit.org/show_bug.cgi?id=35251

        Followed the way QWebView registers for the signal QWebPage::destroyed(), to prevent
        QGraphicsWebView from referencing QWebPage after it was deleted.        

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::_q_pageDestroyed):
        (QGraphicsWebView::setPage):
        * Api/qgraphicswebview.h:

2010-03-25  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] QWebFrame::pageChanged() signal is not documented
        https://bugs.webkit.org/show_bug.cgi?id=36609

        * Api/qwebframe.cpp:

2010-03-25  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement ChromeClient::windowResizerRect()

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

        We assume the resize corner to be in the lower right corner of
        the window and having the width and height of the scrollbars.

        The helper function geometryRelativeToOwnerWidget() in the page
        client is used to clip the resize rect to the actual size of the
        viewport, not the size of the QGraphicsView.

        * Api/qgraphicswebview.cpp:
        * Api/qwebpage.cpp:
        * WebCoreSupport/ChromeClientQt.cpp:

2010-03-25  Shu Chang  <chang.shu@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Added documentation for delete button.
        https://bugs.webkit.org/show_bug.cgi?id=31560

        * Api/qwebsettings.cpp:

2010-03-25  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Eric Seidel.

        [Qt]Fix compile error with QT_NO_DESKTOPSERVICES
        https://bugs.webkit.org/show_bug.cgi?id=36533

        * Api/qwebsettings.cpp:
        (QWebSettings::enablePersistentStorage):

2010-03-25  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Eric Seidel.

        [Qt]Fix compile error with QT_NO_DEBUG_STREAM
        https://bugs.webkit.org/show_bug.cgi?id=36533

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::graphicsItemVisibleRect):

2010-03-25  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Eric Seidel.

        Make QWebPage not depend on view() but use the client->ownerWidget()
        instead. Also, handle the case where there is not page client.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        (QWebPagePrivate::keyPressEvent):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::shouldInterruptJavaScript):
        (QWebPage::createWindow):
        (QWebPage::action):
        (QWebPage::extension):
        (QWebPage::chooseFile):
        (QWebPage::userAgentForUrl):

2010-03-24  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Add the FrameFlatteningEnabled WebAttribute to QWebSettings.

        [Qt] Missing QWebSettings for Frame Flattening
        https://bugs.webkit.org/show_bug.cgi?id=36553

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2010-03-24  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Laszlo Gombos.

        Auto-uppercase and predictive text need to be disabled for S60 (as for maemo)
        https://bugs.webkit.org/show_bug.cgi?id=33176

        * WebCoreSupport/EditorClientQt.cpp:

2010-03-24  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Rename QWebSettings::XSSAuditorEnabled to XSSAuditingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=36522

        For consistency with other QWebSettings attributes.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2010-03-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Calling setView(0) on a QWebPage being shown by a QGraphicsWebView,
        would uninstall the page client, deleting the QGraphicsWebViewPrivate
        instance. If called with an argument, it would do a wrong static_cast
        and crash.

        * Api/qwebpage.cpp:
        (QWebPageWidgetClient::QWebPageWidgetClient):
        (QWebPageWidgetClient::isQWidgetClient):
        (QWebPageWidgetClient::screenNumber):
        (QWebPage::QWebPage):
        (QWebPage::setView):
        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::unsetPageIfExists):
        (QGraphicsWebView::setPage):
        * Api/qwebpage.cpp:
        (QWebPageWidgetClient::isQWidgetClient):
        (QWebPageWidgetClient::screenNumber):
        (QWebPage::QWebPage):
        (QWebPage::setView):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebViewPrivate::unsetPageIfExists):
        (QWebView::setPage):

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

2010-03-23  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        QGraphicsWebView crash when calling setView on the QWebPage...
        https://bugs.webkit.org/show_bug.cgi?id=36436

        Checking for pageClient existance before showing popups.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::show):

2010-03-23  Anders Bakken <anders.bakken@nokia.com>, Jesus Sanchez-Palencia <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Check if q->scene() is available before actually using it
        on QGraphicsWebViewPrivate.

        QGraphicsWebView crash
        https://bugs.webkit.org/show_bug.cgi?id=32670

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::screenNumber):
        (QGraphicsWebViewPrivate::ownerWidget):

2010-03-23  David Leong  <david.leong@nokia.com>

        Reviewed by Laszlo Gombos.

        Build fix for Symbian Def file.

        * symbian/eabi/QtWebKitu.def:

2010-03-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove support for Qt v4.4
        https://bugs.webkit.org/show_bug.cgi?id=36389

        * Api/qwebelement.cpp:
        (QWebElement::classes):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::editorActionForKeyEvent):
        (QWebPage::userAgentForUrl):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):
        * tests/tests.pro:

2010-03-22  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix qdoc warnings
        https://bugs.webkit.org/show_bug.cgi?id=36447

        * Api/qgraphicswebview.cpp: Add missing ().
        * Api/qwebframe.cpp: Remove reference to non-existent parameter "url".
        * Api/qwebsettings.cpp:  Document parameter "location".

2010-03-22  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Don't construct a QLineEdit every time when painting a text field
        https://bugs.webkit.org/show_bug.cgi?id=36373

        Add a simple benchmark covering this area.

        * tests/benchmarks/painting/tst_painting.cpp:
        (tst_Painting::textAreas):

2010-03-22  Yi Shen  <shenyi2006@gmail.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=35933  
        [Qt] [Symbian] Can not backward select (highlight) text using virtual keyboard
        Make sure the selection start index is smaller than the selection end index.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2010-03-21  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Fixed updating the VKB display when inputting into QGraphicsWebView.
        https://bugs.webkit.org/show_bug.cgi?id=36292

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::_q_updateMicroFocus):
        (QGraphicsWebView::setPage):
        * Api/qgraphicswebview.h:

2010-03-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        Buildfix for Qt v4.5.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewOverlay::q):

2010-03-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Darin Adler.

        Make it possible for the Qt DRT to set the media type from
        the LayoutTestController.

        * Api/qwebframe.cpp:
        (qt_drt_setMediaType):

2010-03-18  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] New API scrollRecursively has several problems.
        https://bugs.webkit.org/show_bug.cgi?id=35873

        Remove scrollRecursively from the Qt 4.7 API
        Update the internal API to accept a hit test position 
        for nested scrolling

        * Api/qwebframe.cpp:
        (webframe_scrollOverflow):
        (qtwebkit_webframe_scrollRecursively):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2010-03-18  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=36102
        [Qt] Scaling control API for tiled backing store
        
        The scale is set by passing the QGraphicsWebView scale to the backing store. The
        only new API is the tiledBackingStoreFrozen property which allows disabling
        all updates (for example during zoom animation).

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::_q_scaleChanged):
        (QGraphicsWebViewPrivate::updateTiledBackingStoreScale):
        (QGraphicsWebView::QGraphicsWebView):
        (QGraphicsWebView::isTiledBackingStoreFrozen):
        (QGraphicsWebView::setTiledBackingStoreFrozen):
        * Api/qgraphicswebview.h:
        * Api/qwebframe.cpp:
        * Api/qwebframe_p.h:

2010-03-17  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Tor Arne Vestbø.

        Fix Qt build with tiled backing store disabled.

        * Api/qwebframe.cpp:
        * Api/qwebframe_p.h:

2010-03-17  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Laszlo Gombos.

        https://bugs.webkit.org/show_bug.cgi?id=36139
        [Qt] Clean up cache while setting cache quota. This behavior matches other platforms,
        such as mac and gtk.

         * Api/qwebsettings.cpp:
        (QWebSettings::setOfflineWebApplicationCacheQuota):

2010-03-17  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable accelerated compositing by default
        https://bugs.webkit.org/show_bug.cgi?id=35866

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2010-03-15  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=36121
        [Qt] Make WebKit scrollbars work with tiling
        
        - Use the scrollbar overlay (implemented for accelerated compositing) when in tiled mode. 
        - Make overlay compile unconditionally, enable on demand. This removes bunch of unneeded ifdefs.
        - Update the scroll position to the backing store as needed.
        - Renamed some methods.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::):
        (QGraphicsWebViewPrivate::createOrDeleteOverlay):
        (QGraphicsWebViewPrivate::setRootGraphicsLayer):
        (QGraphicsWebViewPrivate::updateCompositingScrollPosition):
        (QGraphicsWebViewPrivate::scroll):
        (QGraphicsWebViewPrivate::update):
        (QGraphicsWebViewPrivate::graphicsItemVisibleRect):
        (QGraphicsWebView::paint):
        (QGraphicsWebView::setPage):
        (QGraphicsWebView::updateGeometry):
        (QGraphicsWebView::setGeometry):
        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderFromTiledBackingStore):
        * Api/qwebframe_p.h:

2010-03-15  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Fix crash in QWebView::setPage()

        tst_qwebpage was crashing on setPage(0)

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

        * Api/qwebview.cpp:
        (QWebView::setPage):

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

        * Api/qwebinspector.cpp:
        (QWebInspector::hideEvent):
        (QWebInspector::closeEvent):
        * Api/qwebinspector.h:
        * Api/qwebpage.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::openInspectorFrontend):
        (WebCore::InspectorFrontendClientQt::InspectorFrontendClientQt):
        (WebCore::InspectorFrontendClientQt::frontendLoaded):
        (WebCore::InspectorFrontendClientQt::localizedStringsURL):
        (WebCore::InspectorFrontendClientQt::hiddenPanels):
        (WebCore::InspectorFrontendClientQt::bringToFront):
        (WebCore::InspectorFrontendClientQt::closeWindow):
        (WebCore::InspectorFrontendClientQt::attachWindow):
        (WebCore::InspectorFrontendClientQt::detachWindow):
        (WebCore::InspectorFrontendClientQt::setAttachedWindowHeight):
        (WebCore::InspectorFrontendClientQt::inspectedURLChanged):
        (WebCore::InspectorFrontendClientQt::updateWindowTitle):
        * WebCoreSupport/InspectorClientQt.h:

2010-03-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        [Qt] Build fix if TILED_BACKING_STORE is disabled.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderContentsLayerAbsoluteCoords):

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

        Reviewed by Simon Hausmann.

        [Qt] [Symbian] Use Symbian native dialog providers for combo pupups.
        https://bugs.webkit.org/show_bug.cgi?id=35919

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::show):
        (WebCore::ResetAndDestroy):
        (WebCore::QtFallbackWebPopup::showS60BrowserDialog):
        * WebCoreSupport/QtFallbackWebPopup.h:

2010-03-14  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=35146
        Support tiled backing store

        Implements a basic tiled backing store mechanism. Tiles are created and 
        deleted on demand. The page content is cached to the tiles. Tile content
        is kept in sync with the document. Since the backing store covers area
        larger than the currently visible viewport, the document can be scrolled
        quickly without having to enter rendering tree painting.
        
        The tile management code is platform independent. This patch has simple QPixmap
        based tile implementation for Qt.
        
        The feature is behind ENABLE_TILED_BACKING_STORE flag.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::visibleRect):
        (QGraphicsWebView::paint):
        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderContentsLayerAbsoluteCoords):
        * Api/qwebframe.h:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2010-03-13  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Enable accelerated compositing by default
        https://bugs.webkit.org/show_bug.cgi?id=35866

        Unreviewed. Roll-out r55955, because it broke 3 tests:
        - animations/fill-mode-transform.html
        - animations/play-state.html
        - animations/simultaneous-start-left.html

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2010-03-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable accelerated compositing by default
        https://bugs.webkit.org/show_bug.cgi?id=35866

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

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

2010-03-10  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add Support for WebKitEnableCaretBrowsing to Qt DRT

        Unskip test fast/events/multiline-link-arrow-navigation.html
        Fix typo (superfluous space) in QWebSettings docs.

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

        * Api/qwebpage.cpp:
        (qt_drt_enableCaretBrowsing):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply): fix typo in docs

2010-03-02  Adam Treat  <atreat@rim.com>

        Reviewed by Dave Hyatt.

        Adapt the qt port to the refactoring of repaint methods.

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

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::invalidateContents):
        (WebCore::ChromeClientQt::invalidateWindow):
        (WebCore::ChromeClientQt::invalidateContentsAndWindow):
        (WebCore::ChromeClientQt::invalidateContentsForSlowScroll):
        * WebCoreSupport/ChromeClientQt.h:

2010-03-08  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Remove the now-redundant Settings fields for the Database
        https://bugs.webkit.org/show_bug.cgi?id=35763

        No new tests; this code isn't called.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply): Remove the call into Settings.

2010-03-08  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Binary incompatibility between Qt 4.6's WebKit and trunk in QWebSettings
        https://bugs.webkit.org/show_bug.cgi?id=35858

        Moved the enum value added in r54873 to the end of the enum, to preserve
        binary compatibility. DnsPrefetchEnabled was in the last release and needs
        to remain after LocalContentCanAccessRemoteUrls.

        * Api/qwebsettings.h:

2010-03-06  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Remove unnecessary includes of wtf/Platform.h.  This is already pulled in by the prefix header.

        * WebCoreSupport/EditCommandQt.cpp:

2010-03-02  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        [Qt] QWebSettings attribute for toggle Spatial Navigation on/off
        https://bugs.webkit.org/show_bug.cgi?id=33714 (Qt API part)

        Added 'SpatialNavigationEnabled' attribute to QWebSettings.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2010-03-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] qwebelement.h does not include QtCore headers correctly
        https://bugs.webkit.org/show_bug.cgi?id=35748

        The header files of QtCore must be included as QtCore/foo.h.

        See also http://bugreports.qt.nokia.com/browse/QTBUG-8661

        * Api/qwebelement.h:

2010-03-04  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make the OUTPUT_DIR variable in qmake projects independent of build-webkit's logic.

        This also allows shadow builds relying only on qmake to work properly.

        * tests/benchmarks/loading/loading.pro:
        * tests/benchmarks/painting/painting.pro:
        * tests/hybridPixmap/hybridPixmap.pro:
        * tests/qgraphicswebview/qgraphicswebview.pro:
        * tests/qwebelement/qwebelement.pro:
        * tests/qwebframe/qwebframe.pro:
        * tests/qwebhistory/qwebhistory.pro:
        * tests/qwebhistoryinterface/qwebhistoryinterface.pro:
        * tests/qwebinspector/qwebinspector.pro:
        * tests/qwebpage/qwebpage.pro:
        * tests/qwebplugindatabase/qwebplugindatabase.pro:

2010-03-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix generation of forwarding headers

        The dependencies were a bit wrong, so we ended up not generating
        forwarding headers for qwebkitversion.h and qwebkitglobal.h

        The forwarding headers are now the only targets depending on the
        real headers. All other targets either depend on the generated
        class headers, or the forwarding headers.

        * Api/DerivedSources.pro:

2010-03-02  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Move database enable bit fully out of settings
        This is stage one of a three-stage commit [webkit, then chromium, then
        webkit again].  In this change I'm adding calls to
        Database::setIsAvailable inside Settings::setDatabaseEnabled and
        anywhere else that called it, and switching webkit fully over to using
        that flag [added in a previous checkin].  Phase two will remove
        Chromium's use of Settings for the Database, and phase three will remove
        the Setting for the Database enable entirely, leaving only
        Database::isAvailable/setIsAvailable.

        No new tests; tested by existing storage tests.

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

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):  Add a call to Database::setIsAvailable

2010-03-02  Simon Hausmann  <simon.hausmann@nokia.com>

        Symbian build fix.

        [Qt] Updated the def file with one new export, to fix
        QtLauncher linkage.

        * symbian/eabi/QtWebKitu.def:

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

        * Api/qwebframe.cpp:
        (QWebFrame::setTextSizeMultiplier):
        (QWebFrame::setZoomFactor):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2010-02-26  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Simon Hausmann.

        Fix documentation of QWebSettings::setUserStyleSheetUrl method

        The base 64 data in the exemple shows a not valid code.

        REGRESSION: QWebSettings::setUserStyleSheetUrl is not working with a data URL (Base64)
        https://bugs.webkit.org/show_bug.cgi?id=34802

        * Api/qwebsettings.cpp:

2010-02-26  Jamey Hicks  <jamey.hicks@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] added QWebSettings::setInspectorUrl() and QWebSettings::inspectorUrl()

        Enables the use of alternate Web Inspector frontends by changing
        the location of the frontend.

        This is required so that the Web Inspector may be run from an
        external process or an external tool such as Eclipse or Aptana may
        be used instead of the in-process Web Inspector UI.
        
        https://bugs.webkit.org/show_bug.cgi?id=35340

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        (QWebSettings::setInspectorUrl):
        (QWebSettings::inspectorUrl):
        * Api/qwebsettings.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::createPage):

2010-02-25  Jarkko Sakkinen  <jarkko.sakkinen@tieto.com>

        Reviewed by Kenneth Rohde Christiansen.

        Qt WebGL support

        Adds enabling and disabling of WebGL support to QWebSettings.
        https://bugs.webkit.org/show_bug.cgi?id=35153

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2010-02-19  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove QGVLauncher

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

        * QGVLauncher/QGVLauncher.pro: Removed.
        * QGVLauncher/main.cpp: Removed.

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/ChromeClientQt.h:
        (WebCore::ChromeClientQt::cancelGeolocationPermissionRequestForFrame):

2010-02-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed Symbian build fix.

        [Qt] Updated the def file with new exports to enable
        building DumpRenderTree.

        * symbian/eabi/QtWebKitu.def:

2010-02-18  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Minor improvement to hybrid QPixmap
        https://bugs.webkit.org/show_bug.cgi?id=34507

        * tests/hybridPixmap/test.html: use assignToHTMLImageElement on an
        existing element instead of toHTMLImageElement which creates a new one

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

        * Api/qwebframe_p.h:
        (QWebFramePrivate::setPage): Added.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::didTransferChildFrameToNewDocument):
        The QWebFrame caches a QWebPage which should be replaced when Frame is re-parented.
        Also, the QWebFrame is a child (in QT terms) of QWebPage - so update that relationship as well.
        Emit a signal that QWebFrame moved to a different QWebPage.

        * WebCoreSupport/FrameLoaderClientQt.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/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::iconForFiles):
        * WebCoreSupport/ChromeClientQt.h:

2010-02-17  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Ariya Hidayat.

        Make possible Qt DRT to get total number of pages to be printed

        LayoutTests:
            printing/numberOfPages.html

        [Qt] DRT: Get total number of pages to be printed
        https://bugs.webkit.org/show_bug.cgi?id=34955

        * Api/qwebframe.cpp:
        (qt_drt_numberOfPages):
        (qt_drt_evaluateScriptInIsolatedWorld):

2010-02-16  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Allow scrolling to an anchor programmatically.
        https://bugs.webkit.org/show_bug.cgi?id=29856

        * Api/qwebframe.cpp:
        (QWebFrame::scrollToAnchor): New API function.
        * Api/qwebframe.h:
        * tests/qwebframe/tst_qwebframe.cpp: New tests for scrollToAnchor().

2010-02-16  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Reviewed by Laszlo Gombos.

        Fix building with Qt < 4.6.
        https://bugs.webkit.org/show_bug.cgi?id=34885

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage):

2010-02-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Symbian build fix.

        Updated the def file with two new exports used by QtLauncher.

        * symbian/eabi/QtWebKitu.def:

2010-02-16  Ismail Donmez  <ismail@namtrac.org>

        Reviewed by Pavel Feldman.

        Fix compilation with inspector disabled.
        https://bugs.webkit.org/show_bug.cgi?id=32724

        * Api/qwebpage.cpp:
        (qt_drt_webinspector_executeScript):
        (qt_drt_webinspector_close):
        (qt_drt_webinspector_show):
        (qt_drt_setTimelineProfilingEnabled):

2010-02-16  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausman.

        [Qt] Fix include paths for forwarding headers in standalone builds.

        * Api/DerivedSources.pro: Use relative paths for package builds and added some
        documentation.

2010-02-15  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtWebkit bridge: enable passing a QWebElement to a signal/slot/property
        Add Q_DECLARE_METATYPE to QWebElement, add relevant tests to
        tst_qwebframe
        https://bugs.webkit.org/show_bug.cgi?id=34901

        * Api/qwebelement.h: declare metatype
        * tests/qwebframe/tst_qwebframe.cpp:
        (MyQObject::webElementProperty): new test for QWebElement
        (MyQObject::setWebElementProperty): new test for QWebElement
        (MyQObject::myOverloadedSlot): new test for QWebElement

2010-02-15  Robert Hogan  <robert@roberthogan.net>, Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] DRT: Support evaluateInWebInspector(), setTimelineProfilingEnabled().

        Support LayoutTestController.evaluateInWebInspector(), setTimelineProfilingEnabled() in Qt DRT.

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

        This allows the following tests to pass:

        inspector/console-format-collections.html
        inspector/styles-iframe.html
        inspector/syntax-highlight-css.html
        inspector/syntax-highlight-javascript.html
        inspector/timeline-enum-stability.html
        inspector/timeline-layout.html
        inspector/timeline-mark-timeline.html
        inspector/timeline-paint.html
        inspector/timeline-parse-html.html
        inspector/timeline-recalculate-styles.html
        inspector/timeline-script-tag-1.html
        inspector/timeline-script-tag-2.html
        inspector/timeline-trivial.html
        inspector/cookie-resource-match.html
        inspector/elements-img-tooltip.html
        inspector/elements-panel-selection-on-refresh.html
        inspector/inspected-objects-not-overriden.html
        inspector/timeline-event-dispatch.html
        inspector/timeline-network-resource.html
        inspector/elements-panel-rewrite-href.html
        inspector/console-dir.html
        inspector/console-dirxml.html
        inspector/console-format.html
        inspector/console-tests.html
        inspector/elements-panel-structure.html
        inspector/evaluate-in-frontend.html
        inspector/console-clear.html

        * Api/qwebpage.cpp:
        (qt_drt_webinspector_executeScript):
        (qt_drt_webinspector_close):
        (qt_drt_webinspector_show):
        (qt_drt_setTimelineProfilingEnabled):

        * WebCoreSupport/InspectorClientQt.cpp:
        (InspectorClientQt::createPage)

2010-02-12  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen and Simon Hausmann.
        
        https://bugs.webkit.org/show_bug.cgi?id=34885
        Add a QGraphicsWebView mode that makes it automatically resize itself to the size of the content.

        This is useful for cases where the client wants to implement page panning and zooming by manipulating
        the graphics item.
        
        Add a option to QGVLauncher to test this mode.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::QGraphicsWebViewPrivate):
        (QGraphicsWebViewPrivate::updateResizesToContentsForPage):
        (QGraphicsWebViewPrivate::_q_contentsSizeChanged):
        (QGraphicsWebView::setPage):
        (QGraphicsWebView::setResizesToContents):
        (QGraphicsWebView::resizesToContents):
        * Api/qgraphicswebview.h:
        * QGVLauncher/main.cpp:
        (WebView::WebView):
        (MainView::MainView):
        (MainView::setMainWidget):
        (MainView::resizeEvent):
        (main):

2010-02-12  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Qt DRT now dump the frame loader callbacks when LayoutTestController()
        method is called.

        LayoutTests:
            http/tests/security/mixedContent/data-url-script-in-iframe.html
            http/tests/security/mixedContent/empty-url-plugin-in-frame.html
            http/tests/security/mixedContent/insecure-css-in-iframe.html
            http/tests/security/mixedContent/insecure-iframe-in-iframe.html
            http/tests/security/mixedContent/insecure-image-in-iframe.html
            http/tests/security/mixedContent/insecure-plugin-in-iframe.html
            http/tests/security/mixedContent/insecure-script-in-iframe.html
            http/tests/security/mixedContent/redirect-http-to-https-script-in-iframe.html
            http/tests/security/mixedContent/redirect-https-to-http-script-in-iframe.html

        [Qt] Make possible Qt DRT dump frame load callbacks
        https://bugs.webkit.org/show_bug.cgi?id=34702

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::didDisplayInsecureContent):
        (WebCore::FrameLoaderClientQt::didRunInsecureContent):

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make qtlauncher and qgvlauncher use the generated headers
        path to make sure they are correctly generated.

        * tests/tests.pri:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Ensure relative paths in generated .pri files to ensure that
        a source package with pre-generated derived sources can be compiled.

        - Re-add a separate headers.pri file for WEBKIT_API_HEADERS
        - Rename the generated headers.pri to classheaders.pri to avoid
        confusion with the one generated by synqt since they don't have the
        same content.
        - Remove private headers list variable from classheaders.pri
        - Use $$PWD in classheaders.pri
        - Remove classheaders.pri from the installed files

        * Api/DerivedSources.pro:

2010-02-10  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Minor fixes on QtWebKit headers generation.

        - Adds QtWebKit to the generated headers destination path
        - Improve compatibility with MinGW

        * Api/DerivedSources.pro:

2010-02-09  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by nobody, build fix.

        [Qt] Fix standalone build with MinGW.

        * tests/qwebelement/tst_qwebelement.cpp:
        * tests/tests.pri:

2010-02-10  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Implement pageNumberForElementById() method in Qt DRT LayoutTestController,
        to make Qt DRT able to get page number.

        LayoutTests:
            printing/page-break-always.html
            printing/pageNumerForElementById.html
            printing/css2.1/page-break-before-000.html
            printing/css2.1/page-break-after-000.html
            printing/css2.1/page-break-after-004.html
            printing/css2.1/page-break-before-001.html
            printing/css2.1/page-break-after-001.html
            printing/css2.1/page-break-after-002.html
            printing/css2.1/page-break-before-002.html
            printing/css2.1/page-break-inside-000.html

        [Qt] Make possible Qt DRT get a page number for element by ID
        https://bugs.webkit.org/show_bug.cgi?id=34777

        * Api/qwebframe.cpp:
        (qt_drt_pageNumberForElementById):

2010-02-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Adam Barth.

        [Qt] Unit test for window.runModalDialog
        https://bugs.webkit.org/show_bug.cgi?id=34755

        * tests/qwebpage/tst_qwebpage.cpp:
        (TestModalPage::TestModalPage):
        (TestModalPage::createWindow):
        (tst_QWebPage::showModalDialog):

2010-02-09  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Sync with API changes in Maemo 5 kinetic scrolling

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

        This is a forward-port of http://qt.gitorious.org/+qt-developers/qt/x11-maemo/commit/08497561

        * Api/qwebview.cpp:
        (qt_sendSpontaneousEvent):
        (QWebViewKineticScroller::QWebViewKineticScroller):
        (QWebViewKineticScroller::setWidget):
        (QWebViewKineticScroller::eventFilter):
        (QWebViewKineticScroller::cancelLeftMouseButtonPress):
        (QWebViewKineticScroller::currentFrame):
        (QWebViewKineticScroller::scrollingFrameAt):
        (QWebViewKineticScroller::maximumScrollPosition):
        (QWebViewKineticScroller::scrollPosition):
        (QWebViewKineticScroller::viewportSize):
        (QWebViewKineticScroller::setScrollPosition):
        (QWebViewKineticScroller::sendEvent):
        (QWebView::QWebView):

2010-02-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Webkit in Qt does not have window.showModalDialog
        https://bugs.webkit.org/show_bug.cgi?id=25585

        Create a new eventloop when runModal() is called.
        Added comemnt in QWebPage::createWindow that the application is responsible
        for setting the modality of the appropriate window.

        * Api/qwebpage.cpp:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::~ChromeClientQt):
        (WebCore::ChromeClientQt::canRunModal):
        (WebCore::ChromeClientQt::runModal):
        * WebCoreSupport/ChromeClientQt.h:

2010-01-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Dave Hyatt.

        Implement flattening of framesets
        https://bugs.webkit.org/show_bug.cgi?id=32717

        Privately export the setFrameSetFlatteningEnabled setting for
        use with the Qt DRT.

        * Api/qwebpage.cpp:
        (qt_drt_setFrameSetFlatteningEnabled):
        (QWebPagePrivate::core):
        * Api/qwebpage_p.h:

2010-02-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Fix build on Windows

        Reviewed by Kenneth Rohde Christiansen.

        DerivedSources for our API headers failed on Windows,
        due to Windows not accepting ; as a command separator,
        not needing quotes for echo, and needing < and > escaped.

        We now detect Windows and set these quote markers and
        escape markers accordingly, as well as use && for separating
        individual commands.

        * Api/DerivedSources.pro:

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

        Reviewed by Pavel Feldman.

        Remove unused inmport of ScriptFunctionCall.h

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

        * Api/qwebelement.cpp:

2010-02-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Generate convenience headers (QWebView, etc) using qmake

        In Qt this is done using syncqt, but we use a pro-file instead
        that generates makefile-rules for each of the extra headers.

        These extra headers are installed alongside the normal headers.

        * Api/DerivedSources.pro: Added. List of headers + pro file magic
        * Api/headers.pri: Removed, list of headers is now in the above file

2010-02-04  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Tuning and optimizations to GraphicsLayerQt. Mainly reduced usage
        of QTimer::singleShot, and moved syncLayers() from paint() to update()
        https://bugs.webkit.org/show_bug.cgi?id=34062

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::update): Moved the sync operation to update
        (QGraphicsWebView::paint): Moved the sync operation to update

2010-02-03  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Roll-out r54281 because it broke the build on the Qt Release bot.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::QGraphicsWebViewPrivate):
        (QGraphicsWebViewPrivate::markForSync):
        (QGraphicsWebViewPrivate::update):
        (QGraphicsWebView::paint):

2010-02-02  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Ariya Hidayat.

        Do not use a proxy widget for the QComboBox on Maemo 5, as it
        is not working properly and it is not needed at all, as the
        comboboxes comes up in their full width on the screen and
        do not depend on view.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::show):

2010-02-02  Jessie Berlin  <jberlin@webkit.org>

        Rubber Stamped by Holger Freyther.

        [Qt] Fix style issue identified in bug:
        https://bugs.webkit.org/show_bug.cgi?id=34329

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::InspectorClientWebPage):
        Fix indentation.

2010-02-01  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Holger Freyther.

        [Qt] Enable inspecting the Web Inspector in QtLauncher

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

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::InspectorClientWebPage):
        Allow the DeveloperExtrasEnabled setting to default to true for the page containing the Web Inspector.

2010-02-02  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Display HTML tags verbatim in JS alert/confirm/prompt boxes

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

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):

2010-02-02  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable a way to measure FPS in QGVLauncher
        run QGVLauncher with --show-fps to see ongoing fps measurements
        This is not meant as accurate FPS, but rather as a way to find
        improvements/regressions
        https://bugs.webkit.org/show_bug.cgi?id=34450

        * QGVLauncher/main.cpp:
        (MainView::MainView): initialize FPS values
        (MainView::paintEvent): count a painted frame here
        (MainView::printFps): we print the fps with qDebug every 5 seconds.

2010-01-29  Ben Murdoch  <benm@google.com>

        Reviewed by Dimitri Glazkov.

        [Android] Android needs functionality in the ChromeClient to be informed when touch events are and are not needed by the webpage.
        https://bugs.webkit.org/show_bug.cgi?id=34215

        Add needTouchEvents() to the ChromeClient which is called when the page decides it needs or no longer needs to be informed of touch events.

        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::needTouchEvents): Add an empty implementation.

2010-01-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann

        Disable auto-uppercase and predictive text on Maemo5, just like the
        build-in MicroB Browser.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):

2010-01-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Support kinetic scrolling on Maemo 5

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

        Patch by Ralf Engels <ralf.engels@nokia.com> and
        Robert Griebl <rgriebl@trolltech.com>

        * Api/qwebview.cpp:
        (QWebViewKineticScroller::QWebViewKineticScroller):
        (QWebViewKineticScroller::eventFilter):
        (QWebViewKineticScroller::currentFrame):
        (QWebViewKineticScroller::scrollingFrameAt):
        (QWebViewKineticScroller::attachToWidget):
        (QWebViewKineticScroller::removeFromWidget):
        (QWebViewKineticScroller::positionRange):
        (QWebViewKineticScroller::position):
        (QWebViewKineticScroller::viewportSize):
        (QWebViewKineticScroller::setPosition):
        (QWebView::QWebView):

2010-01-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Do not set the combobox font on Maemo5 and S60; use the
        default instead.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::populate):

2010-01-28  Trond Kjernåsen <trond@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix for endless print loop when printing web pages

        * Api/qwebframe.cpp:
        (QWebFrame::print):

2010-01-27  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] DRT Provide worker thread ability to track counters
        https://bugs.webkit.org/show_bug.cgi?id=34221

        Implement workerThreadCount() in LayoutTestController of Qt DRT

        Tests:
        fast/workers/dedicated-worker-lifecycle.html
        fast/workers/shared-worker-frame-lifecycle.html
        fast/workers/shared-worker-lifecycle.html
        fast/workers/worker-lifecycle.html

        * Api/qwebpage.cpp:
        (qt_drt_workerThreadCount):

2010-01-27  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Update the .def files with exported symbols

        * symbian/eabi/QtWebKitu.def: Add two mangled missing new symbols for arm eabi.

2010-01-27  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Meta-methods can't be introspected using ES5 API
        https://bugs.webkit.org/show_bug.cgi?id=34087

        Test that Object.getOwnPropertyDescriptor and
        Object.getOwnPropertyNames work with meta-methods.

        * tests/qwebframe/tst_qwebframe.cpp:

2010-01-26  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Show comboboxes on Maemo 5
        https://bugs.webkit.org/show_bug.cgi?id=34088

        Don't try to show the combobox by simulating a mouse event from QCursor::pos() to
        get the combobox position right. The position on Maemo 5 is independent from the mouse
        and there's no QCursor::pos().

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::show):

2010-01-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        First steps of the QtScript API.
        
        Two new classes were created; QScriptEngine and QScriptValue.
        The first should encapsulate a javascript context and the second a script
        value.
        
        This API is still in development, so it isn't compiled by default.
        To trigger compilation, pass --qmakearg="CONFIG+=build-qtscript" to
        build-webkit.

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

        * docs/qtwebkit.qdocconf:

2010-01-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] JavaScript prompt is currently broken
        https://bugs.webkit.org/show_bug.cgi?id=30914

        In r52152 a patch was landed to convert a null QString
        to an empty WebCore::String in case the prompt was accepted
        but the default implementation returned the null QString.

        The patch tried to avoid assign to result twice and
        was not checking the QString if it is null but the default
        value. This lead to always returning an empty string on
        successful prompts. Fix it by checking the variable 'x'
        for isNull.

        The manual test case used didn't cover the case of non
        empty input, replace it with an automatic test case that
        should cover all cases.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runJavaScriptPrompt): Fix the bug.
        * tests/qwebpage/tst_qwebpage.cpp: Add automatic test case
        (JSPromptPage::JSPromptPage):
        (JSPromptPage::javaScriptPrompt):
        (tst_QWebPage::testJSPrompt):

2010-01-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] In RenderThemeQt determine the QStyle from the page client instead of the page's view
        https://bugs.webkit.org/show_bug.cgi?id=34053

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::style): Implement QWebPageClient::style() and return the graphics
        widget's style.
        * Api/qwebpage.cpp:
        (QWebPageWidgetClient::style): Implement QWebPageClient::style() and return the widget's style.

2010-01-25  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] Phone backup support for QtWebkit for Symbian devices.
        https://bugs.webkit.org/show_bug.cgi?id=34077

        * symbian/backup_registration.xml: Added.

2010-01-23  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix positioning of ComboBox popup in QGraphicsWebView.
        
        Wrap the popup in a QGraphicsProxyWidget, so that the popup
        transforms with the item.
        
        https://bugs.webkit.org/show_bug.cgi?id=33887

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopupCombo::hidePopup):
        (WebCore::QtFallbackWebPopup::QtFallbackWebPopup):
        (WebCore::QtFallbackWebPopup::~QtFallbackWebPopup):
        (WebCore::QtFallbackWebPopup::show):
        * WebCoreSupport/QtFallbackWebPopup.h:

2010-01-22  Peter Kasting  <pkasting@google.com>

        Not reviewed, backout.

        Back out r52673, which caused several regressions.
        https://bugs.webkit.org/show_bug.cgi?id=32533

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopupCombo::hidePopup):

2010-01-22  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Save the QWebPageClient instead of the ownerWidget in QtAbstractWebPopup
        
        The QWebPageClient is required for the QtFallbackWebPopup. QtFallbackWebPopup will
        need it to create a QGraphicsProxyWidget (in a future commit) for the 
        QGraphicsWebView's web popup.

        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopup::show):

2010-01-22  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Kenneth Rohde Christiansen.

        QState::polished() was renamed to QState::propertiesAssigned() when
        Qt 4.6.0 was released.

        * QGVLauncher/main.cpp:
        (MainWindow::init):

2010-01-21  Diego Gonzalez  <diego.gonzalez@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] add setDomainRelaxationForbiddenForURLScheme in Qt DRT
        https://bugs.webkit.org/show_bug.cgi?id=33945

        * Api/qwebsecurityorigin.cpp:
        (qt_drt_setDomainRelaxationForbiddenForURLScheme):

2010-01-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt] Implement GraphicsLayer for accelerated layer compositing
        https://bugs.webkit.org/show_bug.cgi?id=33514

        Here we have the QGraphicsWebView support for accelerated compositing

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewOverlay::q): access to container object
        (QGraphicsWebViewOverlay::boundingRect): overlay has same rect as the
        webview
        (QGraphicsWebViewOverlay::paint): paint everything but the contents
        (QGraphicsWebViewPrivate::QGraphicsWebViewPrivate): some vars needed
        for accelerated compositing
        (QGraphicsWebViewPrivate::):
        (QGraphicsWebViewPrivate::~QGraphicsWebViewPrivate):
        (QGraphicsWebViewPrivate::setRootGraphicsLayer): make sure we have a
        scrollbar overlay, and that the new graphics layer is parented by the
        web-view
        (QGraphicsWebViewPrivate::markForSync): flush changes at earliest
        convenience or during the next draw

        (QGraphicsWebViewPrivate::updateCompositingScrollPosition): sync the
        position of the compositing layer with the scroll position
        (QGraphicsWebViewPrivate::syncLayers): flush changes now
        (QGraphicsWebViewPrivate::scroll): make sure we also move the
        compositing layer
        (QGraphicsWebViewPrivate::update): also update the overlay if needed
        (QGraphicsWebView::QGraphicsWebView): initialize overlay with 0
        (QGraphicsWebView::paint): paint only contents if we have an overlay,
        sync the compositing layers now if needed
        (QGraphicsWebView::setPage): also clean up the compositing
        (QGraphicsWebView::updateGeometry): also update overlay geo
        (QGraphicsWebView::setGeometry): also update overlay geo
        * Api/qgraphicswebview.h: reimp compositing stuff from QWebPageClient
        * Api/qwebsettings.cpp: init new settings flag for compositing as
        false
        (QWebSettingsPrivate::apply): apply new settings flag for compositing
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h: new settings flag for compositing
        * Api/qwebview.cpp: 
        (QWebView::setPage): qwebview doesn't support compositing: always false
        * QGVLauncher/main.cpp:
        (WebView::WebView): some more cmdline arguments + compositing
        (MainWindow::init): some more cmdline arguments
        (main): ditto
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::attachRootGraphicsLayer): reimp for
        accel-compositing
        (WebCore::ChromeClientQt::setNeedsOneShotDrawingSynchronization):
        reimp for accel compositing
        (WebCore::ChromeClientQt::scheduleCompositingLayerSync): reimp for
        accel compositing
        * WebCoreSupport/ChromeClientQt.h: reimps for accel compositing

2010-01-21  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Improve the autotests of QtWebkit
        https://bugs.webkit.org/show_bug.cgi?id=32216

        Remove qWait() of the test when possible.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::loadFinished):
        (tst_QWebPage::database):
        (tst_QWebPage::testEnablePersistentStorage):
        (tst_QWebPage::errorPageExtension):
        (tst_QWebPage::screenshot):

2010-01-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Prospective build fix for the Qt build.

        Fix compilation against Qt without WebKit support by not including QtWebKit/QWebView
        but widget.h instead and instantiating QWebView through a typedef, to ensure we're using
        our locally built WebKit.

        * tests/hybridPixmap/widget.h:
        * tests/hybridPixmap/widget.ui:

2010-01-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Adding QPixmap/QImage support for the Qt hybrid layer
        https://bugs.webkit.org/show_bug.cgi?id=32461

        * tests/hybridPixmap: Added.
        * tests/hybridPixmap/hybridPixmap.pro: Added.
        * tests/hybridPixmap/resources.qrc: Added.
        * tests/hybridPixmap/test.html: Added.
        * tests/hybridPixmap/tst_hybridPixmap.cpp: Added.
        (tst_hybridPixmap::tst_hybridPixmap): tests most of the use cases for
        hybrid pixmap/image manipulation 
        (tst_hybridPixmap::init): QTestLib initialization
        (tst_hybridPixmap::cleanup): QTestLib cleanup
        (tst_hybridPixmap::hybridPixmap): run the html file
        * tests/hybridPixmap/widget.cpp: Added.
        (Widget::Widget):
        (Widget::refreshJS):
        (Widget::start):
        (Widget::completeTest):
        (Widget::setPixmap):
        (Widget::pixmap):
        (Widget::setImage):
        (Widget::image):
        (Widget::~Widget):
        (Widget::changeEvent):
        (Widget::compare):
        (Widget::imageSlot):
        (Widget::pixmapSlot):
        (Widget::randomSlot):
        * tests/hybridPixmap/widget.h: Added.
        * tests/hybridPixmap/widget.ui: Added.
        * tests/tests.pro:

2010-01-21  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Custom select popups.
        https://bugs.webkit.org/show_bug.cgi?id=33418

        Adjusting QtFallbackWebPopupCombo to the changes in WebCore layer.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createSelectPopup):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/QtFallbackWebPopup.cpp:
        (WebCore::QtFallbackWebPopupCombo::QtFallbackWebPopupCombo):
        (WebCore::QtFallbackWebPopupCombo::showPopup):
        (WebCore::QtFallbackWebPopupCombo::hidePopup):
        (WebCore::QtFallbackWebPopup::QtFallbackWebPopup):
        (WebCore::QtFallbackWebPopup::~QtFallbackWebPopup):
        (WebCore::QtFallbackWebPopup::show):
        (WebCore::QtFallbackWebPopup::hide):
        (WebCore::QtFallbackWebPopup::populate):
        * WebCoreSupport/QtFallbackWebPopup.h:

2010-01-19  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        Renames WebCore/bridge/runtime.[cpp|h] to WebCore/bridge/Bridge.[cpp|h]
        https://bugs.webkit.org/show_bug.cgi?id=33801

        * Api/qwebframe.cpp:

2010-01-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        Drag and Drop source/destination code needs cleanup.
        <https://bugs.webkit.org/show_bug.cgi?id=33691>.
        
        Update to new way of calling sourceOperation.

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):

2010-01-14  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Symbian build fixes.

        * tests/qwebpage/tst_qwebpage.cpp: Include util.h
        * tests/tests.pri: Don't define TESTS_SOURCE_DIR, it doesn't work.
        * tests/util.h: Define TESTS_SOURCE_DIR here, just like it's done in Qt.

2010-01-14  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Update Symbian .def symbol export files after private API additions.

        * symbian/bwins/QtWebKitu.def:
        * symbian/eabi/QtWebKitu.def:

2010-01-13  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Move more of the selection and caret painting code from Frame to SelectionController.
        https://bugs.webkit.org/show_bug.cgi?id=33619

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent): Seems possibly wrong to be directly invoking this
        setCaretVisible here, but I updated it to call it in its new location.

2010-01-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] Add private API for QWebFrame scrolling, to maintain binary compatibility with Qt 4.6.

        This is just a temporary addition until we have introduced #ifdefs to allow
        safely removing the private API again.

        * Api/qwebframe.cpp:
        (qtwebkit_webframe_scrollRecursively):

2010-01-10  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Adam Barth.

        [Qt] Add enableXSSAuditor support to QWebSettings and DRT.

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

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2010-01-09  Daniel Bates  <dbates@webkit.org>

        No review, rolling out r53044.
        http://trac.webkit.org/changeset/53044
        https://bugs.webkit.org/show_bug.cgi?id=33419
        
        We need to look into this some more because the Qt
        bot is failing the XSSAuditor tests. See bug #33419
        for more details.

        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:

2010-01-09  Daniel Bates  <dbates@webkit.org>

        Reviewed by Adam Barth.

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

        Adds support for the XSSAuditor to the Qt DRT.

        * Api/qwebsettings.cpp: Updated comment to reflect added key XSSAuditorEnabled.
        * Api/qwebsettings.h: Adds settings key XSSAuditorEnabled.

2010-01-08  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Delegation client
        https://bugs.webkit.org/show_bug.cgi?id=32826

        Added method createPopup to ChromeClientQt used to create popups.
        QtFallbackWebPopup moved from WebCore/platform/qt to
        WebKit/qt/WebCoreSupport.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createPopup):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/QtFallbackWebPopup.cpp: Added.
        (WebCore::QtFallbackWebPopup::QtFallbackWebPopup):
        (WebCore::QtFallbackWebPopup::show):
        (WebCore::QtFallbackWebPopup::populate):
        (WebCore::QtFallbackWebPopup::showPopup):
        (WebCore::QtFallbackWebPopup::hidePopup):
        (WebCore::QtFallbackWebPopup::activeChanged):
        (WebCore::QtFallbackWebPopup::setParent):
        * WebCoreSupport/QtFallbackWebPopup.h: Added.
        (WebCore::QtFallbackWebPopup::hide):

2010-01-07  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Allow the application to override online/offline network status
        https://bugs.webkit.org/show_bug.cgi?id=32684

        Add a setting so that applications can overide the network status.
        Applications that use this setting still need to block network access
        through QNAM.

        * Api/qwebsettings.cpp:
        (qt_networkAccessAllowed):

2010-01-07  Yongjun Zhang  <yongjun.zhang@nokia.com>, Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] need an API to suspend and resume active Javascript DOM objects.
        https://bugs.webkit.org/show_bug.cgi?id=31673

        Add suspend and resume DOM objects private API to QWebFrame.

        * Api/qwebframe.cpp:
        (qt_suspendActiveDOMObjects):
        (qt_resumeActiveDOMObjects):

2010-01-06  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Return an invalid Qt::ImMicroFocus if queried while the view needs to layout.

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

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):

2010-01-05  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Drag & drop layout tests fail even when run manually
        https://bugs.webkit.org/show_bug.cgi?id=33055

        No new tests. Fix 3 layout tests when run manually.
        fast/events/drag-and-drop.html
        fast/events/drag-and-drop-dataTransfer-types-nocrash.html
        fast/events/drag-and-drop-fire-drag-dragover.html
        Running these tests in DRT will be fixed in 31332.

        * Api/qwebpage.cpp:
        (dropActionToDragOp):
        (dragOpToDropAction):
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):
        Accept drag events even if they are not over a drop target. 
        This is to ensure that drag events will continue to be delivered.

        * Api/qwebpage_p.h:
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::dragOperationToDropActions):
        (WebCore::dropActionToDragOperation):
        (WebCore::DragClientQt::startDrag):
        Send dragEnd event.

2010-01-04  Daniel Bates  <dbates@webkit.org>

        Reviewed by Eric Seidel.

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

        Cleans up the File menu to better conform to the File menu in Safari
        both in terms of options and keyboard shortcuts. Adds a "Quit" menu
        options to close all open windows.

        * QGVLauncher/main.cpp:
        (MainWindow::buildUI):

2009-12-31  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable all HTML5 persistent features for QGVLauncher
        https://bugs.webkit.org/show_bug.cgi?id=33086

        * QGVLauncher/main.cpp: Call enablePersistentStorage()
        (main):

2009-12-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] It should be possible to disable inspector
        https://bugs.webkit.org/show_bug.cgi?id=32724

        This change fixes the build break. Some QtWebKit interfaces
        will not be fully functional (most notable QWebInspector) if
        INSPECTOR is disabled.

        * Api/qwebinspector.cpp:
        (QWebInspector::showEvent):
        (QWebInspector::closeEvent):
        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPagePrivate::getOrCreateInspector):
        (QWebPagePrivate::inspectorController):
        (QWebPage::triggerAction):
        (QWebPage::updatePositionDependentActions):
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::showWindow):
        (WebCore::InspectorClientQt::closeWindow):

2009-12-30  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        Upstream Symbian def files from Qt 4.6.

        These files define the ABI of QtWebKit on Symbian.

        * symbian/bwins/QtWebKitu.def: Added.
        * symbian/eabi/QtWebKitu.def: Added.

2009-12-29  Daniel Bates  <dbates@webkit.org>

        Reviewed by Ariya Hidayat.

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

        Adds an Open File dialog to make it convenient to open a file
        to view in the browser.

        * QGVLauncher/main.cpp:
        (MainWindow::load): Modified to call loadURL.
        (MainWindow::openFile): Added.
        (MainWindow::loadURL): Added.
        (MainWindow::buildUI): Added menu item Open File.

2009-12-29  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Eric Seidel.

        [Qt] Fix crash on LayoutTests/fast/loader/empty-embed-src-attribute.html
        
        Related to https://bugs.webkit.org/show_bug.cgi?id=23806
        
        If an embedded document is loaded within a page and it has an empty
        URL, use a blank URL for the load request.
        
        https://bugs.webkit.org/show_bug.cgi?id=33017

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2009-12-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Rubber-stamped by Simon Hausmann and Holger Freyther.

        [Qt] Remove WebKit/qt/WebKitPart empty directory

        The content of the directory has been removed by r34888.

        * WebKitPart: Removed.

2009-12-29  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] DRT: Frame loader callbacks differ from the Mac port
        https://bugs.webkit.org/show_bug.cgi?id=32989

        Remove messages from the callbacks that should not dump them to match
        the expected results for the http/loading tests.

        Unskip some http/loading tests which succeed now.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidPopStateWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchWillClose):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientQt::dispatchDidClearWindowObjectInWorld):

2009-12-29  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Eric Seidel.

        [Qt] fix fast/dom/Window/window-onFocus.html
        
        Add support for layouttestcontroller.windowIsKey to Qt DRT and fix issue where
        window.onblur was getting dispatched twice from QtWebKit.
        
        https://bugs.webkit.org/show_bug.cgi?id=32990

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusOutEvent):

2009-12-24  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Gustavo Noronha.

        Doc : QGraphicsWebView::zoomFactor was introduced in 4.6.
        
        * Api/qgraphicswebview.cpp:

2009-12-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Holger Freyther.

        Moved QtLauncher to WebKitTools/

        * QtLauncher: Removed.
        * QtLauncher/QtLauncher.pro: Removed.
        * QtLauncher/main.cpp: Removed.

2009-12-21  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Minor fixes to language.

        * Api/qwebpage.cpp:

2009-12-21  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Clean up the WebKit layer unit-tests

            - Use tests.pri for common options
            - Standardize file naming
            - Move all resources to 'resources' subdir
            - Standardize how TESTS_SOURCE_DIR is used
            - Get rid of UID3 for symbian (autogenerated)
            - Don't build app bundles on Mac OS X

        * tests/benchmarks/loading/loading.pro: Added.
        * tests/benchmarks/loading/tst_loading.pro: Removed.
        * tests/benchmarks/painting/painting.pro: Added.
        * tests/benchmarks/painting/tst_painting.pro: Removed.
        * tests/qgraphicswebview/qgraphicswebview.pro:
        * tests/qwebelement/qwebelement.pro:
        * tests/qwebelement/qwebelement.qrc: Removed.
        * tests/qwebelement/resources/image.png: Renamed from WebKit/qt/tests/qwebelement/image.png.
        * tests/qwebelement/resources/style.css: Renamed from WebKit/qt/tests/qwebelement/style.css.
        * tests/qwebelement/resources/style2.css: Renamed from WebKit/qt/tests/qwebelement/style2.css.
        * tests/qwebelement/tst_qwebelement.qrc: Added.
        * tests/qwebframe/qwebframe.pro:
        * tests/qwebframe/qwebframe.qrc: Removed.
        * tests/qwebframe/resources/image.png: Renamed from WebKit/qt/tests/qwebframe/image.png.
        * tests/qwebframe/resources/style.css: Renamed from WebKit/qt/tests/qwebframe/style.css.
        * tests/qwebframe/resources/test1.html: Renamed from WebKit/qt/tests/qwebframe/test1.html.
        * tests/qwebframe/resources/test2.html: Renamed from WebKit/qt/tests/qwebframe/test2.html.
        * tests/qwebframe/resources/testiframe.html: Renamed from WebKit/qt/tests/qwebframe/testiframe.html.
        * tests/qwebframe/resources/testiframe2.html: Renamed from WebKit/qt/tests/qwebframe/testiframe2.html.
        * tests/qwebframe/tst_qwebframe.cpp:
        * tests/qwebframe/tst_qwebframe.qrc: Added.
        * tests/qwebhistory/qwebhistory.pro:
        * tests/qwebhistory/resources/page1.html: Renamed from WebKit/qt/tests/qwebhistory/data/page1.html.
        * tests/qwebhistory/resources/page2.html: Renamed from WebKit/qt/tests/qwebhistory/data/page2.html.
        * tests/qwebhistory/resources/page3.html: Renamed from WebKit/qt/tests/qwebhistory/data/page3.html.
        * tests/qwebhistory/resources/page4.html: Renamed from WebKit/qt/tests/qwebhistory/data/page4.html.
        * tests/qwebhistory/resources/page5.html: Renamed from WebKit/qt/tests/qwebhistory/data/page5.html.
        * tests/qwebhistory/resources/page6.html: Renamed from WebKit/qt/tests/qwebhistory/data/page6.html.
        * tests/qwebhistory/tst_qwebhistory.cpp:
        (tst_QWebHistory::):
        * tests/qwebhistory/tst_qwebhistory.qrc:
        * tests/qwebhistoryinterface/qwebhistoryinterface.pro:
        * tests/qwebinspector/qwebinspector.pro:
        * tests/qwebpage/qwebpage.pro:
        * tests/qwebpage/resources/frame_a.html: Renamed from WebKit/qt/tests/qwebpage/frametest/frame_a.html.
        * tests/qwebpage/resources/iframe.html: Renamed from WebKit/qt/tests/qwebpage/frametest/iframe.html.
        * tests/qwebpage/resources/iframe2.html: Renamed from WebKit/qt/tests/qwebpage/frametest/iframe2.html.
        * tests/qwebpage/resources/iframe3.html: Renamed from WebKit/qt/tests/qwebpage/frametest/iframe3.html.
        * tests/qwebpage/resources/index.html: Renamed from WebKit/qt/tests/qwebpage/frametest/index.html.
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::backActionUpdate):
        (tst_QWebPage::frameAt):
        (tst_QWebPage::errorPageExtensionInFrameset):
        (tst_QWebPage::screenshot):
        * tests/qwebpage/tst_qwebpage.qrc:
        * tests/qwebplugindatabase/qwebplugindatabase.pro:
        * tests/qwebview/qwebview.pro:
        * tests/qwebview/resources/frame_a.html: Renamed from WebKit/qt/tests/qwebview/data/frame_a.html.
        * tests/qwebview/resources/index.html: Renamed from WebKit/qt/tests/qwebview/data/index.html.
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::reusePage):
        (tst_QWebView::crashTests):
        * tests/qwebview/tst_qwebview.qrc:
        * tests/resources/image2.png: Renamed from WebKit/qt/tests/qwebframe/resources/image2.png.
        * tests/tests.pri: Added.
        * tests/tests.pro:

2009-12-18  Ariya Hidayat  <ariya.hidayat@gmail.com>

        Build fix, not reviewed.

        * QtLauncher/main.cpp:
        (MainWindow::setTouchMocking): Leave setTouchMocking as an empty
        function for Qt < 4.6 so that moc still creates a slot for that.
        Otherwise, it would have generated a linker error.

2009-12-18  Adam Roben  <aroben@apple.com>

        Qt build fix

        * Api/qwebpage.cpp: Added #include.

2009-12-18  Adam Roben  <aroben@apple.com>

        Qt build fix

        * Api/qwebpage.cpp:
        Added #includes.

2009-12-18  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add new API to QWebFrame to scrollRecursively starting with any css overflow 
        then checking current frame and then ancestors
        https://bugs.webkit.org/show_bug.cgi?id=32668

        * Api/qwebframe.cpp:
        (QWebFramePrivate::scrollOverflow):
        (QWebFrame::scrollRecursively):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * tests/qwebframe/qwebframe.qrc:
        * tests/qwebframe/testiframe.html: Added.
        * tests/qwebframe/testiframe2.html: Added.
        * tests/qwebframe/tst_qwebframe.cpp:

2009-12-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Fix infinite recursion in touch mocking.

        Don't send the fake touch events to the view, as that'll trigger the
        event filter again.

        * QtLauncher/main.cpp:
        (MainWindow::sendTouchEvent):

2009-12-17  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add support for mocking touch events with Q(GV)Launcher
        https://bugs.webkit.org/show_bug.cgi?id=32434

        The event delivery should go through QCoreApplication::sendEvent()

        * QtLauncher/main.cpp:
        (MainWindow::sendTouchEvent):

2009-12-17  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] Add support for touch events in QWebView and QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=32432

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::QGraphicsWebView):
        (QGraphicsWebView::sceneEvent):
        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebView::event):

2009-12-17  Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Simon Hausmann.

        [Qt] Add support for mocking touch events with QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=32434

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::sendTouchEvent):
        (MainWindow::eventFilter):
        (MainWindow::setTouchMocking):
        (MainWindow::setupUI):

2009-12-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix JavaScript prompt behavior for empty/null strings.
        https://bugs.webkit.org/show_bug.cgi?id=30914

        The patch is based on the work done by Gupta Manish.

        In the default implementation of the JavaScript prompt
        we are using a QInputDialog to get the text and this has
        one quirk with regard to not entering any text.

        In other WebKit ports and in Firefox an empty string is
        returned but in the Qt case it is a null string.

        Change the API documentation in QWebPage to mention we want to
        have a non null string but do the fixup in the ChromeClientQt
        to support existing code.

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptPrompt): Change API documentation
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runJavaScriptPrompt): Fixup null QString

2009-11-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Do not disable the inspector on show and hide
        https://bugs.webkit.org/show_bug.cgi?id=31851

        On Qt/X11 with some window managers the window will be
        hidden when switching windows. In this case all the results
        are gone when coming back to the window.

        Attempt to use the CloseEvent to figure out if the window
        was closed and withdrawn as this is more friendly to the
        user of the inspector client.

        * Api/qwebinspector.cpp:
        (QWebInspector::hideEvent):
        (QWebInspector::closeEvent):
        * Api/qwebinspector.h:

2009-12-14  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Improve the autotests of QtWebkit
        https://bugs.webkit.org/show_bug.cgi?id=32216

        Refactor tst_qwebelement to remove the qWait()

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):

2009-12-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the QWebPage inputMethods() autotest after r51758
        to compare the Qt::ImFont property's family against an explicitly
        previously configured family.

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

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

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.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2009-12-13  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        Add a test in Qt for https://bugs.webkit.org/show_bug.cgi?id=29005
        https://bugs.webkit.org/show_bug.cgi?id=29008

        * tests/qwebframe/tst_qwebframe.cpp:

2009-12-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        [Qt] Re-enable QWebView::renderHints property for Qt for Symbian

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

        The bug in Qt's moc that triggered a linking error when declaring this
        property has been fixed and we can remove the workaround.

        * Api/qwebview.h:

2009-12-11  Yael Aharon  <yael.aharon@nokia.com>

        Unreviewed build fix for Qt versions < 4.6.

        * tests/qwebframe/tst_qwebframe.cpp:
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::reusePage):

2009-12-11  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Tor Arne Vestbø.

        [Qt] Updated QWebElement documentation
        
        findAll() returns a QWebElementCollection, not QList<QWebElement>.

        * docs/webkitsnippets/webelement/main.cpp:
        (findAll):

2009-12-11  Simon Hausmann  <hausmann@webkit.org>, Kim Grönholm  <kim.gronholm@nomovok.com>

        Reviewed by Antti Koivisto.

        Forward Qt touch events to the event handler as platform touch events.

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::touchEvent):
        (QWebPage::event):
        * Api/qwebpage_p.h:

2009-12-07  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Improve the autotests of QtWebkit
        https://bugs.webkit.org/show_bug.cgi?id=32216

        Remove the calls to qWait() of the autotest of QWebView

        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::reusePage):

2009-12-07  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Improve the autotests of QtWebkit
        https://bugs.webkit.org/show_bug.cgi?id=32216

        Refactor tst_qwebframe to remove qWait() and use
        the function waitForSignal() from util.h

        * tests/qwebframe/tst_qwebframe.cpp:

2009-12-07  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Improve the autotests of QtWebkit
        https://bugs.webkit.org/show_bug.cgi?id=32216

        Refactor the test of QGraphicsWebView:
        -make waitForSignal() available to all the tests.
        -remove QTest::qWait()

        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::crashOnViewlessWebPages):
        * tests/util.h:
        (waitForSignal):

2009-12-07  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Plugins: Force windowless mode when there is no native window handle
        
        Inject wmode=opaque while instantiating the plugin for the case when the
        webpage is not backed by a native window handle.
        
        https://bugs.webkit.org/show_bug.cgi?id=32059

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2009-12-04  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Corrects QtLauncher style

        * QtLauncher/main.cpp:
        (WebPage::acceptNavigationRequest):
        (MainWindow::MainWindow):
        (MainWindow::webPage):
        (MainWindow::webView):
        (MainWindow::changeLocation):
        (MainWindow::loadFinished):
        (MainWindow::showLinkHover):
        (MainWindow::zoomIn):
        (MainWindow::zoomOut):
        (MainWindow::print):
        (MainWindow::setEditable):
        (MainWindow::dumpHtml):
        (MainWindow::selectElements):
        (MainWindow::newWindow):
        (MainWindow::setupUI):
        (WebPage::createWindow):
        (WebPage::createPlugin):
        (main):

2009-12-04  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QtLauncher: add a menu to show or hide the web inspector.
        https://bugs.webkit.org/show_bug.cgi?id=32149

        * QtLauncher/main.cpp:
        (WebInspector::WebInspector):
        (WebInspector::showEvent):
        (WebInspector::hideEvent):
        (MainWindow::MainWindow):
        (MainWindow::setupUI):

2009-12-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Split out the renderPrivate in two methods, one for working on
        relative coordinates (relative to the viewport) and one for
        working on absolute coordinates. The latter is more effecient
        for implementing tiling, as you don't need translate the coords,
        and because it avoid clipping to the viewport.

        No behaviour changes, so no new tests.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderContentsLayerAbsoluteCoords):
        (QWebFramePrivate::renderRelativeCoords):
        (QWebFrame::render):
        * Api/qwebframe_p.h:

2009-12-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Allow removing 'qrc' as a local security origin scheme

        * tests/qwebpage/tst_qwebpage.cpp:

2009-12-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Clean up argument parsing in the QtLauncher

        * QtLauncher/main.cpp:

2009-12-04  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Prevent the inspector from closing its wrapping widget.
        This is not necessary anymore since we now hide the embedded
        close button.
        https://bugs.webkit.org/show_bug.cgi?id=32149

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::showWindow):
        (WebCore::InspectorClientQt::closeWindow):

2009-12-03  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Eric Seidel.

        Fix compilation when SVG is disabled.

        * Api/qwebframe.cpp:
        (qt_drt_pauseSVGAnimation):

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidPushStateWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchDidReplaceStateWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchDidPopStateWithinPage):
        * WebCoreSupport/FrameLoaderClientQt.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/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::populateSetting):
        (WebCore::InspectorClientQt::storeSetting):
        (WebCore::variantToSetting):
        (WebCore::settingToVariant):
        * WebCoreSupport/InspectorClientQt.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/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidAddBackForwardItem): Add an empty implementation. Method added to FrameLoaderClient by Android (see bug).
        (WebCore::FrameLoaderClientQt::dispatchDidRemoveBackForwardItem): ditto.
        (WebCore::FrameLoaderClientQt::dispatchDidChangeBackForwardIndex): ditto.
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Try to fix Qt build.

        * Api/qwebframe.cpp:
        (qt_drt_pauseSVGAnimation):

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.

        * Api/qwebframe.cpp:
        (qt_drt_pauseSVGAnimation):

2009-12-01  Daniel Bates  <dbates@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

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

        Makes QtLauncher default to the http scheme for URLs.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::changeLocation):
        (main):

2009-11-30  Abhinav Mithal  <abhinav.mithal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt][Symbian] Report SymbianOS in user agent string for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=31961

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2009-11-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix minor waning in QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=31963

        * tests/qwebpage/tst_qwebpage.cpp:
        (ErrorPage::extension): Remove info wariable as it is
        not used.

2009-11-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] SoftwareInputPanelRequest event sent when clicking in newly loaded page

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

        Don't set the event unless there is a focused node we can use
        for editing afterwards.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::handleSoftwareInputPanel):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2009-11-26  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Holger Freyther.

        Removed unused ICO image plugin handler.

        * Plugins/ICOHandler.cpp: Removed.
        * Plugins/ICOHandler.h: Removed.
        * Plugins/Plugins.pro: Removed.

2009-11-12  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Do not show the QWidget when the WebCore::Widget is hidden
        https://bugs.webkit.org/show_bug.cgi?id=31203

        The clipping code was making a QWidget visible even if the
        WebCore::Widget was hidden. Fix the bug by calling setVisible
        only if the WebCore::Widget Widget::isSelfVisible.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::QtPluginWidget::show): Override WebCore::Widget::show to call handleVisibility
        (WebCore::QtPluginWidget::handleVisibility): New method to call setVisible when we are visible
        (FrameLoaderClientQt::createPlugin): Hide the QWidget by default

2009-11-23  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Updated the QWebElement documentation with links to examples and
        external resources.
        Fixed the project file for the webelement snippet and tidied up the
        markers used for quoting the code.

        * Api/qwebelement.cpp:
        * docs/webkitsnippets/webelement/main.cpp:
        (findAll):
        * docs/webkitsnippets/webelement/webelement.pro:

2009-11-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Wrong runtime instance objects of wrapped QObjects may be used if
        the wrapped object died before the gc removed the instance.

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

        Added a unit-test to verify that wrapping a QObject with the
        same identity as a previously but now dead object works.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-11-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add instantiation tests for QWebInspector.

        * tests/qwebinspector/qwebinspector.pro: Added.
        * tests/qwebinspector/tst_qwebinspector.cpp: Added.
        (tst_QWebInspector::attachAndDestroy):
        * tests/tests.pro:

2009-11-19  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix QWebInspector destruction problem.
        https://bugs.webkit.org/show_bug.cgi?id=31664

        * Api/qwebpage.cpp:
        (QWebPage::~QWebPage):

2009-11-19  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Normalize signal and slot signatures.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::setPage):
        * Api/qwebview.cpp:
        (QWebView::setPage):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        * docs/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp:
        (wrapInFunction):
        * tests/qwebframe/tst_qwebframe.cpp:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::modified):
        (tst_QWebPage::database):

2009-11-18  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove support for Qt v4.3 or older versions
        https://bugs.webkit.org/show_bug.cgi?id=29469

        * Api/qcookiejar.cpp: Removed.
        * Api/qcookiejar.h: Removed.
        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::event):
        * Api/qwebframe.cpp:
        (QWebFrame::load):
        * Api/qwebframe.h:
        * Api/qwebkitglobal.h:
        * Api/qwebnetworkinterface.cpp: Removed.
        * Api/qwebnetworkinterface.h: Removed.
        * Api/qwebnetworkinterface_p.h: Removed.
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::acceptNavigationRequest):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::action):
        (QWebPage::userAgentForUrl):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::load):
        (QWebView::event):
        * Api/qwebview.h:
        * QtLauncher/main.cpp:
        (MainWindow::print):
        (MainWindow::setupUI):
        (main):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::startDownload):
        (WebCore::FrameLoaderClientQt::createPlugin):

2009-11-18  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Add support for displaying deleteButton.
        https://bugs.webkit.org/show_bug.cgi?id=31560

        Test: LayoutTests/editing/deleting/5408255.html

        * Api/qwebsettings.cpp:
        (graphics):
        * Api/qwebsettings.h:

2009-11-18  Paul Olav Tvete  <paul.tvete@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Make the QWebElement::render() test pass when pixmaps aren't 32 bit.

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::render):

2009-11-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Clarify and simplify the legal section in the overview documentation,
        after review with our legal team.

        * docs/qtwebkit.qdoc:

2009-11-18  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add QtLauncher support for opening links in the default browser

        This can be triggered by either the context menu or by clicking a link
        while holding down the Alt key. Opening a link in a new windows is
        triggered by holding down Shift.

        * QtLauncher/main.cpp:

2009-11-17  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] QGLLauncher does not support drag&drop of local files
        https://bugs.webkit.org/show_bug.cgi?id=31057

        Enable accepting files in QGraphicsWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::QGraphicsWebView):
        (QGraphicsWebView::dragEnterEvent):

2009-11-17  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] better test coverage for ErrorPageExtension
        https://bugs.webkit.org/show_bug.cgi?id=31583

        Improved the coverage of current ErrorPageExtension tests by
        adding autotests involving frameset and iframes.

        * tests/qwebpage/tst_qwebpage.cpp:
        (ErrorPage::extension): Make the ErrorPageExtension
        to work for all frames, not only the main frame.
        (tst_QWebPage::errorPageExtension): Stop using
        the 'frameset.html' resouce in this method since
        an autotest specific for frameset's is being added.
        (tst_QWebPage::errorPageExtensionInIFrames): Added.
        (tst_QWebPage::errorPageExtensionInFrameset): Added.

2009-11-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        API documentation fixes.

        * Api/qgraphicswebview.cpp: Removed duplicate docs.
        * Api/qwebelement.cpp: Added missing docs.
        * Api/qwebsettings.cpp: Ditto.

2009-11-14  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Antti Koivisto.

        [Qt] Broken back/forward after using ErrorPageExtension to set error page
        https://bugs.webkit.org/show_bug.cgi?id=30573

        Implemented autotests for covering the back/forward
        reset problem involving error pages.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::errorPageExtension):

2009-11-13  Adam Roben  <aroben@apple.com>

        Update for changes to FrameLoaderClient

        Fixes <http://webkit.org/b/31124> Tell the WebFrameLoadDelegate when
        window objects in isolated worlds are cleared

        Reviewed by Dave Hyatt.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidClearWindowObjectInWorld):
        * WebCoreSupport/FrameLoaderClientQt.h:
        Replaced windowObjectCleared with this function. Does nothing if the
        passed-in world is not the mainThreadNormalWorld().

2009-11-13  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enable Page Cache if setMaximumPagesInCache needs it.
        This fixes https://bugs.webkit.org/show_bug.cgi?id=31266.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::setMaximumPagesInCache):

2009-11-13  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix initial QWebView focus behavior.

        focusController->setFocused(true) was not always called.
        https://bugs.webkit.org/show_bug.cgi?id=31466

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):

2009-11-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Update documentation for the Qt API

        * Api/qgraphicswebview.cpp:
        * Api/qwebelement.cpp:
        * Api/qwebframe.cpp:
        * Api/qwebsettings.cpp:
        * Api/qwebview.cpp:

2009-11-13  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Use correct install-path when running qdoc3

        * docs/docs.pri:

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.

        * Api/qwebframe.cpp:
        (QWebFrame::renderTreeDump):

2009-11-12  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Jan Alonzo.

        [Qt] Various doc fixes
        https://bugs.webkit.org/show_bug.cgi?id=31358

        QWebPage's constructor docs are mentioning "QWebView":
        "Constructs an empty QWebView with parent".

        * Api/qwebpage.cpp:

2009-11-12  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Custom printing shrink factors
        https://bugs.webkit.org/show_bug.cgi?id=29042

        This reverts commit r49769. The public API for this needs to be reviewed
        before its inclusion in Qt.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2009-11-11  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Various doc fixes
        https://bugs.webkit.org/show_bug.cgi?id=31358

        Fixed wrong documentation: item's dimensions do fit to Web page
        content by default.

        Kenneth agreed to land this as a followup patch to the
        just landed documentation patch.

        * Api/qgraphicswebview.cpp:

2009-11-11  David Boddie  <dboddie@trolltech.com>

        Reviewed by Kenneth Christiansen.

        [Qt] Various doc fixes
        https://bugs.webkit.org/show_bug.cgi?id=31323

        Fixed and synchronized QWebView related documentation.

        * Api/qgraphicswebview.cpp:
        * Api/qwebview.cpp:

2009-11-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed buildbot fix.

        Export a method to the DRT to know if the document has a
        document element.

        * Api/qwebframe.cpp:
        (qt_drt_hasDocumentElement):

2009-11-11  Liang QI  <liang.qi@nokia.com>

        [Qt] Fix tst_qwebpage and tst_qwebframe compilation on Symbian.

        * tests/qwebframe/qwebframe.pro:
        * tests/qwebframe/tst_qwebframe.cpp:
        * tests/qwebpage/qwebpage.pro:
        * tests/qwebpage/tst_qwebpage.cpp:

2009-11-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Fix a crash in the layout test plugins/document-open.html

        * Api/qwebframe.cpp:
        (QWebFrame::toPlainText):

2009-11-11  Warwick Allison  <warwick.allison@nokia.com>, Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Regression: Preserve the parent of plugin objects when using
        QtWebKit with only a QWebPage.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin): Don't reparent
        plugins to 0.
        * tests/qwebpage/tst_qwebpage.cpp:
        (PluginCounterPage::PluginCounterPage): Initialize m_pluginParent to 0.
        (PluginCounterPage::~PluginCounterPage): Delete the plugin parent later
        (after the page)
        (PluginTracerPage::createPlugin): Assign a dummy parent to the plugin.
        (PluginTracerPage::PluginTracerPage): Set up the plugin parent.
        (tst_QWebPage::createViewlessPlugin): Verify that for viewless pages the
        plugin parent remains unchanged.

2009-11-11  David Boddie  <dboddie@trolltech.com>

        [Qt] Doc: Added internal or hidden placeholder documentation.

        * Api/qwebpage.cpp:

2009-11-11  Martin Smith  <msmith@trolltech.com>

        [Qt] doc: Changed Trolltech to Nokia

        * Api/qwebview.cpp:

2009-11-11  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=31323
        Fix a few compiler warnings

        * tests/qwebframe/tst_qwebframe.cpp: Add extra brackets 
        to make it explicit where the else case belongs

2009-11-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix enabling of software input panel when activating editable elements
        in QGraphicsWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::inputMethodEnabled): Implement method to
        query for input method support.
        * Api/qwebpage.cpp:
        (QWebPageWidgetClient::inputMethodEnabled): Ditto for QWidget.
        (QWebPagePrivate::handleSoftwareInputPanel): Don't use view() to
        test for input method support. Instead query using QWebPageClient
        and send the SIPR event to the ownerWidget() instead of the view().
        The latter is null for QGraphicsWebView.
        * tests/qwebpage/tst_qwebpage.cpp:
        (EventSpy::EventSpy):
        (EventSpy::eventFilter):
        (tst_QWebPage::inputMethods): Modify the test to verify that SIPR
        events are dispatched when activating focusable content.

2009-11-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed documentation fixes.

        Added a few improvements from Jocelyn Turcotte to the
        createWindow docs.

        * Api/qwebview.cpp:

2009-11-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed documentation fix.

        [Qt] Make qwebpage's createWindow not qwebview dependent.
        https://bugs.webkit.org/show_bug.cgi?id=30771

        Update documentation to make it clear that a reimplementation
        of the createWindow method of the associated QWebPage can
        result in the QWebView::createWindow method to never be called.

        * Api/qwebview.cpp:

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Few classes have virtual functions but non-virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=31269

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::~QGraphicsWebViewPrivate): Add virtual
        destructor.

2009-11-09  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=30628
        Add an API to get all the attributes from a QWebElement.

        * Api/qwebelement.cpp:
        (QWebElement::attributesName):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::listAttributes):

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Use explicit parentheses to silence gcc 4.4 -Wparentheses warnings
        https://bugs.webkit.org/show_bug.cgi?id=31040

        * Api/qwebpage.cpp:
        (QWebPagePrivate::handleScrolling):

2009-11-09  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dan Bernstein.

        Track "can have scrollbar" state within FrameView independently of the
        individual scrollbar states in ScrollView.

        rdar://problem/7215132, https://bugs.webkit.org/show_bug.cgi?id=29167
        REGRESSION (r48064): mint.com loses scrollbars after coming out of
        edit mode.

        rdar://problem/7314421, https://bugs.webkit.org/show_bug.cgi?id=30517
        REGRESSION (r48064): Extra scroll bars in GarageBand Lesson Store.

        Test: fast/overflow/scrollbar-restored.html

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarPolicy):

2009-11-09  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=30772
        Add a non-const iterator to QWebElementCollection.
        Move the two attributes of the iterator to private.

        * Api/qwebelement.h:
        (const_iterator::begin):
        (const_iterator::end):
        (const_iterator::constBegin):
        (const_iterator::constEnd):
        (const_iterator::iterator::iterator):
        (const_iterator::iterator::operator*):
        (const_iterator::iterator::operator==):
        (const_iterator::iterator::operator!=):
        (const_iterator::iterator::operator<):
        (const_iterator::iterator::operator<=):
        (const_iterator::iterator::operator>):
        (const_iterator::iterator::operator>=):
        (const_iterator::iterator::operator++):
        (const_iterator::iterator::operator--):
        (const_iterator::iterator::operator+=):
        (const_iterator::iterator::operator-=):
        (const_iterator::iterator::operator+):
        (const_iterator::iterator::operator-):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::nonConstIterator):
        (tst_QWebElement::constIterator):

2009-11-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Christiansen.

        [Qt] Remove the sessionStorage setting (per Page)
        https://bugs.webkit.org/show_bug.cgi?id=31249

        This setting allows to run sessionStorage on/off on a per page
        basis. Remove this prematurely exposed API.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::database):
        (tst_QWebPage::testOptionalJSObjects):

2009-11-09  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Remove the QWebPage:webInspectorTriggered signal.
        User customization of the communication between QWebPage
        and QWebInspector will be properly designed in the next version.
        https://bugs.webkit.org/show_bug.cgi?id=30773

        * Api/qwebinspector.cpp:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::getOrCreateInspector):
        (QWebPage::triggerAction):
        * Api/qwebpage.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2009-11-05  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Added a missing re-implementation of QGraphicsItem::inputMethodQuery().

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::inputMethodQuery):
        * Api/qgraphicswebview.h:

2009-11-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Provide a dummy re-implementation of QGraphicsLayoutItem::sizeHint(),
        similar to QWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::sizeHint):
        * Api/qgraphicswebview.h:

2009-11-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Removed zoomFactoryChanged() signal and added
        linkClicked() to QGraphicsWebView, for consistency with
        QWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::setPage):
        (QGraphicsWebView::setZoomFactor):
        * Api/qgraphicswebview.h:

2009-11-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Added QGraphicsWebView::findText() for convenience and consistency
        with QWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::findText):
        * Api/qgraphicswebview.h:

2009-11-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Added QGraphicsWebView::pageAction() and triggerPageAction(), for
        consistency with QWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::pageAction):
        (QGraphicsWebView::triggerPageAction):
        * Api/qgraphicswebview.h:

2009-11-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Removed QGraphicsWebView::toHtml() after API review.

        That's consistent with QWebView and also based on the assumption that
        toHtml() is called less frequently than setHtml().

        * Api/qgraphicswebview.cpp:
        * Api/qgraphicswebview.h:
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::qgraphicswebview):

2009-11-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Removed the interactive property of QGraphicsWebView.

        There are clearly use-cases for this feature, but it will require
        more work to make this fully work with an enum to have fine-grained
        control over the interactivity levels. For now it is easy to achieve
        in user-code what the boolean property did.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::QGraphicsWebViewPrivate):
        (QGraphicsWebView::hoverMoveEvent):
        (QGraphicsWebView::mouseMoveEvent):
        (QGraphicsWebView::mousePressEvent):
        (QGraphicsWebView::mouseReleaseEvent):
        (QGraphicsWebView::mouseDoubleClickEvent):
        (QGraphicsWebView::keyPressEvent):
        (QGraphicsWebView::keyReleaseEvent):
        (QGraphicsWebView::dragLeaveEvent):
        (QGraphicsWebView::dragMoveEvent):
        (QGraphicsWebView::dropEvent):
        (QGraphicsWebView::wheelEvent):
        (QGraphicsWebView::inputMethodEvent):
        * Api/qgraphicswebview.h:
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::qgraphicswebview):

2009-11-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Make the QGraphicsWebView constructor explicit.

        * Api/qgraphicswebview.h:

2009-11-05  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Add support for Shift-PageUp and Shift-PageDown key events.
        https://bugs.webkit.org/show_bug.cgi?id=31166

        Test: LayoutTests/editing/selection/shrink-selection-after-shift-pagedown.html

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2009-11-05  Simon Hausmann  <hausmann@webkit.org>

        Last Qt 4.5 build fix (*sigh*)

        * tests/qwebpage/tst_qwebpage.cpp:
        (inputMethodHints): inputMethodHints() is only used for 
        Qt 4.6, so guard the whole function.

2009-11-05  Simon Hausmann  <hausmann@webkit.org>

        Another prospective build fix against Qt 4.5 (build bot)

        Don't compile & run the QGraphicsWebView portion of the
        input methods auto test with Qt 4.5.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods_data):
        (inputMethodHints):
        (inputMethodEnabled):
        (tst_QWebPage::inputMethods):

2009-11-05  Simon Hausmann  <hausmann@webkit.org>

        Prospective build fix against Qt 4.5 (build bot)

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::setInputMethodEnabled): Guard the
        use of Qt 4.6 specific API with #ifdefs.

2009-11-01  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Kenneth Christiansen.

        [Qt] Fix enabling of input method support on QGraphicsWebView.
        https://bugs.webkit.org/show_bug.cgi?id=30605

        Instead of setting the unsupported widget attribute on the
        QGraphicsWidget in setInputMethodEnabled() set the 
        ItemAcceptsInputMethod GraphicsItem flag directly.

        Changed the existing input method auto test to run once
        on a QWebView and once on a QGraphicsWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::setInputMethodEnabled):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods_data):
        (inputMethodHints):
        (inputMethodEnabled):
        (tst_QWebPage::inputMethods):

2009-11-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Kenneth Christiansen.

        Added QGraphicsWebView::modified property, for consistency
        with QWebView.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::isModified):
        * Api/qgraphicswebview.h:
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::qgraphicswebview):

2009-11-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Kenneth Christiansen.

        Removed status and progress properties of QGraphicsWebView.
        Added loadProgress and statusBarMessage signals instead,
        after API review.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::QGraphicsWebViewPrivate):
        (QGraphicsWebView::setPage):
        * Api/qgraphicswebview.h:
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (tst_QGraphicsWebView::qgraphicswebview):

2009-11-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] REGRESSION: Allow applications to use their own QWidget bypassing QWebView.
        https://bugs.webkit.org/show_bug.cgi?id=30979

        Decouple QWebViewPrivate from QWebPageClient, and automatically create
        QWebPageWidgetClient whenever the view is QWidget based.

        * Api/qwebpage.cpp:
        (QWebPageWidgetClient::QWebPageWidgetClient):
        (QWebPageWidgetClient::scroll):
        (QWebPageWidgetClient::update):
        (QWebPageWidgetClient::setInputMethodEnabled):
        (QWebPageWidgetClient::setInputMethodHint):
        (QWebPageWidgetClient::cursor):
        (QWebPageWidgetClient::updateCursor):
        (QWebPageWidgetClient::palette):
        (QWebPageWidgetClient::screenNumber):
        (QWebPageWidgetClient::ownerWidget):
        (QWebPageWidgetClient::pluginParent):
        (QWebPage::setView):
        * Api/qwebview.cpp:
        (QWebView::~QWebView):
        (QWebView::setPage):
        (QWebView::event):

2009-11-03  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Fix build of unit-test after r50454.

        * tests/qwebpage/tst_qwebpage.cpp:

2009-11-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Make QWebPluginDatabase private API for now.

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

        * Api/headers.pri:
        * Api/qwebplugindatabase.cpp:
        * Api/qwebplugindatabase_p.h: Renamed from WebKit/qt/Api/qwebplugindatabase.h.
        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:
        (MainWindow::setupUI):
        * tests/tests.pro:

2009-11-03  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Tor Arne Vestbø.

        Oops, also remove the API docs of the removed networkRequestStarted() signal.

        * Api/qwebpage.cpp:

2009-11-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Replace the QWebPage::networkRequestStarted() signal with the originatingObject
        property set to the QWebFrame that belongs to the request.

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

        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::startDownload):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::loadFinished):
        (TestNetworkManager::createRequest):
        (tst_QWebPage::originatingObjectInNetworkRequests):

2009-11-02  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Adam Barth.

        QWebView crash fix.

        The QWebView should not crash if the stop() method is called from
        a function triggered by the loadProgress signal.

        A null pointer protection was added in the ProgressTracker::incrementProgress.

        New autotest was created.

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

        * tests/qwebview/tst_qwebview.cpp:
        (WebViewCrashTest::WebViewCrashTest):
        (WebViewCrashTest::loading):
        (tst_QWebView::crashTests):

2009-11-01  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        Turn on warnings for QtWebKit for gcc
        https://bugs.webkit.org/show_bug.cgi?id=30958

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate): Reorder initialization list 
        to fix compiler warnings.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt): Ditto.

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/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::focusedNodeChanged):
        * WebCoreSupport/ChromeClientQt.h:

2009-10-30  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Remove the QWebInspector::windowTitleChanged signal,
        QEvent::WindowTitleChange can be used to achieve the same.
        https://bugs.webkit.org/show_bug.cgi?id=30927

        * Api/qwebinspector.cpp:
        * Api/qwebinspector.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::updateWindowTitle):

2009-10-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Implement DELETE HTTP method for XmlHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=30894

        No new tests as this functionality is already tested by the
        xmlhttprequest LayoutTests. As this patch depends on an unreleased
        version of the dependent QtNetwork library and the tests will be
        enabled later once the dependent library is released (and the
        buildbot is updated).

        * Api/qwebframe.cpp:
        (QWebFrame::load):

2009-10-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Remove QWebView::guessUrlFromString() and replace its use
        with the new QUrl::fromUserInput() if using Qt 4.6 or newer.

        * Api/qwebview.cpp:
        * Api/qwebview.h:
        * QGVLauncher/main.cpp:
        (urlFromUserInput):
        (WebPage::applyProxy):
        (MainWindow::load):
        * QtLauncher/main.cpp:
        (urlFromUserInput):
        (MainWindow::MainWindow):
        (MainWindow::changeLocation):
        * tests/qwebview/tst_qwebview.cpp:

2009-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Serialize directly to the stream, and not first to an QByteArray,
        that is later serialized. That is slower and also uses more bytes.

        * Api/qwebhistory.cpp:
        (operator<<):
        (operator>>):

2009-10-28  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Qt] WebFrame::counterValueForElementById must not be exposed
        https://bugs.webkit.org/show_bug.cgi?id=30882

        * Api/qwebframe.cpp:
        (qt_drt_counterValueForElementById):
        * Api/qwebframe.h:

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

        * Api/qwebframe.cpp:
        (QWebFrame::counterValueForElementById):
        (QWebHitTestResult::frame):
        * Api/qwebframe.h:

2009-10-28  Antonio Gomes  <tonikitoo@webkit.org>

        Pushing missing WebKit/qt/tests/qwebframe/resources/ dir from bug 29248.

        [Qt] [API] Make it possible to have 'invisible' loads
        https://bugs.webkit.org/show_bug.cgi?id=29248

        * tests/qwebframe/resources/image2.png: Copied from WebKit/qt/tests/qwebelement/image.png.

2009-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] QWebHistory::saveState() is inconsistent with the Qt API
        https://bugs.webkit.org/show_bug.cgi?id=30710

        Make the versioning internal and enforce it in the WebCore
        part. Adjust the comments, as well as remove now dead code.

        * Api/qwebhistory.cpp:
        (operator<<):
        (operator>>):
        * Api/qwebhistory.h:

2009-10-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Holger Freyther.

        [Qt] QWebHistory::saveState() is inconsistent with the Qt API
        https://bugs.webkit.org/show_bug.cgi?id=30710

        Remove the QWebHistory::saveState() and ::restoreState() as
        they are inconsistent with the Qt API.

        Update unittests to reflect the change.

        * Api/qwebhistory.cpp:
        (operator<<):
        (operator>>):
        * Api/qwebhistory.h:
        * tests/qwebhistory/tst_qwebhistory.cpp:
        (saveHistory):
        (restoreHistory):
        (tst_QWebHistory::saveAndRestore_crash_1):
        (tst_QWebHistory::saveAndRestore_crash_2):
        (tst_QWebHistory::saveAndRestore_crash_3):
        (tst_QWebHistory::clear):

2009-10-27  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Holger Freyther.

        Complementary fix to bug 30779.

        By mistake I used QWeakPointer's toStrongRef() method which docs
        explicitly say to not be used in this situation (when the tracked
        pointer is devired from QObject). Instead QWeakPointer's data()
        is recommended.

        * Api/qwebpage.cpp:
        (QWebPage::view):

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.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):

2009-10-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Oliver Hunt.

        Change two methods to be internal for DRT use only.

        Part of [Qt] Review all new API in Qt 4.6
        https://bugs.webkit.org/show_bug.cgi?id=29843#c11

        * Api/qwebsecurityorigin.cpp:
        (qt_drt_whiteListAccessFromOrigin):
        (qt_drt_resetOriginAccessWhiteLists):
        (QWebSecurityOrigin::localSchemes):
        * Api/qwebsecurityorigin.h:

2009-10-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Make sure that initiating a rotation while rotating won't make
        it end up at rotation positions that are not a multiply of
        180 degrees.

        * QGVLauncher/main.cpp:
        (MainView::animatedFlip):

2009-10-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed Qt build fix.

        Update the tests as well to the new API change.

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::clear):

2009-10-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Tor Arne Vestbø.

        [Qt] QWebElement::removeChildren() should be
        QWebElement::removeAllChildren()
        https://bugs.webkit.org/show_bug.cgi?id=30630

        * Api/qwebelement.cpp:
        (QWebElement::removeAllChildren):
        * Api/qwebelement.h:

2009-10-27  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Antti Koivisto and Holger Freyther.

        Make QWebPagePrivate's (QWidget) view to be a QWeakPointer.
        https://bugs.webkit.org/show_bug.cgi?id=30779

        The fact that it was been set from external objects of qwebpage
        and not being deleted internally can lead to dangling references.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::~QGraphicsWebView):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::createContextMenu):
        (QWebPagePrivate::handleSoftwareInputPanel):
        (QWebPagePrivate::keyPressEvent):
        (QWebPage::setView):
        (QWebPage::view):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::shouldInterruptJavaScript):
        (QWebPage::createWindow):
        (QWebPage::extension):
        (QWebPage::chooseFile):
        (QWebPage::userAgentForUrl):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::~QWebView):

2009-10-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed documentation fix from David Boddie (Qt Doc Team)

        Removes the check around the RenderHints property documentation
        that was clearly added to synchronize the source and header files
        when the #if !defined(Q_OS_SYMBIAN) guards was added to the
        property.

        The documentation has also been updated to ensure that Symbian
        users know that there is no actual RenderHints property on their
        platform.

        * Api/qwebview.cpp:

2009-10-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed documentation fix from David Boddie (Qt Doc Team)

        Ensure that qdoc will always see the RenderHints property.

        The property was only defined in the header file if the Q_OS_SYMBIAN
        symbol was not defined, resulting in the property not showing up
        in the Qt documentation just because one platform doesn't support it.

        A follow up commit will improve the documentation for the property
        and note that it is not supported on the Symbiam platform.

        * Api/qwebview.h:

2009-10-26  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Reintroduce QWebElementCollection

        Revert the patch that has replaced QWebElementCollection 
        with QList<QWebElement>. Update the tests accordingly.

        Remove the constness of the return type of QWebElement operator[]. 

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

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        (QWebElementCollectionPrivate::QWebElementCollectionPrivate):
        (QWebElementCollectionPrivate::create):
        (QWebElementCollection::QWebElementCollection):
        (QWebElementCollection::operator=):
        (QWebElementCollection::~QWebElementCollection):
        (QWebElementCollection::operator+):
        (QWebElementCollection::append):
        (QWebElementCollection::count):
        (QWebElementCollection::at):
        (QWebElementCollection::toList):
        * Api/qwebelement.h:
        (const_iterator::begin):
        (const_iterator::end):
        (const_iterator::operator[]):
        * Api/qwebframe.cpp:
        (QWebFrame::findAllElements):
        * Api/qwebframe.h:
        * QtLauncher/main.cpp:
        (MainWindow::selectElements):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::simpleCollection):
        (tst_QWebElement::iteration):
        (tst_QWebElement::emptyCollection):
        (tst_QWebElement::appendCollection):
        (tst_QWebElement::nullSelect):
        (tst_QWebElement::hasSetFocus):
        (tst_QWebElement::render):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2009-10-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] [Symbian] Set the capability and memory required to run QtWebKit for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=30476

        Assign ReadUserData WriteUserData NetworkServices Symbian capabilities
        to all QtWebkit executables.

        * QGVLauncher/QGVLauncher.pro:
        * QtLauncher/QtLauncher.pro:
        * tests/benchmarks/loading/tst_loading.pro:
        * tests/benchmarks/painting/tst_painting.pro:
        * tests/qgraphicswebview/qgraphicswebview.pro:
        * tests/qwebelement/qwebelement.pro:
        * tests/qwebframe/qwebframe.pro:
        * tests/qwebhistory/qwebhistory.pro:
        * tests/qwebhistoryinterface/qwebhistoryinterface.pro:
        * tests/qwebpage/qwebpage.pro:
        * tests/qwebplugindatabase/qwebplugindatabase.pro:
        * tests/qwebview/qwebview.pro:

2009-10-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (speculative build fix - qt is currently already broken!)
        Build fix following bug #30696.

        * Api/qwebelement.cpp:
        (setupScriptContext):
        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2009-10-22  Shu Chang  <Chang.Shu@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Enable track visited links in QWebPage
        https://bugs.webkit.org/show_bug.cgi?id=30574

        Test: fast/history/clicked-link-is-visited.html

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2009-10-22  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Eric Seidel.

        [Qt] Add Print Shortcut to QtLauncher

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

        * QtLauncher/main.cpp:
        (MainWindow::setupUI):

2009-10-22  Antonio Gomes  <tonikitoo@webkit.org>

        Rubberstamped by Tor Arne Vestbø.

        Code standarlization for QGVLauncher.

        1) Made member initilization lists in constructors
           to be per line.
        2) Made applyProxy method inline as all other methods in
           WebPage class.

        * QGVLauncher/main.cpp:
        (WebPage::WebPage):
        (WebPage::applyProxy):
        (MainView::MainView):
        (MainWindow::MainWindow):
        (MainWindow::init):

2009-10-22  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Add a Y-Axis rotation to QGVLauncher.

        It uses the QStateMachine API from Qt 4.6.

        * QGVLauncher/main.cpp:
        (WebView::WebView):
        (WebView::setYRotation):
        (WebView::yRotation):
        (MainView::flip):
        (MainView::animatedYFlip):
        (SharedScene::SharedScene):
        (SharedScene::webView):
        (MainWindow::init):
        (MainWindow::animatedYFlip):
        (MainWindow::buildUI):

2009-10-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed By Adam Barth.

        Add some actions to the menu for cursor debugging.

        GraphicsView based launcher only.

        * QGVLauncher/main.cpp:
        (MainView::setWaitCursor):
        (MainView::resetCursor):
        (MainView::flip):
        (MainWindow::setWaitCursor):
        (MainWindow::resetCursor):
        (MainWindow::buildUI):

2009-10-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Adam Barth.

        Remove clipRenderToViewport as agreed upon in
        https://bugs.webkit.org/show_bug.cgi?id=29843

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):

2009-10-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Barth.

        Update the tests to test the new render functionality, and take
        into consideration that render() clips to the frame itself as well
        as the viewport.

        QWebFrame::render() now always clips, so the old tests were bogus.

        Rendering pure contents (no scrollbars etc) without clipping can now
        be accomplished using QWebFrame::documentElement()->render(...)

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * tests/qwebframe/tst_qwebframe.cpp:

2009-10-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Adam Barth.

        As we do not support rendering a QWebFrame without it being clipped
        the the frame as well as the viewport, we now set the viewport size
        to the size of the contents.

        Rendering pure contents (no scrollbars etc) without clipping can be
        acomplished using QWebFrame::documentElement()->render(...)

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::render):

2009-10-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Add menu item to dump the plugin list to the console,
        which can be handy for debugging.

        * QtLauncher/main.cpp:
        (MainWindow::dumpPlugins):
        (MainWindow::setupUI):

2009-10-19  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Introduce new render method on QWebFrame, which supports specifying
        which layers to render (scrollbars, contents, pan-icon).

        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderPrivate):
        (QWebFrame::render):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2009-10-19  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Infinite loop (leading to crash) when setting cursor in QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=30549

        Patch reimplements QGraphicsItem's itemChange method, and make
        CursorChange event to be emitted after cursor has already been
        set.

        QWidget::setCursor send the event just after it sets the cursor,
        then patch makes both behaviors compatible.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::itemChange):
        * Api/qgraphicswebview.h:

2009-10-19  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Update call to FrameLoader::loadFrameRequest().

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2009-10-19  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Ariya Hidayat.

        Add QWebElement::render API which allows rendering of single
        element.

        * Api/qwebelement.cpp:
        (QWebElement::render):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::render):
        * tests/qwebelement/qwebelement.qrc:
        * tests/qwebelement/image.png: Added.

2009-10-19  Markus Goetz <Markus.Goetz@nokia.com>

        Reviewed by Ariya Hidayat.

        QWebPage: Doc: setNetworkAccessManager should only be called once.

        * Api/qwebpage.cpp:

2009-10-19  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Tor Arne.

        Wrong ifdef combination in QGraphicsWebView's event method.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::event):

2009-10-19  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Windowed Plugins: Don't crash when client is 0.
        
        Client is 0 when we use QWebPage without a QWebView or QGraphicsWebView.
        In addition, setFrameRect()/updatePluginWidget() is called even if the
        plugin was not succesfully loaded. updatePluginWidget() updates the
        window rect which is, in theory, useful to draw something that indicates
        that we didn't load successfully.
        
        So, a status check is added to setNPWindowIfNeeded.

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

        * tests/qwebpage/qwebpage.pro:
        * tests/qwebpage/tst_qwebpage.cpp:
        (takeScreenshot):
        (tst_QWebPage::screenshot_data):
        (tst_QWebPage::screenshot):
        * tests/resources/test.swf: Copied from LayoutTests/fast/replaced/resources/test.swf.

2009-10-19  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Holger Freyther.

        [Qt] Windowed Plugins: Fix crash when QWebPage is deleted after QWebView.
        
        Fixes various sources of crashes:
        1. The PluginContainer is a child of QWebView. When the view gets deleted,
        the PluginView is not notified about the deletion of PluginContainer.
        2. QWebView destructor does not set client to 0.
        3. Sometimes pending paint events are sent after the plugin has died, so add
        a check in PluginView::setNPWindowIfNeeded.

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

        * Api/qwebview.cpp:
        (QWebView::~QWebView):
        * tests/qwebview/qwebview.pro:
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::reusePage_data):
        (tst_QWebView::reusePage):

2009-10-19  Jakob Truelsen  <antialize@gmail.com>

        Reviewed by Adam Barth.

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

        Allow one to costumize the minimal and maximal shrink factors,
        Added methods setPrintingMinimumShrinkFactor, printingMinimumShrinkFactor,
        setPrintingMaximumShrinkFactor, printingMaximumShrinkFactor to QWebSettings.


        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::setPrintingMinimumShrinkFactor):
        (QWebSettings::printingMinimumShrinkFactor):
        (QWebSettings::setPrintingMaximumShrinkFactor):
        (QWebSettings::printingMaximumShrinkFactor):
        * Api/qwebsettings.h:

2009-10-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Rename fixedContentsSize property to preferredContentsSize as
        agreed upon with Simon Hausmann and Matthias Ettrich.

        * Api/qwebpage.cpp:
        (QWebPage::preferredContentsSize):
        (QWebPage::setPreferredContentsSize):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2009-10-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] QGLauncher leaks WebPage object
        https://bugs.webkit.org/show_bug.cgi?id=30465

        Make 'SharedScene' to own 'WebPage' reference and delete it at its destructor.

        * Api/qwebpage.cpp:
        (QWebPage::view):
        * Api/qwebpage_p.h:
        * QGVLauncher/main.cpp:
        (SharedScene::SharedScene):
        (SharedScene::~SharedScene):

2009-10-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] "dangling" pointer to qwebpage's view object can leads QGLauncher to crash
        https://bugs.webkit.org/show_bug.cgi?id=30459

        Remove all setView(ev->widget()) calls in QWebPage and QGWV event handling methods,
        since QWebPageClient would do the trick.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::hoverMoveEvent):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragLeaveEvent):
        (QWebPagePrivate::dragMoveEvent):

2009-10-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Pull out r49676 as it caused build breakges on Symbian

        * Api/qwebpage.cpp:

2009-10-16  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Need a way to inform the application when a Netscape plugin is created or deleted
        https://bugs.webkit.org/show_bug.cgi?id=30179

        Added "c" style static methods for the application to hook up for
        receiving notifications when a plugin is created or destroyed.

        * Api/qwebpage.cpp:

2009-10-15  Antonio Gomes  <tonikitoo@webkit.org>

        Rubberstamped by Tor Arne.

        Make QGLauncher's WebPage class constructor to get a QObject* as parent (not QWidget*).

        * QGVLauncher/main.cpp:
        (WebPage::WebPage):

2009-10-15  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Tor Arne.

        [Qt] QGLauncher crashes while closing a window
        https://bugs.webkit.org/show_bug.cgi?id=30385

        Set page's pageClient reference to '0' at QGWV deletion.

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::~QGraphicsWebView):
        * tests/qgraphicswebview/tst_qgraphicswebview.cpp:
        (WebPage::WebPage):
        (WebPage::aborting):
        (tst_QGraphicsWebView::crashOnViewlessWebPages):

2009-10-13  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Make context menu to work in QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=30336

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebView::event):

2009-10-13  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Plugins : Remove all traces of winId. Use ownerWidget() instead.
        
        This is a bug for two reasons:
        1. Everytime we use winId(), we end up creating a native widget. This causes an
        unnecessary copy of contents from the backing store to the native widget.
        2. Neither windowed nor windowless plugins require the winId of the QWebView or
        QGraphicsView.
        
        Introduce ownerWidget() which returns a QWidget * without creating a native widget
        (as opposed to QWidget::find(winId)).

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

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::ownerWidget):
        * Api/qwebview.cpp:
        (QWebViewPrivate::ownerWidget):

2009-10-13  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Add some initial autotests for QWebPage's ErrorPageExtention
        https://bugs.webkit.org/show_bug.cgi?id=30296

        * tests/qwebpage/tst_qwebpage.cpp:
        (ErrorPage::ErrorPage):
        (ErrorPage::supportsExtension):
        (ErrorPage::extension):
        (tst_QWebPage::errorPageExtension):

2009-10-13  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] better handle possible edge cases on qwebframe::requestedUrl use
        https://bugs.webkit.org/show_bug.cgi?id=30216

        QWebFrame::requestedUrl can be called at any time during the load
        process, including:

        * An error handling (whereas an alternate error page for unsuccessful
          load is being set);
        * A ssl error exception call;
        * During navigation notifications/callbacks (titleChanged, urlChanged,
          progresses, addHistoryEntry, etc);
        * Among others.

        This patch makes requestedUrl calls to fallback to FrameLoaderClient
        m_loadError's failingURL when an error has occurred, unless it is
        null/empty.

        Also, m_loadError is now being reset at each the main frame starts a
        load, in order to avoid previous load errors footprints.

        * Api/qwebframe.cpp:
        (QWebFrame::requestedUrl):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):

2009-10-12  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Missing default value for the default text encoding.
        https://bugs.webkit.org/show_bug.cgi?id=30311

        QtWebKit has provided a default, hardcoded value for default charset but since
        the addition of the defaultTextEncoding setting in QWebSettings, that hardcoded
        value has had no effect.

        Added a regression test and unskipped fast/dom/Document/document-charset.html,
        which is passing now.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::defaultTextEncoding):

2009-10-12  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Implement the new palette() methods on the page clients

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::palette):
        * Api/qwebview.cpp:
        (QWebViewPrivate::palette):

2009-10-12  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        QWebPage's createViewlessPlugin autotest crash fix.
        
        It is possible that plugins that are QWidgets or QGraphicsWidgets
        are created before a view has been assigned to a QWebPage. The
        plug-ins won't be fully functional, as by design, they should
        visualise something, but they won't crash and will stay in memory.

        An autotest that covers this use-case, is included.

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * tests/qwebpage/tst_qwebpage.cpp:
        (PluginTrackedPageWidget::PluginTrackedPageWidget):
        (PluginTrackedPageGraphicsWidget::PluginTrackedPageGraphicsWidget):
        (PluginTrackedPageGraphicsWidget::createPlugin):
        (tst_QWebPage::destroyPlugin):
        (tst_QWebPage::createViewlessPlugin):

2009-10-09  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        Sets Qt::WA_InputMethodEnabled and Qt::ImhHiddenText for password fields in EditorClientQt
        setInputMethodState. This change is needed so widgets such as the s60 software 
        input panel can receive input method events for password fields.
        It's up to the Qt platform to determine which widget will receive input method 
        events when these flags are set.
        Also added implementation for setInputMethodEnabled and setInputMethodHint 
        to QGraphicsWebViewPrivate and QWebViewPrivate. This change removes the direct
        dependency on QWebView and uses QWebPageClient.
        Added autotest to tst_qwebpage.cpp
        https://bugs.webkit.org/show_bug.cgi?id=30023

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::setInputMethodEnabled):
        (QGraphicsWebViewPrivate::setInputMethodHint):
        * Api/qwebview.cpp:
        (QWebViewPrivate::setInputMethodEnabled):
        (QWebViewPrivate::setInputMethodHint):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

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.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2009-10-08  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Part of testOptionalJSObjects autotest was marked as "expect to fail".

        Two places in tst_QWebPage::testOptionalJSObjects were marked as
        expected to fail. The problem concern checking if a feature is enabled
        or disabled. According to discussion on webkit dev mailing list
        a disabled feature should be invisible from java script level, but
        there are exceptions from the rule. So we decided to disable the test
        for now.

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

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::testOptionalJSObjects):

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.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::callPolicyFunction):

2009-10-07  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Get rid of useless loadFailed signal in QGraphicsWebView
        https://bugs.webkit.org/show_bug.cgi?id=30166

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::_q_doLoadFinished):
        * Api/qgraphicswebview.h:
        * QGVLauncher/main.cpp:
        (MainWindow::init):
        (MainWindow::loadFinished):

2009-10-07  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        Add a simple rotation effect to QGVLauncher

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

        * QGVLauncher/main.cpp:
        (MainView::animatedFlip):
        (MainWindow::animatedFlip):
        (MainWindow::buildUI):

2009-10-07  Volker Hilsheimer  <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        Doc: Document HTML and status as properties.

        * Api/qgraphicswebview.cpp:

2009-10-07  Martin Smith  <msmith@trolltech.com>

        Reviewed by Simon Hausmann.

        Fix qdoc warning about disabled renderHints property
        on Symbian.

        * Api/qwebview.cpp:
        * Api/qwebview.h:

2009-10-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move setLocalLoadPolicy and friends to SecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=30110

        Call the new API.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2009-10-06  Benjamin C Meyer  <bmeyer@rim.com>

        Reviewed by Ariya Hidayat.
        
        When the drag data contains an image set it on the QDrag so it will be visible to the user.
        
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):

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/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::createPage):

2009-10-06  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        [Qt] don't enable input methods on Symbian by default.
        https://bugs.webkit.org/show_bug.cgi?id=30117

        If input methods are enabled Symbian FEP will be launched on every
        pointer event making webpage navigation impossible with QWebView.

        * Api/qwebview.cpp:
        (QWebView::QWebView):

2009-10-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        QtLauncher: print the number of loaded urls
        
        When using the -r mode print the number of URLs loaded so far. This
        is extremly useful when opening the same URL over and over again and
        one wants to see the progress.

        * QtLauncher/main.cpp:
        (URLLoader::URLLoader):
        (URLLoader::loadNext):

2009-10-05  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        Add screenshot option to menubar

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

        * QtLauncher/main.cpp:
        (MainWindow::screenshot):
        (MainWindow::setupUI):

2009-10-05  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        Setting the env QTLAUNCHER_USE_ARGB_VISUALS makes Qt use WA_TranslucentWindow.

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

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2009-10-05  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Rubberstamped by Simon Hausmann.

        Add documentation to the ErrorPageExtension.

        * Api/qwebpage.cpp:

2009-10-02  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Inform the application when a new request is created
        https://bugs.webkit.org/show_bug.cgi?id=29975

        Add a signal to QWebPage, to inform the application when a request is created.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::loadFinished):

2009-10-05  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        ErrorPageExtension: Add a pointer to the QWebFrame that had
        an error.

        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::callErrorPageExtension):

2009-10-05  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Do not empty the offline web appcache when clearing
        memory caches. That one is not in memory, but stored
        in sqlite.

        * Api/qwebsettings.cpp:
        (QWebSettings::clearMemoryCaches):

2009-10-05  J-P Nurmi  <jpnurmi@gmail.com>

        Reviewed by Simon Hausmann.

        Added QGraphicsWidget-plugins support to FrameLoaderClientQt.

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

        * Api/qgraphicswebview.cpp:
        (QGraphicsWebViewPrivate::pluginParent):
        * Api/qwebview.cpp:
        (QWebViewPrivate::pluginParent):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):
        (WebCore::FrameLoaderClientQt::createPlugin):

2009-10-03  Adam Barth  <abarth@webkit.org>

        Unreview build fix.  I wish I had a try server...

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):

2009-10-02  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Conditionally guard cursor code (cursor and updateCursor functions) with !QT_NO_CURSOR.
        Otherwise, it is inconsistent with class declaration of QCursor.

        * Api/qgraphicswebview.cpp:
        * Api/qwebview.cpp:

2009-10-02  Prasanth Ullattil  <prasanth.ullattil@nokia.com>

        Reviewed by Simon Hausmann.

        Fix compiler warnings about unused function arguments.

        * Api/qwebframe.cpp:
        (QWebFrame::scrollBarMinimum):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):
        (QWebPagePrivate::leaveEvent):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::triggerAction):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::chooseFile):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        (WebCore::ChromeClientQt::reachedMaxAppCacheSize):
        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::downloadURL):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientQt::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientQt::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientQt::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientQt::pluginWillHandleLoadError):
        (WebCore::FrameLoaderClientQt::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::setAttachedWindowHeight):
        (WebCore::InspectorClientQt::highlight):
        (WebCore::InspectorClientQt::removeSetting):

2009-10-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Make Software Input Panel requests work with QGraphicsWebView
        _and_ QWebView by sharing the event code in handleSoftwareInputPanel().

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::handleSoftwareInputPanel):
        * Api/qwebpage_p.h:

2009-10-01  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Rename QWebGraphicsItem to QGraphicsWebView

        * Api/headers.pri:
        * Api/qwebpage.h:
        * Api/qwebgraphicsitem.cpp: Renamed.
        * Api/qwebgraphicsitem.h: Renamed.
        * WebKit/qt/QGVLauncher/main.cpp:
        * tests/tests.pro:
        * tests/qwebgraphicsitem/qwebgraphicsitem.pro: Renamed.
        * tests/qwebgraphicsitem/tst_qwebgraphicsitem.cpp: Renamed.

2009-10-01  Antonio Gomes   <tonikitoo@webkit.org>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=29248
        [Qt] [API] Make it possible to have 'invisible' loads

        Make QWebFrame's setHtml and setContent methods to not change
        session and global history at all.

        * Api/qwebframe.cpp:
        (QWebFrame::setHtml):
        (QWebFrame::setContent):
        * tests/qwebframe/qwebframe.pro:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-10-01  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        Fixed software input panel support on web input elements.

        Send the RequestSoftwareInputPanel event if the element supports focus
        and the element is clicked.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        * Api/qwebpage_p.h:

2009-10-01  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        Implementation for QWebPage::inputMethodQuery and QWebPagePrivate::inputMethodEvent

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

        Some additional changes from Kristian Amlie <kristian.amlie@nokia.com>:

            * Fixed surrounding text to exclude preedit string
            * Avoid emission of microFocusChanged during setComposition()

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):
        (QWebPage::inputMethodQuery):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedSelection):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

2009-09-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by David Hyatt.

        Add the failed URL to the ErrorPageExtension, as it is quite
        useful for creating error pages.

        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::callErrorPageExtension):

2009-09-29  Andras Becsi  <becsi.andras@stud.u-szeged.hu>

        Reviewed by Tor Arne Vestbø.

        [Qt] Default font size reconciliation to 16px/13px to match other platform's de-facto standard.
        This fixes https://bugs.webkit.org/show_bug.cgi?id=19674.

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2009-09-29  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

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

        QWebPage dependency autotest fix.

        Fix for database() autotest. All opened databases should be removed at
        end of test.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::database):

2009-09-29  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Some QWebHistory and QWebPage autotest crash fixes.

        Some checking for m_mainFrame were added. MainFrame should be created
        at some point of QWebPage live cicle.

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

        * Api/qwebpage.cpp:
        (QWebPage::~QWebPage):
        (QWebPage::currentFrame):
        (QWebPage::history):
        (QWebPage::selectedText):
        (QWebPage::updatePositionDependentActions):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::crashTests_LazyInitializationOfMainFrame):

2009-09-29  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann and Tor Arne Vestbø.

        Implement QWebPage Extension for error pages, incl.
        an example on how to use it in QtLauncher.

        Correct our use of ResourceError.

        * Api/qwebpage.h:
        (ExtensionOption::):
        (ExtensionOption::ErrorPageExtensionReturn::ErrorPageExtensionReturn):
        * QtLauncher/main.cpp:
        (WebPage::supportsExtension):
        (MainWindow::MainWindow):
        (MainWindow::selectElements):
        (WebPage::extension):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::cancelledError):
        (WebCore::FrameLoaderClientQt::blockedError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::callErrorPageExtension):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-09-28  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon Hausmann.

        Compile fix with namespaced Qt.

        * Api/qwebinspector_p.h:

2009-09-27  Joe Ligman  <joseph.ligman@mindspring.com>

        Reviewed by Simon Hausmann.

        [Qt] Adding API setFocus and hasFocus to QWebElement. This API is needed for
        clients that want to check/set the focus node of the document.
        https://bugs.webkit.org/show_bug.cgi?id=29682

        * Api/qwebelement.cpp:
        (QWebElement::hasFocus):
        (QWebElement::setFocus):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::hasSetFocus):

2009-09-25  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Make tst_qwebframe work if Qt built without SSL support
        https://bugs.webkit.org/show_bug.cgi?id=29735

        * tests/qwebframe/tst_qwebframe.cpp: Missing #ifndef blocks added.

2009-09-24  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Update QWebElement API to remove script related methods.
        QWebElement::evaluateScript is the only one kept, these are
        removed to postpone most of the QtWebKit<->JavaScript API design
        after 4.6.
        https://bugs.webkit.org/show_bug.cgi?id=29708

        * Api/qwebelement.cpp:
        * Api/qwebelement.h:
        Methods removed:
        - QWebElement::callFunction
        - QWebElement::functions
        - QWebElement::scriptableProperty
        - QWebElement::setScriptableProperty
        - QWebElement::scriptableProperties
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::evaluateScript):

2009-09-25  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Rename QWebElement::evaluateScript
        to QWebElement::evaluateJavaScript.
        https://bugs.webkit.org/show_bug.cgi?id=29709

        * Api/qwebelement.cpp:
        (QWebElement::evaluateJavaScript):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::evaluateJavaScript):

2009-09-25  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Update the stypeProperty API of QWebElement.
        https://bugs.webkit.org/show_bug.cgi?id=29711

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):
        - Merge the stypeProperty and the computedStyleProperty methods
        - Remove the default value for the style resolving enum
        - Rename ResolveRule to StyleResolveStrategy
        (QWebElement::setStyleProperty):
        - Remove the priority argument since it is possible to control the
          behaviour by adding !important or removing in the value.
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):
        (tst_QWebElement::computedStyle):
        * tests/qwebframe/tst_qwebframe.cpp:

2009-09-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Alice Liu.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        Pass 0 for new Page constructor argument.

2009-09-24  Martin Smith  <msmith@trolltech.com>

        Reviewed by Simon Hausmann.

        qdoc: Added \brief texts to all the since 4.6 functions.

        * Api/qwebhistory.cpp:

2009-09-23  J-P Nurmi  <jpnurmi@gmail.com>

        Reviewed by Simon Hausmann.

        Prevent QWebPage::setView() from changing the viewport size on the fly
        in case the view doesn't actually change. QWebPage::setView() is
        called upon every QWebGraphicsItem::hoverMoveEvent(), which forced
        the viewport size to be equal to the size of the whole graphics view.

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

        * Api/qwebpage.cpp:
        (QWebPage::setView):

2009-09-23  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Crash fix in QWebHistory back and forward methods.
        
        QWebHistory::back() and QWebHistory::forward() were crashing on
        ASSERT in WebCore::BackForwardList. The methods should check
        canGoBack() and canGoForward() at the beginning.

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

        * Api/qwebhistory.cpp:
        (QWebHistory::back):
        (QWebHistory::forward):

2009-09-23  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Bug fix. QWebHistory should call QWebPage::updateNavigationActions
        
        In QWebHistory's methods that change item count or current item call
        to QWebPage::updateNavigationActions should be executed.
        QWebHistory::clear() and QWebHistory::restorState() were changed.
        New helper method, QWebPagePrivate accesor, were created in
        QWebHistoryPrivate class.
        Two autotest were developed.

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

        * Api/qwebhistory.cpp:
        (QWebHistory::clear):
        (QWebHistory::restoreState):
        (QWebHistoryPrivate::page):
        * Api/qwebhistory_p.h:
        * tests/qwebhistory/tst_qwebhistory.cpp:
        (tst_QWebHistory::saveAndRestore_1):
        (tst_QWebHistory::clear):

2009-09-23  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Need to guard QX11Info include with Q_WS_X11.
        That class may not be available (in QT 4.5 for Symbian, for instance).
        Completes fixes in r48627 and r48604.

        * Api/qwebgraphicsitem.cpp:
        * Api/qwebview.cpp:

2009-09-22  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add default timeout while waiting for signals in QWebPage auto
        tests.
        https://bugs.webkit.org/show_bug.cgi?id=29637

        * tests/qwebpage/tst_qwebpage.cpp:
        (waitForSignal):

2009-09-22  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reivewed by Simon Hausmann.

        Fix the Qt/Mac build after r48604 (Implement new QWebPageClient class)

        There's no QWidget::x11Info() on Mac, and setPlatformPluginWidget()
        takes a QWidget*, not a QWebPageClient*

        * Api/qwebgraphicsitem.cpp:
        (QWebGraphicsItemPrivate::screenNumber):
        * Api/qwebview.cpp:
        (QWebViewPrivate::screenNumber):

2009-09-21  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        For Qt, platformPageClient() will now return a class derived from
        the QWebPageClient, so the patch adapts our Qt hooks to go though
        this class and not depend on the QWebView.

        * Api/qwebgraphicsitem.cpp:
        (QWebGraphicsItemPrivate::scroll):
        (QWebGraphicsItemPrivate::update):
        (QWebGraphicsItemPrivate::cursor):
        (QWebGraphicsItemPrivate::updateCursor):
        (QWebGraphicsItemPrivate::screenNumber):
        (QWebGraphicsItemPrivate::winId):
        (QWebGraphicsItem::event):
        (QWebGraphicsItem::setPage):
        * Api/qwebgraphicsitem.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebViewPrivate::scroll):
        (QWebViewPrivate::update):
        (QWebViewPrivate::cursor):
        (QWebViewPrivate::updateCursor):
        (QWebViewPrivate::screenNumber):
        (QWebViewPrivate::winId):
        (QWebView::setPage):
        (QWebView::event):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):
        (WebCore::ChromeClientQt::scroll):
        (WebCore::ChromeClientQt::platformPageClient):

2009-09-21  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=29609
        Build fix for windows when using Qt 4.5.0.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2009-09-19  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=29345
        The tests of QWebFrame did not use QTRY_VERIFY for
        tests involving the event loop.

        * tests/qwebframe/tst_qwebframe.cpp:
        * tests/util.h: Added. Copy of tests/shared/util.h of Qt

2009-09-19  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Add an autotest stub for QWebGraphicsItem.

        It just calls all the functions and makes sure they don't crash.

        * tests/qwebgraphicsitem/qwebgraphicsitem.pro: Added.
        * tests/qwebgraphicsitem/tst_qwebgraphicsitem.cpp: Added.
        (tst_QWebGraphicsItem::qwebgraphicsitem):
        * tests/tests.pro:

2009-09-18  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Eric Seidel.

        Corrected the Symbian specific UID3 values to be assigned
        from the "unprotected" pool that permits self-signing of
        those test and demo executables. (Added new UID3 values
        where they were missing for new components.)

        * QGVLauncher/QGVLauncher.pro:
        * QtLauncher/QtLauncher.pro:
        * tests/benchmarks/loading/tst_loading.pro:
        * tests/benchmarks/painting/tst_painting.pro:
        * tests/qwebelement/qwebelement.pro:
        * tests/qwebframe/qwebframe.pro:
        * tests/qwebhistory/qwebhistory.pro:
        * tests/qwebhistoryinterface/qwebhistoryinterface.pro:
        * tests/qwebpage/qwebpage.pro:
        * tests/qwebplugindatabase/qwebplugindatabase.pro:
        * tests/qwebview/qwebview.pro:

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.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::platformPageClient):
        * WebCoreSupport/ChromeClientQt.h:

2009-09-18  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add persistence support for configuration options in the
        inspector.

        * Api/qwebinspector.cpp:
        * QtLauncher/main.cpp:
        (main):
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::populateSetting):
        (WebCore::InspectorClientQt::storeSetting):
        (WebCore::variantToSetting):
        (WebCore::settingToVariant):

2009-09-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Fixed a bunch of documentation warnings.

        * Api/qwebgraphicsitem.cpp:
        * Api/qwebplugindatabase.cpp:
        * Api/qwebpluginfactory.cpp:
        * Api/qwebsecurityorigin.cpp:

2009-09-18  Warwick Allison  <warwick.allison@nokia.com>

        Reviewed by Simon Hausmann.

        Added a test that console output works.

        * tests/qwebpage/tst_qwebpage.cpp:
        (ConsolePage::ConsolePage):
        (ConsolePage::javaScriptConsoleMessage):
        (tst_QWebPage::consoleOutput):

2009-09-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Improve documentation for Page Cache.

        * Api/qwebsettings.cpp:

2009-09-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Update QWebSettings::setUserStyleSheetUrl() docs and test

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

        The documentation now specifies that the URL has to be a local file
        or a a data-URL (with utf-8 and base64-encoded data), as these are the
        only two schemes that the current code path accepts.

        The auto-test has been updated to reflect this limitation.

        At a later point we should concider adding API for the new way of
        doing both user defined stylesheets and scripts.

        * Api/qwebsettings.cpp:
        * tests/qwebpage/tst_qwebpage.cpp:

2009-09-17  Janne Koskinen  <janne.p.koskinen@digia.com>

        Reviewed by Simon Hausmann.

        Symbian build fix.

        Moved the #ifdefs around _q_cleanupLeakMessages() into the function
        definition.

        QMake is not being able to distinguish between release and debug builds
        in Symbian build. This is a Symbian toolchain issue.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::_q_cleanupLeakMessages):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2009-09-17  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        Small cosmetic documentation fixlet in the QWebInspector.

        * Api/qwebinspector.cpp:

2009-09-16  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Eric Seidel.

        Detect and add Windows7 properly to the user agent.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2009-09-16  Andras Becsi  <andrewbecsi@yahoo.co.uk>

        Rubberstamped by Kenneth Christiansen.

        [Qt] Build fix for previous changes.

        * QGVLauncher/main.cpp:
        (MainView::flip):

2009-09-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed potential Qt < 4.6 build fix.

        * QGVLauncher/main.cpp:
        (MainView::flip):

2009-09-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add a "Flip effect" to our GraphicsView based launcher.

        * QGVLauncher/main.cpp:
        (MainView::resizeEvent):
        (MainView::flip):
        (MainWindow::flip):
        (MainWindow::buildUI):

2009-09-16  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Rubber-stamped by Simon Hausmann.

        [Qt] Typo fix. Pass the window object to the Format
        menu. In this way Qt can free its internal graphical
        objects during exit.

        * QtLauncher/main.cpp:
        (MainWindow::setupUI):

2009-09-16  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Build break fix on gcc ARM.

        * Api/qwebgraphicsitem.cpp:
        (QWebGraphicsItemPrivate::_q_doLoadProgress):

2009-09-16  Warwick Allison  <warwick.allison@nokia.com>

        Reviewed by Simon Hausmann.

        Fix a crash in QWebFrame::hasFocus() with a simple null pointer check
        when the focused frame is null. We do the same check in other places
        where we call kit().

        * Api/qwebframe.cpp:
        (QWebFrame::hasFocus):

2009-09-16  Jure Repinc  <jlp@holodeck1.com>

        Reviewed by Simon Hausmann.

        Fixed a typo found during translation.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):

2009-09-14  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] QWebGraphicsItem should check for null QWebPage.
        https://bugs.webkit.org/show_bug.cgi?id=29185

        Don't crash in QWebGraphicsItem when the page is still null, by
        either checking if it's the case or constructing the default one.

        * Api/qwebgraphicsitem.cpp:
        (QWebGraphicsItem::icon):
        (QWebGraphicsItem::setZoomFactor):
        (QWebGraphicsItem::zoomFactor):
        (QWebGraphicsItem::setGeometry):
        (QWebGraphicsItem::load):
        (QWebGraphicsItem::setHtml):
        (QWebGraphicsItem::toHtml):
        (QWebGraphicsItem::setContent):
        (QWebGraphicsItem::history):
        (QWebGraphicsItem::settings):

2009-09-11  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Note that Netscape plugins are only available on desktop platforms.

        * docs/qtwebkit.qdoc:

2009-09-11  Martin Smith  <msmith@trolltech.com>

        Reviewed by Simon Hausmann.

        Adjust the name of the contentspage for the documentation
        to the new name used in Qt 4.6.

        * docs/qtwebkit.qdoc:

2009-09-11  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        Changed URLs from qtsoftware.com to qt.nokia.com, as part of a general
        renaming.

        * Api/qwebpluginfactory.cpp:
        * docs/webkitsnippets/simple/main.cpp:
        (main):
        * docs/webkitsnippets/webpage/main.cpp:
        (main):

2009-09-11  Volker Hilsheimer  <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        Restructure the documentation, both on a file and on a content level.

        * Api/qwebdatabase.cpp:
        * Api/qwebelement.cpp:
        * Api/qwebframe.cpp:
        * Api/qwebhistory.cpp:
        * Api/qwebhistoryinterface.cpp:
        * Api/qwebpage.cpp:
        * Api/qwebpluginfactory.cpp:
        * Api/qwebsecurityorigin.cpp:
        * Api/qwebsettings.cpp:
        * Api/qwebview.cpp:
        * docs/qtwebkit.qdoc:

2009-09-11  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.
        
        https://bugs.webkit.org/show_bug.cgi?id=29136
        [Qt] emit microFocusChanged() signal when no QWidget-based view is present.

        emit microFocusChange() signal regardless of view.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):

2009-09-11  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

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

        [Qt] Make the WebInspector available as a QWidget.

        * Api/headers.pri:
        * Api/qwebelement.cpp:
        (QWebElement::enclosingElement):
        * Api/qwebelement.h:
        * Api/qwebinspector.cpp: Added.
        * Api/qwebinspector.h: Added.
        * Api/qwebinspector_p.h: Added.
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::setInspector):
        (QWebPagePrivate::getOrCreateInspector):
        (QWebPagePrivate::inspectorController):
        (QWebPage::~QWebPage):
        (QWebPage::triggerAction):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebsettings.cpp:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::InspectorClientWebPage):
        (WebCore::InspectorClientWebPage::createWindow):
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::showWindow):
        (WebCore::InspectorClientQt::closeWindow):
        (WebCore::InspectorClientQt::attachWindow):
        (WebCore::InspectorClientQt::detachWindow):
        (WebCore::InspectorClientQt::updateWindowTitle):
        * WebCoreSupport/InspectorClientQt.h:
        * docs/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp: Added.

2009-09-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Fix comparison between signed and unsigned integer warnings
        https://bugs.webkit.org/show_bug.cgi?id=29162

        No functional change.

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        * Api/qwebhistory.cpp:
        (QWebHistory::items):
        (QWebHistory::backItems):
        (QWebHistory::forwardItems):
        (QWebHistory::saveState):
        * Api/qwebplugindatabase.cpp:
        (QWebPluginDatabase::setSearchPaths):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runOpenPanel):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2009-09-10  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Ariya Hidayat.

        Fix a bunch of qdoc warnings: Invalid references, non-standard
        wording, etc.

        * Api/qwebelement.cpp:
        * Api/qwebgraphicsitem.cpp:
        * Api/qwebsecurityorigin.cpp:

2009-09-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Fix context menu event delivery with QWebGraphicsItem.

        Re-implement the correct context menu virtual function using
        a QGraphicsSceneContextMenuEvent and forward & handle it in
        QWebPage.

        * Api/qwebgraphicsitem.cpp:
        (QWebGraphicsItem::contextMenuEvent):
        * Api/qwebgraphicsitem.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::contextMenuEvent):
        (QWebPage::event):
        * Api/qwebpage_p.h:

2009-09-10  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed.

        Build fix for QtWebKit for Mac after r48219.

        qevent and qstyleoption are QtGui interfaces.

        * Api/qwebgraphicsitem.cpp:
        * Api/qwebgraphicsitem.h:

2009-09-09  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Call the right base class function QGraphicsWidget::event() instead
        of skipping it and using QObject::event() instead.

        * Api/qwebgraphicsitem.cpp:
        (QWebGraphicsItem::event):

2009-09-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed.

        Fix comment at Tor Arne Vestbø's request.

        * Api/qwebgraphicsitem.cpp:
        (QWebGraphicsItem::sceneEvent):
        (QWebGraphicsItem::event):

2009-09-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Implement some virtual event methods so that we can fix
        event-related bugs in Qt patch releases.

        * Api/qwebgraphicsitem.cpp:
        (QWebGraphicsItem::sceneEvent):
        (QWebGraphicsItem::event):
        * Api/qwebgraphicsitem.h:

2009-09-09  Kenneth Rohde Christiansen  <kenneth@webkit.org>, Antonio Gomes  <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        Add a new QGraphicsWidget based version of the "QWebView"
        under the name "QWebGraphicsItem".

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

        Includes an alternative Qt launcher using the QGraphicsView.

        * Api/headers.pri:
        * Api/qwebgraphicsitem.cpp: Added.
        * Api/qwebgraphicsitem.h: Added.
        * Api/qwebpage.h:
        * QGVLauncher/QGVLauncher.pro: Copied from WebKit/qt/QtLauncher/QtLauncher.pro.
        * QGVLauncher/main.cpp: Added.
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):
        (WebCore::ChromeClientQt::scroll):

2009-09-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Unreviewed build fix.

        Potential build fix for Qt 4.5

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mousePressEvent):

2009-09-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=29007
        Add a test for the signal QWebFrame::javaScriptWindowObjectCleared()

        * tests/qwebframe/tst_qwebframe.cpp:

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix unused variable warnings
        https://bugs.webkit.org/show_bug.cgi?id=29018

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::startDownload):
        (WebCore::FrameLoaderClientQt::createFrame):

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Use the declaration order in initializer lists
        https://bugs.webkit.org/show_bug.cgi?id=29017

        * Api/qwebframe_p.h:

2009-09-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Add support for handling QGraphicsScene events.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseTripleClickEvent):
        (QWebPagePrivate::handleClipboard):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragLeaveEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):
        (QWebPage::event):
        * Api/qwebpage_p.h:

2009-09-08  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Make cursor set cleaner in QtWebKit Api: eliminate SetCursorEvent hack.
        https://bugs.webkit.org/show_bug.cgi?id=28865

        Clean up the unserCursor hack to use the QCursor set
        as a property of the QWidget by WebCore::WidgetQt.

        Remove all code that are no longer necessary for getting
        cursor change events.

        Patch by Kenneth Rohde Christiansen <kenneth@webkit.org> and
                 Antonio Gomes <antonio.gomes@openbossa.org> on 2009-09-07

        * Api/qwebpage.cpp:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebViewPrivate::QWebViewPrivate):
        (QWebView::event):

2009-09-08  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] QtWebKit single API to enable persistency
        https://bugs.webkit.org/show_bug.cgi?id=28682

        Disable LocalStorage, ApplicationCache, HTML5 offline storage by
        default.

        If persistency is enabled the default directory for LocalStorage and
        ApplicationCache is now based on QDesktopServices::DataLocation and not
        QDesktopServices::CacheLocation (as it is expected to keep this data
        around after a reboot).

        If persistency is enabled initialize HTML5 offline storage as well - this
        fixed offline Storage for QtLauncher.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        (QWebSettings::enablePersistentStorage):
        * Api/qwebsettings.h: Add a new API called enablePersistentStorage
        * QtLauncher/main.cpp: Use the new enablePersistentStorage API
        (main):

2009-09-07  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Speed up the QWebPluginInfo::supportsMimeType() function.
        https://bugs.webkit.org/show_bug.cgi?id=27651

        Instead of going through the MIME types list constructed with
        mimeTypes() function, look up the internal mimeToDescriptions map.

        * Api/qwebplugindatabase.cpp:
        (QWebPluginInfo::supportsMimeType):

2009-09-07  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Speed up the QWebPluginInfo::mimeTypes() function.
        https://bugs.webkit.org/show_bug.cgi?id=27651

        Instead of constructing a list of MIME types every time it is called,
        do this only once.

        * Api/qwebplugindatabase.cpp:
        (QWebPluginInfo::mimeTypes):
        (QWebPluginInfo::operator=):
        * Api/qwebplugindatabase.h:
        * tests/qwebplugindatabase/tst_qwebplugindatabase.cpp:
        (tst_QWebPluginDatabase::operatorassign_data):
        (tst_QWebPluginDatabase::operatorassign):

2009-09-07  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Remove the private classes from QWebPluginDatabase.
        https://bugs.webkit.org/show_bug.cgi?id=27651

        Instead, hold the PluginDatabase and PluginPackage objects as class
        members and take care of refcounting on our own instead of using RefPtr.

        This way we not only made the code cleaner but also got rid of
        redundant allocations when constructing null QWebPluginInfo objects.

        The private classes have been forward-declared and the d-pointers left
        to be on the safe side.

        * Api/qwebplugindatabase.cpp:
        (QWebPluginInfo::QWebPluginInfo):
        (QWebPluginInfo::~QWebPluginInfo):
        (QWebPluginInfo::name):
        (QWebPluginInfo::description):
        (QWebPluginInfo::mimeTypes):
        (QWebPluginInfo::path):
        (QWebPluginInfo::isNull):
        (QWebPluginInfo::setEnabled):
        (QWebPluginInfo::isEnabled):
        (QWebPluginInfo::operator==):
        (QWebPluginInfo::operator!=):
        (QWebPluginInfo::operator=):
        (QWebPluginDatabase::QWebPluginDatabase):
        (QWebPluginDatabase::~QWebPluginDatabase):
        (QWebPluginDatabase::plugins):
        (QWebPluginDatabase::searchPaths):
        (QWebPluginDatabase::setSearchPaths):
        (QWebPluginDatabase::addSearchPath):
        (QWebPluginDatabase::refresh):
        (QWebPluginDatabase::pluginForMimeType):
        (QWebPluginDatabase::setPreferredPluginForMimeType):
        * Api/qwebplugindatabase.h:
        * Api/qwebplugindatabase_p.h: Removed.

2009-09-05  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] r47424 broke binary compatibility
        https://bugs.webkit.org/show_bug.cgi?id=28996

        Append the new DnsPrefetchEnabled attribute at the end of the enum.

        * Api/qwebsettings.h:

2009-09-04  Mark Mentovai  <mark@chromium.org>

        Reviewed by Dave Hyatt.

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

        Account for scrollbar state changes that occur during layout.

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarPolicy):

        Eliminate duplicated (and incorrect) scrollbar mode tracking between
        FrameView and ScrollView.

2009-09-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Fix tst_QWebPage::database autotest failure
        https://bugs.webkit.org/show_bug.cgi?id=28961

        Make sure that the test case enables the feature before 
        the feature gets tested

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::database):

2009-09-04  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Eric Seidel.
        
        Any QtWebKit application crashes on exit if the inspector is
        used during the session rather then exiting.
        
        If a QWebView has a QWebPage that is destroyed the QWebView
        does not update its pointer and will crash the next time
        it access the page pointers (such as in its destructor).
        
        InspectorClientView should not call deleteLater when the page
        is destroyed because it does not have a parent and is a top
        level widget.  close() needs to be called so that QApplication
        can exit the application if quitOnLastWindowClosed is set
        and a InspectorClientView is the last window, otherwise
        the application will never exit.
        
        * Api/qwebview.cpp:
        (QWebViewPrivate::_q_pageDestroyed):
        (QWebView::setPage):
        * Api/qwebview.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientView::InspectorClientView):

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

2009-09-03  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Add a setting to turn SessionStorage on/off
        https://bugs.webkit.org/show_bug.cgi?id=28836

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (testFlag):
        (tst_QWebPage::testOptionalJSObjects):

2009-09-02  Richard Moore  <rich@kde.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make sure we relayout the page after evaluating JS

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

        QtWebKit does not always seem to reflow the page when evaluating
        javascript. This patch changes the way evaluateJavaScript works to
        use the frameloader which ensures that this is done properly.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * tests/qwebframe/tst_qwebframe.cpp:

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/ChromeClientQt.h:
        (WebCore::ChromeClientQt::scrollbarsModeDidChange):

2009-08-27  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Ariya Hidayat.

        QWebHistory::clear() modifications.

        Clear() method was changed. If QWebHistory is empty (there is no
        elements even current) clear() do nothing. If there at least one
        element clear() will delete everything apart of current.

        New autotests in QWebHistory

        New autotests were added to QWebHistory. They should check some crashes
        in save and restore state process and clear() method and general
        behavior on where QWebHistory::count() == 0 or QWebHistory::count() == 1

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

        * Api/qwebhistory.cpp:
        (QWebHistory::clear):
        * tests/qwebhistory/tst_qwebhistory.cpp:
        (tst_QWebHistory::back):
        (tst_QWebHistory::forward):
        (tst_QWebHistory::saveAndRestore_crash_1):
        (tst_QWebHistory::saveAndRestore_crash_2):
        (tst_QWebHistory::saveAndRestore_crash_3):
        (tst_QWebHistory::clear):

2009-08-27  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Cleanup, old and commented part of source code was removed.
        Fix some formatting problems.

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

        * Api/qwebhistory_p.h:
        (QWebHistoryPrivate::QWebHistoryPrivate):

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

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2009-08-25  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        Bug 28708 - Make possible to better use ResourceError in FrameLoaderClientQt class.

        * Api/qwebframe.cpp:
        (QWebFrame::requestedUrl):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
        * WebCoreSupport/FrameLoaderClientQt.h:

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.

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

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

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2009-08-19  Aaron Boodman  <aa@chromium.org>

        Speculative build break fix for qt.

        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::whiteListAccessFromOrigin):
        * Api/qwebsecurityorigin.h:

2009-08-19  Aaron Boodman  <aa@chromium.org>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=24853: Provide a way for WebKit clients to
        specify a more granular policy for cross-origin XHR access.

        * Api/qwebsecurityorigin.cpp: Add API to manipulate origin access whitelists.
        (QWebSecurityOrigin::whiteListAccessFromOrigin): Ditto.
        (QWebSecurityOrigin::resetOriginAccessWhiteLists): Ditto.
        * Api/qwebsecurityorigin.h: Ditto.

2009-08-18  Markus Goetz <Markus.Goetz@nokia.com>

        Reviwed by Ariya Hidayat.

        [Qt] For prefecthDNS, the pre-fetching has to be enabled in the
        WebSettings.

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2009-08-17  Darin Adler  <darin@apple.com>

        Try to fix Qt build again.

        * WebCoreSupport/EditorClientQt.cpp: Move "using namespace".

2009-08-17  Darin Adler  <darin@apple.com>

        Try to fix Qt build.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldShowDeleteInterface):
        Use getAttribute(classAttr) instead of className() function.

2009-08-14  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        RVCT elftran fails to resolve QPainter::staticMetaObject coming with 
        QWebView::RenderHints property.

        This is a temporary fix and will be revereted when the right symbols
        exported from Qt lib in S60.

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

        * Api/qwebview.h:

2009-08-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Public API to configure the storage path for HTML5 localStorage
        https://bugs.webkit.org/show_bug.cgi?id=28036

        Disables LocalStorage for QtWebKit by default by setting
        QWebSettings::LocalStorageEnabled to false.

        Sets up a default for the LocalStorage path so that clients would only
        need to enable the LocalStorageEnabled setting to turn on LocalStoragre
        support.

        Turn on LocalStorage support for QtLauncher and the relevant test
        since LocalStorage is now disabled by default for QtWebkit.

        * Api/qwebpage.cpp:
        (defaultCachePath):
        (initializeApplicationCachePathIfNecessary):
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::setLocalStoragePath):
        (QWebSettings::localStoragePath):
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:
        (main):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::multiplePageGroupsAndLocalStorage):

2009-08-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Allow applications to register their own local URL scheme.
        https://bugs.webkit.org/show_bug.cgi?id=28240

        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::addLocalScheme):
        (QWebSecurityOrigin::removeLocalScheme):
        (QWebSecurityOrigin::localSchemes):
        * Api/qwebsecurityorigin.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::localURLSchemes):

2009-08-13  Mark Rowe  <mrowe@apple.com>

        Try and fix the Qt build.

        * Api/qwebelement.cpp:

2009-08-13  Kavindra Devi Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Doc - Some cleanup on the documentation of QWebElement

        * Api/qwebelement.cpp:

2009-08-13  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Simon Hausmann.

        Symbian target components (library and executable files)
        require Unique Identifiers (i.e., UID3).
        These identifiers are defined in the respective project
        files, conditionally for "symbian" platform.

        * QtLauncher/QtLauncher.pro:
        * tests/qwebelement/qwebelement.pro:
        * tests/qwebframe/qwebframe.pro:
        * tests/qwebhistory/qwebhistory.pro:
        * tests/qwebhistoryinterface/qwebhistoryinterface.pro:
        * tests/qwebpage/qwebpage.pro:
        * tests/qwebview/qwebview.pro:

2009-08-12  George Wright  <george.wright@torchmobile.com>

        Reviewed by Adam Treat.

        Initialise zoom levels independent of whether a URL is valid or not to
        fix https://bugs.webkit.org/show_bug.cgi?id=28162

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2009-08-12  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon Hausmann.

        QtWebKit compile fix for Windows CE

        There's no getenv on Windows CE, use qgetenv instead.

        * Api/qwebpage.cpp:
        (qt_drt_overwritePluginDirectories):

2009-08-10  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Various fixes and improvements to the QWebPluginInfo, QWebPluginDatabase and QWebSettings documentation.

        * Api/qwebplugindatabase.cpp:
        * Api/qwebsettings.cpp:

2009-08-08  Volker Hilsheimer  <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        Doc: there is no group of explicitly shared classes, only one class uses this.

        Explain the implications in the QWebHistoryItem documentation, and get rid
        of the "group".

        * Api/qwebhistory.cpp:

2009-08-05  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Fix build error caused by http://trac.webkit.org/changeset/46763

        * Api/qwebpluginfactory.h: Export macro added.

2009-08-04  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] QWebFrame::requestedUrl method can mis-behave in case of unhandled sslErrors.
        https://bugs.webkit.org/show_bug.cgi?id=27804

        * Api/qwebframe.cpp:
        (QWebFrame::requestedUrl):
        * tests/qwebframe/tst_qwebframe.cpp:

2009-08-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Rename QWebPlugin to QWebPluginInfo, as discussed on IRC.

        * Api/qwebplugindatabase.cpp:
        (QWebPluginInfoPrivate::QWebPluginInfoPrivate):
        (QWebPluginInfo::QWebPluginInfo):
        (QWebPluginInfo::~QWebPluginInfo):
        (QWebPluginInfo::name):
        (QWebPluginInfo::description):
        (QWebPluginInfo::mimeTypes):
        (QWebPluginInfo::supportsMimeType):
        (QWebPluginInfo::path):
        (QWebPluginInfo::isNull):
        (QWebPluginInfo::setEnabled):
        (QWebPluginInfo::isEnabled):
        (QWebPluginInfo::operator==):
        (QWebPluginInfo::operator!=):
        (QWebPluginInfo::operator=):
        (QWebPluginDatabase::plugins):
        (QWebPluginDatabase::pluginForMimeType):
        (QWebPluginDatabase::setPreferredPluginForMimeType):
        * Api/qwebplugindatabase.h:
        * Api/qwebplugindatabase_p.h:
        * tests/qwebplugindatabase/tst_qwebplugindatabase.cpp:
        (tst_QWebPluginDatabase::installedPlugins):
        (tst_QWebPluginDatabase::searchPaths):
        (tst_QWebPluginDatabase::null_data):
        (tst_QWebPluginDatabase::null):
        (tst_QWebPluginDatabase::pluginForMimeType):
        (tst_QWebPluginDatabase::enabled):
        (tst_QWebPluginDatabase::operatorequal_data):
        (tst_QWebPluginDatabase::operatorequal):
        (tst_QWebPluginDatabase::preferredPlugin):

2009-08-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Adam Treat.

        Replace QWebPlugin::MimeType with a typedef to
        QWebPluginFactory::MimeType.

        * Api/qwebplugindatabase.cpp:
        * Api/qwebplugindatabase.h:
        * Api/qwebpluginfactory.cpp:
        (QWebPluginFactory::MimeType::operator==):
        * Api/qwebpluginfactory.h:

2009-08-04  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Add QWebPluginDatabase API to the Qt API.
        
        https://bugs.webkit.org/show_bug.cgi?id=27651

        * Api/headers.pri:
        * Api/qwebplugindatabase.cpp: Added.
        (QWebPluginPrivate::QWebPluginPrivate):
        (QWebPluginDatabasePrivate::QWebPluginDatabasePrivate):
        (QWebPlugin::MimeType::operator==):
        (QWebPlugin::QWebPlugin):
        (QWebPlugin::~QWebPlugin):
        (QWebPlugin::name):
        (QWebPlugin::description):
        (QWebPlugin::mimeTypes):
        (QWebPlugin::supportsMimeType):
        (QWebPlugin::path):
        (QWebPlugin::isNull):
        (QWebPlugin::setEnabled):
        (QWebPlugin::isEnabled):
        (QWebPlugin::operator==):
        (QWebPlugin::operator!=):
        (QWebPlugin::operator=):
        (QWebPluginDatabase::QWebPluginDatabase):
        (QWebPluginDatabase::~QWebPluginDatabase):
        (QWebPluginDatabase::plugins):
        (QWebPluginDatabase::defaultSearchPaths):
        (QWebPluginDatabase::searchPaths):
        (QWebPluginDatabase::setSearchPaths):
        (QWebPluginDatabase::addSearchPath):
        (QWebPluginDatabase::refresh):
        (QWebPluginDatabase::pluginForMimeType):
        (QWebPluginDatabase::setPreferredPluginForMimeType):
        * Api/qwebplugindatabase.h: Added.
        * Api/qwebplugindatabase_p.h: Added.
        * Api/qwebsettings.cpp:
        (QWebSettings::pluginDatabase):
        * Api/qwebsettings.h:
        * tests/qwebplugindatabase/qwebplugindatabase.pro: Added.
        * tests/qwebplugindatabase/tst_qwebplugindatabase.cpp: Added.
        (tst_QWebPluginDatabase::installedPlugins):
        (tst_QWebPluginDatabase::searchPaths):
        (tst_QWebPluginDatabase::null_data):
        (tst_QWebPluginDatabase::null):
        (tst_QWebPluginDatabase::pluginForMimeType):
        (tst_QWebPluginDatabase::enabled):
        (tst_QWebPluginDatabase::operatorequal_data):
        (tst_QWebPluginDatabase::operatorequal):
        (tst_QWebPluginDatabase::preferredPlugin):
        * tests/tests.pro:

2009-08-03  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Do memory cleanup when running robotized QtLauncher in debug as well.

        * QtLauncher/main.cpp:
        (launcherMain):
        (main):

2009-07-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Initialize HTML5 Application Cache for QtWebKit to a sensible default
        https://bugs.webkit.org/show_bug.cgi?id=27866

        * Api/qwebpage.cpp:
        (initializeApplicationCachePathIfNecessary):
        (QWebPagePrivate::QWebPagePrivate):

2009-07-31  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

        Reviewed by Adam Treat.

        Build QtWebKit without benchmark tests for Qt < 4.5.
        https://bugs.webkit.org/show_bug.cgi?id=27886

        The QBENCHMARK macro is only available from 4.5 on,
        so builds for Qt < 4.5 shouldn't try to build those.

        * tests/tests.pro:

2009-07-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Fix warning by migrating use of QString.sprintf(...) to
        QString.arg().arg()...

        * WebCoreSupport/EditorClientQt.cpp:
        (dumpRange):

2009-07-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Expose the Offline Web Application Cache in the Qt API.

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        (QWebSettings::setOfflineWebApplicationCachePath):
        (QWebSettings::offlineWebApplicationCachePath):
        (QWebSettings::setOfflineWebApplicationCacheQuota):
        (QWebSettings::offlineWebApplicationCacheQuota):
        * Api/qwebsettings.h:

2009-07-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Add missing Q_OBJECT to class inheriting from QObject.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Fix indentation.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-30  Volker Hilsheimer <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        Fix documentation links to examples.

        * Api/qwebview.cpp:

2009-07-30  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Allocate MainWindow on heap in robotized QtLauncher as well.

        * QtLauncher/main.cpp:
        (main):

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/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::inspectorWindowObjectCleared):
        * WebCoreSupport/InspectorClientQt.h:

2009-07-29  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] In debug mode, this fix frees cached resources
        and other unreferenced objects (by calling the
        garbage collector) to remove the LEAK messages.
        https://bugs.webkit.org/show_bug.cgi?id=27767

        * Api/qwebframe.cpp:
        (qt_drt_cache_clear):
        * QtLauncher/main.cpp:
        (main):

2009-07-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Fix the Qt build by adapting to the changes of ScriptObject.

        * Api/qwebelement.cpp:
        (setupScriptObject):

2009-07-28  Robert Hogan  <robert@roberthogan.net>

        Reviewed by Simon Hausmann.

        Add WebKit version API to Qt.

        Get the current version of WebKit from WebKit/mac/Configurations/Version.xcconfig
        at compile time and make it available to Qt applications through
        qWebKitVersion().

        Also amend the User Agent string to place the Safari clause outside
        the final bracket and to the end of the UA string.

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

        Minor build tweak by Simon Hausmann (adding export macros to new functions).

        * Api/headers.pri:
        * Api/qwebkitversion.cpp: Added.
        (webKitVersion):
        (webKitMajorVersion):
        (webKitMinorVersion):
        * Api/qwebkitversion.h: Added.
        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::getWebKitVersion):

2009-07-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        Fix compilation with the precompiled header.

        * WebKit_pch.h: Don't include JSDOMBinding.h and MathObject.h,
        as they include AtomicString.h. AtomicString.cpp needs to enable
        a #define before including AtomicString.h, which breaks if the PCH
        forces the inclusion beforehand.

2009-07-28  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        Added tests to ensure that scroll position can be changed
        programmatically, even when the scroll bar policy is set to off.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.
        
        Fix a few compilation warnings in the QWebFrame tests.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-28  Andre Pedralho  <andre.pedralho@openbossa.org>

         Reviewed by Simon Hausmann.

         Fixed tst_QWebFrame::hasSetFocus test which was using
         an undefined resource.
         https://bugs.webkit.org/show_bug.cgi?id=27512

         * tests/qwebframe/tst_qwebframe.cpp:

2009-07-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Make it possible to pass relative file names to QtLauncher.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

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

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2009-07-27  Volker Hilsheimer <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        QWebView's "enabled" parameter should default to true, as with QGraphicsView and
        QPainter.

        * Api/qwebview.cpp: Add reference to QPainter::renderHints().
        * Api/qwebview.h: Add default for enabled argument.

2009-07-26  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        More documentation cleanups in the QWebElement class overview.

        * Api/qwebelement.cpp:

2009-07-26  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Clean up documentation of QWebElement's findFirst and findAll functions,
        as well as their QWebFrame counterparts.

        * Api/qwebelement.cpp:
        * Api/qwebframe.cpp:

2009-07-26  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Various documentation cleanups

        * Fixed qdoc warnings
        * Hide QWebNetworkInterface from the class overview
        * Mention QWebElement in the module overview
        * More cleanups

        * Api/qwebframe.cpp:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebview.cpp:
        * docs/qtwebkit.qdoc:

2009-07-26  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Added missing class diagram referenced from the docs, taken from the Qt
        documentation.

        * docs/qtwebkit.qdocconf: Register the image directory with
        qdoc.
        * docs/qwebview-diagram.png: Added.

2009-07-24  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Adam Treat.

        As per discussion on IRC, changed originalUrl by requestedUrl.

        * Api/qwebframe.cpp:
        (QWebFrame::requestedUrl):
        * Api/qwebframe.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-24  Andre Pedralho  <andre.pedralho@openbossa.org>

        Reviewed by Adam Treat.

        Removed void QWebFrame::renderContents(...) and added the Q_PROPERTY
        clipRenderToViewport to control whether QWebFrame::render would call
        FrameView::paintContents rather than FrameView::paint and do not clip
        the frame content to viewport.


        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderPrivate):
        (QWebFrame::clipRenderToViewport):
        (QWebFrame::setClipRenderToViewport):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-24  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        [QT] Implement originalUrl getter method to the API
        https://bugs.webkit.org/show_bug.cgi?id=25867

        * Api/qwebframe.cpp:
        (QWebFrame::originalUrl):
        * Api/qwebframe.h:
        * tests/qwebframe/qwebframe.qrc:
        * tests/qwebframe/test1.html: Added.
        * tests/qwebframe/test2.html: Added.
        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-24  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Build fix for Qt.

        Fix build issue introduced in 46344
        ([Bug 22700] ApplicationCache should have size limit)

        Remove method only added to the Qt ChromeClient.

        * WebCoreSupport/ChromeClientQt.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/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::reachedMaxAppCacheSize):
        Adds empty implementation of the reachedMaxAppCacheSize callback.
        * WebCoreSupport/ChromeClientQt.h:

2009-07-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add simple proxy support for QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=27495

        Picks up proxy settings from the http_proxy environment
        variable.

        * QtLauncher/QtLauncher.pro: Add QtNetwork dependency for all 
        platforms.
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2009-07-23  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Added a testcase to verify that cached methods in the QOBject bindings
        remain alife even after garbage collection.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::protectBindingsRuntimeObjectsFromCollector):

2009-07-23  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Fixing two issues related to QtLauncher
          - MainWindow objects are not always freed after close
          - JavaScript window.close() sometimes crashes
        https://bugs.webkit.org/show_bug.cgi?id=27601

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (main):

2009-07-21  Volker Hilsheimer <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        Various improvements to the API documentation.

        * Updated link to W3c Database spec
        * Formatting fixes, cleanups
        * Add missing \since 4.6 tags to QWebPage::frameAt
        * Extend QWebDatabase and QWebSecurityOrigin docs.

        * Api/qwebdatabase.cpp: 
        * Api/qwebpage.cpp:
        * Api/qwebsecurityorigin.cpp:
        * Api/qwebview.cpp:

2009-07-21  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        Remove preliminary-tag from QWebElement

        * Api/qwebelement.cpp:

2009-07-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Eric Seidel.

        Fix Qt code to follow the WebKit Coding Style.

        * Api/qcookiejar.cpp:
        (QCookieJar::setCookieJar):
        (QCookieJar::cookieJar):
        * Api/qcookiejar.h:
        * Api/qwebdatabase.cpp:
        (QWebDatabase::QWebDatabase):
        (QWebDatabase::removeDatabase):
        * Api/qwebdatabase.h:
        * Api/qwebdatabase_p.h:
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::title):
        (QWebFrame::print):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebhistory.cpp:
        (QWebHistory::clear):
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        * Api/qwebhistoryinterface.cpp:
        (gCleanupInterface):
        (QWebHistoryInterface::setDefaultInterface):
        (QWebHistoryInterface::defaultInterface):
        (QWebHistoryInterface::QWebHistoryInterface):
        * Api/qwebhistoryinterface.h:
        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):
        (QWebNetworkManager::finished):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (QWebNetworkInterface::addJob):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::editorCommandForWebActions):
        (QWebPagePrivate::createContextMenu):
        (QWebPagePrivate::focusInEvent):
        (QWebPage::fixedContentsSize):
        (QWebPage::setContentEditable):
        (QWebPage::swallowContextMenuEvent):
        (QWebPage::findText):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.h:
        * Api/qwebsecurityorigin.h:
        * Api/qwebsecurityorigin_p.h:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettingsPrivate::apply):
        (QWebSettings::globalSettings):
        (QWebSettings::QWebSettings):
        (QWebSettings::fontSize):
        (QWebSettings::setUserStyleSheetUrl):
        (QWebSettings::setDefaultTextEncoding):
        (QWebSettings::setIconDatabasePath):
        (QWebSettings::iconDatabasePath):
        (QWebSettings::iconForUrl):
        (QWebSettings::setWebGraphic):
        (QWebSettings::setFontFamily):
        (QWebSettings::fontFamily):
        (QWebSettings::testAttribute):
        (qt_websettings_setLocalStorageDatabasePath):
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        (QWebView::event):
        * Api/qwebview.h:

2009-07-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Add test for loading webpages...

        Performance test for loading webpages. Wait for the loadFinished
        signal to be fired. This should include a non empty layout.

        * tests/benchmarks/loading/tst_loading.cpp: Added.
        (waitForSignal):
        (tst_Loading::init):
        (tst_Loading::cleanup):
        (tst_Loading::load_data):
        (tst_Loading::load):
        * tests/benchmarks/loading/tst_loading.pro: Added.
        * tests/tests.pro:

2009-07-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        [Qt] Add a test case for drawing a simple viewrect to a QPixmap

        * tests/benchmarks/painting/tst_painting.cpp: Added.
        (waitForSignal):
        (tst_Painting::init):
        (tst_Painting::cleanup):
        (tst_Painting::paint_data):
        (tst_Painting::paint):
        * tests/benchmarks/painting/tst_painting.pro: Added.
        * tests/tests.pro:

2009-07-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] Add an option for QtLauncher to build without QtUiTools dependency
        https://bugs.webkit.org/show_bug.cgi?id=27438

        Based on Norbert Leser's work.

        * QtLauncher/main.cpp:
        (WebPage::createPlugin):

2009-07-17  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Adam Treat.

        Coding style fixes.

        * Api/qcookiejar.cpp:
        (QCookieJarPrivate::QCookieJarPrivate):
        (qHash):
        (QCookieJar::cookieJar):
        * Api/qwebelement.cpp:
        (QWebElement::functions):
        (QWebElement::scriptableProperties):
        * Api/qwebframe.cpp:
        (QWebFrame::metaData):
        (QWebFrame::scrollBarValue):
        (QWebFrame::scroll):
        (QWebFrame::scrollPosition):
        (QWebFrame::print):
        * Api/qwebnetworkinterface.cpp:
        (decodePercentEncoding):
        (QWebNetworkRequestPrivate::init):
        (QWebNetworkRequestPrivate::setURL):
        (QWebNetworkRequest::QWebNetworkRequest):
        (QWebNetworkRequest::operator=):
        (QWebNetworkRequest::setUrl):
        (QWebNetworkRequest::setHttpHeader):
        (QWebNetworkRequest::httpHeaderField):
        (QWebNetworkRequest::setHttpHeaderField):
        (QWebNetworkRequest::setPostData):
        (QWebNetworkJob::setResponse):
        (QWebNetworkJob::frame):
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkManager::addHttpJob):
        (QWebNetworkManager::cancelHttpJob):
        (QWebNetworkManager::httpConnectionClosed):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (QWebNetworkManager::doWork):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::request):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::getConnection):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::inputMethodEvent):
        (QWebPagePrivate::shortcutOverrideEvent):
        (QWebPage::inputMethodQuery):
        (QWebPage::javaScriptPrompt):
        (QWebPage::updatePositionDependentActions):
        (QWebPage::userAgentForUrl):
        (QWebPagePrivate::_q_onLoadProgressChanged):
        (QWebPage::totalBytes):
        (QWebPage::bytesReceived):
        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):
        (QWebSettings::setObjectCacheCapacities):
        * Api/qwebview.cpp:
        (QWebView::paintEvent):
        (QWebView::changeEvent):

2009-07-17  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Overwrite the plugin directories for the DRT.
        Part of https://bugs.webkit.org/show_bug.cgi?id=27215

        * Api/qwebpage.cpp:
        (qt_drt_overwritePluginDirectories): Only set the plugin directories
        to the ones in the QTWEBKIT_PLUGIN_PATH environment variable.

2009-07-16  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        This is the 2nd part of fixing "RTL: tooltip does not get its directionlity from its element's."
        https://bugs.webkit.org/show_bug.cgi?id=24187 

        Add one extra parameter to the callee of HitTestResult::title() due to the signature change.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate): Add direction as a parameter to the callee of HitTestResult::title().
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::mouseDidMoveOverElement): Add direction as a parameter to the callee of HitTestResult::title().

2009-07-16  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Adam Treat.

        Add new action to qwebpage to reload without cache.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateNavigationActions):
        (QWebPage::triggerAction):
        * Api/qwebpage.h:

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/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip): Add directionality as 2nd parameter to setToopTip() (without handling it yet).
        * WebCoreSupport/ChromeClientQt.h: Add directionality as 2nd parameter to setToolTip().

2009-07-15  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

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

        When the user clicks a link with a target attribute, the newly created window should be visible.
        Make new windows created in Qtlauncher visible.

        * QtLauncher/main.cpp:
        (WebPage::createWindow):

2009-07-14  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Zack Rusin.

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

        The default constructed values for QSize and WebCore::IntSize are different.  The former
        produces an invalid size whereas the latter produces a size of zero.  This was causing
        a layout to be triggered when constructing a view and an assert to be hit.  This patch fixes
        the crash by taking care not to cause an unnecessary layout triggered by ScrollView::setFixedLayoutSize.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2009-07-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Fix qdoc warnings for QWebPage::shouldInterruptJavaScript() and mention
        how to re-implement it.

        * Api/qwebpage.cpp:

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Fix crash with plugins when the plugin stream is cancelled.

        Similar to r26667 handle the case where didReceiveResponse on the
        plugin view results in failure to set up the stream and
        setMainDocumentError being called instead. This will set the
        m_pluginView back to 0 and we need check for it before calling
        didReceiveData.

        This was triggered by consecutive execution of
        LayoutTests/plugins/return-error-from-new-stream-callback-in-full-frame-plugin.html
        followed by LayoutTests/scrollbars/scrollbar-crash-on-refresh.html

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::committedLoad):

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Added QWebDatabase::removeAllDatabases, as a way to delete all
        databases from the offline storage path.

        Used by the Qt DRT.

        * Api/qwebdatabase.cpp:
        (QWebDatabase::removeAllDatabases):
        * Api/qwebdatabase.h:

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Added loadStarted() and loadFinished() signals to QWebFrame,
        to allow load tracking of individual frames, as opposed to
        QWebPage's loadStarted/loadFinished signals that are emitted
        whenever _any_ child frame loads/finishes.

        * Api/qwebframe.cpp: Document new signals.
        * Api/qwebframe.h: Add new signals.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame): Connect new signals.

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Add hooks for the GCController JavaScript interface needed by the
        Qt DRT.

        Fixed sort order of includes in qwebframe.cpp.

        * Api/qwebframe.cpp:
        (qt_drt_javaScriptObjectsCount):
        (qt_drt_garbageCollector_collect):
        (qt_drt_garbageCollector_collectOnAlternateThread):

2009-07-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Ariya Hidayat.

        Add hooks for the GCController JavaScript interface needed by the
        Qt DRT.

        Fixed sort order of includes in qwebframe.cpp.

        * Api/qwebframe.cpp:
        (qt_drt_javaScriptObjectsCount):
        (qt_drt_garbageCollector_collect):
        (qt_drt_garbageCollector_collectOnAlternateThread):

2009-07-12  Brent Fulgham  <bfulgham@gmail.com>

        Speculative build fix after http://trac.webkit.org/changeset/45786.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addMessageToConsole):
        * WebCoreSupport/ChromeClientQt.h:

2009-07-10  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Holger Freyther.

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

        Fix a bug where webkit hangs when executing infinite JavaScript loop.

        * Api/qwebpage.cpp:
        (QWebPage::shouldInterruptJavaScript):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        * tests/qwebpage/tst_qwebpage.cpp:
        (JSTestPage::JSTestPage):
        (JSTestPage::shouldInterruptJavaScript):
        (tst_QWebPage::infiniteLoopJS):

2009-07-10  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

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

        Fix crash when in frame tree of a new frame before the new frame
        has been installed in the frame tree, similar to r35088.

        After calling Frame::init() the frame it may have been removed from the
        frame tree again through JavaScript. Detect this by checking the page()
        afterwards.

        To make this check safe the Frame::init() code was moved into
        QWebFrameData's constructor, where a RefPtr holds a reference to the frame.
        After the check back in FrameLoaderClientQt we would hold the single
        reference left and after release() the frame, its frame loader, its
        client as well as the QWebFrame should have disappeared then.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init): Only call Frame::init here, the rest is
        done in QWebFrameData's constructor.
        (QWebFrame::QWebFrame):
        * Api/qwebframe_p.h: Adjust declaration.
        (QWebFrameData::QWebFrameData): Create the Frame here.
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame): Adjust and simplify
        to new QWebFrame constructor.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame): Adjust to
        new QWebFrame construction using QWebFrameData and add the
        check like in r35088.

2009-07-09  Beth Dakin  <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/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-07-08  Pradeepto Bhattacharya  <pradeepto@kde.org>

        Reviewed by Ariya Hidayat.

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.h: Removed the slot slotCallPolicyFunction().

2009-07-08  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

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

        Fix DRT instability issues with fast/loader/submit-form-while-parsing-2.html

        When the form is submitted we call the policy function in the frame
        loader delayed with a queued connection. That queued connection
        sometimes interferes with the javascript timeout set in the testcase.

        Eliminate the entire delayed policy function mechanism and instead always
        call back directly, like in the other ports. In most other places we called
        the slot directly anyway.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt): Remove m_policyFunction.
        (WebCore::FrameLoaderClientQt::callPolicyFunction): Call the policy function directly instead
        of emitting the queued signal.
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck): Call callPolicyFunction directly.
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm): Ditto.
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType): Ditto.
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction): Ditto.
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction): Ditto.
        * WebCoreSupport/FrameLoaderClientQt.h: Remove m_policyFunction as well as the associated
        signal.

2009-07-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Add Qt DRT hook for clearing the frame name.

        * Api/qwebframe.cpp:
        (qt_drt_clearFrameName):

2009-07-05  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Fix two qdoc warnings.

        Added missing \property for QWebFrame::hasFocus and added \a
        tag for pos of QWebPage::frameAt.

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:

2009-07-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Use the recently introduced FocusController::setFocused

        Use the recently introduced FocusController::setFocused
        in the Qt platform. The SelectionController will be updated
        from within the FocusController now.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):

2009-07-02  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Improve documentation of QWebFrame::setFocus and hasFocus()
        Added missing Q_PROPERTY for QWebFrame::hasFocus.

        * Api/qwebframe.cpp: Clarify the docs.
        * Api/qwebframe.h: add Q_PROPERTY(focus).

2009-07-02  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        Bug 26855: [Qt] New methods for QWebFrame to check and set focus.

        Added new public methods QWebFrame::hasFocus() and QWebFrame::setFocus()
        Added auto test.

        * Api/qwebframe.cpp:
        (QWebFrame::hasFocus):
        (QWebFrame::setFocus):
        * Api/qwebframe.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-01  Robert Hogan <robert@roberthogan.net>

        Reviewed by NOBODY.
        
        Fix Qt segfault when javascript disabled.
        If clients call addToJavaScriptWindowObject even though JavascriptEnabled is false
        webkit will segfault on the assert:
          ASSERTION FAILED: _rootObject
          (../../../WebCore/bridge/runtime.cpp:52
          JSC::Bindings::Instance::Instance(WTF::PassRefPtr<JSC::Bindings::RootObject>))
        Fix is to ensure JavaScript is enabled when client calls addToJavaScriptWindowObject.

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

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2009-07-01  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Move some API headers from WebCore.pro to headers.pri so that they
        get installed when running make install from the build directory.

        * Api/headers.pri:

2009-07-01  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Fixed robotized QtLauncher to work when there is no index.html in the user's home.

        * QtLauncher/main.cpp:
        (main):

2009-06-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.
        
        Renamed scrollbarUnderPoint to scrollbarAtPoint to follow conventions.

        * Api/qwebpage.cpp:
        (QWebPage::swallowContextMenuEvent):

2009-06-30  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Adam Treat.

        Bug 26422: [Qt] QWebPagePrivate::frameAt calculates wrong frame

        Added a public method QWebPage::frameAt
        Removed QWebPagePrivate::frameAt, which calcuated the wrong frame
        Modified QWebPage::swallowContextMenuEvent to use the new frameAt method
        New test case for frameAt added to tst_qwebpage.cpp

        * Api/qwebpage.cpp:
        (QWebPage::frameAt):
        (QWebPage::swallowContextMenuEvent):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * tests/qwebpage/frametest/iframe.html: Added.
        * tests/qwebpage/frametest/iframe2.html: Added.
        * tests/qwebpage/frametest/iframe3.html: Added.
        * tests/qwebpage/tst_qwebpage.cpp:
        (frameAtHelper):
        (tst_QWebPage::frameAt):
        * tests/qwebpage/tst_qwebpage.qrc:

2009-06-30  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Add QWebFrame::baseUrl() function that exposes the base URL of a frame.
        Autotests included.

        * Api/qwebframe.cpp:
        (QWebFrame::baseUrl):
        * Api/qwebframe.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-06-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build, add missing isSpeaking() implementation to
        ContextMenuClient.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::isSpeaking):
        * WebCoreSupport/ContextMenuClientQt.h:

2009-06-28  Sriram Yadavalli  <sriram.yadavalli@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Fix build break for Qt
        https://bugs.webkit.org/show_bug.cgi?id=26779

        * Api/qwebpage.cpp:
        (QWebPage::swallowContextMenuEvent):

2009-06-27  Simon Hausmann  <simon.hausmann@nokia.com>

        Build fix for Qt under Windows.

        * Api/qwebhistory.h: Use consistent export linkage for the datastream operators.

2009-06-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Simon Fraser.
        
        Changed call of scrollbarUnderMouse to scrollbarUnderPoint to match new API.

        * Api/qwebpage.cpp:
        (QWebPage::swallowContextMenuEvent):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for saving and loading of QWebHistory to and from a QByteArray.

        This includes streaming operators for QWebHistory. for convenience.

        New autotests that test QWebHistory and QWebHistoryItem serialization.

        * Api/qwebhistory.cpp:
        (QWebHistory::restoreState):
        (QWebHistory::saveState):
        (operator<<):
        (operator>>):
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        * tests/qwebhistory/tst_qwebhistory.cpp:
        (tst_QWebHistory::):
        (tst_QWebHistory::init):
        (tst_QWebHistory::title):
        (tst_QWebHistory::count):
        (tst_QWebHistory::back):
        (tst_QWebHistory::forward):
        (tst_QWebHistory::itemAt):
        (tst_QWebHistory::goToItem):
        (tst_QWebHistory::items):
        (tst_QWebHistory::serialize_1):
        (tst_QWebHistory::serialize_2):
        (tst_QWebHistory::serialize_3):
        (tst_QWebHistory::saveAndRestore_1):
        (tst_QWebHistory::saveAndRestore_2):
        (tst_QWebHistory::saveAndRestore_3):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the behaviour of QWebHistory::itemAt to interpret the specified index as absolute index.

        Returns an invalid QWebHistoryItem if the index is out of range.

        * Api/qwebhistory.cpp:
        (QWebHistory::itemAt):
        * tests/qwebhistory/tst_qwebhistory.cpp:
        (tst_QWebHistory::itemAt):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Added a few autotest to QWebHistory.

        * tests/qwebhistory/data/page1.html: Added.
        * tests/qwebhistory/data/page2.html: Added.
        * tests/qwebhistory/data/page3.html: Added.
        * tests/qwebhistory/data/page4.html: Added.
        * tests/qwebhistory/data/page5.html: Added.
        * tests/qwebhistory/data/page6.html: Added.
        * tests/qwebhistory/qwebhistory.pro: Added.
        * tests/qwebhistory/tst_qwebhistory.cpp: Added.
        (tst_QWebHistory::):
        (tst_QWebHistory::tst_QWebHistory):
        (tst_QWebHistory::~tst_QWebHistory):
        (tst_QWebHistory::init):
        (tst_QWebHistory::cleanup):
        (tst_QWebHistory::title):
        (tst_QWebHistory::count):
        (tst_QWebHistory::back):
        (tst_QWebHistory::forward):
        (tst_QWebHistory::goToItem):
        (tst_QWebHistory::items):
        * tests/qwebhistory/tst_qwebhistory.qrc: Added.
        * tests/tests.pro:

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix support for documenting functions prefixed with QWEBKIT_EXPORT

        Add QWEBKIT_EXPORT to the list of macros to ignore by qdoc.

        * docs/qtwebkit.qdocconf:

2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Eric Seidel.

        Bug 20303: [Qt] Key events are not working in frames.

        Send scrolling events to current focused frame, bubble the event
        up to parent frame if it is not handled.  Use EventHandler's new
        shared scrolling code.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::handleScrolling):
        * Api/qwebpage_p.h:

2009-06-25  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Adam Treat.

        Add highlight functionality to the QWebPage::findText() method. Introduced is
        new HighlightAllOccurrences flag which passed to the function will make it mark
        all existing occurrences of specified string in the page.

        * Api/qwebpage.cpp:
        (QWebPage::findText):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:

2009-06-19  Daniel Teske <qt-info@nokia.com>

        Reviewed by Simon Hausmann.

        Remove warnings for QString() constructions from const char *

        By explicitly wrapping it with QLatin1String() / QLatin1Char()

        * Api/qwebelement.cpp:
        (QWebElement::classes): Use QLatin1String.
        (QWebElement::addClass): Ditto.
        (QWebElement::removeClass): Ditto.
        (QWebElement::toggleClass): Ditto.

2009-06-18  Friedemann Kleint  <Friedemann.Kleint@nokia.com>

        Reviewed by Simon Hausmann.

        Fixed MinGW compilation.

        * Api/qwebelement.cpp:
        (QWebElement::evaluateScript):

2009-06-18  Markus Goetz <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausman.

        Clarify in docs how to compile with debug information.

        * docs/qtwebkit.qdoc:

2009-06-17  Markus Goetz <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausmann.

        QWebPage: Don't call supportsSsl()

        This stops QWebPage from loading the OpenSSL libs,
        certificates etc. when they are not needed for the non-HTTPS case.

        Loading the SSL libraries can be a very slow operation.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2009-06-16  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Fixed QWebPage::forwardUnsupportedContent documentation and added
        more information about Web plugins.

        * Api/qwebpage.cpp:
        * Api/qwebsettings.cpp:
        * docs/qtwebkit.qdoc:

2009-06-16  Morten Engvoldsen  <morten.engvoldsen@nokia.com>

        Reviewed by Ariya Hidayat.

        Clearifying QWebFrame docs

        Adding docs to toHtml() and toPlainText()

        * Api/qwebframe.cpp:

2009-06-15  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Adam Treat.

        Support the back/forward/stop/refresh multimedia keys and accept the
        event when handling backspace and shift backspace as we should.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2009-06-15  Andre Pedralho  <andre.pedralho@openbossa.org>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=26351
        Remove bool QWebHitTestResult::isScrollBar() const and make sure a null QWebHitTestResult is returned instead.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::updatePositionDependentActions):

2009-06-15  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Adam Treat.

        Fix the logic for disabling the fixed layout feature, when an invalid
        QSize is set.

        * Api/qwebpage.cpp:
        (QWebPage::setFixedContentsSize):

2009-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

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

        Move registerURLSchemeAsLocal from FrameLoader to SecurityOrigin.

        * Api/qwebpage.cpp:
        (QWebPage::acceptNavigationRequest):

2009-06-10  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        Documented ResolveRule and StylePriority enum values as well as their use in
        QWebElement::styleProperty and QWebElement::setStyleProperty methods.

        Based on the work of Simon Hausmann.

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):
        (QWebElement::setStyleProperty):
        * Api/qwebelement.h:

2009-06-09  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Rubber-stamped by Simon Hausmann.

        Fix qdoc warning, function parameter string must be referred.

        * Api/qwebview.cpp:

2009-06-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Renamed QWebSettings::AllowUniversalAccessFromFileUrls to
        LocalContentCanAccessRemoteUrls, as discussed in the API review.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2009-06-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Merged useFixedLayout property with fixedLayoutSize and
        renamed the latter to fixedContentsSize.

        * Api/qwebpage.cpp:
        (QWebPage::fixedContentsSize):
        (QWebPage::setFixedContentsSize):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2009-06-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Renamed QWebHitTestResult::linkTarget to linkElement() and made it return
        a QWebElement. The link target itself is always the target DOM attribute.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::linkElement):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-06-08  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Renamed QWebElement::enclosingBlock to enclosingBlockElement
        and changed the return type to QWebElement, as discussed in
        the API review. This API is more generic and through
        QWebElement's geometry() it is possible to retrieve the
        same information.

        * Api/qwebelement.cpp:
        (QWebElement::QWebElement):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::enclosingBlockElement):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2009-06-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add missing includes of config.h

        * Api/qcookiejar.cpp:
        * Api/qwebnetworkinterface.cpp:
        * Plugins/ICOHandler.cpp:
        * WebCoreSupport/DragClientQt.cpp:
        * WebCoreSupport/EditCommandQt.cpp:

2009-06-03  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Add API to make it possible to clear all memory caches used by
        QtWebKit.

        * Api/qwebsettings.cpp:
        (QWebSettings::clearMemoryCaches):
        * Api/qwebsettings.h:

2009-06-01  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Rubber-stamped by Gustavo Noronha.

        Before guessing the url trim the string to remove whitespace added to the start/end by the user.

        * Api/qwebview.cpp:
        (QWebView::guessUrlFromString):
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::guessUrlFromString_data):

2009-06-01  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Rubber-stamped by Gustavo Noronha.

        Use QLatin1Char() to compile when QT_NO_CAST_FROM_ASCII and QT_NO_CAST_TO_ASCII is defined

        * Api/qwebview.cpp:
        (QWebView::guessUrlFromString):

2009-06-01  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Rubber-stamped by Gustavo Noronha.

        Cleanup autotest file
        - use proper includes
        - remove useless constructor and destructor
        - add missing newline at the end of the file

        * tests/qwebview/tst_qwebview.cpp:

2009-06-01  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Rubber-stamped by Gustavo Noronha.

        Add a missing space between two words in the documentation.

        * Api/qwebview.cpp:

2009-05-26  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Holger Freyther.

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

        Add an API to generate a QUrl out of a string correcting for errors and missing information.
        See the API documentation for more details about the function.

        Autotests: included

        * Api/qwebview.cpp:
        (QWebView::guessUrlFromString):
        * Api/qwebview.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::changeLocation):
        * tests/qwebview/.gitignore: Added.
        * tests/qwebview/qwebview.pro:
        (tst_QWebView::initTestCase):
        (tst_QWebView::cleanupTestCase):
        (tst_QWebView::init):
        (tst_QWebView::cleanup):
        (tst_QWebView::guessUrlFromString_data):
        (tst_QWebView::guessUrlFromString):

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Part 2 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr

        <https://bugs.webkit.org/show_bug.cgi?id=25495>

        Reviewed by Oliver Hunt.

        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::createHTMLParserQuirks): Return a
        PassOwnPtr<> instead of a raw HTMLParserQuirks pointer.

2009-05-23  Jakob Truelsen  <antialize@gmail.com>

        Reviewed by Holger Freyther.

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

        Expose the default text encoding property to Qt.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::setDefaultTextEncoding):
        (QWebSettings::defaultTextEncoding):
        * Api/qwebsettings.h:

2009-05-21  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Additional test for resource load (CSS file) for QWebFrame.

        * tests/qwebframe/qwebframe.qrc:
        * tests/qwebframe/style.css: Added.
        * tests/qwebframe/tst_qwebframe.cpp:

2009-05-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix.

        Provide dummy implementation of pure virtual EditorClient method.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::getAutoCorrectSuggestionForMisspelledWord):
        * WebCoreSupport/EditorClientQt.h:

2009-05-20  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann and Holger Freyther.

        [Qt] Add renderHints property to QWebView.

        * Api/qwebview.cpp:
        (QWebViewPrivate::QWebViewPrivate):
        (QWebView::renderHints):
        (QWebView::setRenderHints):
        (QWebView::setRenderHint):
        (QWebView::paintEvent):
        * Api/qwebview.h:
        * tests/qwebview/qwebview.pro: Added.
        * tests/qwebview/tst_qwebview.cpp: Added.
        (tst_QWebView::tst_QWebView):
        (tst_QWebView::~tst_QWebView):
        (tst_QWebView::init):
        (tst_QWebView::cleanup):
        (tst_QWebView::renderHints):
        * tests/tests.pro:

2009-05-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

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

        Make ChromeClient a interface again

        With recent additions to ChromeClient.h empty defaults were
        added. This is bad for porters as these changes go unnoticed
        and at runtime no notImplemented warning is logged and grepping
        for notImplemented will not show anything. Change this Client
        to be like the other Clients again and always have pure virtuals
        (but for stuff inside #ifdef PLATFORM(MAC)).

        Update the various WebKit/* implementations to compile again.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setCursor):
        (WebCore::ChromeClientQt::requestGeolocationPermissionForFrame):
        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::scrollRectIntoView):

2009-05-19  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Fix a plugin bug in the WebKit code, similar to the one in WebCore.

        The problem is when a non visible QtPluginWidget would show it self
        in a sibling frame. The problem was due to our clipping. In Qt,
        if setMask is set with an empty QRegion, no clipping will
        be performed, so in that case we hide the PluginContainer

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2009-05-18  Zoltan Horvath <horvath.zoltan.6@stud.u-szeged.hu>

        Reviewed by Ariya Hidayat.

        Makes QtLauncher to accept multiple urls in command line and opens these in separate windows.

        * QtLauncher/main.cpp:
        (MainWindow::newWindow):
        (main):

2009-05-14  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Add a comment to QWebView::iconChanged(), mentioning that you will
        need to set the icon database path for icons to be loaded, and thus
        receive the signal.

        * Api/qwebview.cpp:

2009-05-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Ariya Hidayat.

        Fix setHtml test case by adding <head> tag to the expected result. This tag is automatically added by WebKit.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-05-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Ariya Hidayat.

        Add a test case for the signal urlChanged().
        * tests/qwebframe/tst_qwebframe.cpp:

2009-05-13  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Ariya Hidayat.

        Move emitting the signal QWebFrame::urlChanged to FrameLoaderClientQt::dispatchDidCommitLoad().
        This is to ensure that urlChanged() is emitted even if the frame has no title.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):

2009-05-13  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Rubberstamped by Ariya Hidayat.

        Fix coding style: Add {} to contents of if, containing a for loop.

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):

2009-05-12  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        Fixed a possible crash @styleProperty when there is no embedded/external CSS set.

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):

2009-05-12  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        Added external CSS test cases to QWebElement::styleProperty() method.

        Also some ::styleProperty() tests cleanup.

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):

2009-05-12  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Many methods were not considering the case of the element not having
        siblings or children when inserting nodes, and thus broke in some
        situations. This patch fixes that.

        * Api/qwebelement.cpp:
        (QWebElement::prependInside):
        (QWebElement::appendOutside):
        (QWebElement::encloseWith):

2009-05-08  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Make is possible to mark a style property as important while setting
        it. Also support the normal CSS property syntax "!important", while
        accepting spaces between the ! and the important keyword.

        * Api/qwebelement.cpp:
        (QWebElement::setStyleProperty):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):

2009-05-08  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Working with Antonio Gomes.

        Add support for finding the style property actually applied to the element.

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):

2009-05-11  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Darin Adler.

        Bug 24538: class/struct mixup in forward declarations
        https://bugs.webkit.org/show_bug.cgi?id=24538

        * Api/qwebpage.h:

2009-05-11  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        Fix Qt build when ENABLE_DATABASE is turned off

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

        * Api/qwebdatabase.cpp:
        (QWebDatabase::displayName):
        (QWebDatabase::expectedSize):
        (QWebDatabase::size):
        (QWebDatabase::fileName):
        (QWebDatabase::removeDatabase):
        * Api/qwebdatabase_p.h:
        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::allOrigins):
        (QWebSecurityOrigin::databases):

2009-05-05  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Improve behaviour of the QWebElement enclose* functions, to work
        similar to the jQuery wrap functions. We now enclose the contents
        of the element in the child of the deepest descendant element
        within the structure of the enclose element structure given.

        * Api/qwebelement.cpp:
        (findInsertionPoint):
        (QWebElement::encloseContentsWith):
        (QWebElement::encloseWith):
        (QWebElement::replace):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::encloseContentsWith):
        (tst_QWebElement::encloseWith):

2009-05-06  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        After commit rev @43215, setHtml() without a <head> tag,
        automatically adds it, so update our test case to respect this.

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::textHtml):

2009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix.

        Dont' use ENABLE() in Qt API headers, as they are not available when building
        against the API.

        * Api/qwebdatabase.h:
        * Api/qwebsecurityorigin.h:

2009-05-05  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.
        
        Add #if ENABLE(DATABASE) guards around database code so toggling ENABLE_DATABASE off does not break builds.
        https://bugs.webkit.org/show_bug.cgi?id=24776

        * Api/qwebdatabase.cpp:
        * Api/qwebdatabase.h:
        * Api/qwebdatabase_p.h:
        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::databaseUsage):
        (QWebSecurityOrigin::databaseQuota):
        (QWebSecurityOrigin::setDatabaseQuota):
        * Api/qwebsecurityorigin.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::exceededDatabaseQuota):
        * WebCoreSupport/ChromeClientQt.h:

2009-05-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Various improvements to the class documentation, including a simple snippet for QWebElement.

        * Api/qwebelement.cpp:
        * Api/qwebframe.cpp:
        * docs/webkitsnippets/webelement/main.cpp: Added.
        * docs/webkitsnippets/webelement/webelement.pro: Added.

2009-05-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Simplify variant conversion by moving the null check into
        convertValueToQVariant.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript): Moved null check into conversion function.
        * tests/qwebframe/tst_qwebframe.cpp:
        Added test to verify the correct conversion of null values to QVariant.

2009-05-01  Geoffrey Garen  <ggaren@apple.com>

        Rubber Stamped by Sam Weinig.
        
        Renamed JSValuePtr => JSValue.

        * Api/qwebelement.cpp:
        (setupScriptContext):
        (setupScriptObject):
        (QWebElement::evaluateScript):
        (QWebElement::functions):
        (QWebElement::scriptableProperty):
        (QWebElement::setScriptableProperty):
        (QWebElement::scriptableProperties):

2009-05-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Add a FrameLoaderClient callback for the ResourceRetrievedByXMLHttpRequest.

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

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceByXMLHttpRequest):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-04-30  David Kilzer  <ddkilzer@apple.com>

        Provide a mechanism to create a quirks delegate for HTMLParser

        Reviewed by David Hyatt.

        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::createHTMLParserQuirks): Added.  The
        default implementation of this factory method returns 0.

2009-04-30  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed build fix after r43072.

        * Api/qwebframe.cpp:
        (qt_drt_setJavaScriptProfilingEnabled): Enclose with JAVASCRIPT_DEBUGGER.

2009-04-30  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed build fix after r43063.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addMessageToConsole):
        * WebCoreSupport/ChromeClientQt.h:

2009-04-30  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Implement encloseContentsWith and rename wrap to encloseWith.

        Also in encloseWith, make sure that you cannot enclose with
        non-enclosable elements.

        * Api/qwebelement.cpp:
        (QWebElement::encloseContentsWith):
        (QWebElement::encloseWith):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::encloseContentsWith):
        (tst_QWebElement::encloseWith):

2009-04-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        The Qt API exposes a global history patch CSSStyleSelector to make API consumers work again

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

        The QtWebKit port made the mistake of exposing a global history. This broke
        with the addition of PageGroup and LinkHash. This needs to be repaired
        for Qt4.5.

        Add a function to LinkHash.cpp that is resolving a URL. Use this
        function from within CSSStyleSelector to forward the url to the
        QWebHistoryInterface API.

        It is sad that there is a path within visitedLinkHash which is now
        doing a memcpy, it is sad to add a PLATFORM(QT) define to CSSStyleSelector
        and using QtWebKit types within WebCore is a layering violation as well.

        PageGroup::setShouldTrackVisitedLinks is currently not enabled. For
        Qt4.6 a second version of the QWebHistoryInterface is going to be
        added which will fix things up.

        * Api/qwebhistoryinterface.cpp:
        (QWebHistoryInterface::setDefaultInterface): Add note for Qt4.6
        * Api/qwebpage.cpp: Remove PageGroup::setShouldTrackVisitedLinks(true)
        (QWebPagePrivate::QWebPagePrivate):
        * tests/qwebhistoryinterface/qwebhistoryinterface.pro: Added unit test.
        * tests/qwebhistoryinterface/tst_qwebhistoryinterface.cpp: Added unit test.
        (tst_QWebHistoryInterface::tst_QWebHistoryInterface):
        (tst_QWebHistoryInterface::~tst_QWebHistoryInterface):
        (tst_QWebHistoryInterface::init):
        (tst_QWebHistoryInterface::cleanup):
        (FakeHistoryImplementation::addHistoryEntry):
        (FakeHistoryImplementation::historyContains):
        (tst_QWebHistoryInterface::visitedLinks): Check the Qt4.4 behaviour.
        * tests/tests.pro:

2009-04-30  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed build fix, after r43035.

        Temporarily use Position::deprecatedEditingOffset().

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):

2009-03-27  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Simon Hausmann.

        Update the page actions when a finishing loading even if the frame is
        not the top frame such as when browsing inside of a website with frames.
        https://bugs.webkit.org/show_bug.cgi?id=24890

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        * tests/qwebpage/frametest/frame_a.html: Added.
        * tests/qwebpage/frametest/index.html: Added.
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::backActionUpdate):

2009-04-29  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        Implement QWebElement::evaluateScript.

        * Api/qwebelement.cpp:
        (setupScriptContext):
        (QWebElement::evaluateScript):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::evaluateScript):

2009-04-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Replaced QWebElementCollection with QList<QWebElement>.

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::findAllElements):
        * Api/qwebframe.h:
        * QtLauncher/main.cpp:
        (MainWindow::selectElements):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::simpleCollection):
        (tst_QWebElement::namespaceURI):
        (tst_QWebElement::nullSelect):

2009-04-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        QWebElement API changes after another round of API review:

        * Fix argument names of findAll/findFirst
        * Split up toXml into innerXml and outerXml
        * Removed confusing toggleClass overload
        * Fixed casing of namespaceUri to follow QXmlStreamReader
        * Removed tagName from firstChild/nextSibling/etc.
        * Renamed append/prepend/insertAfter/insertBefore to [append|prepend][Inside|Outside]
        * Renamed wrapWith() back to wrap()
        * Made clone() const
        * Renamed remove() to takeFromDocument(), added removeFromDocument()
        * Renamed clear() to removeChildren()
        * Renamed scriptsFunctions/callScriptFunction to functions()/callFunction()
        * Renamed scriptProperty to scriptableProperty

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        (QWebElement::findFirst):
        (QWebElement::setOuterXml):
        (QWebElement::toOuterXml):
        (QWebElement::setInnerXml):
        (QWebElement::toInnerXml):
        (QWebElement::namespaceUri):
        (QWebElement::firstChild):
        (QWebElement::lastChild):
        (QWebElement::nextSibling):
        (QWebElement::previousSibling):
        (QWebElement::callFunction):
        (QWebElement::functions):
        (QWebElement::scriptableProperty):
        (QWebElement::setScriptableProperty):
        (QWebElement::scriptableProperties):
        (QWebElement::appendInside):
        (QWebElement::prependInside):
        (QWebElement::prependOutside):
        (QWebElement::appendOutside):
        (QWebElement::clone):
        (QWebElement::takeFromDocument):
        (QWebElement::removeFromDocument):
        (QWebElement::removeChildren):
        (QWebElement::wrap):
        (QWebElement::replace):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::findAllElements):
        (QWebFrame::findFirstElement):
        * Api/qwebframe.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::textHtml):
        (tst_QWebElement::classes):
        (tst_QWebElement::namespaceURI):
        (tst_QWebElement::foreachManipulation):
        (tst_QWebElement::callFunction):
        (tst_QWebElement::callFunctionSubmitForm):
        (tst_QWebElement::functionNames):
        (tst_QWebElement::properties):
        (tst_QWebElement::appendAndPrepend):
        (tst_QWebElement::insertBeforeAndAfter):
        (tst_QWebElement::remove):
        (tst_QWebElement::clear):
        (tst_QWebElement::replaceWith):

2009-04-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix some qdoc warnings.

        * Api/qwebframe.cpp: Fix links.
        * Api/qwebnetworkinterface.cpp: Make docs internal.
        * Api/qwebnetworkinterface.h: Ditto.
        * Api/qwebpage.cpp: Fix property name in \property.

2009-04-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        Fix qdoc warning about link to QAction::isEnabled.

        * Api/qwebpage.cpp:

2009-04-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Added support for generating API docs in the Qt build using "make docs"

        Added code snippets and overview from the Qt sources references in the API docs.

        * Api/qwebpage.cpp: Adjust paths to snippets.
        * Api/qwebview.cpp: Ditto.
        * docs/docs.pri: Added.
        * docs/qtwebkit.qdoc: Added.
        * docs/qtwebkit.qdocconf: Added.
        * docs/webkitsnippets/qtwebkit_build_snippet.qdoc: Added.
        * docs/webkitsnippets/qtwebkit_qwebview_snippet.cpp: Added.
        * docs/webkitsnippets/simple/main.cpp: Added.
        * docs/webkitsnippets/simple/simple.pro: Added.
        * docs/webkitsnippets/webpage/main.cpp: Added.
        * docs/webkitsnippets/webpage/webpage.pro: Added.

2009-04-23  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        [Qt] Added QWebElement::computedStyleProperty method.

        * Api/qwebelement.cpp:
        (QWebElement::computedStyleProperty):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::computedStyle):

2009-04-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        [Qt] Rename QWebElement arguments from html to markup

        * Api/qwebelement.cpp:
        (QWebElement::append):
        (QWebElement::prepend):
        (QWebElement::insertBefore):
        (QWebElement::insertAfter):
        * Api/qwebelement.h:

2009-04-21  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        QWebElementSelection renamed to QWebElementCollection.

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        (QWebElementCollectionPrivate::QWebElementCollectionPrivate):
        (QWebElementCollectionPrivate::create):
        (QWebElementCollection::QWebElementCollection):
        (QWebElementCollection::operator=):
        (QWebElementCollection::~QWebElementCollection):
        (QWebElementCollection::operator+):
        (QWebElementCollection::append):
        (QWebElementCollection::count):
        (QWebElementCollection::at):
        (QWebElementCollection::toList):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::findAllElements):
        * Api/qwebframe.h:
        * QtLauncher/main.cpp:
        (MainWindow::selectElements):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::simpleCollection):
        (tst_QWebElement::iteration):
        (tst_QWebElement::emptyCollection):
        (tst_QWebElement::appendCollection):
        (tst_QWebElement::nullSelect):

2009-04-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

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

        Remove QtCore 4.5 dependency from QWebElement test

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::iteration): Use QList::count() instead of QList::length()

2009-04-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Simon Hausmann.

        Make the operator== and operator!= non inline to
        allow looking at the d-pointer in the future.

        * Api/qwebelement.cpp:
        (QWebElement::operator==):
        (QWebElement::operator!=):
        * Api/qwebelement.h:

2009-04-15  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        Rename extend() method in QWebElementSelection to append().

        * Api/qwebelement.cpp:
        (QWebElementSelection::append):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::appendSelection):

2009-04-15  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        Fixed nit/typo in QWebElement documentation.

        * Api/qwebelement.cpp:

2009-04-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

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

        Fix linking against QtWebKit for Symbian and other platforms
        where the OS ABI distinguishes between an import or an export situation.

        * Api/qwebkitglobal.h: Instead of white-listing Win, remove the test.

2009-04-14  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Tor Arne Vestbø.

        Rename QWebElement::setHtml and html to setXml and toXml respectivily.
        
        Also add a mean to define the scope (inner or other).

        * Api/qwebelement.cpp:
        (QWebElement::setXml):
        (QWebElement::toXml):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::textHtml):
        (tst_QWebElement::foreachManipulation):

2009-04-14  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Tor Arne Vestbø.

        Rename QWebElement::setText() and text() to ::setPlainText and
        ::toPlainText, respectively.

        * Api/qwebelement.cpp:
        (QWebElement::setPlainText):
        (QWebElement::toPlainText):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::textHtml):
        (tst_QWebElement::simpleSelection):
        (tst_QWebElement::appendAndPrepend):
        (tst_QWebElement::insertBeforeAndAfter):
        (tst_QWebElement::replaceWith):
        (tst_QWebElement::wrap):
        (tst_QWebElement::firstChildNextSiblingWithTag):
        (tst_QWebElement::lastChildPreviousSiblingWithTag):

2009-04-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Rename DOM API select function to findFirst, findAll, etc.

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        (QWebElement::findFirst):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::findAllElements):
        (QWebFrame::findFirstElement):
        * Api/qwebframe.h:
        * QtLauncher/main.cpp:
        (MainWindow::selectElements):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::simpleSelection):
        (tst_QWebElement::attributesNS):
        (tst_QWebElement::classes):
        (tst_QWebElement::namespaceURI):
        (tst_QWebElement::iteration):
        (tst_QWebElement::foreachManipulation):
        (tst_QWebElement::callFunctionSubmitForm):
        (tst_QWebElement::documentElement):
        (tst_QWebElement::frame):
        (tst_QWebElement::style):
        (tst_QWebElement::extendSelection):
        (tst_QWebElement::properties):
        (tst_QWebElement::appendAndPrepend):
        (tst_QWebElement::insertBeforeAndAfter):
        (tst_QWebElement::remove):
        (tst_QWebElement::clear):
        (tst_QWebElement::replaceWith):
        (tst_QWebElement::wrap):
        (tst_QWebElement::nullSelect):
        (tst_QWebElement::firstChildNextSibling):
        (tst_QWebElement::firstChildNextSiblingWithTag):
        (tst_QWebElement::lastChildPreviousSibling):
        (tst_QWebElement::lastChildPreviousSiblingWithTag):

2009-04-06  Simon Hausmann  <simon.hausmann@nokia.com>
            Ariya Hidayat <ariya.hidayat@nokia.com>
            Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
            Genevieve Mak <gen@staikos.net>

        Reviewed by Tor Arne Vestbø, Simon Hausmann

        First revision of new API in the Qt port to access the DOM.

        * Api/headers.pri: Added qwebelement.h to the API headers.
        * Api/qwebelement.cpp: Added.
        * Api/qwebelement.h: Added.
        * Api/qwebframe.cpp:
        (QWebFrame::documentElement): Added accessor for the document element.
        (QWebFrame::selectElements): Added convenienc query method.
        (QWebFrame::selectElement): Ditto.
        (QWebHitTestResult::element): Added accessor for underlying DOM element.
        * Api/qwebframe.h:
        * QtLauncher/main.cpp: Simple test gui for element selections.
        * tests/qwebelement/qwebelement.pro: Added.
        * tests/qwebelement/tst_qwebelement.cpp: Added.
        * tests/tests.pro: Added QWebElement & QWebElementSelection unit tests.

2009-04-02  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction): Adapted code to renamed loadFrameRequest function.

2009-04-02  Takumi Asaki <takumi.asaki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix pre-edit handling of text fields with input methods.

        The input method sends an empty preeditString() if all characters of
        the preedit should be deleted. So inputMethodEvent() has to use
        preeditString() if it's empty.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):

2009-03-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Document that setHtml/setContent loads only the html/data immediately, not external objects.

        * Api/qwebframe.cpp:
        * Api/qwebview.cpp:

2009-03-29  Darin Adler  <darin@apple.com>

        Try to fix Qt build.

        * WebCoreSupport/EditorClientQt.cpp: Added include of HTMLElement.h.

        * WebCoreSupport/FrameLoaderClientQt.cpp: Added include of FormState.h.
        (WebCore::FrameLoaderClientQt::prepareForDataSourceReplacement):
        Removed unneeded call to detachChildren, which is called by FrameLoader
        right after this.
        (WebCore::FrameLoaderClientQt::createFrame): Use loadURLIntoChildFrame
        as other platforms do in the corresponding functions.

2009-03-27  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Simon Hausmann.

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

        Fixes an incorrect case in tst_qwebpage.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::cursorMovements):

2009-03-27  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Simon Hausmann.

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

        Add new editing related QWebPage::WebActions
        * Clipboard: PasteAndMatchStyle
        * Formatting: RemoveFormat, ToggleStrikethrough, ToggleSubscript, and
          ToggleSuperscript
        * List Editing: InsertUnorderedList, InsertOrderedList, Indent, Outdent
        * Paragraph Justification: AlignCenter, AlignJustified, AlignLeft, AlignRight 

        Improved selection and editing tests.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::action):
        * Api/qwebpage.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textSelection):
        (tst_QWebPage::textEditing):

2009-03-26  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Fix the documentation of the QLocale usage in userAgentForUrl.

        * Api/qwebpage.cpp:

2009-03-20  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Simon Hausmann.

        Fix for InsertParagraphSeparator and InsertLineSeparator so that
        QWebPage::action() creates QActions for them. Also make sure they get
        updated appropriately.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::action):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textEditing):

2009-03-20  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Tor Arne Vestbø.

        Fix QWebPage::WebActions action states to more closely match when they are
        actually applicable and remove erroneous documentation.

        * Most WebActions implemented using editor commands now use the
          Editor::Command::isEnabled() to control their availability.
        * SelectAll is always enabled (since it's editor command is).
        * SetTextDirection{} family of WebActions are available when canEdit() is true
          and not just canEditRichly().

        Fix and clarify documentation about the availability of various web actions.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textSelection):

2009-03-19  Ariya Hidayat <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Fixes pedantic compilation in QtWebKit.

        There are no semi-colons after namespace declarations.

        * Api/qwebdatabase.h:
        * Api/qwebsecurityorigin.h:

2009-03-19  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Removed obsolete warning about Flash and other plugins.

        * Api/qwebsettings.cpp:

2009-03-19  Paul Olav Tvete  <paul.tvete@nokia.com>

        Reviewed by Simon Hausmann.

        Properly escape tooltip text

        ManualTest: http://xkcd.com/554/

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip):

2009-03-10  Adam Treat  <adam.treat@torchmobile.com>

        Build fix for Qt after r41555.

        * Api/qwebpage.cpp:
        (QWebPage::acceptNavigationRequest):

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Build fix, no review.

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):

2009-03-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Cameron Zwarich.

        These methods are clearly returning the wrong values as the two were
        returning swapped information.

        * Api/qwebpage.cpp:
        (QWebPage::totalBytes):
        (QWebPage::bytesReceived):

2009-03-05  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] NPAPI plugins are supported, adjust the API documentation.

        * Api/qwebsettings.cpp:

2009-03-04  Adam Barth  <abath@webkit.org>

        Reviewed by Alexey Proskuryakov.

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

        Fix WebKit style for allowUniversalAccessFromFileURLs.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2009-03-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

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

        Expose AllowUniversalAccessFromFileUrls to Qt clients.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2009-03-03  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Create and update the action for SelectAll.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::action):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textSelection):

2009-03-02  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Eric Seidel.

        Add three new drt helper functions that enable all of the tests in
        LayoutTests/animation/* and LayoutTests/transitions/* to now pass.

        * Api/qwebframe.cpp:
        (qt_drt_pauseAnimation):
        (qt_drt_pauseTransitionOfProperty):
        (qt_drt_numberOfActiveAnimations):

2009-03-02  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=21230
        On X11 match the behavior of Firefox and also copy the url to the
        clipboard selection when the action Copy Link Location is executed.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2009-02-25  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the documentation for the linkHovered signal.

        * Api/qwebpage.cpp:

2009-02-23  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24094
        Make sure to empty the cache on exit to get rid of superfluous leak messages
        for CachedResource's in order to keep the leak messages accurate.  This
        is analagous to what the Mac port is doing on application exit when all
        WebView's have been closed.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::_q_cleanupLeakMessages):
        (QWebPage::QWebPage):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2009-02-23  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Copyright notices in a few files

        * WebKit_pch.h:

2009-02-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Avoid loading plugins when they're disabled in the settings.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMEType): Don't call into the
        PluginDatabase if plugins are disabled in the settings.

2009-02-13  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=23738
        Expose the url elements target frame string.  This is the sister function
        to the existing linkTargetFrame which returns the QWebFrame*.  When the
        linkTargetFrame is 0 it is useful to know what the target was to be.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::linkTarget):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-02-13  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Removed documentation for internal functions.

        * Api/qwebsettings.cpp:

2009-02-13  Martin Smith  <msmith@trolltech.com>

        Reviewed by Simon Hausmann.

        Corrected some minor qdoc errors.

        * Api/qwebsettings.cpp:

2009-02-11  Dimitri Dupuis-latour  <dupuislatour@apple.com>

        Stub out InspectorClientQt::hiddenPanels.

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::hiddenPanels):
        * WebCoreSupport/InspectorClientQt.h:

2009-02-10  Karsten Heimrich  <kheimric@trolltech.com>

        Reviewed by Simon Hausmann.

        Fixes missing navigation/url update while clicking on anchor inside
        webpage.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidChangeLocationWithinPage):
        update and emit in case we navigate inside a webpage

2009-02-10  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build as class Selection is now VisibleSelection.

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):

2009-02-06  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryRedirectLinks):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-02-06  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Doc - made 2 functions internal as they are not part of the API anymore (and this fixes 2 qdoc warnings)

        * Api/qwebsettings.cpp:

2009-02-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Added an overload of QWebFrame::addToJavaScriptWindowObject that takes a QScriptEngine::ValueOwnership parameter.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject): New overload.
        * Api/qwebframe.h:
        * tests/qwebframe/tst_qwebframe.cpp: Added unit tests for ownership
        models.

2009-02-06  Aaron Boodman  <aa@chromium.org>

        Reviewed by Holger Freyther.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::documentElementAvailable):)
        Fix compile error in Qt build introduced by the below change (r40694).

2009-02-05  Aaron Boodman  <aa@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23708
        Adds documentElementAvailable() callback to FrameLoaderClient.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClient::documentElementAvailable):
        Stub out documentElementAvailable().
        * WebCoreSupport/FrameLoaderClientQt.h:
        Ditto.

2009-02-04  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Documented the return value of the evaluateJavaScript() function.

        * Api/qwebframe.cpp:

2009-02-03  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Added a unit test to verify the succesful conversion from QByteArray to
        JSByteArray and back to QByteArray.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::load):
        (QWebFrame::setHtml):
        (QWebFrame::setContent):

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Track redirects in global history.

        Keep Qt building.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForRedirectWithoutHistoryItem):
        (WebCore::FrameLoaderClientQt::createFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Update for changes to WebCore.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-02-02  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=23587
        Refactor HitTestRequest to eliminate all the ugly boolean arguments and
        use an enum bitflag instead.  Cleanup all the code that constructs the
        various HitTestRequests to make the code more readable.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):

2009-02-02  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build to call forceLayout on the view instead.

        * Api/qwebpage.cpp:
        (QWebPage::setFixedLayoutSize):
        (QWebPage::setUseFixedLayout):

2009-02-02  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Move Frame::forceLayout, Frame::adjustPageHeight and Frame::forceLayoutWithPageWidthRange to FrameView

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

        FrameView::forceLayout could be killed but the comment might
        contain a value over the the plain FrameView::layout...

        Adjust the WebCore/WebKit consumers of these methods.

        * Api/qwebpage.cpp:
        (QWebPage::setViewportSize):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::forceLayout):

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

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

        Kill FrameLoaderClient.cpp, move the code over to Frame::createView

        FrameLoaderClient is supposed to be an interface, move the
        to be shared code to Frame which is a controller and is
        allowed to create a FrameView.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Split "lockHistory" into "lockHistory" and "lockBackForwardList" in
        preparation for setting them differently during a redirect.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2009-01-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Remove FrameLoaderClient code that is now handled by FrameLoader itself

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::frameLoadCompleted):

2009-01-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Hide the Offline Web Application Cache path API from the public API
        for now.

        * Api/qwebsettings.cpp:
        (qt_websettings_setOfflineWebApplicationCachePath):
        (qt_websettings_offlineWebApplicationCachePath):
        * Api/qwebsettings.h:

2009-01-28  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann and George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=23557
        Do not clip the QWebFrame::hitTestContent method to the visible viewport
        and add a regression test to make sure it works.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):
        * tests/qwebframe/tst_qwebframe.cpp:

2009-01-28  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Provide default implementations of JavaScript dialog boxes like in
        most web browsers, i.e. indicate that is from JavaScript and show the
        frame URL.

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):

2009-01-27  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        http://qt.nokia.com/developer/task-tracker/index_html?id=238391&method=entry

        [Qt] If QPainter fails to start on a QPrinter instance, do not
        continue printing.

        * Api/qwebframe.cpp:
        (QWebFrame::print):

2009-01-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein

        Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::savePlatformDataToCachedFrame):
        (WebCore::FrameLoaderClientQt::transitionToCommittedFromCachedFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-01-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Hyatt
        
        Back out r40285, because it was checked in with no bug number, no
        testcase, is rendering change that did not get thorough review,
        and broke the Mac build.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):

2009-01-26  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        Do not clip the QWebFrame::hitTestContent method to the visible viewport.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):

2009-01-26  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: qdoc fix for a link to a property and added a basic description of the offline caching and storage features from HTML 5.

        * Api/qwebpage.cpp:
        * Api/qwebsettings.cpp:

2009-01-25  Urs Wolfer  <uwolfer@kde.org>

        Reviewed by Simon Hausmann.

        Add QWebPage::SelectAll to WebAction enum to select all content.

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

        * Api/qwebpage.cpp:
        (QWebPagePrivate::editorActionForKeyEvent):
        * Api/qwebpage.h:

2009-01-25  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Fixed the terminology used.

        * Api/qwebpage.cpp:

2009-01-25  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Rename links from trolltech.com to qtsoftware.com

        * Api/qwebpluginfactory.cpp:

2009-01-25  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Make QWebPage auto-test more robust by cleaning up generated files

        Sometimes the auto-test may segfault, leaving behind files because the
        call to cleanupTestCase() never happens, so we also clean up the files
        at initTestCase() just to make sure we're running in a clean environment.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::cleanupFiles):
        (tst_QWebPage::initTestCase):
        (tst_QWebPage::cleanupTestCase):

2008-12-20  Urs Wolfer  <uwolfer@kde.org>

        Reviewed by Simon Hausmann.

        Fix: compile qwebhistory.h with pendantic comiler flag.

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

        * Api/qwebhistory.h:

2009-01-24  Adam Treat  <adam.treat@torchmobile.com>

        Oops, fix the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::render):

2009-01-24  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        Add QWebFrame::renderContents() method which allows arbitary rendering
        of any content region within the QWebFrame.  It also does not draw any
        scrollbars.

        * Api/qwebframe.cpp:
        (QWebFrame::renderContents):
        * Api/qwebframe.h:

2009-01-23  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Make the test more robust by taking into account the platform-specific
        cursor flashing time.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-01-20  Friedemann Kleint  <Friedemann.Kleint@nokia.com>

        Reviewed by Simon Hausmann.

        Fix spelling error in QWebPage

        * Api/qwebpage.cpp:
        (QWebPage::action):

2009-01-19  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix calling of onkeypress event handlers on input elements when pressing enter
        and other text insertion commands in the Qt port.

        Similar to the win and mac ports don't execute text inserting editor
        commands on RawKeyDown but continue processing the event first in
        WebCore, i.e. also get a keypress event sent. If unhandled it will
        come back to EditorClientQt::handleKeyboardEvent later and we execute
        it then.

        This also fixes search by pressing enter on www.trafikanten.no.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::editorCommandForWebActions): Make function
        accessible from other files.
        (QWebPage::triggerAction): Adjust to new function visibility.
        * Api/qwebpage_p.h: Ditto.
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent): Don't execute
        text inserting commands on RawKeyPressDown.

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Increase popup focus delay time to a sensible 500 ms.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

         Reviewed by Adam Roben.

         [Qt] Prevent crash if plugin data is NULL.

         * WebCoreSupport/FrameLoaderClientQt.cpp: NULL check.
         (WebCore::FrameLoaderClientQt::objectContentType):

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Per-line cursor movement tests depend on platform-specific font
        metrics. Remove them to avoid test failures on different platforms.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::cursorMovements):

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        http://qt.nokia.com/developer/task-tracker/index_html?id=219344&method=entry

        [Qt] API documentation for QWebPage::WebAction enum.

        * Api/qwebpage.cpp:

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Another attempt at fixing the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2009-01-14  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Unit tests for text selection and editing actions of QWebPage.
        The following are tested:
            - the actions are not NULL
            - the actions are disabled when contentEditable is false
            - the actions are enabled when contentEditable is true

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textSelection):
        (tst_QWebPage::textEditing):

2009-01-14  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix failing assertion when pressing an extra mouse button on a
        QWebView.

        Mice with more than three buttons - for example with a dedicated
        "back" button - can generate Qt::XButton1 or Button2.
        WebCore::MouseButton contains only Left, Middle and Right, so in
        Qt's PlatformMouseEvent we map to NoButton, resulting in a mouse
        press or release even with no button set. That triggers an assertion
        in EventTargetNode::dispatchMouseEvent requiring that either a button
        is set or it is just a mouse move event, which is correct.

        In QWebPage decide not to dispatch such mouse events where we cannot
        map the mouse button to a WebCore::MouseButton.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseTripleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):

2009-01-14  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        http://qt.nokia.com/developer/task-tracker/index_html?id=241144&method=entry

        [Qt] Create actions for text selection and editing for QWebPage.
        Also properly disable and enable them when contentEditable is toggled.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::action):

2009-01-14  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Unit tests for cursor movements. The following are tested:
            - the actions are not NULL
            - the actions are disabled when contentEditable is false
            - the actions are enabled when contentEditable is true
            - the cursor moves properly when the actions are triggered

        * tests/qwebpage/tst_qwebpage.cpp:
        (CursorTrackedPage::CursorTrackedPage):
        (CursorTrackedPage::selectedText):
        (CursorTrackedPage::selectionStartOffset):
        (CursorTrackedPage::selectionEndOffset):
        (CursorTrackedPage::isSelectionCollapsed):
        (tst_QWebPage::cursorMovements):

2009-01-08  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

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

        Update webview with the intersected rect.

        In ChromeClientQt::repaint, view should be updated with the
        intersected rect, not the whole windowRect;

        This generally is not a problem for normal viewport setup where
        viewport size is the same as the qwebview widget size.  However, if we
        set the viewport size smaller than qwebkit widget, we will see
        unwanted painting outside the viewport.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):

2009-01-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        [Qt] Missing piece from my previous commit:
        Disable and enable the cursor navigation actions when contentEditable
        is changed.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):

2009-01-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Create actions for cursor navigation for QWebPage. 
        Also properly disable and enable them when contentEditable is toggled.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPage::action):

2009-01-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

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

        Based on patch by Yael Aharon  <yael.aharon@nokia.com>

        Make the QWebSettings functions for setting the path for the local
        storage database private QtWebkit API, including the ability to
        associated a QWebPage with a named page group.

        * Api/qwebpage.cpp:
        (qt_webpage_setGroupName): Added.
        (qt_webpage_groupName): Added.
        * Api/qwebpage.h:
        (ExtensionOption::handle): Added internal helper function.
        * Api/qwebsettings.cpp:
        (qt_websettings_setLocalStorageDatabasePath): Made private API.
        (qt_websettings_localStorageDatabasePath): Made private API.
        * Api/qwebsettings.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::database): Small cleanup.
        (tst_QWebPage::multiplePageGroupsAndLocalStorage): New test for the
        page group handling, written by Yael.

2009-01-12  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Ensure that we're always notified of navigation actions for local anchors
        
        FrameLoader::checkNavigationPolicy() does not notify us if the request has
        been checked before (which happens for local anchors), but in the case of
        our clients not accepting the navigation request we do want to be notified
        again later on, so we clear the lastCheckedRequest flag.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2009-01-12  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        Build fix: use qobject_cast which does not rely on RTTI. This fixes the
        unit test when building it with a version of Qt (e.g. Qt/Embedded)
        configured without RTTI.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-01-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        When the QWebView is disabled context menus implemented in JavaScript should not pop up.

        Just like in QWidget::event() we have to check for the disabled state and
        ignore context menu events.

        * Api/qwebview.cpp:

2009-01-12  Simon Hausmann  <simon.hausmann@nokia.com

        Reviewed by Tor Arne Vestbø.

        Fix QWebView appearance when showed uninitialized without page.

        Only set WA_OpaquePaintEvent if we have a page set that will actually
        paint the entire contents, otherwise the optimization does not apply
        as we do not have a paintEvent() implementation and Qt has to fill the
        view with its default background instead.

        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebView::setPage):

2009-01-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        Do not create a QVariant from QObject* directly, use the
        template-specialized function.

        * tests/qwebframe/tst_qwebframe.cpp:
        (MyQObject::myOverloadedSlot):

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Documentation fixes, remove duplicated docs, document missing
        parameters and return values.

        * Api/qwebdatabase.cpp:
        * Api/qwebpage.cpp:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix linking against QtWebKit on Windows, by defining the EXPORT macros
        _exactly_ the same way as in qglobal.h, depending on QT_NODLL,
        QT_MAKEDLL and QT_SHARED.

        * Api/qwebkitglobal.h:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Remove qwebnetworkinterface.h from WEBKIT_API_HEADERS as it's not
        public Qt 4.4/4.5 API.

        * Api/headers.pri:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix, remove qcookiejar.h from the API headers and
        therefore HEADERS. It's not part of the API and it moc shouldn't be
        called on it.

        * Api/headers.pri:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Remove files not present anymore from the WEBKIT_API_HEADERS variable.

        * Api/headers.pri:

2009-01-08  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon Hausmann.

        Don't set the minimumFontSize and minimumLogicalFontSize as these are
        just for accessibility and should be left up to the client application.

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2009-01-08  Kavindra Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon Hausmann.

        Small fixes to the API documentation, missing 4.5 tags and
        undocumented parameters.

        * Api/qwebhistory.cpp:
        * Api/qwebpage.cpp:
        * Api/qwebsettings.cpp:

2009-01-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add Qt API to QWebHitTestResult::isScrollBar method

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::isScrollBar):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):

2009-01-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add Qt API for QWebFrame::scrollBarGeometry method

        * Api/qwebframe.cpp:
        (QWebFrame::scrollBarGeometry):
        * Api/qwebframe.h:

2009-01-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Fix unused variable warnings

        * tests/qwebpage/tst_qwebpage.cpp:
        (TestPage::createWindow):

2009-01-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Qt build fix after r39670.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2009-01-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Holger Freyther.

        Allow building QtWebKit statically (within Qt).

        http://trolltech.com/developer/task-tracker/index_html?id=211273&method=entry

        * Api/qwebkitglobal.h:

2009-01-06  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon Hausmann.

        Update the documentation to reflect when these API changes will land in
        upstream Qt

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add Qt API for QWebFrame::contentsSizeChanged signal

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::contentsSizeChanged):
        * WebCoreSupport/ChromeClientQt.h:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Fixes QWebFrame::setScrollBarPolicy(..) to actually work.  Also happens
        to fix 192 layout tests that were previously failing for Qt.

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarPolicy):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2009-01-04  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add new API to QWebHitTestResult to return a rect for the smallest enclosing
        block element of the hit test

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::enclosingBlock):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-12-30  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Make the qt port build and work with the new fixedLayoutSize feature

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::fixedLayoutSize):
        (QWebPage::setFixedLayoutSize):
        (QWebPage::useFixedLayout):
        (QWebPage::setUseFixedLayout):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2008-12-19  Jade Han <jade.han@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Allow conversion of JavaScript Number and Boolean types to Qt types

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

        * tests/qwebframe/tst_qwebframe.cpp:
        (MyQObject::myInvokableWithBoolArg):

2008-12-18  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        When Web Inspector is launched without an associated node,
        call show() instead of inspect().

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-12-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - stub out FrameLoaderClient::shouldUseCredentialStorage().

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::shouldUseCredentialStorage):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-12-18  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        Stub out FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFirstVisuallyNonEmptyLayout):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-12-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Added support for unload event counting to the Qt DRT.

        * Api/qwebpage.cpp:
        (qt_drt_run): Moved function here.
        * Api/qwebpage_p.h: Moved drt run boolean here.
        * WebCoreSupport/EditorClientQt.cpp: Moved drt run boolean.
        (WebCore::EditorClientQt::shouldShowDeleteInterface): Use the new drt
        run variable.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad): Add DRT
        output for unload event handler counting.

2008-12-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Change the order of sub frame initialisation to avoid crashes

        Add the newly created frame to the FrameTree before calling
        WebCore::Frame::init to not segfault on
        LayoutTests/fast/loader/frame-creation-removal.html.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2008-12-15  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Implement setJavaScriptProfilingEnabled in the Qt DRT to pass fast/profiler.

        * Api/qwebframe.cpp:
        (qt_drt_setJavaScriptProfilingEnabled):

2008-12-12  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Fix pressing return/enter not triggering any action on web sites
        that define event handlers, such as the JS console in the web
        inspector.

        Process the key events in the DOM first and if not handled map them
        to editor actions.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::editorActionForKeyEvent): Made a class method.
        (QWebPagePrivate::keyPressEvent): Pass the key event first to the DOM.
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent): Map the key event to
        actions and trigger them.

2008-12-12  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Create the plugin widget even though the web page has no associated
        view. This prevents the plugin to be uselessly constructed more than once.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::createViewlessPlugin):

2008-12-11  Enrico Ros  <enrico.ros@m31.com>

        Reviewed by Simon Hausmann.

        Fix the broken focus behavior that happened when QWebPage lost
        focus to a popup menu.

        The previous code didn't notify the QWebPage at all when the
        focus was back in (breaking focus rects, caret blinking, ...).
        By the way when a popup is show, 2 FocusOut events are delivered
        to the QWebPage, but this doesn't seem to hurt.

        Added a test to check popup opening, closing a lineedit blinks.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):
        * tests/qwebframe/tst_qwebframe.cpp:
        (tst_QWebFrame::):

2008-12-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        When the web page is navigated away, delete the instance
        of the native plugin.

        http://trolltech.com/developer/task-tracker/index_html?id=214946&method=entry

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):
        * tests/qwebpage/tst_qwebpage.cpp:
        (PluginTrackedPage::PluginTrackedPage):
        (PluginTrackedPage::createPlugin):
        (tst_QWebPage::destroyPlugin):

2008-12-11  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Allow applications to save and restore their state between loads.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::restoreViewState):
        (WebCore::FrameLoaderClientQt::saveViewStateToItem):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::modified):

2008-12-08  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Darin Adler and Holger Freyther.

        Make Widget::frameRectsChanged() and overrides non-const

        This will hopefully allow us to get rid of some of the mutables in
        the classes that react to the callback by changing their own state.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-12-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        API changes discussed with Simon Hausmann, Tor Arne
        Vestbø, Ariya Hidayat...

        * Api/qwebdatabase.cpp:
        (QWebDatabase::fileName):
        (QWebDatabase::removeDatabase):
        * Api/qwebdatabase.h:
        * Api/qwebframe.cpp:
        (QWebFrame::scroll):
        (QWebFrame::scrollPosition):
        (QWebFrame::setScrollPosition):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::setContentEditable):
        (QWebPage::isContentEditable):
        (QWebPage::extension):
        * Api/qwebpage.h:
        * Api/qwebsecurityorigin.cpp:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:
        (MainWindow::setEditable):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::exceededDatabaseQuota):
        (WebCore::ChromeClientQt::runOpenPanel):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::isEditable):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::database):

2008-12-09  Balazs Kelemen  <Kelemen.Balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Extended QtLauncher so now it can load pages from an url list
        one by one. This can be useful for testing purposes (eq. leak hunting).
        The -r option activates this feature.

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

        * QtLauncher/main.cpp:
        (MainWindow::webPage):
        Just a coding style repairing (* written with no space between the return type name)
        (MainWindow::webView):
        I need the webView to connect it with the URLLoader object.
        (URLLoader::URLLoader):
        (URLLoader::loadNext):
        (URLLoader::init):
        (URLLoader::getUrl):
        (main):

2008-12-10  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, added const to Node* parameter after change
        in signature.

        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::formStateDidChange):

2008-12-09  Brett Wilson  <brettw@chromium.org>

        Reviewed by Dave Hyatt.

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

        Add a callback on ChromeClient that the state of form elements on
        the page has changed. This is to allow clients implementing session
        saving to know when the current state is dirty.

        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::formStateDidChange):

2008-12-09  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Fix the documentation of the localStorageDatabasePath setters/getters.

        * Api/qwebsettings.cpp:

2008-12-08  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Multiple files support for the file chooser.

        * Api/qwebpage.cpp:
        (QWebPage::chooseFiles):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runOpenPanel):

2008-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

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

        Renderer::caretRect() is now localCaretRect(), which needs
        converting to absolute coordinates (taking transforms into account).

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):

2008-12-03  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Allow passing jsNull and jsUndefined to Qt plugins

        Currently limited to functions with QString and QVariant arguments,
        and properties of these types. Both jsNull and jsUndefined ends up
        as default-constructed QStrings and QVariants, which means you can
        check for isEmpty() and isValid() in the native plugin code.

        Based on patches by Jade Han <jade.han@nokia.com>

        * tests/qwebframe/tst_qwebframe.cpp:

2008-12-02  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Tor Arne Vestbø.

        Initial API documentation for QWebDatabase, QWebSecurityOrigin and
        QWebFrame::securityOrigin().

        * Api/qwebdatabase.cpp:
        * Api/qwebframe.cpp:
        * Api/qwebsecurityorigin.cpp:

2008-11-27  Kent Hansen  <khansen@trolltech.com>

        Reviewed by Simon Hausmann.

        Added auto tests for making JavaScript bindings for Qt plugin widgets
        work again.

        * tests/qwebpage/tst_qwebpage.cpp:
        (PluginPage::PluginPage):
        (PluginPage::CallInfo::CallInfo):
        (PluginPage::createPlugin):
        (tst_QWebPage::createPlugin):

2008-11-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix. Use WebCore::Frame::loader instead of QWebFrame

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistory):

2008-11-24  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        http://bugs.webkit.org/show_bug.cgi?id=15643

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::isSelectTrailingWhitespaceEnabled):
        * WebCoreSupport/EditorClientQt.h:

2008-11-24  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22470
          remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistory): Get the URL from the
        DocumentLoader.
        * WebCoreSupport/FrameLoaderClientQt.h: Remove argument.

2008-11-24  Darin Fisher  <darin@chromium.org>

        Fix bustage.

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

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2008-11-20  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2008-11-19  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        https://bugs.webkit.org/show_bug.cgi?id=22373
        Ports busted by addition of ScriptValue.{h,cpp}

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2008-11-19  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        https://bugs.webkit.org/show_bug.cgi?id=22373
        Ports busted by addition of ScriptValue.{h,cpp}

        * Api/qwebframe.cpp:

2008-11-19  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, remove file referenced in the qrc file that does not
        exist and is not needed.

        * tests/qwebframe/qwebframe.qrc:

2008-11-18  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        Missing file in new unit test for QWebFrame (r38493).

        * tests/qwebframe/qwebframe.pro:
        * tests/qwebframe/qwebframe.qrc: Added.

2008-11-18  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Make sure QWidget based plugins are invisible until placed into the layout

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-11-18  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        React properly to frame rect changes for QWidget based plugins

        We now set the geometry of the QWidget in frameRectsChanged,
        intead of setFrameRect, which means we pick up the changes to
        the frame rect when scrolling. We also set a mask on the
        widget to keep it from painting over scrollbars and the like

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-11-18  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        Fix crash when trying to pick a file using the file chooser.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runOpenPanel):

2008-11-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Attempt to share transitionToCommittedForNewPage of FrameLoaderClient with the different ports

        After Hyatt's work on Widget and ScrollView there is little difference
        between the implementation of Qt, Gtk+ and Win. In fact any kind of
        difference is mostly a bug. Alp has fixed two of such errors for the Gtk+
        port and the Qt port has at least one of them left.

        The only difference between the implementations is in getting the the
        IntSize for the new FrameView, the background color to be applied and
        eventually some post processing.

        Unify the implementations by providing a static helper function that
        takes a Frame, IntSize, color and transparency bit and calling it from
        the Gtk+, the Qt and the Windows port.

        * Api/qwebframe.cpp:
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPage::setPalette):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Try to fix qt build.

        * Api/qwebframe.cpp:

2008-11-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø and Simon Hausmann.

        Fix regression when loading resources from Qt resource system using qrc:/.

        Added a unit test to catch future regression.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * tests/qwebframe/image.png: Added.
        * tests/qwebframe/tst_qwebframe.cpp:

2008-11-16  Darin Adler  <darin@apple.com>

        - try to fix build

        * Api/qwebhistory.cpp: Added include of "KURL.h".

2008-10-24  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Added some basic unit tests for the public database API.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::initTestCase):
        (tst_QWebPage::cleanupTestCase):
        (tst_QWebPage::database):

2008-11-14  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, add missing export macros for the new classes.

        * Api/qwebdatabase.h:
        * Api/qwebsecurityorigin.h:

2008-10-24  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Adding public API to provide access to the security origin
        (QWebSecurityOrigin) and the databases used for the offline
        storage (QWebDatabase).

        In addition QWebSettings gains configuration functions for
        enabling/disabling offline storage, web application cache
        and DOM local storage.

        This commits lands the core feature(s), the unit tests and the
        documentation are going to follow in the comming days/weeks.

        Note: The API is not frozen yet.

        * Api/headers.pri:
        * Api/qwebdatabase.cpp: Added.
        (QWebDatabase::QWebDatabase):
        (QWebDatabase::operator=):
        (QWebDatabase::name):
        (QWebDatabase::displayName):
        (QWebDatabase::expectedSize):
        (QWebDatabase::size):
        (QWebDatabase::absoluteFilePath):
        (QWebDatabase::origin):
        (QWebDatabase::remove):
        (QWebDatabase::~QWebDatabase):
        * Api/qwebdatabase.h: Added.
        * Api/qwebdatabase_p.h: Added.
        * Api/qwebframe.cpp:
        (QWebFrame::securityOrigin):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebsecurityorigin.cpp: Added.
        (QWebSecurityOrigin::QWebSecurityOrigin):
        (QWebSecurityOrigin::operator=):
        (QWebSecurityOrigin::scheme):
        (QWebSecurityOrigin::host):
        (QWebSecurityOrigin::port):
        (QWebSecurityOrigin::databaseUsage):
        (QWebSecurityOrigin::databaseQuota):
        (QWebSecurityOrigin::setDatabaseQuota):
        (QWebSecurityOrigin::~QWebSecurityOrigin):
        (QWebSecurityOrigin::allOrigins):
        (QWebSecurityOrigin::databases):
        * Api/qwebsecurityorigin.h: Added.
        * Api/qwebsecurityorigin_p.h: Added.
        (QWebSecurityOriginPrivate::QWebSecurityOriginPrivate):
        (QWebSecurityOriginPrivate::~QWebSecurityOriginPrivate):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::setOfflineStoragePath):
        (QWebSettings::offlineStoragePath):
        (QWebSettings::setOfflineStorageDefaultQuota):
        (QWebSettings::offlineStorageDefaultQuota):
        (QWebSettings::setOfflineWebApplicationCachePath):
        (QWebSettings::offlineWebApplicationCachePath):
        (QWebSettings::setLocalStorageDatabasePath):
        (QWebSettings::localStorageDatabasePath):
        * Api/qwebsettings.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::exceededDatabaseQuota):

2008-11-12  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        Mention the color role change (r38331) in the API doc.

        * Api/qwebpage.cpp:

2008-11-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø and Simon Hausmann.

        Use QPalette::Base (instead of QPalette::Background) for the page
        background.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::updateBackground):
        * Api/qwebview.cpp:
        (QWebView::QWebView):

2008-11-11  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Remove pointless dependencies on the now-deleted kjs directory.

        * WebKit_pch.h:

2008-11-10  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        To fit Qt API, scroll offset is a QPoint instead of a QSize.

        * Api/qwebframe.cpp:
        (QWebFrame::scrollOffset):
        (QWebFrame::setScrollOffset):
        * Api/qwebframe.h:

2008-11-10  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Fixed qdoc warnings by supplying function documentation.

        * Api/qwebframe.cpp:
        * Api/qwebview.cpp:

2008-11-10  Tobias Koenig <tobias.koenig@trolltech.com>

        Reviewed by Simon Hausmann.

        Removed old and stale prf file that breaks the MingW build.

        * Api/qtwebkit.prf: Removed.

2008-11-10  Kavindra Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon Hausmann.

        Clarify QWebFrame/View::setHTML docs with regards to relative URLs

        * Api/qwebframe.cpp:
        * Api/qwebview.cpp:

2008-11-10  Joerg Bornemann  <joerg.bornemann@nokia.com>

        Reviewed by Simon Hausmann

        Don't define _CRT_RAND_S on Windows CE in the precompiled
        header, to fix the CE build.

        * WebKit_pch.h:

2008-11-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø and Simon Hausmann.

        Added an option to allow printing the background color and images.
        Mostly reworked from a patch by Holger.
        This setting is enabled by default.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2008-11-06  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Added a unit tests for QWebFrame::metaData().

        * tests/qwebframe/tst_qwebframe.cpp:

2008-11-06  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Improved documentation for QWebFrame::metaData().

        * Api/qwebframe.cpp:

2008-11-05  Sriram Yadavalli <sriram.yadavalli@nokia.com>

        Reviewed by Simon Hausmann.

        Added QWebFrame::metaData() to provide a way in the public API
        to retrieve the values of the <meta> tags.

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

        * Api/qwebframe.cpp:
        (QWebFrame::metaData):
        * Api/qwebframe.h:

2008-10-24  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Add userData() and setUserData() to QWebHistoryItem.
        Add setMaximumItemCount() and maximumItemCount() to QWebHistory.
        Add currentItemIndex() to QWebHistory.

        See also https://bugs.webkit.org/show_bug.cgi?id=21864

        Small cleanup by Simon (docs and forward declaration of QWebHistoryItem in qwebframe.h)

        * Api/qwebframe.h:
        * Api/qwebhistory.cpp:
        (QWebHistoryItem::userData):
        (QWebHistoryItem::setUserData):
        (QWebHistory::currentItemIndex):
        (QWebHistory::maximumItemCount):
        (QWebHistory::setMaximumItemCount):
        * Api/qwebhistory.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::saveViewStateToItem):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::modified):

2008-11-03  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Move more files into the runtime subdirectory of JavaScriptCore.

        * Api/qwebpage.cpp:

2008-10-25  Jade Han  <jade.han@nokia.com>

        Reviewed by Anders. 

        Enable custom properties for Qt runtime objects in QtWebKit

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

        * tests/qwebframe/tst_qwebframe.cpp:

2008-10-24  Sam Weinig  <sam@webkit.org>

        Another Qt build fix.

        * WebCoreSupport/ChromeClientQt.cpp:

2008-10-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=21759
        Layering violation: FileChooser should not depend on Document/Frame/Page

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runOpenPanel):
        * WebCoreSupport/ChromeClientQt.h:

2008-10-24  Timothy Hatcher  <timothy@apple.com>

        Stub out new InspectorClient methods.

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

        Reviewed by Darin Adler.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::populateSetting): Not implemented.
        (WebCore::InspectorClientQt::storeSetting): Ditto.
        (WebCore::InspectorClientQt::removeSetting): Ditto.
        * WebCoreSupport/InspectorClientQt.h:

2008-10-24  Darin Adler  <darin@apple.com>

        - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript): Use JSValue* instead of JSValuePtr.

2008-10-23  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Invalid history entries could cause a crash in QT Webkit

        * Api/qwebhistory.cpp:
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::url):
        (QWebHistoryItem::title):
        (QWebHistoryItem::lastVisited):
        (QWebHistoryItem::icon):
        (QWebHistoryItem::isValid):
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        (QWebHistoryItemPrivate::QWebHistoryItemPrivate):
        (QWebHistoryItemPrivate::~QWebHistoryItemPrivate):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::modified):

2008-10-22  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        emit scrollRequested unconditionally when scrolling.

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

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scroll):

2008-10-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne.

        Fix handling of mouse events when embedding QWebView into the
        QGraphicsView.

        QWebPage accepts or ignores events to indicate whether the web page
        handled the event. However for QWebView to behave like a good widget
        it should always accept the mouse events to indicate that it handled
        them and that they should not be subject to event propagation.

        The graphics view relies on acceptance of the initial mouse click to
        make the embedded widget the focus item.

        * Api/qwebview.cpp:
        (QWebView::mouseMoveEvent):
        (QWebView::mousePressEvent):
        (QWebView::mouseDoubleClickEvent):
        (QWebView::mouseReleaseEvent):
        (QWebView::contextMenuEvent):
        (QWebView::wheelEvent):

2008-10-22  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        For public API, use the term boundingRect instead of boundingBox.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::boundingRect):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-06-03  Siraj Razick  <siraj.razick@collabora.co.uk>

        Reviewed by Simon Hausmann.

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

        Expose boundingBox value in QWebHitTestResult

        Add API function QRect QWebHitResult::boundingBox() const

        API docs by Ariya.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::boundingBox):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-10-21  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        emit repaintRequested unconditionally when repaint is requested.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):

2008-10-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove FrameLoaderClient::detachedFromParent4.  It is no longer used by any port.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Remove most uses of JSValue, which will be removed in a future patch.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript): Use JSValuePtr.

2008-10-14  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Clip painter to dirty rect before passing on to WebKit
        
        This was previously done in ScrollViewQt, but after the
        refactoring of ScrollView we need to do it in QWebFrame
        instead, similar to Safari/Win.

        * Api/qwebframe.cpp:
        (QWebFrame::render):

2008-10-08  Matthias Ettrich <ettrich@nokia.com>

        Reviewed by Simon.

        Make QWebView ignore focus changes with PopupFocusReason to avoid
        massive updates when menus open and close.

        * Api/qwebview.cpp:
        (QWebView::focusInEvent):
        (QWebView::focusOutEvent):

2008-10-08  Kavindra Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Fixed a qdoc warning and adjusted some spacing

        * Api/qwebframe.cpp:

2008-10-08  Rhys Weatherley  <rhys.weatherley@nokia.com>

        Reviewed by Simon.

        Compile for platforms without context menus.

        * Api/qwebpage.cpp:
        (QWebPage::createStandardContextMenu):

2008-10-08  André Pönitz  <apoenitz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt namespaces.

        * WebCoreSupport/EditCommandQt.h:

2008-10-07  Tor Arne Vestbø  <tavestbo@trolltech.com>

        QtWebKit build fix after changes to FrameLoaderClient.h in r37371

        * WebCoreSupport/FrameLoaderClientQt.h:

2008-10-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        [qt] Build fix after Scrollbar.h and Widget.h changes.

        * Api/qwebpage.cpp:
        (QWebPage::swallowContextMenuEvent):

2008-10-06  David Hyatt  <hyatt@apple.com>

        Enable viewless Mac WebKit to paint some basic pages.
        
        Reviewed by Sam Weinig

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2008-10-03  David Hyatt  <hyatt@apple.com>

        Fix scroll method on Qt.  The delta was supposed to use .width()/.height() and not .x()/.y().

        Fix the QtPluginWidget to do an invalidate properly.

        Reviewed by ggaren

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scroll):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-10-03  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Build fix. Remove addToDirtyRegion from the header file.

        * WebCoreSupport/ChromeClientQt.h:

2008-10-03  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Build fix.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scroll):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-10-03  David Hyatt  <hyatt@apple.com>

        Remove addToDirtyRegion.
        
        Reviewed by Oliver Hunt

        * WebCoreSupport/ChromeClientQt.cpp:

2008-10-02  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21314
        
        Make scrollBackingStore cross-platform.

        Reviewed by Sam Weinig

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):
        (WebCore::ChromeClientQt::scroll):
        * WebCoreSupport/ChromeClientQt.h:

2008-10-01  David Hyatt  <hyatt@apple.com>
        
        https://bugs.webkit.org/show_bug.cgi?id=21282
        
        Make contentsToScreen/screenToContents cross-platform.  Only implemented by Mac/Win right now.
        
        Reviewed by Adam Roben

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::windowToScreen):
        (WebCore::ChromeClientQt::screenToWindow):
        * WebCoreSupport/ChromeClientQt.h:

2008-09-30  Dave Hyatt  <hyatt@apple.com>

        http://bugs.webkit.org/show_bug.cgi?id=21250
        
        Rename updateContents to repaintContentRectangle and make it cross-platform by always sending
        repaints up through the ChromeClient.

        Reviewed by Darin Adler

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):
        * WebCoreSupport/ChromeClientQt.h:

2008-09-29  Gunnar Sletta  <gunnar@trolltech.com>

        Reviewed by Simon

        Compile on windows using MSVC 2005

        For the PCH We need to define _WIN32_WINNT and include windows.h early on,
        otherwise we'll miss several functions.

        * WebKit_pch.h:

2008-09-29  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon.

        Changed copyright from Trolltech ASA to Nokia.
        
        Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008.
        

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebhistory.cpp:
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        * Api/qwebkitglobal.h:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.cpp:
        * Api/qwebpluginfactory.h:
        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:
        * Plugins/ICOHandler.cpp:
        * QtLauncher/main.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        * WebCoreSupport/InspectorClientQt.h:
        * tests/qwebframe/tst_qwebframe.cpp:
        * tests/qwebpage/tst_qwebpage.cpp:

2008-09-28  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by David Hyatt.

        Ensure the mainThreadIdentifier is set as well as other bits and pieces of
        the threading machinery, by calling JSC::initializeThreading().

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-09-27  David Hyatt  <hyatt@apple.com>

        Forgot to land renaming changes in WebKit.

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        * Api/qwebpage.cpp:
        (QWebPage::viewportSize):
        (QWebPage::setViewportSize):

2008-09-27  Simon Hausmann  <hausmann@webkit.org>

        Qt build fix - use frameRect instead of frameGeometry, adapt
        to renamed scrollbar frameview methods.

        * Api/qwebpage.cpp:
        (QWebPage::viewportSize):
        (QWebPage::setViewportSize):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2008-09-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Qt build fix - rename frameGeometry to frameRect per r36995.

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):

2008-09-26  Ariya Hidayat  <ahidayat@trolltech.com>

        Reviewed by Simon.

        Fixed potential crash when deleting QWebView instance.

        When deleting the view, sets the page's view to NULL.
        The reason is that the page is smart and its destructor might lead to a call
        that operates on a view (which is in the process of being deleted).

        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::~QWebView):

2008-09-26  Ariya Hidayat  <ahidayat@trolltech.com>

        Reviewed by Simon.

        Fixed using modifiers to type special symbols (e.g '@','$') does not work on Mac OS X.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-09-26  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fix compilation with QT_NO_MESSAGEBOX

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):

2008-09-23  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Remove deprecated JS Qt bindings object call/construct code and fix autotests

        * tests/qwebframe/tst_qwebframe.cpp:

2008-09-16  Alp Toker  <alp@nuanti.com>

        Prospective Qt build fix. ScrollBar.h -> Scrollbar.h

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:

2008-09-15  Eli Fidler  <eli@staikos.net>

        Reviewed by Simon.

        Yahoo assumes non-RFC compliant HTTP redirect behaviour. QtWebKit is (more)
        compliant, so broken. I think the Yahoo-assumed behaviour is real-world standard.

        Basically, Yahoo's login procedure for flickr looks like this:
        1. load flickr.com, click "sign in"
        2. this is a Yahoo page with a form
        (https://login.yahoo.com/config/login?.src=flickr...)
        when you click the "Sign In" button, the form submits to a yahoo.com POST URL
        3. The POST returns with a 302 (redirect) to another yahoo.com URL
        4. If you POST the redirected Location:, it all breaks. Yahoo assumes you will
        convert the method to GET, which works fine but is definitely not
        RFC-compliant. It would be compliant for 303, and the RFC says that many
        implementations treat 302 and 303 the same way (for HTTP/1.0 compliance), but
        converting to GET is explicitly wrong for 302.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Make QtInstance::create() private and fix caching

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-09-11  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon.

        Prevent leaking pages and frames in QWebKit autotest

        * tests/qwebpage/tst_qwebpage.cpp:

2008-09-11  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Fix QtWebKit autotest

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::userStyleSheet):

2008-09-09  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon.

        Added missing WebCore prefix to ResourceRequest

        This is needed for Windows/CE compilation where there is a conflict
        with a global ResourceRequest type. Elsewhere in this file ResourceRequest
        is also prefixed with WebCore::

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20704: Replace the KJS namespace
        <https://bugs.webkit.org/show_bug.cgi?id=20704>

        Rename the KJS namespace to JSC.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):
        (QWebFrame::evaluateJavaScript):

2008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Fix the QtWebKit build to match changes in r36016

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Re-enable support for user stylesheets in QtWebKit
        
        QtWebKit now follows the FRAME_LOADS_USER_STYLESHEET
        code path, which allows us to keep API support for
        loading user style sheets from remote URLs.
        
        As part of the change UserStyleSheetLoader.cpp/h was
        moved from WebCore/loader/mac to WebCore/loader.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::userStyleSheet):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric Seidel.

        [janitor/qt] Start replacing port specific getters with the generic native getter
        To get the native presentation of an image we currently have platform
        specific #ifdef's and a generic getter using NativeImagePtr. This patch
        extends this to the ImageBuffer and updates the Qt platform to get rid
        of the special #ifdefs.

        https://bugs.webkit.org/attachment.cgi?id=22861

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        * Api/qwebhistory.cpp:
        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Catch up with the introduction of PageGroup in r30840. Enable tracking of
        visited links, enable this in QWebPage next to the other WebCore init call.
        Calling this more than once is no issue and a cheap operation, we also do not
        reset the state. When clearing the history of a page, clear the link state.

        * Api/qwebhistory.cpp:
        (QWebHistory::clear):
        * Api/qwebhistoryinterface.cpp:
        (QWebHistoryInterface::setDefaultInterface):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Revert revision 34348 which removed the global historyContains() function.

        This function was needed to implement the public API of QWebHistoryInterface
        and will be used again in the near future.

        * Api/qwebhistoryinterface.cpp:
        (WebCore::historyContains):

2008-08-27  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Eric Seidel.

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

        Add QWebPage::contentsChanged() signal to notify of content changes.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedContents):

2008-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/6134133> - Crash when loading large movie as a standalone document

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::pluginWillHandleLoadError): Stubbed for now
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-08-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [inspector] Emit signals from attachWindow and detachWindow in the Qt platform
        Allow the user of the API to honor the attachWindow and detachWindow
        requests and attach the QWebPage/QWebView wherever it is wanted. This needs
        some more API in QWebPage to be properly exposed.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::attachWindow):
        (WebCore::InspectorClientQt::detachWindow):
        * WebCoreSupport/InspectorClientQt.h:

2008-08-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Bring back shared JSGlobalData and implicit locking, because too many clients rely on it.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_UNDOCOMMAND/STACK
        

        * Api/qwebpage.cpp:
        (SetCursorEvent::SetCursorEvent):
        (QWebPagePrivate::createContextMenu):
        (QWebPage::action):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditCommandQt.cpp:
        (EditCommandQt::EditCommandQt):
        * WebCoreSupport/EditCommandQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (dumpPath):
        (WebCore::EditorClientQt::shouldInsertText):
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::isEditable):
        (WebCore::EditorClientQt::registerCommandForUndo):
        (WebCore::EditorClientQt::clearUndoRedoOperations):
        (WebCore::EditorClientQt::canUndo):
        (WebCore::EditorClientQt::canRedo):
        (WebCore::EditorClientQt::undo):
        (WebCore::EditorClientQt::redo):
        (WebCore::EditorClientQt::shouldInsertNode):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_STYLE_STYLESHEET
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_SHORTCUT
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::dragMoveEvent):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes:    compile with QT_NO_CONTEXTMENU
        

        * Api/qwebpage.cpp:
        (editorCommandForWebActions):
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::setEditable):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_WHEELEVENT
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_PRINTER
        

        * Api/qwebframe.cpp:
        (QWebFrame::print):
        * Api/qwebframe.h:

2008-08-15  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Doc: Added documentation for default property values.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):
        (QWebPage::triggerAction):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::action):
        * Api/qwebview.cpp:

2008-08-15  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Doc: Renamed snippets that appear in the code directory.
        

        * Api/qwebview.cpp:
        (QWebView::event):
        (QWebView::print):

2008-08-12  Timothy Hatcher  <timothy@apple.com>

        Add a stub for InspectorClient::setAttachedWindowHeight.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::setAttachedWindowHeight):
        Call notImplemented().
        * WebCoreSupport/InspectorClientQt.h:

2008-08-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Use full-page zoom in QtLauncher.

        * QtLauncher/main.cpp:
        (MainWindow::zoomIn):
        (MainWindow::zoomOut):
        (MainWindow::resetZoom):
        (MainWindow::setupUI):

2008-08-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix linking with QtWebKit.

        * Api/qwebframe.h: remove non-existing function/property.

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Based on patch by Siraj razick <siraj.razick@collabora.co.uk>

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

        Added functions to get/set the zoom factor.

        Added a QWebFrame/QWebView::zoomFactor as well as a boolean
        ZoomTextOnly attribute in QWebSettings.

        * Api/qwebframe.cpp:
        (QWebFrame::setZoomFactor):
        (QWebFrame::zoomFactor):
        * Api/qwebframe.h:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        (QWebView::setZoomFactor):
        (QWebView::zoomFactor):
        * Api/qwebview.h:

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fix QWebFrame::setHtml() not setting the new contents immediately.

        Added a setter to the DocumentLoader to toggle the deferred loading of the main
        resource when it comes from substitute data.

        Disable deferred loading of the main resource when we have valid substitute data,
        as used by QWebFrame::setHtml.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::download):

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Holger.

        Fix QWebPage::isModified().

        isModified() would return true after loading a new page or it would continue to
        return true after undoing modifications. Fix this by eliminating the
        QWebPagePrivate::modified variable and use the undoStack's canUndo() property
        instead.

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

        * Api/qwebpage.cpp:
        (QWebPage::action):
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedContents):

2008-08-13  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Updated docs with the signal emission behavior of urlChanged()

        * Api/qwebframe.cpp:

2008-08-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix Ctrl+Y to work again when editing text in contextEditable mode.

        This fixes regression in LayoutTests/editing/pasteboard/emacs-cntl-y-001.html

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-08-13  Thiago Macieira  <tjmaciei@trolltech.com>

        Reviewed by Simon.

        Fix encoding of [ and ] in the host part of the URL

        Until QUrl is fixed (making QUrl's tolerant parser more tolerant), we have to
        add this workaround to the QUrl <> WebCore::KURL conversion operator so that it
        doesn't encode [ and ] when they are found in the host part. That is, the
        following URL:
        http://[::1]/
        is valid and should not be reencoded to:
        http://%5b::1%5d/

        This change adds the automatic test for it.

        * tests/qwebframe/tst_qwebframe.cpp:

2008-08-12  Urs Wolfer  <uwolfer@kde.org>

        Reviewed by Simon.

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

        Fix crash in QWebPage in case contextMenuEvent has been overwritten
        because context menu has the view as parent and thus is deleted too early.

        Add testcase for this crash.

        * Api/qwebpage_p.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::contextMenuCrash):

2008-08-07  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Lars.

        Added API tests for QWebPage/QWebFrame based on QTestLib.

        * tests/qwebframe/qwebframe.pro: Added.
        * tests/qwebframe/tst_qwebframe.cpp: Added.
        * tests/qwebpage/qwebpage.pro: Added.
        * tests/qwebpage/tst_qwebpage.cpp: Added.
        * tests/tests.pro: Added.

2008-08-06  Benjamin C Meyer  <ben@meyerhome.net>

        Reviewed by Simon.

        During the drag operation only accept the event if the action is not ignore action.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):

2008-08-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Fix the Qt build due to recent ScriptController refactoring.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-08-05  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Move event handling of the return-key from EditorClientQt to QWebPage.
        
        https://bugs.webkit.org/show_bug.cgi?id=20191
        
        This is a first step in refactoring the big switch block
        in EditorClientQt::handleKeyboardEvent to using WebActions
        instead.
        
        The new logic uses two new StandardKeys from QKeySequence:
        
        - InsertParagraphSeparator
        - InsertLineSeparator
        
        Which translate to the commands InsertNewline and InsertLineBreak
        respectivly. On Windows/X11 pressing the shift modifier will invoke
        the latter action. For Mac this is triggered by pressing the meta
        modifier (Ctrl).
        
        Initial patch by: Erik Bunce

        * Api/qwebpage.cpp:
        (editorActionForKeyEvent):
        * Api/qwebpage.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-08-04  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

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

        Add updateAction() support to ToggleBold, ToggleItalic, and ToggleUnderline.
        Add lookup table for mapping web actions to editor commands.

        * Api/qwebpage.cpp:
        (editorCommandForWebActions):
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::triggerAction):
        (QWebPage::setEditable):

2008-08-03  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        A bunch of improvements to the QtLauncher.

        Among others:
        - Unify and unclutter the toolbar, use menu for addition actions
        - Simplify URL edit, just use QLineEdit (no fancy close button etc)
        - Guess the URL from the command line so now we can run ./QtLauncher www.google.com
        - Shortcut keys for most actions
        - Simple autocomplete for the URL edit
        - Actions for zooming, New Window and Close Window
        - Show Format menu only when the content is set to editable

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::webPage):
        (MainWindow::changeLocation):
        (MainWindow::loadFinished):
        (MainWindow::showLinkHover):
        (MainWindow::newWindow):
        (MainWindow::zoomIn):
        (MainWindow::zoomOut):
        (MainWindow::resetZoom):
        (MainWindow::print):
        (MainWindow::setEditable):
        (MainWindow::dumpHtml):
        (MainWindow::setupUI):
        (main):

2008-08-04  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

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

        Allow Copy key sequence to work in non-editable areas.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2008-07-31  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

        Make sure edit actions get updated when the contents change.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedContents):

2008-07-31  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

        Add simple edit test abilities to QtLauncher.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::setEditable):
        (MainWindow::dumpHtml):

2008-07-31  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Maciej.

        Eliminate JSLock (it was already disabled, removing the stub implementaion and all
        call sites now).

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-07-27  David Kilzer  <ddkilzer@apple.com>

        Fix Qt build failure.

        * Api/qwebframe.h:
        (QWebFrame::setScrollOffset): Make argument const.

2008-07-26  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=20010
        [Qt] Add API access to scrolling

        * Api/qwebframe.cpp: Added access to a frame scroll offset.
        (QWebFrame::scroll):
        (QWebFrame::scrollOffset):
        (QWebFrame::setScrollOffset):
        * Api/qwebframe.h:

2008-07-26  Daniel Jalkut  <jalkut@red-sweater.com>

        Build fix.  Adjust to updated WebCore FrameLoader method names & signatures.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2008-07-25  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon.

        Compile with QT_NO_PRINTER.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2008-07-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Don't insert text on keyDown event in EditorClientQt.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-07-04  Benjamin C Meyer  <ben@meyerhome.net>

        Reviewed by Simon.

        Update the webkit version in the QtWebKit useragent string to match trunk

        * Api/qwebpage.cpp:

2008-07-02  Simon Hausmann  <hausmann@webkit.org>

        Build fix.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction): The signature of setBaseWritingDirection
        changed to take an enum instead of a string.

2008-07-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Disable JSLock for per-thread contexts.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):
        Pass a parameter (false) to JSLock to indicate that WebKit doesn't need locking.
        Include JSLock.h, as it is no longer brought in implicitly.

2008-07-01  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Don't show the tooltip instantly in the QtLauncher.
        
        Let the QWebView handle tooltips by itself, so we get
        the expected delay as everywhere else.

        * QtLauncher/main.cpp:

2008-06-30  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Niko.

        Removed the obsolete and unmaintained WebKitPart. The integration of
        QtWebKit into KDE is now done in the webkitkde component inside KDE.

        * WebKitPart/WebKitFactory.cpp: Removed.
        * WebKitPart/WebKitFactory.h: Removed.
        * WebKitPart/WebKitPart.cpp: Removed.
        * WebKitPart/WebKitPart.desktop: Removed.
        * WebKitPart/WebKitPart.h: Removed.
        * WebKitPart/WebKitPart.rc: Removed.
        * WebKitPart/WebKitPartBrowser.rc: Removed.
        * WebKitPart/WebKitPartBrowserExtension.cpp: Removed.
        * WebKitPart/WebKitPartBrowserExtension.h: Removed.
        * WebKitPart/WebKitPartClient.cpp: Removed.
        * WebKitPart/WebKitPartClient.h: Removed.
        * WebKitPart/WebKitPartInterface.cpp: Removed.
        * WebKitPart/WebKitPartInterface.h: Removed.
        * WebKitPart/org.kde.WebKitPart.xml: Removed.

2008-06-24  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, added missing include for RuntimeObjectImp.

        * Api/qwebframe.cpp:

2008-06-23  Benjamin C Meyer  <ben@meyerhome.net>

        Reviewed by Simon.

        Add function to retrieve the standard context menu

2008-06-20  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=19082
        [Qt] Full-page plugins not activated

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::committedLoad): Re-check if there's a
        plugin present, as it can be created during the function.

2008-06-20  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=19082
        [Qt] Full-page plugins not activated

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMEType): Return true if the
        MIME type is supported by a plugin.

2008-06-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Prepare JavaScript heap for being per-thread.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject): Trying not to break the build.

2008-06-18  Julien Chaffraix  <jchaffraix@webkit.org>

        Qt Build fix after r34627.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-06-15  Darin Adler  <darin@apple.com>

        - give Frame object functions shorter names: scriptProxy() -> script(),
          selectionController() -> selection(), animationController() -> animation()

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):
        (QWebPage::inputMethodQuery):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-06-15  Darin Adler  <darin@apple.com>

        - new names for more JavaScriptCore files

        * WebKit_pch.h:

2008-06-15  Darin Adler  <darin@apple.com>

        - new names for a few key JavaScriptCore files

        * Api/qwebframe.cpp:

2008-06-14  Darin Adler  <darin@apple.com>

        Rubber stamped by Sam.

        - new names for kjs_binding.h and kjs_proxy.h

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * WebKit_pch.h:

2008-06-14  Darin Adler  <darin@apple.com>

        - fix build

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init): Added a missing semicolon.

2008-06-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - more https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init): Use create instead of new.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createDocumentLoader): Ditto.

2008-06-13  Darin Adler  <darin@apple.com>

        - try to fix build

        * WebCoreSupport/FrameLoaderClientQt.h: Add missing argument.

2008-06-13  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - updated for addition of FormState argument to action policy functions

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2008-06-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix left-click and middle-click mouse event are not properly accepted.
        
        When copying or pasting text using left or middle-click, the event must be
        accepted so that it will not be potentially processed further by the parent
        and/or sub-classed widget.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseReleaseEvent):

2008-06-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix input element does not accept character typed in using AltGr.

        EditorClient is modified to catch AltGr and Ctrl+Alt key combination.
        This fixes http://trolltech.com/developer/task-tracker/index_html?id=207050&method=entry

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-05-26  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Simon.

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

        Implemented the QWebPage::editable property.

        Small documentation fixes by Simon.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::setEditable):
        (QWebPage::isEditable):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h: implement the editable property and add API so that
        applications can switch edit mode on and off for a particular QWebPage
        * WebCoreSupport/EditorClientQt.cpp: retrieve editable property from the
        QWebPage instead of always returning false

2008-06-09  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Make sure web action in context menus have the right enablement,
        while not messing up other web actions not included in the menu.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        (QWebPage::updatePositionDependentActions):
        * Api/qwebpage_p.h:

2008-06-09  Benjamin C Meyer  <ben@meyerhome.net>

        Reviewed by Simon

        Add Shift-Space shortcut to go up one screen, the opposite of Space
        which goes down one screen.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::handleScrolling):

2008-06-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix a failing assertion when calling QWebFrame::evaluateJavaScript.

        The starting line number has to be 1 instead of 0.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2008-06-03  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Darin Adler.

        * Api/qwebhistoryinterface.cpp: Remove WebCore::historyContains().  This
        function is not used anywhere internally and is only a convenience
        function that can still be accomplished using
        QWebHistoryInterface::historyContains();

2008-05-29  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Doc: Mention the requirement of a QApplication with QtWebKit
        

        * Api/qwebview.cpp:

2008-05-29  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Some clarifications for the documentation.
        

        * Api/qwebpage.cpp:
        * Api/qwebpluginfactory.cpp:

2008-05-27  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix web inspector does not returns its state properly after its window is minimized.

        As hinted by Holger, InspectorClientView::hideEvent is not needed.
        This fixes bug https://bugs.webkit.org/show_bug.cgi?id=18967

        * WebCoreSupport/InspectorClientQt.cpp:

2008-05-21  Siraj Razick  <siraj.razick@collabora.co.uk>

        Reviewed by Simon.

        Add <param name="classid"/> support for application/x-qt-object plugins

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-05-13  Andy Shaw  <andy@trolltech.com>

        Reviewed by Simon.

        Fixes: QWebHistory::forward() should go forwards and not back

        * Api/qwebhistory.cpp:

2008-05-12  Alexey Proskuryakov  <ap@webkit.org>

        Roll out recent  threading changes (r32807, r32810, r32819, r32822) to simplify
        SquirrelFish merging.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-05-09  Thiago Macieira  <tjmaciei@trolltech.com>

        Reviewed by Simon.

        Fix bad includes in QtWebKit public headers.
        
        Make sure to include qglobal.h using the QtCore prefix so that an explicit
        include/QtCore is not needed in the application's build system. Also make sure
        that qwebsettings.h includes the local qwebkitglobal.h.
        

        * Api/qwebkitglobal.h:
        * Api/qwebsettings.h:

2008-05-08  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Simon.

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

        Based on work by Sriram Neelakandan for the Gtk port.

        * WebCoreSupport/FrameLoaderClientQt.cpp: Initialize
        m_hasSentResponseToPlugin.
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::redirectDataToPlugin):

2008-05-08  Warwick Allison  <warwick@trolltech.com>

        Reviewed by Simon.

        Fixes: WebKit expects initial input method state to be *disabled*.
        
        At least QWS does not need the initial input method state to be forced to
        enabled, but other platforms (esp. X11) do. Until fixed/tested on those
        platforms, this is specific to QWS.
        

        * Api/qwebview.cpp:
        (QWebView::QWebView):

2008-05-06  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix logic error in QWebHitTestResult::isNull().

        * Api/qwebframe.cpp:

2008-05-02  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Doc: Mention that you have to enable plugins in QWebSettings for them to work.

        * Api/qwebpage.cpp:

2008-05-02  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, ExecState is required here.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-05-01  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Alp Toker.
        Qt parts OK'ed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=14750
        Added support for NPAPI plugins on Gtk and Qt-x11 ports.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::redirectDataToPlugin):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-04-30  Julien Chaffraix  <jchaffraix@webkit.org>

        Qt 4.3 build fix.

        Fixes a brace error that made Qt 4.4 build but not Qt 4.3.
 
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-30  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        In focusIn and focusOut event always update the active state of the
        focus controller. Fixes ~400 failing layout tests due to missing
        editing callbacks that relied on the correct focus.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):

2008-04-29  Lincoln Ramsay  <lincoln.ramsay@trolltech.com>

        Reviewed by Simon.

        Fix compilation with QT_NO_PRINTER
        

        * Api/qwebview.cpp:
        (QWebView::print):

2008-04-29  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Ensure that relative URL is converted to absolute URL.
        
        This is necessary because loading a relative URL is not really supported
        (the web page may load, but the subsequent URLs for images and links will
        not be resolved properly).
        This also fixes https://bugs.webkit.org/show_bug.cgi?id=18484
        

        * Api/qwebframe.cpp:
        (ensureAbsoluteUrl):
        (QWebFrame::setUrl):
        (QWebFrame::load):

2008-04-29  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Simplification of Qt Launcher (no animation and use standard progress bar widget)
        
        Status bar shows the hovered link without any animation. Progress bar just uses the standard QProgressBar (no custom widget). The launcher is leaner and faster to use under the debugger and/or valgrind.
        

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2008-04-29  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Update the cursor when the frame/page loading is finished.
        
        This fixes https://bugs.webkit.org/show_bug.cgi?id=18712
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientQt::setMainFrameDocumentReady):

2008-04-29  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fixes: QWebPage::acceptNavigationRequest not being called / linkClicked() not being emitted when clicking on <a href="..." target="_blank"> kind of links.
        
        Call QWebPage::acceptNavigationRequest when the creation of a new window with
        URL is requested. The frame pointer is set to null in this case.
        

        * Api/qwebpage.cpp:
        (QWebPage::setViewportSize):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::startDownload):
        (WebCore::FrameLoaderClientQt::createFrame):

2008-04-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Use the WebCore facility to do the scrolling. Move some code around.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::shortcutOverrideEvent):
        (QWebPagePrivate::handleScrolling):
        * Api/qwebpage_p.h:

2008-04-29  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        fix potential crash when loading image(s)

        Crash may occur. If compiled with 4.3, the variable is not initialized.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-04-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Calling QWebView::setCursor will override the WebCore Cursor.
        Calling QWebView::setCursor will override the WebCore Cursor using
        QWidget::unsetCursor will revert to the WebCore Cursor.

        For detecting the unset we have to compare the shape of the
        cursor to the default arrow. Qt::WA_SetCursor can not be used
        as it is set unconditionally but conditionally removed.

        Calling QWidget::setCursor will immediately send the CursorChange
        event. We listen to this event to decide if we currently use a
        WebCore cursor, got a cursor from outside, or revert to the default.

        This should be race free and work reliable, the manual test for this
        is WebCore/manual-tests/cursor.html

        * Api/qwebpage.cpp:
        (SetCursorEvent::SetCursorEvent):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebViewPrivate::QWebViewPrivate):
        (QWebViewPrivate::setCursor):
        (QWebView::QWebView):
        (QWebView::event):

2008-04-29  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Documentation fixes:

        - Fixed a qdoc warning
        - Mention that fav icons can be of arbitrary size
        - Fix signature of QWebPage::acceptNavigationRequest show in the documentation

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebsettings.cpp:
        * Api/qwebview.cpp:

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix QWebView::loadFinished isn't always emitted

        Replaced loadDone() with loadFinished(bool) and moved the signals for progress
        tracking (start, progres, and finish) to the page instead of the frame. This
        ensures that we emit loadFinished even when a subframe started the actual load.

        This causes a few regressions in the layout tests that we for now accept for
        the sake of the correct API. Layout tests we can fix any time though, including
        patch release, the API however we can't change anymore in patch releases.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::totalBytes):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        * Api/qwebview.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (drtDescriptionSuitableForTestResult):
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::transitionToCommittedFromCachedPage):
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
        (WebCore::FrameLoaderClientQt::willChangeTitle):
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-04-28  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Added more documentation for QWebSettings, QWebPluginFactory and QWebFrame

        * Api/qwebframe.cpp:
        * Api/qwebpluginfactory.cpp:
        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        (QWebSettings::setUserStyleSheetUrl):
        (QWebSettings::iconForUrl):
        (QWebSettings::webGraphic):
        (QWebSettings::maximumPagesInCache):
        (QWebSettings::setFontFamily):
        (QWebSettings::resetFontFamily):
        (QWebSettings::testAttribute):
        (QWebSettings::resetAttribute):

2008-04-28  Ariya Hidayat  <ahidayat@trolltech.com>

        Reviewed by Simon.

        Fix document/frame title not reset when loading a new URI
        
        We should assume first the frame has no title. If it has, then the dispatchDidReceiveTitle()
        will be called very soon with the correct title.
        This properly resets the title when we navigate to a URI without a title.
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-04-28  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Minor documentation changes.

        * Api/qwebview.cpp:

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Prevent middle-click from triggering open URL from clipboard when the event has already been accepted.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseTripleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix scrollbar behavior in QtWebKit to match QScrollBar.
        
        Right click context menu is now supported, along with
        middle click to center slider thumb over mouse cursor.
        

        * Api/qwebpage.cpp:
        (QWebPage::linkDelegationPolicy):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Implemented channel-based logging for QtWebKit.

        Comma-separated log channels are read from the QT_WEBKIT_LOG environment variable.
        Warnings for notImplemented() is still output by default, but can be disabled
        by setting DISABLE_NI_WARNINGS=1.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-04-28  Simon Hausmann  <shausman@trolltech.com>

        Rubber-stamped by Lars

        Removed setHtml(const QByteArray &) overload as it breaks the common use of the setHtml() API.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:

2008-04-28  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Doc - adding more documentation to QWebFrame, QWebPage and QWebView
        

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:
        * Api/qwebview.cpp:
        (QWebView::stop):
        (QWebView::back):
        (QWebView::changeEvent):

2008-04-28  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fixes: Popups/Context menu in WebKit appearing at the wrong location when embedded in the graphics view or using multiple screens
        
        Give the popups the right parent widget and the right coordinates relative within the parent.
        

        * Api/qwebpage.cpp:

2008-04-28  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Doc: Add see also's (and a few minor whitespace/typo corrections)
        

        * Api/qwebframe.cpp:
        (QWebFrame::~QWebFrame):
        (QWebFrame::setHtml):
        (QWebFrame::setContent):
        (QWebFrame::parentFrame):
        (QWebFrame::childFrames):
        (QWebFrame::setScrollBarValue):
        (QWebFrame::scrollBarValue):
        (QWebFrame::scrollBarMaximum):
        (QWebFrame::scrollBarMinimum):
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        (QWebFrame::print):
        (QWebFrame::evaluateJavaScript):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPage::~QWebPage):
        (QWebPage::javaScriptPrompt):
        (openNewWindow):
        (QWebPage::setViewportSize):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::action):
        (QWebPage::userAgentForUrl):
        (QWebPagePrivate::_q_onLoadProgressChanged):
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-28  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Submitting more documentation for QWebPage
        

        * Api/qwebpage.cpp:

2008-04-28  Lincoln Ramsay  <lincoln.ramsay@trolltech.com>

        Reviewed by Simon.

        Compile when QT_NO_CLIPBOARD is defined.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-04-28  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Minor documentation fix.
        

        * Api/qwebhistory.cpp:

2008-04-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Implement QWebPage::createPlugin
        
        The code is coming from the demo browser and needed here
        for some manual tests.
        

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/main.cpp:
        (WebPage::createPlugin):

2008-04-28  Simon Hausmann  <hausmann@webkit.org>

        Qt/Win build fix. Include config.h to get the implicit MathExtras.h
        inclusion correct with regards to rand_s.

        * Api/qwebhistory.cpp:

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

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

        Fix scrollbar painting issues in QtWebKit.

        Hovering and click-draging outside of the scrollbar would
        produce unexpected and inconcistent results. We also didn't
        pass on leave-events to the underlying WebKit code, which
        was nessecary to implement the paint fix.

        Note: The event handling of the Leave event should be moved
        out of QWebView::event() and into a proper override for 4.5.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::leaveEvent):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon, Holger.

        Fixed focus handling when a node is focused while the corresponding QWebPage does not have the focus.

        * Correctly de- and reactivate the focused frame in focusOut/focusInEvent
        without telling the focus controller. We don't want to change the focused frame
        - the controller has to remember it in fact - but instead just deactivate the
        frame for correct painting as RenderTheme::isFocused() uses the activation
        state of the frame.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):

2008-04-25  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        completed documentation for the Detailed Description section for QWebView
        

        * Api/qwebview.cpp:

2008-04-25  Denis Dzyubenko  <denis.dzyubenko@trolltech.com>

        Reviewed by Simon.

        Fixed the way QWebHistory works - when you call back(), forward() or goToItem() functions it changes the current item in history *and* loads the corresponding page.
        

        * Api/qwebhistory.cpp:
        (QWebHistory::back):
        (QWebHistory::forward):
        (QWebHistory::goToItem):

2008-04-25  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix resubmit of HTML forms when initially denied by QWebPage::acceptNavigationRequest().
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2008-04-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        When pressing backspace in a line edit in a webpage we should not go back to the previous page.
        
        The shortcut for back on Windows is backspace. Implemented shortcut override
        handling in QWebView/QWebPage to prevent this.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::wheelEvent):
        (editorActionForKeyEvent):
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::inputMethodEvent):
        (QWebPagePrivate::shortcutOverrideEvent):
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-25  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix triple-clicking does not work in a web page
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPagePrivate::timerEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPage::undoStack):
        * Api/qwebpage_p.h:

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        When pressing Ctrl-Up the keyboard modifiers could include other modifiers
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2008-04-25  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix handling of Javascript's confirm() function in QtWebKit.
        

        * Api/qwebpage.cpp:

2008-04-25  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Doc - added a screenshot, flowchart, and a snippet to the QWebView documentation to improve clarity
        

        * Api/qwebview.cpp:

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        QWebPage: missing signal when window.print() is requested from javascript
        

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixes: "Save Image" action wasn't doing anything.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Apply key event changes to the current frame, not the main frame.
        
        Example: hitting space bar should scroll current frame, not the main frame
        which doesn't even have a scrollbar.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixes: QWebFrame crash when fetching the icon

        Just call QWebSettings::iconForUrl to not duplicate code and obey the mutex lock.

        * Api/qwebframe.cpp:

2008-04-25  Warwick Allison  <warwick@trolltech.com>

        Reviewed by Simon.

        Fixes: Scrollbars did not report correct maximum.

        * Api/qwebframe.cpp:

2008-04-25  David Boddie <dboddie@trolltech.com>

        Reviewed by Simon.

        Documentation updates for some of the QWeb classes

        * Api/qwebframe.cpp:
        * Api/qwebhistory.cpp:
        * Api/qwebsettings.cpp:
        * Api/qwebview.cpp:

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Implement dumping of resource load callbacks to pass http/tests/xmlhttprequest/abort-should-cancel-load.html
        
        Similar to Editing and Frameloading we do the dumping within WebCore
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (qt_dump_frame_loader):
        (qt_dump_resource_load_callbacks):
        (drtDescriptionSuitableForTestResult):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):

2008-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Change some String arguments to be const references instead.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldInsertText):
        * WebCoreSupport/EditorClientQt.h:

2008-04-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Cosmetic changes to make the code more readable.
        -Early exit if we don't have a webview
        -handle the empty tooltip and non-empty tooltip case separately
        

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip):
        (WebCore::ChromeClientQt::print):

2008-04-24  Paul Olav Tvete  <paul@trolltech.com>

        Reviewed by Simon.

        Automatically wrap tooltip text and hide a shown tooltip when it is empty.

        QWidget::setTooltip("") will still show the old tooltip for up to 10 seconds.
        Workaround as discussed with Matthias.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip):

2008-04-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Allow to disable caching completeley by calling setObjectCacheCapacities(0, 0, 0)

        * Api/qwebsettings.cpp:
        (QWebSettings::setObjectCacheCapacities):

2008-04-24  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Improve keyboard scrolling
        
        Match Down/Up keys scroll distance with Safari (i.e. faster) and add Home and End shortcuts to scroll to the top/botom.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2008-04-24  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Fix various compiler warnings in the Qt port.

        * Api/qwebframe.cpp:
        (QWebFrame::print):
        * Api/qwebsettings.cpp:
        (graphics):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Cleaned up copyright headers (removed misplaced class descriptions and
        fixed inconsistent whitespace and indentation).

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebhistory.cpp:
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        * Api/qwebhistoryinterface.cpp:
        * Api/qwebhistoryinterface.h:
        * Api/qwebkitglobal.h:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.cpp:
        * Api/qwebpluginfactory.h:
        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:
        * Api/qwebview.h:
        * QtLauncher/main.cpp:

2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Added basic URL guessing to QtLauncher (same as in the demo browser).
        

        * QtLauncher/main.cpp:
        (MainWindow::changeLocation):
        (MainWindow::guessUrlFromString):

2008-04-24  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Prevent double deletions of the default web interface.
        

        * Api/qwebhistoryinterface.cpp:
        (gCleanupInterface):
        (QWebHistoryInterface::QWebHistoryInterface):

2008-04-23  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation against Qt 4.3

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):
        * QtLauncher/main.cpp:
        (main):

2008-04-23  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        * Make sure the "Inspect Element" item gets added to the ContextMenu, a call
        to ContextMenu::populate() is not adding it, the ContextMenuController does
        add it after the call to populate(). Do that as well.
        

        * Api/qwebpage.cpp:
        (QWebPage::updatePositionDependentActions):

2008-04-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix crashes on window.close().

        We should not delete the QWebPage object in the ChromeClient but leave it up to
        the application when and whether to delete a browser window. For this we now
        emit the windowCloseRequested() signal.

        Done with Tor Arne.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        * WebCoreSupport/ChromeClientQt.cpp:

2008-04-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix parsing of external scripts/stylesheets when using setHtml(const QString &html).

        We used to pass the html string to the frameloader in utf-16, which also meant that the default
        encoding of external scripts/stylesheets became utf-16. That doesn't make sense, so assume utf-8
        by default. This is now also documented.

        * Api/qwebframe.cpp:
        (QWebFrame::setHtml):
        * Api/qwebview.cpp:

2008-04-23  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixes background color propagation when using a custom QWebPage
        
        Set the palette in setPage(), not during the creation on-demand.
        

        * Api/qwebview.cpp:
        (QWebView::page):
        (QWebView::setPage):

2008-04-23  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fix the user agent on the mac to be BSD4
        
        Put Q_OS_DARWIN before Q_OS_BSD4 sense they are both defined on the mac
        

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2008-04-23  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Added missing copyright notice.
        Small fixes to the documentation.

        * Api/qwebpluginfactory.cpp:

2008-04-23  Zack Rusin  <zack@tungstengraphics.com>

        Reviewed by Simon.

        Added a contentsSize() property.

        * Api/qwebframe.cpp:
        (QWebFrame::contentsSize):
        (QWebFrame::hitTestContent):
        * Api/qwebframe.h:

2008-04-22  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixes: QWebPage's QNetworkManager's can be shared among webpages.

        Don't force the deletion of the object, but let QObject take care of it.

        * Api/qwebpage.cpp:

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Documentation for QWebPluginFactory and documentation updates for QWebPage.

        * Api/qwebpage.cpp:
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::linkDelegationPolicy):
        (QWebPage::swallowContextMenuEvent):
        (QWebPage::updatePositionDependentActions):
        (QWebPage::extension):
        (QWebPage::networkAccessManager):
        * Api/qwebpluginfactory.cpp:
        (QWebPluginFactory::QWebPluginFactory):
        (QWebPluginFactory::~QWebPluginFactory):
        (QWebPluginFactory::refreshPlugins):

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added QWebPage::swallowContextMenuEvent and QWebPage::updatePositionDependentActions.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::linkDelegationPolicy):
        (QWebPage::swallowContextMenuEvent):
        (QWebPage::updatePositionDependentActions):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added Extension APIs for QWebPage.

        * Api/qwebpage.cpp:
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::linkDelegationPolicy):
        (QWebPage::extension):
        * Api/qwebpage.h:
        * Api/qwebpluginfactory.cpp:
        (QWebPluginFactory::extension):

2008-04-22  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Emit loadProgress() signal on loadStarted().
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):

2008-04-22  Zack Rusin  <zack@kde.org>

        Reviewed by Simon.

        Fix background propagation from the QWebView's palette.

        The background brush of the palette needs to be propagated to the WebCore::FrameView.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::updateBackground):
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::dropEvent):
        (QWebPage::setPalette):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::page):
        (QWebView::changeEvent):
        * Api/qwebview.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-04-22  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fix maps.google.com

        We have to include a version in the Safari tag in the user-agent.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2008-04-22  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Add visual focusing hint for clear button and
        change focus to web page after user enters new URL.

        * QtLauncher/main.cpp:
        (ClearButton::paintEvent):
        (MainWindow::changeLocation):

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added QWebFrame::hitTestContent() and QWebHitTestResult.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):
        (QWebFrame::event):
        (QWebHitTestResult::QWebHitTestResult):
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::operator=):
        (QWebHitTestResult::~QWebHitTestResult):
        (QWebHitTestResult::isNull):
        (QWebHitTestResult::pos):
        (QWebHitTestResult::title):
        (QWebHitTestResult::linkText):
        (QWebHitTestResult::linkUrl):
        (QWebHitTestResult::linkTitle):
        (QWebHitTestResult::linkTargetFrame):
        (QWebHitTestResult::alternateText):
        (QWebHitTestResult::imageUrl):
        (QWebHitTestResult::pixmap):
        (QWebHitTestResult::isContentEditable):
        (QWebHitTestResult::isContentSelected):
        (QWebHitTestResult::frame):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::contextMenuEvent):
        (QWebPage::triggerAction):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Don't crash if an input method query is done without a page.
        

        * Api/qwebview.cpp:
        (QWebView::inputMethodQuery):

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added re-implementations of QObject::event for future safety.
        
        This makes it easier to fix bugs with the event handling even in patch releases
        and is a general style we follow in Qt.
        

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::event):
        * Api/qwebview.h:

2008-04-22  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fix construction of the user agent.
        
        The user-agent is now composed of
        * the platform and subplatform
        * the Qt version or application name and version (if set)
        * the locale
        * the SSL settings
        

        * Api/qwebpage.cpp:
        (QWebPage::networkAccessManager):
        (QWebPage::setPluginFactory):
        (QWebPage::pluginFactory):
        (QWebPage::userAgentForUrl):
        * QtLauncher/main.cpp:

2008-04-22  Thiago Macieira  <tjmaciei@trolltech.com>

        Reviewed by Simon.

        Fixes: Pedantic compilation fix

        Don't put semi-colons after braces closing namespaces.

        * Api/qwebsettings.h:

2008-04-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Changed the return type of QWebFrame::evaluateJavaScript from a QString to a QVariant.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * Api/qwebframe.h:

2008-04-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fixes redundant "Fonts" submenu in default lineedits that has only disabled items.

        Don't show sub-menus that have only actions that are disabled.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):

2008-04-21  Kavindra Devi Palaraja <kdpalara@trolltech.com>.

        Reviewed by Simon.

        Lots of documentation fixes, fixed all qdoc warnings.

        * Api/qwebframe.cpp:
        (QWebFrame::setTextSizeMultiplier):
        * Api/qwebhistoryinterface.cpp:
        (gCleanupInterface):
        (QWebHistoryInterface::QWebHistoryInterface):
        (QWebHistoryInterface::~QWebHistoryInterface):
        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):
        (QWebPage::view):
        (QWebPage::javaScriptConsoleMessage):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::viewportSize):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::action):
        (QWebPage::event):
        (QWebPage::focusNextPrevChild):
        (QWebPage::setForwardUnsupportedContent):
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::findText):
        (QWebPage::settings):
        (QWebPage::networkProxy):
        (QWebPage::setNetworkAccessManager):
        * Api/qwebpage.h:
        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        (QWebSettings::setIconDatabasePath):
        (QWebSettings::iconForUrl):
        (QWebSettings::fontFamily):
        * Api/qwebview.cpp:
        (QWebView::load):
        * Api/qwebview.h:

2008-04-21  Marius Bugge Monsen  <mmonsen@trolltech.com>

        Reviewed by Simon.

        Fix compile failure on solaris-cc

        * Api/qwebpage.h: Removed trailing semicolons and moved the private
        d-pointer to not confuse the compiler

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Build fix for Qt 4.3

        * When building WebCore/internal make sure the QT_[BEGIN,END]_NAMESPACE is
        always defined. Do this by adding defines to the compiler line
        * For users of our API this is not feasible. Every public header file should
        include qwebkitglobal.h. Define the QT_BEGIN_NAMESPACE and QT_END_NAMESPACE
        when we are building everything < 4.4.0 and don't have them defined.

        * Api/qwebkitglobal.h:

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Initialize the WebGraphics with the one found in WebCore
        

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Allow TextAreas to be resized.
        * No QWebSettings for this is introduced.
        

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2008-04-21  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fixes: QWebView::url property behaviour strange in designer

        Added QWebView/QWebFrame::setUrl, which unlike load() clears the view immediately, schedules a load of the url but also makes sure url() returns the set url. This setter is now also used for the url property.

        * Api/qwebframe.cpp:
        (QWebFrame::setUrl):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::setUrl):
        * Api/qwebview.h:

2008-04-21  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fix compilation with Qt namespaces

        * Api/qwebframe.cpp:
        (QWebFrame::print):
        * Api/qwebview.h:

2008-04-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        When printing on high resolution printers we need to scale the painter accordingly (for now).

        * Api/qwebframe.cpp:
        (QWebFrame::print):

2008-04-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Provide a print preview in the QtLauncher

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::showLinkHover):
        (MainWindow::print):

2008-04-20  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Alp Toker.

        Share the printing code between the Gtk and the Qt port
        and added printing to the Qt WebKit API.

        * Api/qwebframe.cpp:
        (QWebFrame::print):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::print):
        * Api/qwebview.h:

2008-04-19  Julien Chaffraix  <jchaffraix@webkit.org>

        Qt build fix (renderer() -> contentRenderer()).

        * Api/qwebframe.cpp:
        (QWebFrame::renderTreeDump):
        (QWebFrame::render):

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Many API changes and additions after a full review with Jasmin Blanchette <jasmin@trolltech.com>

        The diff is too big to mention the changes individually, but most of the changes were of cosmetic
        nature where methods or enums have been renamed or prefixed/suffixed according to the consistency
        rules of the Qt API.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):
        (QWebFrame::toHtml):
        (QWebFrame::toPlainText):
        (QWebFrame::icon):
        (QWebFrame::setContent):
        (QWebFrame::setScrollBarPolicy):
        (QWebFrame::render):
        (QWebFrame::setTextSizeMultiplier):
        (QWebFrame::textSizeMultiplier):
        (QWebFrame::pos):
        * Api/qwebframe.h:
        * Api/qwebhistory.cpp:
        * Api/qwebhistory.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPagePrivate::acceptNavigationRequest):
        (webActionForContextMenuAction):
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::keyPressEvent):
        (QWebPage::view):
        (QWebPage::javaScriptPrompt):
        (QWebPage::createWindow):
        (QWebPage::triggerAction):
        (QWebPage::setViewportSize):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::action):
        (QWebPage::focusNextPrevChild):
        (QWebPage::setForwardUnsupportedContent):
        (QWebPage::forwardUnsupportedContent):
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::findText):
        (QWebPage::networkAccessManager):
        (QWebPageContext::imageUrl):
        (QWebPageContext::image):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::setIconDatabasePath):
        (QWebSettings::iconDatabasePath):
        (QWebSettings::clearIconDatabase):
        (QWebSettings::iconForUrl):
        (QWebSettings::setWebGraphic):
        (QWebSettings::fontFamily):
        (QWebSettings::setAttribute):
        (QWebSettings::testAttribute):
        (QWebSettings::resetAttribute):
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        (QWebView::icon):
        (QWebView::setTextSizeMultiplier):
        (QWebView::textSizeMultiplier):
        (QWebView::findText):
        (QWebView::reload):
        (QWebView::mouseMoveEvent):
        * Api/qwebview.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (main):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::setWindowRect):
        (WebCore::ChromeClientQt::toolbarsVisible):
        (WebCore::ChromeClientQt::setStatusbarVisible):
        (WebCore::ChromeClientQt::statusbarVisible):
        (WebCore::ChromeClientQt::setScrollbarsVisible):
        (WebCore::ChromeClientQt::setResizable):
        (WebCore::ChromeClientQt::scrollBackingStore):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        (WebCore::ChromeClientQt::setToolTip):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::didPerformFirstNavigation):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::createFrame):
        (WebCore::FrameLoaderClientQt::objectContentType):
        * WebCoreSupport/FrameLoaderClientQt.h:
        * WebCoreSupport/InspectorClientQt.cpp:

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added QWebView::find/QWebFrame::find.

        * Api/qwebpage.cpp:
        (QWebPage::focusNextPrevChild):
        (QWebPage::find):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::find):
        * Api/qwebview.h:

2008-04-15  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        fix potential crash when loading image(s)

        Crash may occur. If compiled with 4.3, the variable is not initialized.
        This fix solves https://bugs.webkit.org/show_bug.cgi?id=17174

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-04-15  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Update the micro focus for input methods as soon as the composition mode changes
        or the caret/selection changes.
        

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedSelection):
        (WebCore::EditorClientQt::setInputMethodState):

2008-04-15  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Don't use QDir, QString or any locale sensitive function before constructing Q(Core)Application,
        it yields undefined behaviour or wrong default codec initialization.
        

        * QtLauncher/main.cpp:
        (WebPage::createWindow):

2008-04-15  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Fixes: copy to clipboard when selecting, and paste when clicking with the middle button

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseReleaseEvent): If the clipboard supports
        selections then we support copy & paste into the selection.

2008-04-15  Michael Brasser  <michael.brasser@trolltech.com>

        Reviewed by Simon.

        Add basic input method support.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dropEvent):
        (QWebPagePrivate::inputMethodEvent):
        (QWebPage::inputMethodQuery):
        (QWebPage::event):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebView::inputMethodQuery):
        (QWebView::inputMethodEvent):
        * Api/qwebview.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):

2008-04-15  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added (QWebFrame|QWebView)::textZoomFactor.
        

        * Api/qwebframe.cpp:
        (QWebFrame::setTextZoomFactor):
        (QWebFrame::textZoomFactor):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::setTextZoomFactor):
        (QWebView::textZoomFactor):
        * Api/qwebview.h:

2008-04-15  Michael Brasser  <michael.brasser@trolltech.com>

        Reviewed by Simon.

        Added simple scrolling API to QWebFrame.
        
        The intent is that it works similar to QAbstractScrollArea.
        

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarValue):
        (QWebFrame::scrollBarValue):
        (QWebFrame::scrollBarMaximum):
        (QWebFrame::scrollBarMinimum):
        * Api/qwebframe.h:

2008-04-15  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Holger.

        Fixes: implement the OpenFrameInNewWindow action.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-04-15  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt namespaces

        Qt can be configured to have all of its classes inside a specified namespaces.
        This is for example used in plugin/component environments like Eclipse.

        This change makes it possible to let the Qt port compile against a namespaced
        Qt by the use of macros Qt provides to properly forward declare Qt classes in
        the namespace.

        * Api/qwebframe.h:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.h:
        * Api/qwebsettings.h:
        * Api/qwebview.h:

2008-04-05  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Holger.

        Fixes: Right clicking an image and choosing "copy image" doesnt put anything in the clipboard.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-04-05  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Fixes: Right click, and "Open image" open the link instead of the image.
        

        * Api/qwebpage.cpp:

2008-04-05  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Added doc stub for QWebSettings so class docs are generated
        

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2008-04-05  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Propose the addition of updateRequest and scrollRequest to the QWebPage.
        
        * The question is if these signals belong to QWebPage or  QWebFrame.
        -It is more easy to have them in QWebPage because ScrollView is invoking
        the ChromeClient with the right coordinates
        -On the other hand someone wants to render frames separately. But this is partly
        doomed as you can have overlapping frames and what you paint would not relate to
        what you normally see on webpages.
        

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scrollBackingStore):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):

2008-04-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Mark Rowe.

        Roll out r31599 and r31605 again after discussion with Mark Rowe.

        * Api/qwebframe.cpp:
        (QWebFrame::icon):
        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Change IconDatabase::iconForPageURL to return more information. E.g. if
        an image has been found, or if the loading of an image has been scheduled.
        * Update FrameLoader to use another method to trigger reading from disk
        * Update the QWebFrame and QWebSettings

        * Api/qwebframe.cpp:
        (QWebFrame::icon):
        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Safari is using the IconDatabase the following way (assumption). Before they
        call iconDatabase()->open they "retain" all URLs they are interested in, these
        could come from the history.
        * When opening the iconDatabase() a thread will be started that is going to import
        the URLs, all none manually retained URLs are scheduled for removal. The removal
        is going to happen when the next icon gets stored in the database.
        * We do not have any IconDatabase code, we can not retain the URLs before opening the
        database. To disable the automatic pruning of the icons we will ask the IconDatabase
        to delay this operation. This means our IconDatabase, when used, will grow, so we should
        try to have a IconDatabase class in 4.4.
        * The only way to counter the growth is a call to QWebSettings::clearIconDatabase
        

        * Api/qwebsettings.cpp:
        (QWebSettings::clearIconDatabase):
        * Api/qwebsettings.h:

2008-04-03  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Add a way to get the site icon for a url
        static QPixmap iconForUrl(const QUrl &url);
        

        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):
        * Api/qwebsettings.h:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Update the Copyright info in QWebSettings
        

        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * The isEmpty check is not needed anymore with the earlier backport
        

        * Api/qwebframe.cpp:
        (QWebFrame::icon):

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * For the http tests we need the output of the FrameLoaderClient. The QtWebKit API
        is not exporting enough to create the output in DRT itself. Settle with the approach
        Lars has taken for the Editing support and add branches to our FrameLoaderClient code.
        * run-webkit-tests http/tests(/loading) can now be executed.
        * For tests in loading/ directories we are going to throw away the dirty
        QWebPage to start with something clean.
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (qt_dump_frame_loader):
        (drtDescriptionSuitableForTestResult):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchWillClose):
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::registerForIconNotification):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Export the PageCache and Cache capacity call one to one. This is only there
        to allow the QtLauncher to play with caching.
        * TODO: make API decisions and consider following the windows Api to set a WebCacheModel
        and determine certain values automatically.
        

        * Api/qwebsettings.cpp:
        (QWebSettings::setPageCacheCapacity):
        (QWebSettings::setObjectCacheCapacities):
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Prepapre everything for enabling the PageCache for the Qt Platform:
        * Claim that we can cache pages
        * Create the FrameView FrameLoaderClientQt::transitionToCommittedForNewPage using
        the initial size of the viewport and stop creating it in the QWebFramePrivate::init
        
        Differences to the Windows port:
        * attachToWindow/detachFromWindow is not called and is not (yet) part
        of Widget/ScrollView of the Qt platform. We might need that for plugin
        support in the future.
        * We store the margin's and scrolling flag inside QWebFrame and use it when
        creating the FrameView.
        
        What is missing:
        * API to call pageCache()->setCapacity(XYZ);
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
        (WebCore::FrameLoaderClientQt::blockedError):

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * For the PageCache support we do not want to create a FrameView in the constructor
        of QWebFrame. In QWegPage::viewportSize() we currently call mainFrame() and that will
        create a QWebFrame if no mainFrame is present and this gets called when we try to
        create a FrameView...
        * Keep a copy of the initial viewportSize around and use it if we do not have a Frame
        or FrameView.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::triggerAction):
        * Api/qwebpage_p.h:

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Always return true in FrameLoaderClientQt::shouldGoToHistoryItem, like the windows port

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Attempt to make the m_webFrame null pointer checking consistent. Always check for
        m_webFrame. It should get set by the QWebFrame with the FramerLoaderClientQt::setFrame
        call and should stay valid until the destruction of the QWebFrame.
        * Currently the same checking is not needed for m_frame as it will only set to 0 in
        FrameLoaderClientQt::frameLoaderDestroyed and should be not 0 because of the setFrame
        initialisation.
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Get the RefCounting of WebCore::Frame right and make sure that both QWebFrame
        and WebCore::Frame get destroyed if we leave site with subframes and on the
        end of the application.
        * Use adoptRef in FrameLoaderClientQt::createFrame to get the refs right for subframes. We
        do not want to add an extra reference. Without this we are leaking subframes.
        * Assume that the lifetime of a Frame and FrameLoader are the same, when the Frame is gone
        we want to destroy the QWebFrame (e.g. on a page with subframes). Add delete m_webFrame
        in the frameLoaderDestroyed method to do that.
        * If we happen to delete the QWebFrame before the FrameLoaderClientQt we set m_webFrame to
        zero in the FrameLoaderClientQt to avoid bad things.
        

        * Api/qwebframe.cpp:
        (QWebFrame::~QWebFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientQt::objectContentType):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Do not save a RefPtr to the frame. The FrameLoaderClient, Frame and
        QWebFrame should have the same lifetime everything else is a leak
        or issue.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebframe_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Do not store the QWebFrame associated with a ScrollView/FrameView
        in the WebCore::Widget.
        * Instead of asking the Widget for the QWebFrame use the QWebFramePrivate::core
        and QWebFramePrivate::kit function to convert from and to QWebFrame.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Do not store the FrameView in the QWebFrame and cope with the situation when
        a WebCore::Frame has no WebCore::FrameView.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::horizontalScrollBar):
        (QWebFramePrivate::verticalScrollBar):
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        (QWebFrame::setVerticalScrollBarPolicy):
        (QWebFrame::setHorizontalScrollBarPolicy):
        (QWebFrame::render):
        (QWebFrame::layout):
        (QWebFrame::pos):
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::contextMenuEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPage::triggerAction):
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Change the order of the methods to match with the FrameLoaderClient.h to ease
        removing methods in the future.

        * WebCoreSupport/FrameLoaderClientQt.h:

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Remove virtuals in the FrameLoaderClientQt that don't exist in the base class.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Remove newly obsolete FrameLoaderClient methods

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-03-22  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-03-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix the Qt build. Don't return void in non-void functions.

        * Api/qwebpluginfactory.cpp:
        (QWebPluginFactory::extension):

2008-03-16  Thiago Macieira  <thiago.macieira@trolltech.com>

        Reviewed by Simon.

        Don't use RefPtr in classes you haven't seen the implementation of.
        
        Forward-declaration and declaration of RefPtr<Foo> is ok. But you
        cannot *use* said objects until Foo is defined. This is true even for
        initialisation with a 0.
        
        Seems the HP aCC compiler is more strict here than gcc.

        * Api/qwebframe_p.h:

2008-03-14  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::setHtml):
        (QWebFrame::setContent):

2008-03-13  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):

2008-03-12  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation against Qt 4.3

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2008-03-11  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix the Qt build.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (FrameLoaderClientQt::CreatePlugin):

2008-03-11  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build (silly typo).

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2008-03-11  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Moved obscuring progress bar to the lower right corner.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::resizeEvent):

2008-03-11  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Added reload action and grouped stop and reload actions together.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2008-03-11  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Set a Icon on the QAction if we have one.

        * Api/qwebpage.cpp:
        (QWebPage::action):

2008-03-11  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):

2008-03-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Darin Adler.

        Done with Lars.

        Replaced the QWebObjectPlugin interfaces with QWebPluginFactory.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkJobPrivate::QWebNetworkJobPrivate):
        * Api/qwebobjectplugin.cpp: Removed.
        * Api/qwebobjectplugin.h: Removed.
        * Api/qwebobjectplugin_p.h: Removed.
        * Api/qwebobjectpluginconnector.cpp: Removed.
        * Api/qwebobjectpluginconnector.h: Removed.
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::setPluginFactory):
        (QWebPage::pluginFactory):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.cpp: Added.
        (QWebPluginFactory::QWebPluginFactory):
        (QWebPluginFactory::~QWebPluginFactory):
        (QWebPluginFactory::refreshPlugins):
        (QWebPluginFactory::extension):
        * Api/qwebpluginfactory.h: Added.
        (MimeType::):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-03-07  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * Api/qwebframe.cpp:

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        - Remove all unnecessary includes of JSDOMWindowBase.h, we prefer including
          JSDOMWindow.h

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):

2008-03-04  Mark Rowe  <mrowe@apple.com>

        Another go at fixing the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):

2008-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - remove separate client calls for "standard" and "reload' history

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistory):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-02-24  Darin Adler  <darin@apple.com>

        - another try at fixing the build

        * Api/qwebframe.cpp:
        (QWebFrame::load): Replace new FormData with FormData::create.

2008-02-22  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * Api/qwebhistoryinterface.cpp:

2008-02-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Rid the project of the Devil known as DeprecatedString!

        * Api/qwebhistory.cpp:
        * Api/qwebhistoryinterface.cpp:

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init): Removed use of DeprecatedString.

2008-01-24  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Documentation tidying.
        

        * Api/qwebframe.cpp:
        * Api/qwebhistoryinterface.cpp:
        * Api/qwebview.cpp:

2008-01-24  Jarek Kobus  <jkobus@trolltech.com>

        Reviewed by Simon.

        Text for translations were used wrongly as comments
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::shouldFallBack):

2008-01-24  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * We have a KURL->QUrl conversion on KURL itself, make use of it.
        * This conversion is supposed to be loss-free
        

        * Api/qwebframe.cpp:

2008-01-23  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        * Rubber stamped by Simon

        * Fix leaking of sub frames (WebCore::Frame). We keep one reference too many.
        This was found while working on the page-cache, other ports are not affected.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2008-01-23  Rohan McGovern  <rohan.mcgovern@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fix Qtopia compilation with QT_NO_TOOLTIP
        

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::print):

2008-01-23  Geir Vattekar  <gvatteka@trolltech.com>

        Reviewed by Simon.

        Doc: Replaced \code with snippets in the docs
        

        * Api/qwebview.cpp:

2008-01-23  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Tweak key presses even to match commonly expected behavior
        - space key == page down
        - page down moved down not a page, but slightly less then a page so you don't loose your spot when reading.
        - Use font height rather then a hard coded "10" for left, right, up, down
        - Ctrl-Up moves to the top of the page
        - Ctrl-Down move to the bottom of the page
        - Backspace == GoBack
        - Shift-Backspace == GoForward
        

        * Api/qwebpage.cpp:
        (dropActionToDragOp):
        (dragOpToDropAction):
        (QWebPagePrivate::keyPressEvent):

2008-01-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Implemented FrameLoaderClient::startDownload() and FrameLoaderClient::download().
        
        Added two signals to QWebPage to handle downloading of links and handling of
        unsupported content.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::willUseArchive):

2008-01-22  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        setup a family for cursive and fantasy fonts as well.
        

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2008-01-22  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Implement ChromeClientQt::setToolTip
        Implement ChromeClientQt::mouseDidMoveOverElement
        

        * Api/qwebpage.cpp:
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::focus):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        (WebCore::ChromeClientQt::setToolTip):
        (WebCore::ChromeClientQt::print):
        * WebCoreSupport/ChromeClientQt.h:

2008-01-21  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - updated for changes to ChromeClient database functions

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::exceededDatabaseQuota):
        * WebCoreSupport/ChromeClientQt.h:

2008-01-21  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Change QWebHistoryInterface::addHistoryEntry() from const to non-const
        

        * Api/qwebhistoryinterface.h:

2008-01-21  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon.

        * Don't leak the d-pointer in QWebSettings.
        

        * Api/qwebsettings.cpp:
        (QWebSettings::~QWebSettings):

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Update the WebKit version number from WebKit/win/WebKit.vcproj/VERSION.
        
        This has the fortunate side-effect that gmail sends us sensible HTML/JS again :)
        

        * Api/qwebpage.cpp:

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix focus chain handling and cycling through focusable objects (links) using tab/backtab.
        
        * Fix GraphicsContext::drawFocusRing to also draw single focus rects.
        * Implemented QWebPage::focusNextPrevChild by sending fake tab/shift-tab events
        and make the return value depend on whether we successfully determined a focusable
        node or not.
        * Changed QWebView::focusNextPrevChild() to call the base QWidget implementation correctly
        if we could not handle the focus chain ourselves.
        * Changed the focus policy of QWebView to correctly use WheelFocus instead of ClickFocus.
        * Made ChromeClientQt::canTakeFocus() and takeFocus() dummy method since they are only
        used to control the situation of stepping out of the focus chain inside the page.
        * Made inclusion of links in the focus chain configurable through QWebSettings::LinksIncludedInFocusChain.
        The layout tests expect this to be disabled but for the user it seems sensible to have it
        on by default, hence the default in qwebsettings.cpp
        

        * Api/qwebpage.cpp:
        (QWebPage::focusNextPrevChild):
        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebView::focusNextPrevChild):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Coding style fixes and added a comment about the include order.

        * WebKit_pch.h:

2008-01-18  Marius Storm-Olsen  <marius@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Add use of precompiled header, when building inside Qt.
        
        Compiling WebKit was taking forever; 17 minutes on my machine for _one_ build! Adding the PCH at least brings it down to 12 minutes for one build, for me.
        

        * WebKit_pch.h: Added.

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Ask the WebCore::IconDatabase only if our URL is not empty. Otherwise
        we will see a crash in a HashSet.
        * It is crashing there because the StringImpl of an empty String is 0.
        * We avoid this crash by checking for isEmpty() in WebKit as there is no
        use to ask the iconDatabase for an empty string. We will fallback to the
        defaultIcon.
        

        * Api/qwebframe.cpp:
        (QWebFrame::icon):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Minor documentation fixes
        

        * Api/qwebframe.cpp:
        * Api/qwebview.cpp:

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Fix form elements not focusing correctly after the qt widget lost its focus.
        
        When receiving a focus out event notify the focus controller. Otherwise its
        m_focusedFrame variable remains unchanged and setFocusedFrame on a focusIn
        event shortcuts and doesn't call setActive(true).
        

        * Api/qwebpage.cpp:

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Lots of updates to the documentation.
        

        * Api/qwebframe.cpp:
        * Api/qwebhistory.cpp:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::dropEvent):
        (QWebPage::history):
        (openNewWindow):
        (QWebPage::triggerAction):
        (QWebPage::viewportSize):
        (QWebPage::navigationRequested):
        (QWebPage::action):
        (QWebPage::event):
        (QWebPageContext::targetFrame):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Added a urlChanged signals to QWebFrame and QWebView.
        

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        * Api/qwebview.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Fixed docs and sanity checks in QWebSettings::setIconDatabaseEnabled
        

        * Api/qwebsettings.cpp:
        (QWebSettings::setIconDatabaseEnabled):

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Added QWebView::createWindow() which is forwarded from QWebPage::createWindow() for convenience.
        

        * Api/qwebpage.cpp:
        (QWebPage::createWindow):
        * Api/qwebview.cpp:
        (QWebView::createWindow):
        * Api/qwebview.h:

2008-01-17  Lars Knoll  <lars@trolltech.com>

        Reviewed by Lars.

        add a 0 pointer check.

        Fixes a crash in the demo web browser.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix QWebFrame::title().
        
        For the titleChanged() signal we use the documentloader's title. For the property we have to use the same
        instead of Document::title() as the latter is not trimmed and not suited for a window caption.
        

        * Api/qwebframe.cpp:
        (QWebFrame::title):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Maciej, Lars, Holger.

        http://bugs.webkit.org/show_bug.cgi?id=16589

        Add a document parameter to WebCore::cookies, setCookies and cookiesEnabled.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):
        (QWebNetworkManager::started):

2008-01-17  Warwick Allison  <warwick@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Follow QWidget::keyPressEvent advice and call parents.
        
        Without this, Back does not work in Qtopia, for example.
        

        * Api/qwebview.cpp:
        (QWebView::keyPressEvent):
        (QWebView::keyReleaseEvent):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fix compilation against Qt 4.3 after the recent KURL <> QUrl conversion fixes.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fix compilation against Qt 4.4 without files that are specific for the Qt 4.3 build.
        

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-01-17  Lincoln Ramsay  <lincoln.ramsay@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fixes compilation with QT_NO_DRAGANDDROP
        

        * Api/qwebpage.cpp:
        (QWebPage::event):
        * Api/qwebview.cpp:
        (QWebView::dragEnterEvent):
        (QWebView::dragLeaveEvent):
        (QWebView::dragMoveEvent):
        (QWebView::dropEvent):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fix compilation, removed obsolete privateBrowsingEnabled() method.

        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-01-16  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon Hausmann <simon.hausmann@trolltech.com>.

        Removed a whole bunch of notImplemented() warnings.
        
        I don't want to hide the real warnings in lots of things that
        I am by now pretty certain we won't need.
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::canShowMIMEType):

2008-01-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix crash when bringing up the context menu on maps.google.com.
        
        If the website provides its own context menu then we don't have a ContextMenu pointer.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::contextMenuEvent):

2008-01-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Don't crash when receiving all sorts of events on a default constructed QWebView without a page.

        * Api/qwebview.cpp:
        (QWebView::mouseMoveEvent):
        (QWebView::mousePressEvent):
        (QWebView::mouseDoubleClickEvent):
        (QWebView::mouseReleaseEvent):
        (QWebView::contextMenuEvent):
        (QWebView::wheelEvent):
        (QWebView::keyPressEvent):
        (QWebView::keyReleaseEvent):
        (QWebView::focusInEvent):
        (QWebView::focusOutEvent):
        (QWebView::dragEnterEvent):
        (QWebView::dragLeaveEvent):
        (QWebView::dragMoveEvent):
        (QWebView::dropEvent):
        (QWebView::focusNextPrevChild):

2008-01-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Made the url property read-write.

        * Api/qwebview.h:

2008-01-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Don't crash when showing a default initialized QWebView that has no page/frame yet.

        * Api/qwebview.cpp:
        (QWebView::paintEvent):

2008-01-16  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Change hoveringOverLink implementation to have less issues.
        
        * Currently we only compare a pointer. In the worst case we
        could delete the Element we have pointed to and a new one
        gets the same address. But even if that doesn't happen the
        WebCore::Element is mutable and JavaScript could change the
        URL, Title or Content. So we have to compare all these three
        attributes.
        * This does not seem to be a performance impact.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        * Api/qwebpage_p.h:

2008-01-16  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Move the hoverElement from QWebFrame to QWebPage. As it is
        only used there.
        

        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        * Api/qwebpage_p.h:

2008-01-16  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        EventHandler changes/fixes in QWebPage:
        -mouse{Press,Move,Release}Event:
        Send the event always to the mainFrame of the QWebPage.
        
        -contextMenuEvent, key{Press,Release}Event:
        Send the event to the focused frame.
        
        This is following the Windows port and fixes a issue with the
        Web Inspector where we were sending the events to a wrong frame.
        
        It is guaranteed that the mainFrame will always have an eventHandler
        and frameView set. There is no need to check for this in QWebPage.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::contextMenuEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::keyReleaseEvent):
        (QWebPagePrivate::focusInEvent):
        * Api/qwebpage_p.h:

2008-01-16  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Add core and kit functions to QWebFramePrivate to convert from
        QWebFrame to WebCore::Frame and vice versa.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::core):
        (QWebFramePrivate::kit):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-01-16  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add conversion methods from and to QUrl to KURL.
        
        Use them in the places I found at the moment. Fixes a bug
        where form data was encoded twice.
        Also fix QWebSettings to take a QUrl for the user style sheet
        location.
        

        * Api/qwebframe.cpp:
        (QWebFrame::load):
        * Api/qwebpage.cpp:
        (QWebPage::createPlugin):
        (frameLoadRequest):
        (QWebPage::triggerAction):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::show):

2008-01-16  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars.

        * Make the InspectorClientView inherit from QWebView instead of QWidget. This
        way paintEvent, mouse{Press,Release}Event and other events get forwarded to
        the QWebPage/WebInspector automatically.
        

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::createWindow):
        (WebCore::InspectorClientView::InspectorClientView):

2008-01-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.

        - remove SecurityOriginData and fold its functionality into SecurityOrigin

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::requestQuotaIncreaseForNewDatabase):
        (WebCore::ChromeClientQt::requestQuotaIncreaseForDatabaseOperation):
        * WebCoreSupport/ChromeClientQt.h:

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        document QWebHistory
        

        * Api/qwebhistory.cpp:
        (QWebHistoryItem::QWebHistoryItem):
        (QWebHistoryItem::operator=):
        (QWebHistoryItem::~QWebHistoryItem):
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        (QWebHistoryItem::title):
        (QWebHistoryItem::icon):
        (QWebHistory::canGoBack):
        (QWebHistory::canGoForward):
        (QWebHistory::goBack):
        (QWebHistory::goForward):
        (QWebHistory::goToItem):
        * Api/qwebhistory.h:

2008-01-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Make the reset() functions not do anything on the default QWebSettings object.
        

        * Api/qwebsettings.cpp:
        (QWebSettings::resetFontSize):
        (QWebSettings::resetFontFamily):
        (QWebSettings::clearAttribute):

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        rename QWebPageHistory to QWebHistory.
        

        * Api/qwebhistory.cpp: Added.
        (QWebHistoryItem::QWebHistoryItem):
        (QWebHistoryItem::operator=):
        (QWebHistoryItem::~QWebHistoryItem):
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        (QWebHistoryItem::title):
        (QWebHistoryItem::lastVisited):
        (QWebHistoryItem::icon):
        (QWebHistory::QWebHistory):
        (QWebHistory::~QWebHistory):
        (QWebHistory::clear):
        (QWebHistory::items):
        (QWebHistory::backItems):
        (QWebHistory::forwardItems):
        (QWebHistory::canGoBack):
        (QWebHistory::canGoForward):
        (QWebHistory::goBack):
        (QWebHistory::goForward):
        (QWebHistory::goToItem):
        (QWebHistory::backItem):
        (QWebHistory::currentItem):
        (QWebHistory::forwardItem):
        (QWebHistory::itemAtIndex):
        * Api/qwebhistory.h: Added.
        * Api/qwebhistory_p.h: Added.
        (QWebHistoryItemPrivate::QWebHistoryItemPrivate):
        (QWebHistoryItemPrivate::~QWebHistoryItemPrivate):
        (QWebHistoryPrivate::QWebHistoryPrivate):
        (QWebHistoryPrivate::~QWebHistoryPrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpagehistory.cpp: Removed.
        * Api/qwebpagehistory.h: Removed.
        * Api/qwebpagehistory_p.h: Removed.
        * Api/qwebview.cpp:
        * Api/qwebview.h:

2008-01-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Documentation for QWebSettings
        

        * Api/qwebsettings.cpp:
        (QWebSettings::~QWebSettings):
        (QWebSettings::setFontSize):
        (QWebSettings::resetFontSize):
        (QWebSettings::setUserStyleSheetLocation):
        (QWebSettings::userStyleSheetLocation):
        (QWebSettings::iconDatabaseEnabled):
        (QWebSettings::webGraphic):
        (QWebSettings::setFontFamily):
        (QWebSettings::resetFontFamily):
        (QWebSettings::setAttribute):

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Document QWebHistoryInterface.
        

        * Api/qwebhistoryinterface.cpp:
        (QWebHistoryInterface::defaultInterface):
        (QWebHistoryInterface::~QWebHistoryInterface):

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Documentation for QWebFrame.
        

        * Api/qwebframe.cpp:
        (QWebFrame::url):
        (QWebFrame::name):
        (QWebFrame::page):
        (QWebFrame::setHtml):
        (QWebFrame::parentFrame):
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix the drawing errors that where introduced due to refactoring.
        
        Correctly clip to the rectangle we want to draw in ScrollView::paint().
        

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::paintEvent):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scrollBackingStore):

2008-01-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added a whole bunch of docs for QWebPage and fixed some minor doc glitches in QWebView.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dropEvent):
        (QWebPage::QWebPage):
        (QWebPage::~QWebPage):
        (QWebPage::mainFrame):
        (QWebPage::currentFrame):
        (QWebPage::history):
        (QWebPage::setView):
        (QWebPage::view):
        (QWebPage::javaScriptConsoleMessage):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::createWindow):
        (QWebPage::createModalDialog):
        (openNewWindow):
        (QWebPage::triggerAction):
        (QWebPage::viewportSize):
        (QWebPage::navigationRequested):
        (QWebPage::selectedText):
        (QWebPage::isModified):
        (QWebPage::focusNextPrevChild):
        (QWebPage::settings):
        (QWebPage::networkProxy):
        (QWebPage::setNetworkAccessManager):
        (QWebPage::networkAccessManager):
        (QWebPagePrivate::_q_onLoadProgressChanged):
        * Api/qwebview.cpp:

2008-01-07  Holger Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        * Qt and Gtk must know if a ContextMenuItem is checkable. Add a new ContextMenuItemType for checkable
        actions.
        * Use this information in the Gtk platform to create a GtkCheckMenuItem when needed.
        * Update the ContextMenuController to accept CheckableActionTypes as well.
        * Change ContextMenu.cpp to use the CheckableActionType. The information if a item is checkable
        was extracted from ContextMenu::checkOrEnableIfNeeded.
        * Update the Qt and Windows port.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Build fix for the Windows build. MSVC wants to see the full
        declaration of arguments even when just passing them through.

        * Api/qwebpage.cpp:

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added the missing parameters to make it possible to do POST operations from the public API.
        
        This is ugly though as it also requires including qnetworkaccessmanager.h. It would be nicer if the
        two extra arguments were in QNetworkRequest :-/
        

        * Api/qwebframe.cpp:
        (QWebFrame::load):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::load):
        * Api/qwebview.h:

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Ported of the network backend of the Qt platform to Qt 4.4's new networking API.
        

        * Api/qwebframe.cpp:
        (QWebFrame::load):
        * Api/qwebframe.h:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebobjectplugin.cpp:
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectplugin_p.h:
        * Api/qwebobjectpluginconnector.cpp:
        * Api/qwebobjectpluginconnector.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPagePrivate::navigationRequested):
        (QWebPage::setNetworkInterface):
        (QWebPage::networkInterface):
        (QWebPage::setNetworkAccessManager):
        (QWebPage::networkAccessManager):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-01-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Move the QWebPagePrivate methods up to the other private ones

        * Api/qwebpage.cpp:
        (dropActionToDragOp):
        (dragOpToDropAction):
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::contextMenuEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::keyReleaseEvent):
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragLeaveEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):
        (QWebPage::focusNextPrevChild):

2008-01-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Add reimplemented comments for the methods reimplemented in QWebView and QWebPage.
        

        * Api/qwebpage.cpp:
        (dragOpToDropAction):
        * Api/qwebview.cpp:
        (QWebView::mouseMoveEvent):
        (QWebView::mousePressEvent):
        (QWebView::mouseDoubleClickEvent):
        (QWebView::mouseReleaseEvent):
        (QWebView::contextMenuEvent):
        (QWebView::keyPressEvent):
        (QWebView::keyReleaseEvent):
        (QWebView::focusInEvent):
        (QWebView::focusOutEvent):
        (QWebView::dragEnterEvent):
        (QWebView::dragLeaveEvent):
        (QWebView::dragMoveEvent):
        (QWebView::dropEvent):

2008-01-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars.

        * This layout is not needed anymore as Widget::invalidateRect will not
        draw anymore.
        

        * Api/qwebview.cpp:
        (QWebView::paintEvent):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Remove most dependencies of Widget/ScrollView onto native QWidgets.
        
        This also brings the code closer in line with the Windows code. Seems
        to work nicely on first try :)
        

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::updateBackingStore):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        (WebCore::ChromeClientQt::setToolTip):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-01-04  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Remove the todo from QWebPage and move the code to QWebView.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::focusInEvent):
        * Api/qwebview.cpp:
        (QWebView::wheelEvent):
        (QWebView::focusInEvent):

2008-01-04  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Move the various event methods to QWebPagePrivate. This is similar to
        QTextControl as well.
        

        * Api/qwebpage.cpp:
        (QWebPage::event):
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::contextMenuEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::keyReleaseEvent):
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):
        (QWebPage::focusNextPrevChild):
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragLeaveEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2008-01-04  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Forward the event from QWebView to QWebPage through QObject::event. This
        is similar to the way QTextControl is working.
        

        * Api/qwebpage.cpp:
        (dragOpToDropAction):
        (QWebPage::event):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::mouseMoveEvent):
        (QWebView::mousePressEvent):
        (QWebView::mouseDoubleClickEvent):
        (QWebView::mouseReleaseEvent):
        (QWebView::contextMenuEvent):
        (QWebView::wheelEvent):
        (QWebView::keyPressEvent):
        (QWebView::keyReleaseEvent):
        (QWebView::focusInEvent):
        (QWebView::focusOutEvent):
        (QWebView::dragEnterEvent):
        (QWebView::dragLeaveEvent):
        (QWebView::dragMoveEvent):
        (QWebView::dropEvent):
        * Api/qwebview.h:

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make QWebPage a QObject and get things to compile.
        
        Nothing works currently though.
        

        * Api/qwebobjectpluginconnector.cpp:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::QWebPage):
        (QWebPage::setView):
        (QWebPage::view):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptPrompt):
        (dragOpToDropAction):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::wheelEvent):
        (QWebPage::keyPressEvent):
        (QWebPage::focusInEvent):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebView::setPage):
        (QWebView::resizeEvent):
        (QWebView::paintEvent):
        * Api/qwebview.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::windowRect):
        (WebCore::ChromeClientQt::pageRect):
        (WebCore::ChromeClientQt::focus):
        (WebCore::ChromeClientQt::unfocus):
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):
        (WebCore::ChromeClientQt::canRunModal):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::createWindow):
        (WebCore::InspectorClientView::InspectorClientView):
        (WebCore::InspectorClientView::page):
        (WebCore::InspectorClientView::hideEvent):
        (WebCore::InspectorClientView::closeEvent):
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::closeWindow):

2008-01-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added some preliminary class documentation for QWebView, fixed a missing const() and some missing Q_PROPERTYs
        

        * Api/qwebview.cpp:
        (QWebView::setHtml):
        (QWebView::setContent):
        (QWebView::history):
        (QWebView::settings):
        (QWebView::action):
        (QWebView::triggerAction):
        (QWebView::stop):
        (QWebView::backward):
        (QWebView::forward):
        (QWebView::reload):
        * Api/qwebview.h:

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add a viewportSize to QWebPage.
        
        This is required to eventually make it a QObject only.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):
        (QWebPage::viewportSize):
        (QWebPage::setViewportSize):
        * Api/qwebpage.h:

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        take a QString as identifier in QWebFrame::addToJSWindowObject.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):
        * Api/qwebframe.h:

2008-01-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Call the frame arguments for the javascript callbacks "originatingFrame"
        

        * Api/qwebpage.h:

2008-01-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Moved the QWebPage::addToHistory signal into QWebHistoryInterface
        

        * Api/qwebhistoryinterface.h:
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForStandardLoad):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        moved title(), url(), icon() and initialLayoutComplete() from QWebPage to QWebFrame

        * Api/qwebframe.cpp:
        (QWebFrame::url):
        (QWebFrame::icon):
        (QWebFrame::setVerticalScrollBarPolicy):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptPrompt):
        (QWebPage::networkInterface):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::title):
        (QWebView::url):
        (QWebView::icon):
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Moved QWebPage::open to QWebFrame::load and added setHtml.
        

        * Api/qwebframe.cpp:
        (QWebFrame::load):
        (QWebFrame::setHtml):
        (QWebFrame::setContent):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::load):
        (QWebView::setHtml):
        * Api/qwebview.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::createPage):

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added the first revision of QWebView and started moving functionality from QWebPave over to QWebView and QWebFrame.
        

        * Api/headers.pri:
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        * Api/qwebpage.h:
        * Api/qwebpagehistory.h:
        * Api/qwebview.cpp: Added.
        (QWebView::QWebView):
        (QWebView::~QWebView):
        (QWebView::page):
        (QWebView::setPage):
        (QWebView::load):
        (QWebView::setHtml):
        (QWebView::history):
        (QWebView::settings):
        (QWebView::title):
        (QWebView::url):
        (QWebView::icon):
        (QWebView::selectedText):
        (QWebView::action):
        (QWebView::triggerAction):
        (QWebView::isModified):
        (QWebView::textInteractionFlags):
        (QWebView::setTextInteractionFlags):
        (QWebView::sizeHint):
        (QWebView::stop):
        (QWebView::backward):
        (QWebView::forward):
        (QWebView::reload):
        * Api/qwebview.h: Added.
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::webPage):
        (MainWindow::changeLocation):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-12-14  Darin Adler  <darin@apple.com>

        Reviewed by Alexey.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction): Removed some use of Editor member functions we plan
        to eventually eliminate. Switch from Editor::execCommand to Editor::command.
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent): Ditto. Also updated name from
        MoveUpByPageAndModifyCaret to MovePageUp and from MoveDownByPageAndModifyCaret
        to MovePageDown.

2007-12-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        As part of doing some CachedPage and client cleanup, keep Qt building

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::savePlatformDataToCachedPage):
        (WebCore::FrameLoaderClientQt::transitionToCommittedFromCachedPage):
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-12-12  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::userAgent):

2007-12-12  Sam Weinig  <sam@webkit.org>

        Build fix.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):
        * Api/qwebpage.cpp:
        (QWebPage::url):
        (QWebPageContext::QWebPageContext):
        * Api/qwebpagehistory.cpp:
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-12-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5535636>
        Have to press 4 times instead of 2 times to get the expected result of ^^ with german keyboard.

        http://bugs.webkit.org/show_bug.cgi?id=13916
        JavaScript detects Tab as a character input on a textfield validation

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):
        (WebCore::EditorClientQt::handleInputMethodKeydown):
        * WebCoreSupport/EditorClientQt.h:
        Updated for cross-platform changes as much as it was possible without a Qt build environment.

2007-12-07  Darin Adler  <darin@apple.com>

        - try to fix build

        * Api/qwebhistoryinterface.cpp:
        (WebCore::historyContains): There's a WebCore function here in WebKit! Needs to
        be updated, since WebCore changed, but this should not be here.

2007-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        * WebCoreSupport/FrameLoaderClientQt.cpp: Removed obsolete privateBrowsingEnabled.
        * WebCoreSupport/FrameLoaderClientQt.h: Ditto.

2007-12-04  Holger Hans Peter Freyther <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Implement the InspectorClient for the Qt port
        * It does not support highlighting of nodes yet
        * Use QRC to open the internal page. The important thing is the
        '/' in the URL to make WebCore::Document::completeURL behave the
        way we want.
        * To make the InspectorClient work we will have to mark qrc as secure.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::hideEvent):
        (WebCore::InspectorClientQt::InspectorClientQt):
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::localizedStringsURL):
        (WebCore::InspectorClientQt::showWindow):
        (WebCore::InspectorClientQt::closeWindow):
        (WebCore::InspectorClientQt::attachWindow):
        (WebCore::InspectorClientQt::detachWindow):
        * WebCoreSupport/InspectorClientQt.h:

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Rubber stamped by Mark.

        Always include config.h at the beginning of the file.

        * Api/qwebsettings.cpp:

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Avoid crashes by making sure everything is layouted before
        we start painting. This avoids a crash in Widget::invalidateRect
        because QPainter::begin would fail
        * The QWebFrame::layout() methods and calls are left untouched because
        this would be an API decision.
        

        * Api/qwebframe.cpp:
        (QWebFrame::layout):
        * Api/qwebpage.cpp:
        (QWebPage::paintEvent):

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * SubClass QWebPage to handle hide and close events.
        * Forward these events to the InspectorController
        * The other options would have been using an eventFilter
        on the webpage and making InspectorClient a QObject or
        creating a QObject Observer.
        * Provide a simple QWebPage* createWindow implementation. This is needed
        to make FrameLoaderClientQt::dispatchCreatePage stop crashing in the case
        of the inspector client.
        

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::InspectorClientWebPage):
        (WebCore::InspectorClientWebPage::createWindow):
        (WebCore::InspectorClientWebPage::hideEvent):
        (WebCore::InspectorClientWebPage::closeEvent):
        (WebCore::InspectorClientQt::createPage):

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Allow adding the Inspect ContextMenuItem to our Menu
        * Open the Inspector when Inspect was activated. This requires
        that we keep the innerNonSharedNode from the HitTest around. This
        forces us to include <wtf/RefPtr.h> in the private header. It is
        the first non Qt header but should be okay.
        

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::triggerAction):
        (QWebPage::action):
        (QWebPageContext::QWebPageContext):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Add the Developer Extras to the WebAttribute and propagate it
        to WebCore::Settings. This will enable the Inspect Element menu item
        * CodingStyle fixes in QWebSettings
        * Enable the Developer Extras in the QtLauncher
        

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:
        (main):

2007-12-03  Geoffrey Garen  <ggaren@apple.com>

        Removed unnecessary and possibly incorrect #include from my last 
        check-in.

        * Api/qwebframe.cpp:

2007-12-03  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: Get globalExec() from the right place.

2007-11-30  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Self destruct the clients like the ohter ports do
        

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/DragClientQt.cpp:
        * WebCoreSupport/EditorClientQt.cpp:
        * WebCoreSupport/InspectorClientQt.cpp:

2007-11-29  Brady Eidson  <beidson@apple.com>

        Keep it building with new client method

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::requestQuotaIncreaseForNewDatabase):
        (WebCore::ChromeClientQt::requestQuotaIncreaseForDatabaseOperation):
        * WebCoreSupport/ChromeClientQt.h:

2007-11-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Adam Treat.

        Fix compilation (don't define notImplemented twice)

        * Api/qwebnetworkinterface.cpp:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Use Q_SIGNALS/Q_SLOTS in the public API

        * Api/qwebframe.h:
        * Api/qwebpage.h:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Fixed the signature of the QWebPage constructor to follow Qt guidelines.

        * Api/qwebpage.h:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Use <QtModule/headerfile.h> instead of <Classname> in public HEADER files, to not require the include paths for the other modules to be present

        * Api/qcookiejar.h:
        * Api/qwebframe.h:
        * Api/qwebhistoryinterface.h:
        * Api/qwebnetworkinterface.h:
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectplugin_p.h:
        * Api/qwebobjectpluginconnector.h:
        * Api/qwebpage.h:
        * Api/qwebpagehistory.h:
        * Api/qwebsettings.h:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Removed inline copy of QExplicitlySharedDataPointer. This is not needed anymore since we require Qt >= 4.3.0.

        * Api/qwebpagehistory.h:

2007-11-22  George Staikos  <staikos@kde.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        Fix license headers
        

        * Api/qwebobjectplugin.cpp:
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectpluginconnector.cpp:
        * Api/qwebobjectpluginconnector.h:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George Staikos <staikos@kde.org>.

        Fix shadowing of "page" variable that is passed as argument as well as a member variable.
        
        This also fixes compilation with gcc 4.3.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):

2007-11-21  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon.

        * Connect up the signal for all subframes too.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):

2007-11-20  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Adam Treat <adam.treat@torchmobile.com>.

        Remove static linkage of QtWebKit against the ICO image format plugin.
        
        Instead build the support for the ICO image format as a proper standalone qt image format plugin and install it.
        

        * Plugins/Plugins.pro:

2007-11-20  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George Staikos <staikos@kde.org>.

        Added a default argument to textContent for the hoveringOverLink signal to keep existing two-argument connections working
        

        * Api/qwebpage.h:

2007-11-20  George Staikos  <staikos@kde.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        Add an argument to pass the link text in the hovering signal
        

        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        (QWebPage::mouseMoveEvent):
        * Api/qwebpage.h:

2007-11-20  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon and George.

        * Be quiet and allow suppression of NotImplemented calls at runtime.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::representationExistsForURLScheme):

2007-11-19  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon.

        * Don't segfault when event pos is outside of the widget.

        * Api/qwebpage.cpp:
        (QWebPage::mouseMoveEvent):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::contextMenuEvent):

2007-11-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Bug 13470: i18n: The Web Inspector is not localizable
        http://bugs.webkit.org/show_bug.cgi?id=13470

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::localizedStringsURL): Empty stub.
        * WebCoreSupport/InspectorClientQt.h: Added localizedStringsURL.

2007-11-13  Geoffrey Garen  <ggaren@apple.com>

        Build fix: changed Shared to RefCounted.

        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.h:
        * WebCoreSupport/EditorClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-11-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        When populating the context menu with sub-menus don't add sub-menus if they're empty.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):

2007-11-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Added support for the Bold/Italic/Underline toggle actions.
        

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::triggerAction):
        (QWebPage::action):
        * Api/qwebpage.h:

2007-11-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Before adding an action to the context menu call checkOrEnableIfNeeded for each action
        to update the enable/checked state correctly.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        (QWebPage::contextMenuEvent):
        * Api/qwebpage_p.h:

2007-11-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Mark the text direction actions as checkable actions.
        

        * Api/qwebpage.cpp:
        (QWebPage::action):

2007-11-09  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Holger.

        Implemented the webcore actions for changing the text direction.
        

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::triggerAction):
        (QWebPage::action):
        * Api/qwebpage.h:

2007-11-09  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Holger.

        Fix ContextMenu allocation in the Qt port.
        
        Store all items and submenus value based in ContextMenu and ContextMenuItem.
        That fixes the crashes when the context menu was populated with sub-menus because
        of the use of temporary ContextMenu objects like this:
        
        ContextMenu subMenu(...);
        subMenu.appendItem(...);
        subMenu.appendItem(...);
        
        subMenuItem.setSubMenu(&subMenu); // temporary pointer, need to _copy_ contents
        

        * Api/qwebpage.cpp:
        (QWebPage::contextMenuEvent):
        * Api/qwebpage_p.h:

2007-11-09  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Holger.

        Renamed QWebPage::NumWebActions to QWebPage::WebActionCount (for consistency) and fixed its value.
        

        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - windowObjectCleared() is no longer const.  It needs to setup the
        script debugger and cannot be const to do so.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::windowObjectCleared):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-11-08  Simon Hausmann  <hausmann@kde.org>

        Reviewed by nobody (well, Holger knows about it), build fix for Qt 4.3.

        The buildbots use Qt 4.4 which has the function in question, but Qt
        4.3 doesn't have it. Use removeAll() as replacement instead, it
        shouldn't make a difference in performance.

        * Api/qwebsettings.cpp:
        (QWebSettings::~QWebSettings):

2007-11-08  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Cleanup checking for the request method.
        
        * Check the request method only in QWebNetworkManager::add.
        * Currently HEAD, GET, POST are allowed and for everything else
        QWebNetworkManager::add returns false.
        * Returning false is compatible with ResourceHandle::start and it
        can be used in ResourceHandle::loadResourceSynchronously to generate
        a ResourceError
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-11-08  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Fix bug in the implementation of synchronous network jobs.
        
        * George (pmax) reviewed the networking patches and found the following bug (thanks for reviewing)
        -    if (jobMode == AsynchronousJob) {
        +    if (jobMode == SynchronousJob) {
        add job to synchronous list/hash
        
        * Just applying the above change will lead to crashes because we can finish
        jobs before we started them.
        
        * Avoid these issues by saving all work (starting a job, sending data and
        finishing it) inside one list. JobWork will contain any
        of the above three work types and doWork will just work on this list
        (m_pendingWork). As foreach takes a copy of the list calling started, data
        and finished will not add new work and we gurantee that if we have JobStarted
        it will be in the list before JobData and JobFinished.
        
        * Observation: We might just kill the code to handle sync jobs.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::queueStart):
        (QWebNetworkManager::queueData):
        (QWebNetworkManager::queueFinished):
        (QWebNetworkManager::doWork):
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkManager::JobWork::):
        (QWebNetworkManager::JobWork::JobWork):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Fix the Qt build by setting up WindowFeatures before calling
        createWindow on the Chrome. This is similar to openNewWindow in
        page/ContextMenuController.cpp

        * Api/qwebpage.cpp:
        (openNewWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make the setting of letting Javascript access the clipboard configurable through QWebSettings, turn it off by default and turn it on in DumpRenderTree.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed QWebPageHistory::goToItem to take a value instead of a pointer.

        * Api/qwebpagehistory.cpp:
        * Api/qwebpagehistory.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Removed unimplemented QWebHistoryItem::children() function

        * Api/qwebpagehistory.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the getter functions in QWebSettings to transparently resolve against the default settings.

        * Api/qwebsettings.cpp:
        (QWebSettings::fontSize):
        (QWebSettings::fontFamily):
        (QWebSettings::testAttribute):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added explicit functions for resetting the font sizes and font families.

        * Api/qwebsettings.cpp:
        (QWebSettings::resetFontSize):
        (QWebSettings::resetFontFamily):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Combined the font sizes accessors/setters under one setter/getter with an enum.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::setFontSize):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Renamed QWebPage::userAgentStringForUrl(url) to QWebPage::userAgentFor(url);

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::userAgent):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Renamed QWebPage::webActionTriggered to QWebPage::triggerAction

        * Api/qwebpage.cpp:
        (QWebPagePrivate::_q_webActionTriggered):
        (QWebPage::keyPressEvent):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the virtual QWebPage::setWindowGeometry to be a geometryChangeRequest signal instead.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setWindowRect):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Renamed QWebPage::webAction() to QWebPage::action()

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        * Api/qwebpage.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Removed a bunch of slots/functions that are now available through the new actions API.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added some more comments to the API after another round of API review with Lars.

        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved QWebFrame::selectedText() to QWebPage::selectedText().
        
        The currently selected text is a property of the page as a whole.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::selectedText):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Implemented support for settings propagation.
        
        If an individual setting is not set in a page's QWebSettings then it is inherited from the default settings.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::~QWebSettings):
        (QWebSettings::setFontFamily):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Reworked the QWebSettings API.
        QWebPage now returns a pointer to its mutable QWebSettings object and the settings of newly created QWebPageObjects are initialized from QWebSettings::defaultSettings().

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPage::QWebPage):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettingsPrivate::apply):
        (QWebSettings::defaultSettings):
        (QWebSettings::QWebSettings):
        (QWebSettings::setMinimumFontSize):
        (QWebSettings::setMinimumLogicalFontSize):
        (QWebSettings::setDefaultFontSize):
        (QWebSettings::setDefaultFixedFontSize):
        (QWebSettings::setUserStyleSheetLocation):
        (QWebSettings::setFontFamily):
        (QWebSettings::fontFamily):
        (QWebSettings::setAttribute):
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:
        (main):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Made the QWebSettings::webGraphic functions static. The implementation was using QWebSettings::global() anyway.

        * Api/qwebsettings.cpp:
        (QWebSettings::setWebGraphic):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved the WebCore::Image specific function loadResourcePixmap from qwebsettings.cpp to ImageQt.cpp and made it static.

        * Api/qwebsettings.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the icondatabase accessor to be a static function because it doesn't change the QWebSettings object.

        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the webAction() accessor to not be a slot but just a public function.

        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Implemented createWindow() in QtLauncher.

        * QtLauncher/main.cpp:
        (WebPage::WebPage):
        (MainWindow::MainWindow):
        (WebPage::createWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Implemented opening links in new windows

        * Api/qwebpage.cpp:
        (frameLoadRequest):
        (openNewWindow):
        (QWebPage::webActionTriggered):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added and implemented the "OpenLink" action.

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::webActionTriggered):
        (QWebPage::webAction):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Adjust the state of the reload action correctly.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateNavigationActions):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Initialize the undo/redo actions from QUndoStack. That automatically takes care of enabling/disabling them as well as the activation/trigger.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPage::webAction):
        (QWebPage::undoStack):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added undo/redo toolbar buttons, moved the location line edit into a separate toolbar.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Update the editor actions when the selection changes.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedSelection):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added cut/copy/paste actions to the toolbar of QtLauncher

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Started working on keeping the state of the navigation actions up-to-date.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateNavigationActions):
        (QWebPage::webAction):
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::didPerformFirstNavigation):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Use the navigational web actions in the toolbar

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Store a bunch of QActions in QWebPagePrivate, corresponding to QWebPage::WebAction.
        Added QWebPageContext to hold context sensitive information (for example used by the context menu).

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (webActionForContextMenuAction):
        (QWebPagePrivate::createContextMenu):
        (QWebPagePrivate::_q_webActionTriggered):
        (QWebPage::webActionTriggered):
        (QWebPage::webAction):
        (QWebPage::contextMenuEvent):
        (QWebPageContext::QWebPageContext):
        (QWebPageContext::operator=):
        (QWebPageContext::~QWebPageContext):
        (QWebPageContext::pos):
        (QWebPageContext::text):
        (QWebPageContext::linkUrl):
        (QWebPageContext::imageUrl):
        (QWebPageContext::image):
        (QWebPageContext::targetFrame):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved the editing actions implemented in keyPressEvent into webActionTriggered.

        * Api/qwebpage.cpp:
        (QWebPage::webActionTriggered):
        (QWebPage::keyPressEvent):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Introduced a central virtual void webActionTriggered(WebAction action) method that is called from various
        convenience methods such as cut()/copy()/paste().

        * Api/qwebpage.cpp:
        (QWebPage::goBack):
        (QWebPage::webActionTriggered):
        (QWebPage::cut):
        (QWebPage::copy):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Restructure the context menu classes for the Qt port. ContextMenu and ContextMenuItem don't store
        QActions/QMenus anymore but just store the action type, tag, title and optionally submenu as created
        in ContextMenu::populate().
        For the actual Qt context menu we traverse this structure after sendContextMenuEvent and create a QMenu
        out of it. That menu is currently not functional anymore though.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        (QWebPage::contextMenuEvent):
        * Api/qwebpage_p.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed ContextMenu::setPlatformDescription for the Qt port to not show the qmenu right away
        but instead just behave as a normal setter that takes ownership of the platform menu description (the qmenu).
        Instead now QWebPage::contextMenuEvent() retrieves the QMenu after calling sendContextMenuEvent and calls exec()
        on it.

        * Api/qwebpage.cpp:
        (QWebPage::contextMenuEvent):
        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::getCustomMenuFromDefaultItems):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed to PlatformMouseEvent constructor to allow construction from a QContextMenuEvent.
        Call sendContextMenuEvent on the event handler from a QWidget::contextMenuEvent re-implementation instead of in mousePressEvent.

        * Api/qwebpage.cpp:
        (QWebPage::mousePressEvent):
        (QWebPage::contextMenuEvent):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Turned onLoadProgressChanged into a real private slot.

        * Api/qwebpage.cpp:
        (QWebPage::QWebPage):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make QWebHistory an explicitly shared object, returned as a pointer by QWebPage::history().

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpagehistory.cpp:
        (QWebPageHistory::QWebPageHistory):
        * Api/qwebpagehistory.h:

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        comments on API changes that we'd like to do.

        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Add a QWebPage::frameCreated() signal and fix DRT
        
        The removal of createFrame in QWebPage broke the re-implementation
        in DumpRenderTree. Instead emit a frameCreated() signal and
        connect to it in DumpRenderTree.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Remove QWebPage::createFrame()
        
        now that QWebFrame doesn't have virtual methods anymore, there
        is no need for a createFrame() factory method in QWebpage.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Moved all the event handlers from QWebFrame into QWebPage.
        
        This cleans up the public API and allows us to remove the
        HackWebFrame hack in DumpRenderTree.
        

        * Api/qwebframe.cpp:
        (QWebFrame::pos):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::frameAt):
        (QWebPage::mouseMoveEvent):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::wheelEvent):
        * Api/qwebpage_p.h:

2007-11-07  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Use correct UserAgent string.
        
        * Only have one User Agent String and this place is QWebPage
        * QWebPage::open -> QWebNetworkRequest -> QWebPage::open ->
        ResourceRequest -> FrameLoader::load -> QWebNetworkRequest
        * ResourceRequest is != 0 when getting called from WebCore, we
        will only do requests when coming from WebCore and then we can
        use the User-Agent set with the help of the FrameLoaderClient
        * We might want to change QWebNetworkRequest a bit
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        remove two notImplemented() warnings, as I believe we don't
        have to implement these methods. Add some (commented out)
        debug code in one place.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedSelection):
        (WebCore::EditorClientQt::didWriteSelectionToPasteboard):

2007-11-05  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Darin Adler.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        * WebCoreSupport/ChromeClientQt.h:
        Revised to use new WebCore ChromeClient createWindow API.

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix most of the issues I found with Clipboard and DnD.

        * Api/qwebpage.cpp:
        (QWebPage::dragLeaveEvent):

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        QDrag objects need to be created on the heap.

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        a dragLeave event is not the same as cancelling a drag.

        * Api/qwebpage.cpp:

2007-10-26  Mark Rowe  <mrowe@apple.com>

        Build fix.  Add missing #include of Platform.h.

        * Api/qwebhistoryinterface.cpp:

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * We need to set a != 0 status code for the fast/loader/xmlhttprequest-missing-file-exception.html
        * libxml2 has the semantic that when writing an empty string and finishing it will report an error. For QXmlStreamReader this is valid.
        * This is causing some regressions...
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):
        (QWebNetworkInterface::addJob):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Make fast/loader/xmlhttprequest-bad-mimetype.html pass. We use QHttp to download local files but we may not set the HTTP result code on the ResourceResponse.
        * We can use the cross-platform result now. QWebNetworkInterface/Manager behaves the same as mac for local files.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * fast/dom/onerror-img.html regressed due checking the JobStates because in case of error (e.g. not being able to connect) the job will no be started.
        * Use the error message from Qt. It might or might not be translated.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::errorString):
        (QWebNetworkJob::setErrorString):
        (QWebNetworkManager::finished):
        (QWebNetworkManager::doWork):
        (WebCoreHttp::onRequestFinished):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Use the JobStatus to make sure to not deliver finished/data before the job has started. This is the case with the fast/dom/onerror-img.html test case.
        * We have no idea if any data will come so we can still finish and then get pending data. This luckily can't happen for the local file case.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::doWork):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * No need to initialize values in the QWebNetworkJob c'tor
        * Add a JobStatus to QWebNetworkJob and verify that the jobs are handled in the way we expect them to be handled. This means no data after the job has finished, not finishing a job before it has been started.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::status):
        (QWebNetworkJob::setStatus):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkJobPrivate::QWebNetworkJobPrivate):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Consistency: Always name the jobs job.
        

        * Api/qwebnetworkinterface.cpp:
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onSslErrors):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Implement our own queuing of network jobs to allow special handling of synchronous jobs. This makes us pass the fast/dom/xmlhttprequest-html-response-encoding.html test without a crash. Sync jobs will get a special treatment over the normals ones and in theory more than one sync job is supported.
        * This should be thread-safe besides QWebNetworkJob::{ref,deref}
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::~QWebNetworkJob):
        (QWebNetworkManager::QWebNetworkManager):
        (QWebNetworkManager::self):
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        (QWebNetworkManager::finished):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (QWebNetworkManager::queueStart):
        (QWebNetworkManager::queueData):
        (QWebNetworkManager::queueFinished):
        (QWebNetworkManager::doScheduleWork):
        (QWebNetworkManager::doWork):
        (gCleanupInterface):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::started):
        (QWebNetworkInterface::data):
        (QWebNetworkInterface::finished):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::cancel):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkManager::):
        (QWebNetworkManager::JobData::JobData):
        (QWebNetworkManager::JobFinished::JobFinished):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Do the percent replacement only when we are not base64. With base64 we should not have any % in it anyway.
        * Have a custom decodePercentEncoding method that works without doing any charset conversion. With converting back to latin1() we lost some information.
        * We pass the char-decoding.html test now
        

        * Api/qwebnetworkinterface.cpp:
        (decodePercentEncoding):
        (QWebNetworkInterfacePrivate::parseDataUrl):

2007-10-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        * Stop crashing on fast/events/frame-tab-focus.html the keyEvent can be 0.
        

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        remove some notImplemented() warnings.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientQt::isGrammarCheckingEnabled):
        (WebCore::EditorClientQt::respondToChangedSelection):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        allow paste from DOM so we pass more test cases.

        * Api/qwebpage.cpp:
        (QWebPage::setSettings):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Simplify the PlatformKeyEvent constructor. No need to have an extra boolean for isKeyUp in there, as the QKeyEvent has the information.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):
        (QWebPage::keyReleaseEvent):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        some smaller fixes to the editing support in DRT. Makes another few tests pass.

        * WebCoreSupport/EditorClientQt.cpp:
        (qt_dump_editing_callbacks):
        (qt_drt_run):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implemented support for most editing shortcuts to make contentEditable usable.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        no need to call setIsActive ourselves on the frame, as the focus controller does it for us.

        * Api/qwebpage.cpp:
        (QWebPage::focusInEvent):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Implement support for testing editing.

        * WebCoreSupport/EditorClientQt.cpp:
        (qt_dump_editing_callbacks):
        (qt_dump_set_accepts_editing):
        (dumpPath):
        (dumpRange):
        (WebCore::EditorClientQt::shouldDeleteRange):
        (WebCore::EditorClientQt::shouldShowDeleteInterface):
        (WebCore::EditorClientQt::shouldBeginEditing):
        (WebCore::EditorClientQt::shouldEndEditing):
        (WebCore::EditorClientQt::shouldInsertText):
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::shouldApplyStyle):
        (WebCore::EditorClientQt::didBeginEditing):
        (WebCore::EditorClientQt::respondToChangedContents):
        (WebCore::EditorClientQt::respondToChangedSelection):
        (WebCore::EditorClientQt::didEndEditing):
        (WebCore::EditorClientQt::shouldInsertNode):

2007-10-19  Alp Toker  <alp@atoker.com>

        Reviewed by Oliver.

        GTK+ build fix enabling the new local database storage feature.
        There is also a prospective Qt build fix.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runDatabaseSizeLimitPrompt):
        * WebCoreSupport/ChromeClientQt.h:

2007-10-19  Simon Hausmann  <hausmann@kde.org>

        Fix the Qt/Windows build: Include the moc file from the .cpp file so
        that config.h is included before wtf/MathExtras. The former defines
        the MSVC defines for rand_s.

        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-10-19  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Fix the windows/qt build by including config.h first to fix wtf/MathExtras.h inclusion.

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:

2007-10-10  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff Garen.

        changes to keep the build from breaking

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        set a default encoding for documents. Makes fast/dom/Document/document-charset.html pass.

        * Api/qwebpage.cpp:
        (QWebPage::setSettings):

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Don't return a 404 status code for empty data: urls. Fixes fast/dom/HTMLHeadElement/head-check.html

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkInterfacePrivate::parseDataUrl):

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Don't set up connections inside QWebPage::createFrame, as users might be reimplementing that method. Make sure we get only one titleChanged() signal per title change, and implement the support for testing this in DRT.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        (QWebPage::createFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add a clear() method to QWebPageHistory.

        * Api/qwebpagehistory.cpp:
        (QWebPageHistory::clear):
        (QWebPageHistory::itemAtIndex):
        * Api/qwebpagehistory.h:

2007-10-05  Lars Knoll  <lars@trolltech.com>

        add proper error messages to the FrameLoaderClient.
        Implement ChromeClientQt::closeWindowSoon and
        FrameLoaderClientQt::dispatchCreatePage (which should go away IMO).
        Some fixes in DRT to make it work correctly with multiple windows.

        Reviewed by Maciej.

        * Api/qwebframe.h:
        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::cancel):
        (QWebNetworkInterface::addJob):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::closeWindowSoon):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::cancelledError):
        (WebCore::):
        (WebCore::FrameLoaderClientQt::blockedError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::dispatchCreatePage):

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Signed off by Olliej.

        move WebKitQt to WebKit/qt for consistency with the other ports.

        * Api/headers.pri: Renamed from WebKitQt/Api/headers.pri.
        * Api/qcookiejar.cpp: Renamed from WebKitQt/Api/qcookiejar.cpp.
        (QCookieJarPrivate::QCookieJarPrivate):
        (qHash):
        (QCookieJar::QCookieJar):
        (QCookieJar::~QCookieJar):
        (QCookieJar::setCookies):
        (QCookieJar::cookies):
        (QCookieJar::isEnabled):
        (QCookieJar::setEnabled):
        (gCleanupJar):
        (QCookieJar::setCookieJar):
        (QCookieJar::cookieJar):
        * Api/qcookiejar.h: Renamed from WebKitQt/Api/qcookiejar.h.
        * Api/qtwebkit.prf: Renamed from WebKitQt/Api/qtwebkit.prf.
        * Api/qwebframe.cpp: Renamed from WebKitQt/Api/qwebframe.cpp.
        (QWebFramePrivate::init):
        (QWebFramePrivate::parentFrame):
        (QWebFramePrivate::horizontalScrollBar):
        (QWebFramePrivate::verticalScrollBar):
        (QWebFrame::QWebFrame):
        (QWebFrame::~QWebFrame):
        (QWebFrame::addToJSWindowObject):
        (QWebFrame::markup):
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        (QWebFrame::title):
        (QWebFrame::name):
        (QWebFrame::page):
        (QWebFrame::selectedText):
        (QWebFrame::childFrames):
        (QWebFrame::verticalScrollBarPolicy):
        (QWebFrame::setVerticalScrollBarPolicy):
        (QWebFrame::horizontalScrollBarPolicy):
        (QWebFrame::setHorizontalScrollBarPolicy):
        (QWebFrame::render):
        (QWebFrame::layout):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        (QWebFrame::evaluateJavaScript):
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseDoubleClickEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        * Api/qwebframe.h: Renamed from WebKitQt/Api/qwebframe.h.
        * Api/qwebframe_p.h: Renamed from WebKitQt/Api/qwebframe_p.h.
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebhistoryinterface.cpp: Renamed from WebKitQt/Api/qwebhistoryinterface.cpp.
        (WebCore::historyContains):
        (gCleanupInterface):
        (QWebHistoryInterface::setDefaultInterface):
        (QWebHistoryInterface::defaultInterface):
        (QWebHistoryInterface::QWebHistoryInterface):
        * Api/qwebhistoryinterface.h: Renamed from WebKitQt/Api/qwebhistoryinterface.h.
        * Api/qwebkitglobal.h: Renamed from WebKitQt/Api/qwebkitglobal.h.
        * Api/qwebnetworkinterface.cpp: Renamed from WebKitQt/Api/qwebnetworkinterface.cpp.
        (qHash):
        (operator==):
        (QWebNetworkRequestPrivate::init):
        (QWebNetworkRequestPrivate::setURL):
        (QWebNetworkRequest::QWebNetworkRequest):
        (QWebNetworkRequest::operator=):
        (QWebNetworkRequest::~QWebNetworkRequest):
        (QWebNetworkRequest::url):
        (QWebNetworkRequest::setUrl):
        (QWebNetworkRequest::httpHeader):
        (QWebNetworkRequest::setHttpHeader):
        (QWebNetworkRequest::httpHeaderField):
        (QWebNetworkRequest::setHttpHeaderField):
        (QWebNetworkRequest::postData):
        (QWebNetworkRequest::setPostData):
        (QWebNetworkJob::QWebNetworkJob):
        (QWebNetworkJob::~QWebNetworkJob):
        (QWebNetworkJob::url):
        (QWebNetworkJob::postData):
        (QWebNetworkJob::httpHeader):
        (QWebNetworkJob::request):
        (QWebNetworkJob::response):
        (QWebNetworkJob::setResponse):
        (QWebNetworkJob::cancelled):
        (QWebNetworkJob::ref):
        (QWebNetworkJob::deref):
        (QWebNetworkJob::networkInterface):
        (QWebNetworkJob::frame):
        (QWebNetworkManager::QWebNetworkManager):
        (QWebNetworkManager::self):
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkManager::addHttpJob):
        (QWebNetworkManager::cancelHttpJob):
        (QWebNetworkManager::httpConnectionClosed):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (gCleanupInterface):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::~QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::~WebCoreHttp):
        (WebCoreHttp::request):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::getConnection):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onDone):
        (WebCoreHttp::onStateChanged):
        (WebCoreHttp::cancel):
        (WebCoreHttp::onSslErrors):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):
        (HostInfo::HostInfo):
        * Api/qwebnetworkinterface.h: Renamed from WebKitQt/Api/qwebnetworkinterface.h.
        * Api/qwebnetworkinterface_p.h: Renamed from WebKitQt/Api/qwebnetworkinterface_p.h.
        (QWebNetworkJobPrivate::QWebNetworkJobPrivate):
        (WebCore::HostInfo::HostInfo):
        (WebCore::WebCoreHttp::HttpConnection::HttpConnection):
        * Api/qwebobjectplugin.cpp: Renamed from WebKitQt/Api/qwebobjectplugin.cpp.
        (QWebFactoryLoader::QWebFactoryLoader):
        (QWebFactoryLoader::self):
        (QWebFactoryLoader::descriptionForName):
        (QWebFactoryLoader::mimetypesForName):
        (QWebFactoryLoader::mimeTypeForExtension):
        (QWebFactoryLoader::extensions):
        (QWebFactoryLoader::nameForMimetype):
        (QWebFactoryLoader::create):
        (QWebObjectPlugin::QWebObjectPlugin):
        (QWebObjectPlugin::~QWebObjectPlugin):
        (QWebObjectPlugin::descriptionForKey):
        (QWebObjectPlugin::mimetypesForKey):
        (QWebObjectPlugin::extensionsForMimetype):
        * Api/qwebobjectplugin.h: Renamed from WebKitQt/Api/qwebobjectplugin.h.
        * Api/qwebobjectplugin_p.h: Renamed from WebKitQt/Api/qwebobjectplugin_p.h.
        (QWebFactoryLoader::names):
        (QWebFactoryLoader::supportsMimeType):
        * Api/qwebobjectpluginconnector.cpp: Renamed from WebKitQt/Api/qwebobjectpluginconnector.cpp.
        (QWebObjectPluginConnector::QWebObjectPluginConnector):
        (QWebObjectPluginConnector::frame):
        (QWebObjectPluginConnector::pluginParentWidget):
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebobjectpluginconnector.h: Renamed from WebKitQt/Api/qwebobjectpluginconnector.h.
        * Api/qwebpage.cpp: Renamed from WebKitQt/Api/qwebpage.cpp.
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPagePrivate::navigationRequested):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::QWebPage):
        (QWebPage::~QWebPage):
        (QWebPage::createFrame):
        (QWebPage::open):
        (QWebPage::url):
        (QWebPage::title):
        (QWebPage::mainFrame):
        (QWebPage::sizeHint):
        (QWebPage::stop):
        (QWebPage::history):
        (QWebPage::goBack):
        (QWebPage::goForward):
        (QWebPage::goToHistoryItem):
        (QWebPage::javaScriptConsoleMessage):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::createWindow):
        (QWebPage::createModalDialog):
        (QWebPage::createPlugin):
        (QWebPage::navigationRequested):
        (QWebPage::setWindowGeometry):
        (QWebPage::canCut):
        (QWebPage::canCopy):
        (QWebPage::canPaste):
        (QWebPage::cut):
        (QWebPage::copy):
        (QWebPage::paste):
        (QWebPage::isModified):
        (QWebPage::undoStack):
        (dropActionToDragOp):
        (dragOpToDropAction):
        (QWebPage::resizeEvent):
        (QWebPage::paintEvent):
        (QWebPage::mouseMoveEvent):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::wheelEvent):
        (QWebPage::keyPressEvent):
        (QWebPage::keyReleaseEvent):
        (QWebPage::focusInEvent):
        (QWebPage::focusOutEvent):
        (QWebPage::focusNextPrevChild):
        (QWebPage::dragEnterEvent):
        (QWebPage::dragLeaveEvent):
        (QWebPage::dragMoveEvent):
        (QWebPage::dropEvent):
        (QWebPage::setNetworkInterface):
        (QWebPage::networkInterface):
        (QWebPage::icon):
        (QWebPage::setSettings):
        (QWebPage::settings):
        (QWebPage::chooseFile):
        (QWebPage::setNetworkProxy):
        (QWebPage::networkProxy):
        (QWebPage::userAgentStringForUrl):
        (QWebPage::onLoadProgressChanged):
        (QWebPage::totalBytes):
        * Api/qwebpage.h: Renamed from WebKitQt/Api/qwebpage.h.
        * Api/qwebpage_p.h: Renamed from WebKitQt/Api/qwebpage_p.h.
        * Api/qwebpagehistory.cpp: Renamed from WebKitQt/Api/qwebpagehistory.cpp.
        (QWebHistoryItem::QWebHistoryItem):
        (QWebHistoryItem::operator=):
        (QWebHistoryItem::~QWebHistoryItem):
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        (QWebHistoryItem::title):
        (QWebHistoryItem::lastVisited):
        (QWebHistoryItem::icon):
        (QWebPageHistory::QWebPageHistory):
        (QWebPageHistory::itemAtIndex):
        (QWebPageHistory::operator=):
        (QWebPageHistory::~QWebPageHistory):
        (QWebPageHistory::items):
        (QWebPageHistory::backItems):
        (QWebPageHistory::forwardItems):
        (QWebPageHistory::canGoBack):
        (QWebPageHistory::canGoForward):
        (QWebPageHistory::goBack):
        (QWebPageHistory::goForward):
        (QWebPageHistory::goToItem):
        (QWebPageHistory::backItem):
        (QWebPageHistory::currentItem):
        (QWebPageHistory::forwardItem):
        * Api/qwebpagehistory.h: Renamed from WebKitQt/Api/qwebpagehistory.h.
        (QExplicitlySharedDataPointer::operator*):
        (QExplicitlySharedDataPointer::operator->):
        (QExplicitlySharedDataPointer::operator T *):
        (QExplicitlySharedDataPointer::operator const T *):
        (QExplicitlySharedDataPointer::data):
        (QExplicitlySharedDataPointer::constData):
        (QExplicitlySharedDataPointer::operator==):
        (QExplicitlySharedDataPointer::operator!=):
        (QExplicitlySharedDataPointer::QExplicitlySharedDataPointer):
        (QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer):
        (QExplicitlySharedDataPointer::operator=):
        (QExplicitlySharedDataPointer::operator!):
        (::QExplicitlySharedDataPointer):
        * Api/qwebpagehistory_p.h: Renamed from WebKitQt/Api/qwebpagehistory_p.h.
        (QWebHistoryItemPrivate::QWebHistoryItemPrivate):
        (QWebHistoryItemPrivate::~QWebHistoryItemPrivate):
        (QWebPageHistoryPrivate::QWebPageHistoryPrivate):
        (QWebPageHistoryPrivate::~QWebPageHistoryPrivate):
        * Api/qwebsettings.cpp: Renamed from WebKitQt/Api/qwebsettings.cpp.
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettings::QWebSettings):
        (QWebSettings::~QWebSettings):
        (QWebSettings::setMinimumFontSize):
        (QWebSettings::minimumFontSize):
        (QWebSettings::setMinimumLogicalFontSize):
        (QWebSettings::minimumLogicalFontSize):
        (QWebSettings::setDefaultFontSize):
        (QWebSettings::defaultFontSize):
        (QWebSettings::setDefaultFixedFontSize):
        (QWebSettings::defaultFixedFontSize):
        (QWebSettings::setUserStyleSheetLocation):
        (QWebSettings::userStyleSheetLocation):
        (QWebSettings::setIconDatabaseEnabled):
        (QWebSettings::iconDatabaseEnabled):
        (QWebSettings::setWebGraphic):
        (QWebSettings::webGraphic):
        (QWebSettings::operator=):
        (QWebSettings::setGlobal):
        (QWebSettings::global):
        (QWebSettings::setFontFamily):
        (QWebSettings::fontFamily):
        (QWebSettings::setAttribute):
        (QWebSettings::testAttribute):
        (loadResourcePixmap):
        * Api/qwebsettings.h: Renamed from WebKitQt/Api/qwebsettings.h.
        * ChangeLog: Renamed from WebKitQt/ChangeLog.
        * Plugins/ICOHandler.cpp: Renamed from WebKitQt/Plugins/ICOHandler.cpp.
        (IcoHeader::operator >>):
        (IcoHeader::BMP_INFOHDR::):
        (IcoHeader::operator<<):
        (IcoHeader::LessDifference::LessDifference):
        (IcoHeader::LessDifference::operator ()):
        (IcoHeader::loadFromDIB):
        (ICOHandler::ICOHandler):
        (ICOHandler::canRead):
        (ICOHandler::read):
        (ICOHandler::write):
        (ICOHandler::name):
        (ICOPlugin::keys):
        (ICOPlugin::capabilities):
        (ICOPlugin::create):
        * Plugins/ICOHandler.h: Renamed from WebKitQt/Plugins/ICOHandler.h.
        * Plugins/Plugins.pro: Renamed from WebKitQt/Plugins/Plugins.pro.
        * QtLauncher/QtLauncher.pro: Renamed from WebKitQt/QtLauncher/QtLauncher.pro.
        * QtLauncher/main.cpp: Renamed from WebKitQt/QtLauncher/main.cpp.
        (HoverLabel::HoverLabel):
        (HoverLabel::setHoverLink):
        (HoverLabel::sizeForFont):
        (HoverLabel::sizeHint):
        (HoverLabel::updateSize):
        (HoverLabel::resetAnimation):
        (HoverLabel::paintEvent):
        (HoverLabel::interpolate):
        (ClearButton::ClearButton):
        (ClearButton::paintEvent):
        (SearchEdit::SearchEdit):
        (SearchEdit::~SearchEdit):
        (SearchEdit::paintEvent):
        (SearchEdit::resizeEvent):
        (SearchEdit::moveEvent):
        (MainWindow::MainWindow):
        (MainWindow::changeLocation):
        (MainWindow::loadFinished):
        (MainWindow::showLinkHover):
        (MainWindow::resizeEvent):
        (main):
        * WebCoreSupport/ChromeClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/ChromeClientQt.cpp.
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::~ChromeClientQt):
        (WebCore::ChromeClientQt::setWindowRect):
        (WebCore::ChromeClientQt::windowRect):
        (WebCore::ChromeClientQt::pageRect):
        (WebCore::ChromeClientQt::scaleFactor):
        (WebCore::ChromeClientQt::focus):
        (WebCore::ChromeClientQt::unfocus):
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::createModalDialog):
        (WebCore::ChromeClientQt::show):
        (WebCore::ChromeClientQt::canRunModal):
        (WebCore::ChromeClientQt::runModal):
        (WebCore::ChromeClientQt::setToolbarsVisible):
        (WebCore::ChromeClientQt::toolbarsVisible):
        (WebCore::ChromeClientQt::setStatusbarVisible):
        (WebCore::ChromeClientQt::statusbarVisible):
        (WebCore::ChromeClientQt::setScrollbarsVisible):
        (WebCore::ChromeClientQt::scrollbarsVisible):
        (WebCore::ChromeClientQt::setMenubarVisible):
        (WebCore::ChromeClientQt::menubarVisible):
        (WebCore::ChromeClientQt::setResizable):
        (WebCore::ChromeClientQt::addMessageToConsole):
        (WebCore::ChromeClientQt::chromeDestroyed):
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::closeWindowSoon):
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::setStatusbarText):
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        (WebCore::ChromeClientQt::tabsToLinks):
        (WebCore::ChromeClientQt::windowResizerRect):
        (WebCore::ChromeClientQt::addToDirtyRegion):
        (WebCore::ChromeClientQt::scrollBackingStore):
        (WebCore::ChromeClientQt::updateBackingStore):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        (WebCore::ChromeClientQt::setToolTip):
        (WebCore::ChromeClientQt::print):
        * WebCoreSupport/ChromeClientQt.h: Renamed from WebKitQt/WebCoreSupport/ChromeClientQt.h.
        * WebCoreSupport/ContextMenuClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/ContextMenuClientQt.cpp.
        (WebCore::ContextMenuClientQt::contextMenuDestroyed):
        (WebCore::ContextMenuClientQt::getCustomMenuFromDefaultItems):
        (WebCore::ContextMenuClientQt::contextMenuItemSelected):
        (WebCore::ContextMenuClientQt::downloadURL):
        (WebCore::ContextMenuClientQt::lookUpInDictionary):
        (WebCore::ContextMenuClientQt::speak):
        (WebCore::ContextMenuClientQt::stopSpeaking):
        (WebCore::ContextMenuClientQt::searchWithGoogle):
        * WebCoreSupport/ContextMenuClientQt.h: Renamed from WebKitQt/WebCoreSupport/ContextMenuClientQt.h.
        * WebCoreSupport/DragClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/DragClientQt.cpp.
        (WebCore::DragClientQt::actionMaskForDrag):
        (WebCore::DragClientQt::willPerformDragDestinationAction):
        (WebCore::DragClientQt::dragControllerDestroyed):
        (WebCore::DragClientQt::dragSourceActionMaskForPoint):
        (WebCore::DragClientQt::willPerformDragSourceAction):
        (WebCore::DragClientQt::startDrag):
        * WebCoreSupport/DragClientQt.h: Renamed from WebKitQt/WebCoreSupport/DragClientQt.h.
        (WebCore::DragClientQt::DragClientQt):
        * WebCoreSupport/EditCommandQt.cpp: Renamed from WebKitQt/WebCoreSupport/EditCommandQt.cpp.
        (EditCommandQt::EditCommandQt):
        (EditCommandQt::~EditCommandQt):
        (EditCommandQt::redo):
        (EditCommandQt::undo):
        * WebCoreSupport/EditCommandQt.h: Renamed from WebKitQt/WebCoreSupport/EditCommandQt.h.
        * WebCoreSupport/EditorClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/EditorClientQt.cpp.
        (WebCore::EditorClientQt::shouldDeleteRange):
        (WebCore::EditorClientQt::shouldShowDeleteInterface):
        (WebCore::EditorClientQt::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientQt::isGrammarCheckingEnabled):
        (WebCore::EditorClientQt::spellCheckerDocumentTag):
        (WebCore::EditorClientQt::shouldBeginEditing):
        (WebCore::EditorClientQt::shouldEndEditing):
        (WebCore::EditorClientQt::shouldInsertText):
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::shouldApplyStyle):
        (WebCore::EditorClientQt::shouldMoveRangeAfterDelete):
        (WebCore::EditorClientQt::didBeginEditing):
        (WebCore::EditorClientQt::respondToChangedContents):
        (WebCore::EditorClientQt::respondToChangedSelection):
        (WebCore::EditorClientQt::didEndEditing):
        (WebCore::EditorClientQt::didWriteSelectionToPasteboard):
        (WebCore::EditorClientQt::didSetSelectionTypesForPasteboard):
        (WebCore::EditorClientQt::selectWordBeforeMenuEvent):
        (WebCore::EditorClientQt::isEditable):
        (WebCore::EditorClientQt::registerCommandForUndo):
        (WebCore::EditorClientQt::registerCommandForRedo):
        (WebCore::EditorClientQt::clearUndoRedoOperations):
        (WebCore::EditorClientQt::canUndo):
        (WebCore::EditorClientQt::canRedo):
        (WebCore::EditorClientQt::undo):
        (WebCore::EditorClientQt::redo):
        (WebCore::EditorClientQt::shouldInsertNode):
        (WebCore::EditorClientQt::pageDestroyed):
        (WebCore::EditorClientQt::smartInsertDeleteEnabled):
        (WebCore::EditorClientQt::toggleContinuousSpellChecking):
        (WebCore::EditorClientQt::toggleGrammarChecking):
        (WebCore::EditorClientQt::handleKeypress):
        (WebCore::EditorClientQt::handleInputMethodKeypress):
        (WebCore::EditorClientQt::EditorClientQt):
        (WebCore::EditorClientQt::textFieldDidBeginEditing):
        (WebCore::EditorClientQt::textFieldDidEndEditing):
        (WebCore::EditorClientQt::textDidChangeInTextField):
        (WebCore::EditorClientQt::doTextFieldCommandFromEvent):
        (WebCore::EditorClientQt::textWillBeDeletedInTextField):
        (WebCore::EditorClientQt::textDidChangeInTextArea):
        (WebCore::EditorClientQt::ignoreWordInSpellDocument):
        (WebCore::EditorClientQt::learnWord):
        (WebCore::EditorClientQt::checkSpellingOfString):
        (WebCore::EditorClientQt::checkGrammarOfString):
        (WebCore::EditorClientQt::updateSpellingUIWithGrammarString):
        (WebCore::EditorClientQt::updateSpellingUIWithMisspelledWord):
        (WebCore::EditorClientQt::showSpellingUI):
        (WebCore::EditorClientQt::spellingUIIsShowing):
        (WebCore::EditorClientQt::getGuessesForWord):
        (WebCore::EditorClientQt::isEditing):
        (WebCore::EditorClientQt::setInputMethodState):
        * WebCoreSupport/EditorClientQt.h: Renamed from WebKitQt/WebCoreSupport/EditorClientQt.h.
        * WebCoreSupport/FrameLoaderClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/FrameLoaderClientQt.cpp.
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::~FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::webFrame):
        (WebCore::FrameLoaderClientQt::callPolicyFunction):
        (WebCore::FrameLoaderClientQt::slotCallPolicyFunction):
        (WebCore::FrameLoaderClientQt::hasWebView):
        (WebCore::FrameLoaderClientQt::hasFrameView):
        (WebCore::FrameLoaderClientQt::hasBackForwardList):
        (WebCore::FrameLoaderClientQt::resetBackForwardList):
        (WebCore::FrameLoaderClientQt::provisionalItemIsTarget):
        (WebCore::FrameLoaderClientQt::loadProvisionalItemFromPageCache):
        (WebCore::FrameLoaderClientQt::invalidateCurrentItemPageCache):
        (WebCore::FrameLoaderClientQt::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientQt::makeDocumentView):
        (WebCore::FrameLoaderClientQt::makeRepresentation):
        (WebCore::FrameLoaderClientQt::forceLayout):
        (WebCore::FrameLoaderClientQt::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientQt::setCopiesOnScroll):
        (WebCore::FrameLoaderClientQt::tokenForLoadErrorReset):
        (WebCore::FrameLoaderClientQt::resetAfterLoadError):
        (WebCore::FrameLoaderClientQt::doNotResetAfterLoadError):
        (WebCore::FrameLoaderClientQt::willCloseDocument):
        (WebCore::FrameLoaderClientQt::detachedFromParent2):
        (WebCore::FrameLoaderClientQt::detachedFromParent3):
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        (WebCore::FrameLoaderClientQt::loadedFromCachedPage):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchWillClose):
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientQt::dispatchShow):
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientQt::clearLoadingFromPageCache):
        (WebCore::FrameLoaderClientQt::isLoadingFromPageCache):
        (WebCore::FrameLoaderClientQt::revertToProvisionalState):
        (WebCore::FrameLoaderClientQt::clearUnarchivingState):
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientQt::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientQt::willChangeTitle):
        (WebCore::FrameLoaderClientQt::didChangeTitle):
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::finalSetupForReplace):
        (WebCore::FrameLoaderClientQt::setDefersLoading):
        (WebCore::FrameLoaderClientQt::isArchiveLoadPending):
        (WebCore::FrameLoaderClientQt::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientQt::clearArchivedResources):
        (WebCore::FrameLoaderClientQt::canShowMIMEType):
        (WebCore::FrameLoaderClientQt::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientQt::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientQt::frameLoadCompleted):
        (WebCore::FrameLoaderClientQt::restoreViewState):
        (WebCore::FrameLoaderClientQt::provisionalLoadStarted):
        (WebCore::FrameLoaderClientQt::shouldTreatURLAsSameAsCurrent):
        (WebCore::FrameLoaderClientQt::addHistoryItemForFragmentScroll):
        (WebCore::FrameLoaderClientQt::didFinishLoad):
        (WebCore::FrameLoaderClientQt::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientQt::setTitle):
        (WebCore::FrameLoaderClientQt::userAgent):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientQt::canHandleRequest):
        (WebCore::FrameLoaderClientQt::windowObjectCleared):
        (WebCore::FrameLoaderClientQt::didPerformFirstNavigation):
        (WebCore::FrameLoaderClientQt::registerForIconNotification):
        (WebCore::FrameLoaderClientQt::setDocumentViewFromCachedPage):
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForReload):
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientQt::saveViewStateToItem):
        (WebCore::FrameLoaderClientQt::saveDocumentViewToCachedPage):
        (WebCore::FrameLoaderClientQt::canCachePage):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::cancelledError):
        (WebCore::FrameLoaderClientQt::blockedError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::shouldFallBack):
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientQt::dispatchCreatePage):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientQt::startDownload):
        (WebCore::FrameLoaderClientQt::willUseArchive):
        (WebCore::FrameLoaderClientQt::createFrame):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::):
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::redirectDataToPlugin):
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
        (WebCore::FrameLoaderClientQt::overrideMediaType):
        * WebCoreSupport/FrameLoaderClientQt.h: Renamed from WebKitQt/WebCoreSupport/FrameLoaderClientQt.h.
        * WebCoreSupport/InspectorClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/InspectorClientQt.cpp.
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::showWindow):
        (WebCore::InspectorClientQt::closeWindow):
        (WebCore::InspectorClientQt::attachWindow):
        (WebCore::InspectorClientQt::detachWindow):
        (WebCore::InspectorClientQt::highlight):
        (WebCore::InspectorClientQt::hideHighlight):
        * WebCoreSupport/InspectorClientQt.h: Renamed from WebKitQt/WebCoreSupport/InspectorClientQt.h.
        * WebKitPart/WebKitFactory.cpp: Renamed from WebKitQt/WebKitPart/WebKitFactory.cpp.
        (WebKitFactory::WebKitFactory):
        (WebKitFactory::~WebKitFactory):
        (WebKitFactory::createPartObject):
        (WebKitFactory::instance):
        (WebKitFactory::ref):
        (WebKitFactory::deref):
        * WebKitPart/WebKitFactory.h: Renamed from WebKitQt/WebKitPart/WebKitFactory.h.
        * WebKitPart/WebKitPart.cpp: Renamed from WebKitQt/WebKitPart/WebKitPart.cpp.
        (WebKitPart::WebKitPart):
        (WebKitPart::~WebKitPart):
        (WebKitPart::openFile):
        (WebKitPart::openUrl):
        (WebKitPart::closeUrl):
        (WebKitPart::parentPart):
        (WebKitPart::frame):
        (WebKitPart::initView):
        * WebKitPart/WebKitPart.desktop: Renamed from WebKitQt/WebKitPart/WebKitPart.desktop.
        * WebKitPart/WebKitPart.h: Renamed from WebKitQt/WebKitPart/WebKitPart.h.
        (WebKitPart::):
        * WebKitPart/WebKitPart.rc: Renamed from WebKitQt/WebKitPart/WebKitPart.rc.
        * WebKitPart/WebKitPartBrowser.rc: Renamed from WebKitQt/WebKitPart/WebKitPartBrowser.rc.
        * WebKitPart/WebKitPartBrowserExtension.cpp: Renamed from WebKitQt/WebKitPart/WebKitPartBrowserExtension.cpp.
        (WebKitPartBrowserExtension::WebKitPartBrowserExtension):
        * WebKitPart/WebKitPartBrowserExtension.h: Renamed from WebKitQt/WebKitPart/WebKitPartBrowserExtension.h.
        * WebKitPart/WebKitPartClient.cpp: Renamed from WebKitQt/WebKitPart/WebKitPartClient.cpp.
        (WebKitPartClient::WebKitPartClient):
        (WebKitPartClient::~WebKitPartClient):
        * WebKitPart/WebKitPartClient.h: Renamed from WebKitQt/WebKitPart/WebKitPartClient.h.
        * WebKitPart/WebKitPartInterface.cpp: Renamed from WebKitQt/WebKitPart/WebKitPartInterface.cpp.
        (WebKitPartInterface::WebKitPartInterface):
        (WebKitPartInterface::~WebKitPartInterface):
        (WebKitPartInterface::url):
        * WebKitPart/WebKitPartInterface.h: Renamed from WebKitQt/WebKitPart/WebKitPartInterface.h.
        * WebKitPart/org.kde.WebKitPart.xml: Renamed from WebKitQt/WebKitPart/org.kde.WebKitPart.xml.

2007-10-02  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Eric Seidel.

        Open the requested url on the newly created window.
        Implement createModalDialog and provide new API for this.
        Patch by M. Mehdi Salem Naraghi (momesana) with additions by me.

        * Api/qwebpage.cpp:
        (QWebPage::createModalDialog):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::createModalDialog):

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        Add API to retrieve the frame name from QWebFrame.
        Implement support for DRT::dumpChildrenAsText.

        * Api/qwebframe.cpp:
        (QWebFrame::name):
        * Api/qwebframe.h:

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        Fix the handling of the response header for data urls. Make sure we always pass absolute URLs to WebKit from both DRT and QtLauncher.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onSslErrors):
        * QtLauncher/main.cpp:
        (main):

2007-10-01  Lars Knoll  <lars@trolltech.com>

        Reviewed by Eric.

        Fix a wrong extension mapping in the MIMETypeRegistry and identify about: url's as frames in the FrameLoaderClient.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::makeDocumentView):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-09-30  George Staikos  <staikos@kde.org>

        Qt build fix (OS X specific).

        * QtLauncher/QtLauncher.pro:

2007-09-26  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType): Check for empty URL instead of invalid URL.

2007-09-25  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=14885
          LGPL'ed files contain incorrect FSF address

        * Api/qcookiejar.cpp:
        * Api/qcookiejar.h:
        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebhistoryinterface.cpp:
        * Api/qwebhistoryinterface.h:
        * Api/qwebkitglobal.h:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebobjectplugin.cpp:
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectpluginconnector.cpp:
        * Api/qwebobjectpluginconnector.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpagehistory.cpp:
        * Api/qwebpagehistory.h:
        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:
        * WebCoreSupport/EditCommandQt.cpp:
        * WebCoreSupport/EditCommandQt.h:

2007-09-25  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon and Lars.

        Modifies the addToJSWindowObject to bind js objects using the built-in
        kjs_window class.  Make sure to protect the created runtime object from
        garbage collection.

        Adds a signal to QWebFrame to notify clients of the beginning of a
        provisional load.  DRT needs this.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):
        * Api/qwebframe.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):

2007-09-10  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Don't re-encode urls, resulting in double encoding.  Fixes login to
        GMail.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):
        (QWebNetworkManager::started):

2007-09-08  Mark Rowe  <mrowe@apple.com>

        Qt build fix.  Move stub method implementations to the right class.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::didPerformFirstNavigation):

2007-09-08  Brady Eidson  <beidson@apple.com>

        YABF (Yet Another Build Fix)

        * Api/qwebsettings.cpp:
        (QWebSettings::iconDatabaseEnabled):

2007-09-08  Brady Eidson  <beidson@apple.com>

        Better build fix

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClient::registerForIconNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-09-08  Brady Eidson  <beidson@apple.com>

        Build fix

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClient::registerForIconNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-09-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.
        
        Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no 
        memory cache, or a very tiny one
        
        Keep the Qt build working with an empty stub.
        
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClient::didPerformFirstNavigation):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-09-07  George Staikos  <staikos@kde.org>

        Fix typo.

        * Api/qwebpage.cpp:
        (QWebPage::onLoadProgressChanged):

2007-09-07  Qing Zhao  <qing@staikos.net>

        Reviewed by Anders and George.

        Export page size and load progress in bytes.

        * Api/qwebpage.cpp:
        (QWebPage::QWebPage):
        (QWebPage::onLoadProgressChanged):
        (QWebPage::totalBytes):
        (QWebPage::bytesReceived):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-09-06  George Staikos  <staikos@kde.org>

        Reviewed by Anders.

        Make popup windows work again.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):

2007-09-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        <rdar://problem/5344848> IME is incorrectly used for key events when on non-editable regions
 
        EditorClient::setInputMethodState stub

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * WebCoreSupport/EditorClientQt.h:

2007-08-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Use QKeySequence::StandardKey for the page wise scrolling shortcuts.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):

2007-08-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        When scrolling with the keyboard don't call update() on the entire widget.
        The scrollbar/scrollview implementation is already smart enough to scroll with bitblt
        on a value change.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):

2007-08-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fix scrolling with the keyboard if only one of the two scrollbars is visible.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):

2007-08-29  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fix compilation.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):

2007-08-19  Mike Hommey  <mh+webkit@glandium.org>

        Reviewed by George Staikos.

        Don't export ICO symbols.

        * Plugins/Plugins.pro:

2007-08-19  George Staikos  <staikos@kde.org>

        Fix compilation.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-08-10  Lars Knoll  <lars@trolltech.com>

        Reviewed and landed by Simon.

        Limit the set of properties from the computed style to apply to Qt
        plugin widgets, as only a few of them make sense.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2007-08-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Use <object>'s classid attribute for creation of plugins through QWebPage::createPlugin.

        * Api/qwebpage.cpp:
        (QWebPage::createPlugin):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added support for network jobs from Qt resources using the qrc protocol.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkInterface::addJob):

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added support for "application/x-qt-styled-widget" that is treated like "application/x-qt-plugin" but also
        gets a Qt widget stylesheet set from the CSS computed style and the element style attribute.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added virtual QWebPage::createPlugin that is called for embedded objects with the mime type "application/x-qt-plugin"
        and fixed widget embedding by setting the right QWidget parent.

        * Api/qwebpage.cpp:
        (QWebPage::createPlugin):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-08-02  George Staikos  <staikos@kde.org>

        Reviewed by Simon.

        Add an interface for the useragent string.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentStringForUrl):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::userAgent):

2007-08-01  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add an interface to manage global history for clients

        * Api/headers.pri:
        * Api/qwebhistoryinterface.cpp: Added.
        (WebCore::historyContains):
        (gCleanupInterface):
        (QWebHistoryInterface::setDefaultInterface):
        (QWebHistoryInterface::defaultInterface):
        (QWebHistoryInterface::QWebHistoryInterface):
        * Api/qwebhistoryinterface.h: Added.

2007-07-30  Adam Treat  <adam.treat@torchmobile.com>

        Fix build.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldMoveRangeAfterDelete):
        * WebCoreSupport/EditorClientQt.h:

2007-07-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Link QtLauncher into $$OUTPUT_DIR/bin

        * QtLauncher/QtLauncher.pro:

2007-07-29  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Change QWebPage::paintEvent to draw using the individual rects provided
        via the QRegion and set the widget to use opaque paint events.

        These changes greatly reduce the cpu load as we are no longer painting the
        entire page for each 1px scroll :P

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        * Api/qwebpage.cpp:
        (QWebPage::QWebPage):
        (QWebPage::paintEvent):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addToDirtyRegion):

2007-07-29  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Respect the margins when creating frames.
        Set the scroll mode to always off like we did before the rendered
        frames patch and the other ports do now.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):

2007-07-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Don't create an app bundle on OSX to keep WebKitTools/Scripts/run-launcher working.

        * QtLauncher/QtLauncher.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fix compilation with MSVC.

        * Api/qwebpagehistory.cpp:
        (QWebPageHistory::operator=):
        * Api/qwebpagehistory.h:
        * Api/qwebsettings.cpp:
        (QWebSettings::operator=):
        * Api/qwebsettings.h:

2007-07-26  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Add a signal for history notification.

        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-07-24  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Niko and Lars.

        These are no longer necessary or used.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-07-20  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Add a signal for first layout and add the action type for the policy
        function.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::navigationRequested):
        (QWebPage::navigationRequested):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-07-19  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George.

        Do a recursive layout on the frame's children.  This fixes a
        segfault found when rendering some framesets.

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        (QWebFrame::layout):
        * Api/qwebframe.h:

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Make the Page with the now required InspectorClient.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2007-07-18  Sam Weinig  <sam@webkit.org>

        Build fix.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMEType):
        (WebCore::FrameLoaderClientQt::objectContentType):

2007-07-18  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack & Simon

        Reallow setting of scrollbar policies on QWebFrame.

        * Api/qwebframe.cpp:
        (QWebFrame::verticalScrollBarPolicy):
        (QWebFrame::setVerticalScrollBarPolicy):
        (QWebFrame::horizontalScrollBarPolicy):
        * Api/qwebframe.h:

2007-07-17  Adam Treat <adam.treat@torchmobile.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2007-07-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Blind build fix for Qt after r24366 by adding the additional
        WebCore::ResourceRequest& parameter to the download method.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::download):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-07-17  Adam Roben  <aroben@apple.com>

        Remove ContextMenuClientQt::shouldIncludeInspectElementItem

        Reviewed by Tim.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.h:

2007-07-16  Adam Roben  <aroben@apple.com>

        Updated ChromeClientQt for ChromeClient changes.

        Reviewed by Darin Adler.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::print): Added a Frame* parameter.
        * WebCoreSupport/ChromeClientQt.h: Ditto.

2007-07-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Mitz.

        Build fix.  Stub out ChromeClientQt::print.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::print):
        * WebCoreSupport/ChromeClientQt.h:

2007-07-12  George Staikos  <staikos@kde.org>

        Qt build fix for assertions.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-07-12  George Staikos  <staikos@kde.org>

        Qt build fix.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-07-10  Mark Rowe  <mrowe@apple.com>

        Qt build fix after r24126.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2007-07-10  Eli Fidler  <eli@staikos.net>

        Reviewed by George Staikos.

        Properly url-decode data urls.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkInterfacePrivate::parseDataUrl):

2007-07-09  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame from a QFrame to a pure QObject to eliminate all
        traces of widgets.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::parentFrame):
        (QWebFrame::QWebFrame):
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        (QWebFrame::evaluateJavaScript):
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseDoubleClickEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        * Api/qwebframe.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::pluginParentWidget):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::QWebPage):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::resizeEvent):
        (QWebPage::paintEvent):
        (QWebPage::mouseMoveEvent):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::wheelEvent):
        (QWebPage::keyPressEvent):
        (QWebPage::keyReleaseEvent):
        (QWebPage::focusInEvent):
        (QWebPage::focusOutEvent):
        (QWebPage::focusNextPrevChild):
        (QWebPage::chooseFile):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addToDirtyRegion):

2007-07-09  George Staikos  <staikos@kde.org>

        Fix a minor memory leak in the loader.

        * Api/qwebnetworkinterface.cpp:
        (gCleanupInterface):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):

2007-07-09  George Staikos  <staikos@kde.org>

        Fix a massive memory leak in the loader.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::httpConnectionClosed):
        (WebCoreHttp::~WebCoreHttp):

2007-07-09  George Staikos  <staikos@kde.org>

        Reviewed by Simon.

        Rework much of the HTTP stuff to make it more stable, and add SSL and
        proxy support.  Major memory leak also discovered but it needs more
        research as the obvious fix causes crashes.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::~WebCoreHttp):
        (WebCoreHttp::request):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::getConnection):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onDone):
        (WebCoreHttp::onStateChanged):
        (WebCoreHttp::onSslErrors):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        (WebCore::WebCoreHttp::HttpConnection::HttpConnection):

2007-07-06  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame to a QFrame from a scroll area.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::parentFrame):
        (QWebFramePrivate::horizontalScrollBar):
        (QWebFramePrivate::verticalScrollBar):
        (QWebFrame::QWebFrame):
        (QWebFrame::resizeEvent):
        (QWebFrame::suppressScrollbars):
        (QWebFrame::paintEvent):
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseDoubleClickEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        (QWebFrame::keyPressEvent):
        (QWebFrame::focusInEvent):
        (QWebFrame::focusOutEvent):
        (QWebFrame::evaluateJavaScript):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::pluginParentWidget):

2007-07-04  Adam Roben  <aroben@apple.com>

        Added a stub for ChromeClientQt::setToolTip

        Reviewed by Sam.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip):
        * WebCoreSupport/ChromeClientQt.h:

2007-07-04  Adam Roben  <aroben@apple.com>

        Added a stub for ChromeClientQt::mouseDidMoveOverElement

        Reviewed by Sam.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        * WebCoreSupport/ChromeClientQt.h:

2007-06-28  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Propagate mouse double click events from Qt to WebCore.

        * Api/qwebframe.cpp:
        (QWebFrame::mouseDoubleClickEvent):
        * Api/qwebframe.h:

2007-06-28  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Implemented clipboard functions in QWebPage, in particular can(Cut|Copy|Paste), cut/copy/paste as slot as well as a selectionChanged() signal.

        * Api/qwebpage.cpp:
        (QWebPage::canCut):
        (QWebPage::canCopy):
        (QWebPage::canPaste):
        (QWebPage::cut):
        (QWebPage::copy):
        (QWebPage::paste):
        * Api/qwebpage.h:
        * WebCoreSupport/EditorClientQt.cpp:

2007-06-27  George Staikos  <staikos@kde.org>

        Compile with various Qt configurations.

        * Api/qwebnetworkinterface.cpp:
        (WebCoreHttp::scheduleNextRequest):
        * Api/qwebpage.cpp:
        (QWebPage::javaScriptPrompt):
        (QWebPage::dragEnterEvent):
        (QWebPage::dragLeaveEvent):
        (QWebPage::dragMoveEvent):
        (QWebPage::dropEvent):
        (QWebPage::chooseFile):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):

2007-06-27  Eli Fidler  <eli@staikos.net>

        Reviewed by George Staikos.

        Check for QT_NO_IMAGE_TEXT and compile either way.

        * Plugins/ICOHandler.cpp:
        (ICOHandler::read):

2007-06-27  Eli Fidler  <eli@staikos.net>

        Reviewed by George Staikos.

        Remove QT3_SUPPORT dependency in the ICO plugin.

        * Plugins/ICOHandler.cpp:
        (IcoHeader::loadFromDIB):

2007-06-25  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Start to add proxy and SSL support to WebKit Qt.  Proxy works
        unauthenticated.  Added hooks to be able to add authentication.
        Also fixes some network errors.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::setURL):
        (QWebNetworkJob::frame):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onDone):
        (WebCoreHttp::onSslErrors):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        (QWebPage::setNetworkProxy):
        (QWebPage::networkProxy):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-06-21  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Implement the default resources on Qt.

        * Api/qwebpage.cpp:
        (QWebPage::icon):
        * Api/qwebsettings.cpp:
        (QWebSettings::setWebGraphic):
        (QWebSettings::webGraphic):
        (loadResourcePixmap):
        * Api/qwebsettings.h:

2007-06-15  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Add ICO support to the Qt build.

        * Api/qwebpage.cpp:
        (QWebPage::icon):
        * Api/qwebpage.h:
        * Api/qwebsettings.cpp:
        (QWebSettings::setIconDatabaseEnabled):
        (QWebSettings::iconDatabaseEnabled):
        * Api/qwebsettings.h:
        * Plugins: Added.
        * Plugins/ICOHandler.cpp: Added.
        (IcoHeader::operator >>):
        (IcoHeader::BMP_INFOHDR::):
        (IcoHeader::operator<<):
        (IcoHeader::LessDifference::LessDifference):
        (IcoHeader::LessDifference::operator ()):
        (IcoHeader::loadFromDIB):
        (ICOHandler::ICOHandler):
        (ICOHandler::canRead):
        (ICOHandler::read):
        (ICOHandler::write):
        (ICOHandler::name):
        (ICOPlugin::keys):
        (ICOPlugin::capabilities):
        (ICOPlugin::create):
        * Plugins/ICOHandler.h: Added.
        * Plugins/Plugins.pro: Added.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveIcon):

2007-06-15  George Staikos  <staikos@kde.org>

        Fixing the Qt build.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::shouldIncludeInspectElementItem):
        * WebCoreSupport/ContextMenuClientQt.h:

2007-06-20  Adam Roben  <aroben@apple.com>

        More speculative Qt build fixes.

        Add a stub implementation of InspectorClientQt.

        * WebCoreSupport/InspectorClientQt.cpp: Added.
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::showWindow):
        (WebCore::InspectorClientQt::closeWindow):
        (WebCore::InspectorClientQt::attachWindow):
        (WebCore::InspectorClientQt::detachWindow):
        (WebCore::InspectorClientQt::highlight):
        (WebCore::InspectorClientQt::hideHighlight):
        * WebCoreSupport/InspectorClientQt.h: Added.

2007-06-19  George Staikos  <staikos@kde.org>

        Reviewed by Tim Hatcher.

        Add https support.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::WebCoreHttp):

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Add evaluateJavaScript() method.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * Api/qwebframe.h:

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Implement most of the editing commands, better focus handling, fix some
        keyboard and mouse handling, and add keyboard navigation.  May be
        refactored later as the key switches are ugly.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        (QWebFrame::keyPressEvent):
        (QWebFrame::keyReleaseEvent):
        (QWebFrame::focusInEvent):
        (QWebFrame::focusOutEvent):
        (QWebFrame::focusNextPrevChild):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress):

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Implement all of the Javascript dialogs and file chooser.
        Also makes the statusbar virtual into a signal and shuffles some
        virtuals around a bit.  The helper in FrameLoaderClientQt may go away
        shortly.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::chooseFile):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::setStatusbarText):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::chooseFile):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-06-14  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Removed QWebHistoryItem::parent() as it is not implemented and WebCore's

        HistoryItem itself doesn't seem to have a parent pointer either.

        * Api/qwebpagehistory.h:

2007-06-14  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Make it possible to copy QWebHistoryItem objects.

        * Api/qwebpagehistory.cpp:
        * Api/qwebpagehistory.h:

2007-06-14  Lars Knoll <lars@trolltech.com>

        Reviewed by George

        Fix a crash when a request from the plugin resulted
        in a HTTP redirect.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):

2007-06-14  Lars Knoll <lars@trolltech.com>

        Reviewed by George.

        Work around a bug in Qt's QHttp implementation and
        get web pages to load again.

        * Api/qwebpage.cpp:
        (QWebPage::open):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a make install target that installs the Qt port and renamed
        WebKitQt to QtWebKit

        * Api/headers.pri: Added.
        * Api/qtwebkit.prf: Added.

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added httpHeaderField setter/getter to QWebNetworkRequest for convenience.

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed QWebObjectPluginConnector::requestUrl to take a QWebNetworkRequest as argument.

        * Api/qwebnetworkinterface.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebobjectpluginconnector.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a QWebNetworkRequest convenience constructor.

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebpage.cpp:
        (QWebPage::open):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the QWebPage::open(const QUrl &url, const QHttpRequestHeader &httpHeader, const QByteArray &postData)
        overload to take a QWebNetworkRequest instead.

        * Api/qwebpage.cpp:
        (QWebPage::open):
        * Api/qwebpage.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        In QWebPage::open(const QUrl &, const QHttpRequestHeader &, ...) don't make the population
        of the WebCore::ResourceRequest depend on the validity of the QHttpRequestHeader but just
        pick the individual fields if we can use them.

        * Api/qwebpage.cpp:
        (QWebPage::open):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Minor QWebNetworkRequet API fixlet

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Use QWebNetworkRequest for QWebPage::navigationRequested.

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::navigationRequested):
        (QWebPage::navigationRequested):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Some docs for QWebNetworkRequest

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::QWebNetworkRequest):
        (QWebNetworkRequest::~QWebNetworkRequest):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved QWebNetworkJob::Method enum into QWebNetworkRequest.

        * Api/qwebnetworkinterface.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebobjectpluginconnector.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Rename QWebNetworkJob::request() into QWebNetworkJob::httpHeader() and added

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::postData):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::scheduleNextRequest):
        * Api/qwebnetworkinterface.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Introduce QWebNetworkRequest in the public API.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed QWebNetworkJobPrivate to aggregate a QWebNetworkRequest instead of inheriting from it.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Rename QWebNetworkRequest::request into QWebNetworkRequest::httpHeader.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::init):
        (QWebNetworkRequest::setURL):
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        * Api/qwebnetworkinterface_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-06-12  Lars Knoll <lars@trolltech.com>

        Reviewed by George Staikos.

        Remove duplicate symbols.

        * Api/qwebobjectplugin_p.h:

2007-06-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Niko.

        Fix compilation, and remove dependency on Qt
        private header.

        * Api/qwebobjectplugin_p.h:
        (QWebFactoryLoader::supportsMimeType):

2007-06-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Niko.

        Parts of the patch done by Zack.
        Fix up some parts in the implementation of QWebNetworkInterface
        so it can be used by plugins.
        Change the plugin API so we can actually get all the information
        required by the JS bridge from them as well.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::cancelled):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::finished):
        * Api/qwebobjectplugin.cpp:
        (QWebFactoryLoader::QWebFactoryLoader):
        (QWebFactoryLoader::descriptionForName):
        (QWebFactoryLoader::mimetypesForName):
        (QWebFactoryLoader::mimeTypeForExtension):
        (QWebFactoryLoader::extensions):
        (QWebFactoryLoader::nameForMimetype):
        (QWebFactoryLoader::create):
        (QWebObjectPlugin::descriptionForKey):
        (QWebObjectPlugin::mimetypesForKey):
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectplugin_p.h:
        (QWebFactoryLoader::names):
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebpage.cpp:
        (QWebPage::networkInterface):

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a QWebPage::open overload to allow specifying the http header and post data.
        (it's an overload instead of a merged openUrl to avoid including qhttp.h in qwebpage.h,
        which would imply that one has to have QT += network in the .pro file for using WebKitQt)

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added the possibility to intercept url requests through QWebPage::navigationRequested.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::createFrame):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a QWebNetworkRequest::init overload that takes a WebCore::ResourceRequest,
        to be called from FrameLoaderClientQt in the near future.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        * Api/qwebnetworkinterface_p.h:

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved the postData setup into QWebNetworkRequest::init.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::init):
        (QWebNetworkManager::add):

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved HTTP header field propagation to QWebNetworkRequest::init.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::init):
        (QWebNetworkManager::add):

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Started moving the code to separate a WebCore::ResourceRequest into a QUrl, postData
        and QHttpRequestHeader into a separate little QWebNetworkRequest struct.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::init):
        (QWebNetworkManager::add):
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):

2007-06-11  Zack Rusin <zrusin@trolltech.com>

        Reviewed by Lars

        Forgot to export the plugin connector.

        * Api/qwebobjectpluginconnector.h

2007-06-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Add a QWebObjectPluginConnector class. The class will
        facility communication between the plugin and WebKit.
        Currently it's used to make the plugin network capable.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJobPrivate::setDefaults):
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkJobPrivate::QWebNetworkJobPrivate):
        * Api/qwebobjectplugin.cpp:
        (QWebFactoryLoader::create):
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectplugin_p.h:
        * Api/qwebobjectpluginconnector.cpp: Added.
        (QWebObjectPluginConnector::QWebObjectPluginConnector):
        (QWebObjectPluginConnector::frame):
        (QWebObjectPluginConnector::pluginParentWidget):
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebobjectpluginconnector.h: Added.
        (QWebObjectPluginConnector::):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-06-06  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add an API to create and load plugins.
        Don't include moc files by hand anymore, rather let
        qmake handle them.

        * Api/qcookiejar.cpp:
        (QCookieJar::cookieJar):
        * Api/qwebframe.cpp:
        (QWebFrame::scrollContentsBy):
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebobjectplugin.cpp: Added.
        (QWebFactoryLoader::QWebFactoryLoader):
        (QWebFactoryLoader::self):
        (QWebFactoryLoader::mimeTypeForExtension):
        (QWebFactoryLoader::create):
        (QWebObjectPlugin::QWebObjectPlugin):
        (QWebObjectPlugin::~QWebObjectPlugin):
        (QWebObjectPlugin::extensionsForMimetype):
        * Api/qwebobjectplugin.h: Added.
        * Api/qwebobjectplugin_p.h: Added.
        (QWebFactoryLoader::mimeTypes):
        (QWebFactoryLoader::extensions):
        (QWebFactoryLoader::supportsMimeType):
        * Api/qwebpage.cpp:
        (QWebPage::settings):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-05-28  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by andersca and simon

        Adding public settings Api to the Qt port.
        QWebSetting's is a value based settings
        object settable on the QWebPage.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::QWebPage):
        (QWebPage::setSettings):
        (QWebPage::settings):
        * Api/qwebpage.h:
        * Api/qwebsettings.cpp: Added.
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettings::QWebSettings):
        (QWebSettings::~QWebSettings):
        (QWebSettings::setMinimumFontSize):
        (QWebSettings::minimumFontSize):
        (QWebSettings::setMinimumLogicalFontSize):
        (QWebSettings::minimumLogicalFontSize):
        (QWebSettings::setDefaultFontSize):
        (QWebSettings::defaultFontSize):
        (QWebSettings::setDefaultFixedFontSize):
        (QWebSettings::defaultFixedFontSize):
        (QWebSettings::setUserStyleSheetLocation):
        (QWebSettings::userStyleSheetLocation):
        (QWebSettings::setGlobal):
        (QWebSettings::global):
        (QWebSettings::setFontFamily):
        (QWebSettings::fontFamily):
        (QWebSettings::setAttribute):
        (QWebSettings::testAttribute):
        * Api/qwebsettings.h: Added.
        * QtLauncher/main.cpp:
        (main):
2007-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Sam Weinig.
        
        Consolidate all notImplemented() macro definitions into
        one header file for all platforms.

        * WebCoreSupport/ChromeClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/EditorClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-05-25  George Staikos  <staikos@kde.org>

        Reviewed by Simon.

        The http loader should only ask for .... http cookies!

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-05-24  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fix multipart/form-data HTTP POSTs. The content-type wasn't set
        correctly. Fortunately WebCore does it already, so there's no need
        for us to do it since we already transfer all HTTP header fields :)

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-05-23  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack, idea from Lars.

        Share WebCoreHttp and therefore HTTP connections among multiple
        QWebNetworkInterface instances by moving the code into
        QWebNetworkManager.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::addHttpJob):
        (QWebNetworkManager::cancelHttpJob):
        (QWebNetworkManager::httpConnectionClosed):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::cancel):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:

2007-05-23  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack, discussed also with Lars.

        Make it possible to specify a per-QWebPage network interface (needed
        for the KDE KIO integration).

        Merged the file and the network loader into
        QWebNetworkInterface(Private), which simplifies the loading code.

        When receiving a redirection don't emit the data of the redirected job
        to the document. (otherwise the kind of "This page has moved" text
        appears right on top of the real page content)

        * Api/qwebnetworkinterface.cpp:
        (qHash):
        (operator==):
        (QWebNetworkJob::QWebNetworkJob):
        (QWebNetworkJob::networkInterface):
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (QWebNetworkInterfacePrivate::addHttpJob):
        (QWebNetworkInterfacePrivate::httpConnectionClosed):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::cancel):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::setNetworkInterface):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-05-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Don't do HTTP downloads in a second thread. Simplifies
        the code significantly and fixes crashes on some
        Web pages.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (LoaderThread::LoaderThread):
        (LoaderThread::run):
        (WebCoreHttp::cancel):
        (NetworkLoader::NetworkLoader):
        (NetworkLoader::request):
        (NetworkLoader::cancel):
        * Api/qwebnetworkinterface_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):

2007-05-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Simon.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJobPrivate::setURL):
        (QWebNetworkManager::started):
            Fix Host: line in HTTP headers and resolving of relative URLs
            when redirecting.
        * Api/qwebnetworkinterface_p.h:
            Clean up qHash forward declaration a bit.

2007-05-23  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow): Fix loading progress signal/slot connection.

2007-05-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add): Fix http headers for POST.

2007-05-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Simon

        Remove the userHandle methods from QWebnetworkJob again.
        They don't really give us anything and just clutter the API.

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:

2007-05-21  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * Api/qwebnetworkinterface.h: Export the net API.

2007-05-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Add an API layer for network downloads. Basically QWebnetworkInterface
        is an interface class for downloading resources. QWebnetworkJob describes
        the actual object to download.

        QWebNetworkInterface has a default implementation that replaces the
        old ResourceHandleManager class in the Qt port.

        * Api/qwebnetworkinterface.cpp: Added.
        (QWebNetworkJobPrivate::setURL):
        (QWebNetworkJob::QWebNetworkJob):
        (QWebNetworkJob::~QWebNetworkJob):
        (QWebNetworkJob::url):
        (QWebNetworkJob::postData):
        (QWebNetworkJob::request):
        (QWebNetworkJob::response):
        (QWebNetworkJob::setResponse):
        (QWebNetworkJob::cancelled):
        (QWebNetworkJob::ref):
        (QWebNetworkJob::deref):
        (QWebNetworkJob::setUserHandle):
        (QWebNetworkJob::userHandle):
        (QWebNetworkManager::QWebNetworkManager):
        (QWebNetworkManager::self):
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::~QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (LoaderThread::LoaderThread):
        (LoaderThread::run):
        (FileLoader::FileLoader):
        (FileLoader::request):
        (FileLoader::sendData):
        (FileLoader::parseDataUrl):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::~WebCoreHttp):
        (WebCoreHttp::request):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::getConnection):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onStateChanged):
        (WebCoreHttp::cancel):
        (HostInfo::HostInfo):
        (qHash):
        (operator==):
        (NetworkLoader::NetworkLoader):
        (NetworkLoader::~NetworkLoader):
        (NetworkLoader::request):
        (NetworkLoader::connectionClosed):
        (NetworkLoader::cancel):
        * Api/qwebnetworkinterface.h: Added.
        (QWebNetworkJob::setHandle):
        (QWebNetworkJob::handle):
        * Api/qwebnetworkinterface_p.h: Added.
        (WebCore::LoaderThread::):
        (WebCore::LoaderThread::waitForSetup):
        (WebCore::HostInfo::HostInfo):

2007-05-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        * Api/qwebpage.h: Changed the loadProgressChanged API to use an
        percent integer instead of a double precision floating pointer number.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-05-18  Marius Bugge Monsen  <mbm@trolltech.com>

        Reviewed by Zack Rusin.

        The default constructed KeyboardEvent has
        no PlatformKeyboardEvent.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress):

2007-05-17  Adam Treat <adam@staikos.net>

        Reviewed by George Staikos.

        - Implement frameLoadCompleted
        - Fix build (by George)

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::frameLoadCompleted):
        (WebCore::FrameLoaderClientQt::createFrame):

2007-05-17  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Implement canShowMIMEType

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMEType):

2007-05-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        pass the mouse events to the event handler, not the frameview.

        * Api/qwebframe.cpp:
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mouseReleaseEvent):

2007-05-14  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Updates after Maciej's frame change.

        * Api/qwebpage.cpp:
        (QWebPage::stop):
              Call stopForUserCancel() instead of stopAllLoaders()
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::didFinishLoad):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
              Call QWebFrame::loadDone() from the places it's supposed to be
              called from.

2007-05-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Rob Buis.
        
        - call Frame::init as needed - this prevents crashes but pages don't appear.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.
        
        Slight modification to last editor method fix.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::updateSpellingUIWithGrammarString):
        * WebCoreSupport/EditorClientQt.h:

2007-05-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Add missing user description parameter to spelling-related editor client method.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::updateSpellingUIWithGrammarString):
        * WebCoreSupport/EditorClientQt.h:

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Zack.

        Tie QT drag events to the DragController logic
        to allow drag and drop events to be handled by
        webkit.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::QWebPage):
        (dropActionToDragOp):
        (dragOpToDropAction):
        (QWebPage::dragEnterEvent):
        (QWebPage::dragLeaveEvent):
        (QWebPage::dragMoveEvent):
        (QWebPage::dropEvent):
        * Api/qwebpage.h:
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):
        * WebCoreSupport/DragClientQt.h:
        (WebCore::DragClientQt::DragClientQt):

2007-04-27  Holger Freyther <freyther@kde.org>

        Reviewed by Maciej.

        Remove unmaintained CMake build system.

        * QtLauncher/CMakeLists.txt: Removed.
        * WebKitPart/CMakeLists.txt: Removed.

2007-04-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        Fix spelling error in spelling method name.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::updateSpellingUIWithGrammarString):
        * WebCoreSupport/EditorClientQt.h:

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

        Reviewed by Oliver.
        
        Spelling and grammar stubs

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::ignoreWordInSpellDocument):
        (WebCore::EditorClientQt::learnWord):
        (WebCore::EditorClientQt::checkSpellingOfString):
        (WebCore::EditorClientQt::checkGrammarOfString):
        (WebCore::EditorClientQt::udpateSpellingUIWithGrammarString):
        (WebCore::EditorClientQt::updateSpellingUIWithMisspelledWord):
        (WebCore::EditorClientQt::showSpellingUI):
        (WebCore::EditorClientQt::spellingUIIsShowing):
        (WebCore::EditorClientQt::getGuessesForWord):
        * WebCoreSupport/EditorClientQt.h:

2007-04-11  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Maciej.

        Add a Frame pointer to ChromeClient methods:
        http://bugs.webkit.org/show_bug.cgi?id=13127

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::createModalDialog):
        * WebCoreSupport/ChromeClientQt.h:

2007-04-12  Mark Rowe  <mrowe@apple.com>

        Second part of Qt build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::loadedFromCachedPage):
        (WebCore::FrameLoaderClientQt::setDocumentViewFromCachedPage):
        (WebCore::FrameLoaderClientQt::saveDocumentViewToCachedPage):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-03-27  Zack Rusin  <zrusin@trolltech.com>

        Fix the rendering crashes due triggered
        asserts. Improve a bit the layout
        scheduling.

        * Api/qwebframe.cpp:
        (QWebFrame::resizeEvent):
        (QWebFrame::paintEvent):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::forceLayout):

2007-03-16  Lars Knoll <lars@trolltech.com>

        Fix the Qt build once again.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::blockedError):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-03-13  Lars Knoll <lars@trolltech.com>

        Reviewed by George.

        Don't try to load <object> tags with an invalid url.
        Fixes LayoutTests/fast/dom/object-plugin-hides-properties.html
        which hit an assertion in the frameloader.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):

2007-03-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Anders.

        Fix some crashes in the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::markup):
            Check for null pointer
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
            Don't use an async callback into the FrameLoader.
        (WebCore::FrameLoaderClientQt::createFrame):

2007-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Stub for EditorClientQt::respondToChangedSelection

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedSelection):
        * WebCoreSupport/EditorClientQt.h:

2007-03-07  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        WebKitQT part of fix for:
        http://bugs.webkit.org/show_bug.cgi?id=10871
        http://bugs.webkit.org/show_bug.cgi?id=12677
        <rdar://problem/4823129> REGRESSION: IME key events different in nightly
        <rdar://problem/4759563> REGRESSION: Return key is always sent when you confirm a clause in kotoeri

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress): Changed handleKeyPress to handleKeypress.
        (WebCore::EditorClientQt::handleInputMethodKeypress): Added.
        * WebCoreSupport/EditorClientQt.h:

2007-03-07  Darin Adler  <darin@apple.com>

        * WebCoreSupport/FrameLoaderClientQt.h: Oops, forgot the header.

2007-03-07  Darin Adler  <darin@apple.com>

        * WebCoreSupport/FrameLoaderClientQt.cpp: (WebCore::FrameLoaderClientQt::userAgent):
        Try to fix the build by correcting the parameter here.

2007-03-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Try to fix the Qt build

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::willPerformDragDestinationAction):
        (WebCore::DragClientQt::dragControllerDestroyed):
        (WebCore::DragClientQt::createDragImageForLink):

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Kevin McCullough.

        - fix Qt build for earlier SVG changes.

        * WebCoreSupport/EditCommandQt.cpp:

2007-02-24  Zack Rusin  <zrusin@trolltech.com>

        Adjust the animation a little bit to make it more natural.

        * QtLauncher/main.cpp:
        (HoverLabel::paintEvent):

2007-02-23  Zack Rusin  <zrusin@trolltech.com>

        Adding a little bit of eye-candy to the last
        commit (animations on hover events)

        * QtLauncher/main.cpp:
        (HoverLabel::HoverLabel):
        (HoverLabel::setHoverLink):
        (HoverLabel::sizeForFont):
        (HoverLabel::sizeHint):
        (HoverLabel::resetAnimation):
        (HoverLabel::paintEvent):
        (HoverLabel::interpolate):
        (SearchEdit::resizeEvent):

2007-02-23  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Adding API and code for notification of when the
        mouse is hovering over a link and adding code to
        the sample app to showcase it.

        * Api/qwebframe.cpp:
        (QWebFrame::mouseMoveEvent):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPage::createFrame):
        * Api/qwebpage.h:
        * QtLauncher/main.cpp:
        (HoverLabel::HoverLabel):
        (HoverLabel::setHoverLink):
        (HoverLabel::sizeHint):
        (HoverLabel::updateSize):
        (HoverLabel::paintEvent):
        (ClearButton::ClearButton):
        (ClearButton::paintEvent):
        (SearchEdit::SearchEdit):
        (SearchEdit::resizeEvent):
        (SearchEdit::moveEvent):
        (MainWindow::MainWindow):
        (MainWindow::showLinkHover):
        (MainWindow::resizeEvent):

2007-02-22  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fixing the default scroll offset, cleaning
        up private methods and making the default
        look not use any frames.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::_q_handleKeyEvent):
        (QWebFrame::QWebFrame):
        (QWebFrame::wheelEvent):
        (QWebFrame::keyPressEvent):
        (QWebFrame::keyReleaseEvent):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2007-02-22  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Make the qwebframe act as a proper canvas.
        Implement it on top of QAbstractScrollArea.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::_q_adjustScrollbars):
        (QWebFrame::init):
        (QWebFrame::QWebFrame):
        (QWebFrame::resizeEvent):
        (QWebFrame::childFrames):
        (QWebFrame::paintEvent):
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        (QWebFrame::keyPressEvent):
        (QWebFrame::keyReleaseEvent):
        (QWebFrame::dragEnterEvent):
        (QWebFrame::dragLeaveEvent):
        (QWebFrame::dragMoveEvent):
        (QWebFrame::handleKeyEvent):
        (QWebFrame::scrollContentsBy):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):

2007-02-21  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Add more editing support, and undo/redo.  Requires some nasty evil
        hacks that have to be sorted out in WebCore/editor.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPage::undoStack):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::didBeginEditing):
        (WebCore::EditorClientQt::didEndEditing):
        (WebCore::EditorClientQt::isEditable):
        (WebCore::EditorClientQt::registerCommandForUndo):
        (WebCore::EditorClientQt::registerCommandForRedo):
        (WebCore::EditorClientQt::clearUndoRedoOperations):
        (WebCore::EditorClientQt::canUndo):
        (WebCore::EditorClientQt::canRedo):
        (WebCore::EditorClientQt::undo):
        (WebCore::EditorClientQt::redo):
        (WebCore::EditorClientQt::handleKeyPress):
        (WebCore::EditorClientQt::EditorClientQt):
        (WebCore::EditorClientQt::textFieldDidBeginEditing):
        (WebCore::EditorClientQt::textFieldDidEndEditing):
        (WebCore::EditorClientQt::isEditing):
        * WebCoreSupport/EditorClientQt.h:

2007-02-21  Zack Rusin  <zrusin@trolltech.com>

        Fix compilation.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.h:

2007-02-21  George Staikos  <staikos@kde.org>

        Fix compile.

        * Api/qwebpage.cpp:
        (QWebPage::stop):

2007-02-20  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Make editing of forms work plus make sure that non-void methods
        always return something.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldDeleteRange):
        (WebCore::EditorClientQt::shouldBeginEditing):
        (WebCore::EditorClientQt::shouldEndEditing):
        (WebCore::EditorClientQt::shouldInsertText):
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::shouldApplyStyle):
        (WebCore::EditorClientQt::shouldInsertNode):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientQt::dispatchCreatePage):

2007-02-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej.

        Additional coding by Maciej, additional review by Oliver.

        Add stubs for the new methods in ChormeClient and EditorClient,
        remove all references to FrameQt.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::isEditable):
        * WebCoreSupport/EditorClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::webFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Build fix -- adding DragClientQt method stubs

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::willPerformDragSourceAction):
        (WebCore::DragClientQt::startDrag):
        (WebCore::DragClientQt::createDragImageForLink):
        * WebCoreSupport/DragClientQt.h:

2007-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Moved scroll state down into the cross platform FrameLoader - 
        Blind attempt at keeping Qt building

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::restoreViewState):
        (WebCore::FrameLoaderClientQt::saveViewStateToItem):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-02-07  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the Qt build.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        * WebCoreSupport/ChromeClientQt.h:

2007-02-02  Zack Rusin  <zrusin@trolltech.com>

        Compilation fix: forward declare d-ptr.

        * Api/qcookiejar.h:

2007-02-02  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Make the frames white by default and get the
        files that WebCore can handle render inside
        the frames.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):
        (WebCore::FrameLoaderClientQt::objectContentType):

2007-02-01  George Staikos  <staikos@kde.org>

        Reviewed by Zack and Lars.

        Add a cookie interface for the Qt build.

        * Api/qcookiejar.cpp: Added.
        (QCookieJarPrivate::QCookieJarPrivate):
        (qHash):
        (QCookieJar::QCookieJar):
        (QCookieJar::~QCookieJar):
        (QCookieJar::setCookies):
        (QCookieJar::cookies):
        (QCookieJar::isEnabled):
        (QCookieJar::setEnabled):
        (gCleanupJar):
        (QCookieJar::setCookieJar):
        (QCookieJar::cookieJar):
        * Api/qcookiejar.h: Added.

2007-02-01  Lars Knoll <lars@trolltech.com>

        Reviewed by Adam.

        Fix form loading for the Qt build.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::callPolicyFunction):
        (WebCore::FrameLoaderClientQt::slotCallPolicyFunction):
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-01-31  Zack Rusin  <zrusin@trolltech.com>

        Expose the fact that the form has been edited
        in the public api.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::isModified):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedContents):
        (WebCore::EditorClientQt::isEditable):

2007-01-31  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Properly propagate key events.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::pageDestroyed):
        (WebCore::EditorClientQt::handleKeyPress):
        (WebCore::EditorClientQt::EditorClientQt):
        * WebCoreSupport/EditorClientQt.h:

2007-01-31  George Staikos  <staikos@kde.org>

        Remove focusFrame() - misguided - and add childFrames().  Fix a crash
        on exit.

        Reviewed by Zack.

        * Api/qwebframe.cpp:
        (QWebFrame::resizeEvent):
        (QWebFrame::childFrames):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::webFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-30  Zack Rusin  <zrusin@trolltech.com>

        Improve QtLauncher to make it more useful as a testing tool.

        * QtLauncher/main.cpp:
        (ClearButton::ClearButton):
        (ClearButton::paintEvent):
        (SearchEdit::SearchEdit):
        (SearchEdit::~SearchEdit):
        (SearchEdit::paintEvent):
        (SearchEdit::resizeEvent):
        (SearchEdit::moveEvent):
        (MainWindow::MainWindow):
        (MainWindow::changeLocation):
        (MainWindow::loadFinished):

2007-01-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Added import/export macros needed for build with ELF visibility and
        for a build on Windows (in the future).

        * Api/qwebframe.h:
        * Api/qwebkitglobal.h: Added.
        * Api/qwebpage.h:
        * Api/qwebpagehistory.h:

2007-01-30  Zack Rusin  <zack@kde.org>

        Change the signature of handleKeyPress
        (make it compile)

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyPress):
        * WebCoreSupport/EditorClientQt.h:

2007-01-29  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Set the allows-scrolling property on the view.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):

2007-01-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Stub for new DragClient method

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::dragSourceActionMaskForPoint):
        * WebCoreSupport/DragClientQt.h:

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - updated for cross-platform data loading support

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-29  George Staikos  <staikos@kde.org>

        Make window resizing work.

        * Api/qwebpage.cpp:
        (QWebPage::setWindowGeometry):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setWindowRect):

2007-01-29  George Staikos  <staikos@kde.org>

        Make popup windows work.

        * Api/qwebpage.cpp:
        (QWebPage::createWindow):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):

2007-01-29  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix the way we handle native widgets (QWidget) inside
        WebCore. Now WebCore::Widget owns the QWidget in all
        cases. This is the only way to get well defined semantics
        for all teh native widgets we have (currently ScrollView
        and ScrollBar, but plugins will follow).

        This has the side effect that one cannot rely on a defined 
        lifetime of a QWebFrame when using the API. 

        * Api/qwebframe.cpp:
        (QWebFrame::~QWebFrame):
        * Api/qwebpage.cpp:
        (QWebPage::~QWebPage):
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::detachedFromParent3):
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-29  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Implement more functions

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptConsoleMessage):
        (QWebPage::statusTextChanged):
        (QWebPage::runJavaScriptAlert):
        * Api/qwebpage.h:
        * Api/qwebpagehistory.cpp:
        (QWebPageHistory::canGoBack):
        (QWebPageHistory::canGoForward):
        * Api/qwebpagehistory.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addMessageToConsole):
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):

2007-01-26  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Qt implementation.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::title):
        (QWebFrame::selectedText):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPage::createFrame):
        (QWebPage::open):
        (QWebPage::url):
        (QWebPage::title):
        (QWebPage::focusFrame):
        (QWebPage::stop):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::detachFrameLoader):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::didChangeTitle):
        (WebCore::FrameLoaderClientQt::setTitle):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-26  Lars Knoll <lars@trolltech.com>

        Make it compile again with Qt 4.2 and add the copyright
        headers where forgotten in the last submit.

        * Api/qwebpagehistory.cpp:
        * Api/qwebpagehistory.h:
        (QExplicitlySharedDataPointer::operator*):
        (QExplicitlySharedDataPointer::operator->):
        (QExplicitlySharedDataPointer::operator T *):
        (QExplicitlySharedDataPointer::operator const T *):
        (QExplicitlySharedDataPointer::data):
        (QExplicitlySharedDataPointer::constData):
        (QExplicitlySharedDataPointer::operator==):
        (QExplicitlySharedDataPointer::operator!=):
        (QExplicitlySharedDataPointer::QExplicitlySharedDataPointer):
        (QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer):
        (QExplicitlySharedDataPointer::operator=):
        (QExplicitlySharedDataPointer::operator!):
        (::QExplicitlySharedDataPointer):

2007-01-26  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Implement history support on platform Qt.

        * Api/qwebpage.cpp:
        (QWebPage::history):
        (QWebPage::goBack):
        (QWebPage::goForward):
        (QWebPage::goToHistoryItem):
        * Api/qwebpage.h:
        * Api/qwebpagehistory.cpp: Added.
        (QWebHistoryItem::~QWebHistoryItem):
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        (QWebHistoryItem::title):
        (QWebHistoryItem::lastVisited):
        (QWebHistoryItem::icon):
        (QWebHistoryItem::QWebHistoryItem):
        (QWebPageHistory::QWebPageHistory):
        (QWebPageHistory::itemAtIndex):
        (QWebPageHistory::~QWebPageHistory):
        (QWebPageHistory::items):
        (QWebPageHistory::backItems):
        (QWebPageHistory::forwardItems):
        (QWebPageHistory::goBack):
        (QWebPageHistory::goForward):
        (QWebPageHistory::goToItem):
        (QWebPageHistory::backItem):
        (QWebPageHistory::currentItem):
        (QWebPageHistory::forwardItem):
        * Api/qwebpagehistory.h: Added.
        * Api/qwebpagehistory_p.h: Added.
        (QWebHistoryItemPrivate::QWebHistoryItemPrivate):
        (QWebHistoryItemPrivate::~QWebHistoryItemPrivate):
        (QWebPageHistoryPrivate::QWebPageHistoryPrivate):
        (QWebPageHistoryPrivate::~QWebPageHistoryPrivate):

2007-01-26  Lars Knoll <lars@trolltech.com>

        Get rid of FrameQtClient. It's unused since we moved over
        to the loader.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Correctly position child frames within the 
        toplevel frame. We were placed it on the widget
        itself instead of the vieweport.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):

2007-01-26  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Make sure we resize the HTML when resizing a 
        QWebFrame. Also ensure that the render tree
        is up to date before dumping it.

        * Api/qwebframe.cpp:
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        (QWebFrame::resizeEvent):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Display pages inside a mainwindow instead
        of a custom qwidget.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (main):

2007-01-25  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Emit the loadDone() signal from teh onload event callback
        again. This hangs on one or two test cases, but removes
        hundreds of failures elsewhere.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):

2007-01-24  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Implement some bits and pieces required by the loader.
        Fixes quite a few crashes and hangs in the lyout tests

        * Api/qwebframe.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::createFrame):

2007-01-24  Lars Knoll <lars@trolltech.com>

        Fix compilation again.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyPress):
        * WebCoreSupport/EditorClientQt.h:

2007-01-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix refcounting of FrameViews (they get created with a
        refcount of 1) and add a few safety checks to the 
        FrameLoaderClientQt.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::~QWebFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::detachedFromParent3):
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientQt::windowObjectCleared):

2007-01-23  Zack Rusin  <zack@kde.org>

        Adjust the DragClientQt to latest changes.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::dragControllerDestroyed):
        * WebCoreSupport/DragClientQt.h:

2007-01-23  Zack Rusin  <zack@kde.org>

        Fix the Qt build

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::willPerformDragDestinationAction):
        * WebCoreSupport/DragClientQt.h:

2007-01-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej

        Add support for Frames to the Qt build and fix some issues
        in the API classes.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::~QWebFrame):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::createFrame):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::detachedFromParent3):
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
        (WebCore::FrameLoaderClientQt::windowObjectCleared):
        (WebCore::FrameLoaderClientQt::createFrame):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::redirectDataToPlugin):
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
        (WebCore::FrameLoaderClientQt::overrideMediaType):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Qt build stubs for Drop logic

        * WebCoreSupport/DragClientQt.cpp: Added.
        (WebCore::DragClientQt::actionMaskForDrag):
        (WebCore::DragClientQt::willPerformDragDestinationAction):
        * WebCoreSupport/DragClientQt.h: Added.
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2007-01-19  John Sullivan  <sullivan@apple.com>

        Added stubs for new callbacks, to try to avoid breaking the Qt port.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-19  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the QT build.
        
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::setStatusbarText):
        * WebCoreSupport/ChromeClientQt.h:

2007-01-18  Zack Rusin  <zack@kde.org>

        Reviewed by Lars.

        Implementing a little bit of load progress tracking in the Qt port.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::page):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.h:
        * QtLauncher/main.cpp:
        (main):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::detachFrameLoader):
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-17  Alice Liu  <alice.liu@apple.com>

        Added these stubs to keep the Qt build from failing.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::didSetSelectionTypesForPasteboard):
        * WebCoreSupport/EditorClientQt.h:

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Remove the inheritance from Shared<XxxClient> in the
        client classes.

        Answer asynchronously to most of the Policy checking methods
        in FrameLoaderClientQt to avoid some crashes in the loader.

        * WebCoreSupport/ChromeClientQt.cpp:
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        * WebCoreSupport/EditorClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::callPolicyFunction):
        (WebCore::FrameLoaderClientQt::slotCallPolicyFunction):
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        change all notImplemented() macros to use qDebug
        instead of fprintf(stder, ...)

        * WebCoreSupport/ChromeClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/EditorClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-01-16  Alice Liu  <alice.liu@apple.com>

        Added these stubs to keep the Qt build from failing.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::didWriteSelectionToPasteboard):
        * WebCoreSupport/EditorClientQt.h:

2007-01-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Added the start of a public API to the Qt build
        of WebKit. Currently we have QWebPage and QWebFrame
        with a few small methods.

        Converted the QtLauncher to use the new public API.

        * Api/qwebframe.cpp: Added.
        (QWebFrame::QWebFrame):
        (QWebFrame::~QWebFrame):
        (QWebFrame::addToJSWindowObject):
        (QWebFrame::markup):
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        * Api/qwebframe.h: Added.
        * Api/qwebframe_p.h: Added.
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp: Added.
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::QWebPage):
        (QWebPage::~QWebPage):
        (QWebPage::createFrame):
        (QWebPage::open):
        (QWebPage::mainFrame):
        (QWebPage::sizeHint):
        * Api/qwebpage.h: Added.
        * Api/qwebpage_p.h: Added.
        * QtLauncher/main.cpp:
        (main):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::setWindowRect):
        (WebCore::ChromeClientQt::windowRect):
        (WebCore::ChromeClientQt::pageRect):
        (WebCore::ChromeClientQt::focus):
        (WebCore::ChromeClientQt::unfocus):
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::createModalDialog):
        (WebCore::ChromeClientQt::show):
        (WebCore::ChromeClientQt::addMessageToConsole):
        (WebCore::ChromeClientQt::chromeDestroyed):
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::closeWindowSoon):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::detachFrameLoader):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::partClearedInBegin):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-13  Lars Knoll <lars@trolltech.com>

        Compile again after yesterdays changes.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::incrementProgress):
        (WebCore::FrameLoaderClientQt::completeProgress):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-11  Brady Eidson  <beidson@apple.com>

        Keep the fancy new FrameLoaderClientQt building with a small api change in WebCore
        Yay for the loader on QT!

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-11  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin

        Start using the loader in the Qt port.

        * QtLauncher/main.cpp:
        (main):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::~FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::detachFrameLoader):
        (WebCore::FrameLoaderClientQt::makeDocumentView):
        (WebCore::FrameLoaderClientQt::makeRepresentation):
        (WebCore::FrameLoaderClientQt::setCopiesOnScroll):
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::progressStarted):
        (WebCore::FrameLoaderClientQt::progressCompleted):
        (WebCore::FrameLoaderClientQt::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientQt::clearArchivedResources):
        (WebCore::FrameLoaderClientQt::canShowMIMEType):
        (WebCore::FrameLoaderClientQt::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientQt::provisionalLoadStarted):
        (WebCore::FrameLoaderClientQt::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientQt::canHandleRequest):
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientQt::canCachePage):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::cancelledError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::shouldFallBack):
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::willUseArchive):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-11  George Staikos  <staikos@kde.org>

        Fix Qt Build.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::searchWithGoogle):
        * WebCoreSupport/ContextMenuClientQt.h:

2007-01-06  George Staikos  <staikos@kde.org>

        Reviewed by Brady.

        Make it link.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::cancelledError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::shouldFallBack):
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientQt::dispatchCreatePage):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientQt::incrementProgress):
        (WebCore::FrameLoaderClientQt::completeProgress):
        (WebCore::FrameLoaderClientQt::startDownload):
        (WebCore::FrameLoaderClientQt::willUseArchive):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-05  Lars Knoll <lars@trolltech.com>

        Make the Qt build compile again

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::getCustomMenuFromDefaultItems):
        * WebCoreSupport/ContextMenuClientQt.h:

2007-01-03  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setDocumentViewFromPageCache):
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForReload):
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientQt::saveScrollPositionAndViewStateToItem):
        (WebCore::FrameLoaderClientQt::saveDocumentViewToPageCache):
        (WebCore::FrameLoaderClientQt::canCachePage):
        * WebCoreSupport/FrameLoaderClientQt.h:

2006-12-29  George Staikos  <staikos@kde.org>

        Add missing notimplemented.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientQt::canHandleRequest):
        (WebCore::FrameLoaderClientQt::partClearedInBegin):

2006-12-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::hasWebView):
        (WebCore::FrameLoaderClientQt::hasFrameView):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientQt::setTitle):
        (WebCore::FrameLoaderClientQt::partClearedInBegin):
        * WebCoreSupport/FrameLoaderClientQt.h:
                 Remove some runtimw warnings
                 Add partClearedInBegin forwarding call, so
                 I can catch this in the layout tests.

2006-12-19  Lars Knoll <lars@trolltech.com>

        Reviewed by Rob.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::closeWindowSoon):
        * WebCoreSupport/ChromeClientQt.h:
                Make it compile.

2006-12-16  Zack Rusin  <zack@kde.org>

        Adjust the client to the most recent interface.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::contextMenuDestroyed):
        (WebCore::ContextMenuClientQt::addCustomContextMenuItems):
        (WebCore::ContextMenuClientQt::contextMenuItemSelected):
        (WebCore::ContextMenuClientQt::downloadURL):
        (WebCore::ContextMenuClientQt::copyImageToClipboard):
        (WebCore::ContextMenuClientQt::lookUpInDictionary):
        * WebCoreSupport/ContextMenuClientQt.h:

2006-12-14  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * QtLauncher/QtLauncher.pro: Link this little test program
        with rpath, for convenience. (This is never going to get installed
        anyway)

2006-12-12  George Staikos  <staikos@kde.org>

        Reviewed by Alexey.

        Fix the Qt build again.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::speak):
        (WebCore::ContextMenuClientQt::stopSpeaking):
        * WebCoreSupport/ContextMenuClientQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::toggleContinuousSpellChecking):
        (WebCore::EditorClientQt::toggleGrammarChecking):
        * WebCoreSupport/EditorClientQt.h:

2006-12-10  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Add a default user agent for now.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::userAgent):

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Comment out a notImplemented() warning

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::clearUndoRedoOperations):

2006-12-10  Zack Rusin  <zack@kde.org>

        Print out the method name if it's unimplemented.

        * WebCoreSupport/FrameLoaderClientQt.cpp:

2006-12-10  Zack Rusin  <zack@kde.org>

        Moving the clients from platform to their final location.

        * WebCoreSupport/FrameLoaderClientQt.cpp: Added.
        * WebCoreSupport/FrameLoaderClientQt.h: Added.
        * WebCoreSupport/ChromeClientQt.cpp: Added.
        * WebCoreSupport/ChromeClientQt.h: Added.
        * WebCoreSupport/ContextMenuClientQt.cpp: Added.
        * WebCoreSupport/ContextMenuClientQt.h: Added.
        * WebCoreSupport/EditorClientQt.cpp: Added.
        * WebCoreSupport/EditorClientQt.h: Added.

2006-12-10  Zack Rusin  <zack@kde.org>

        Adjusting to the changes in platform/qt.

        * QtLauncher/main.cpp:
        (main):

2006-12-09  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Make it possible to build WebKit with qmake.

        * QtLauncher/QtLauncher.pro: Added.
        * QtLauncher/main.cpp:

2006-12-08  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        Fix the build after the recent changes.

        * QtLauncher/main.cpp:
        (main):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2006-11-19  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        http://bugs.webkit.org/show_bug.cgi?id=11649
        Fix Qt-only build

        * QtLauncher/CMakeLists.txt:

2006-11-17  Zack Rusin  <zack@kde.org>

        Reviewed by Mitz. Landed by Niko.

        Adjusting to the new api.

        * QtLauncher/main.cpp:
        (main):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2006-11-10  Zack Rusin  <zack@kde.org>

        Reviewed and landed by Anders.

        Adjusting to the recent loader changes, making it compile
        and work.

        * QtLauncher/main.cpp:
        (main):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::closeUrl):
        (WebKitPart::initView):

2006-11-03  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        Fixing compile on both Qt and KDE platforms.

        * QtLauncher/main.cpp:
        (main): url has already been defined
        * WebKitPart/WebKitPartBrowserExtension.cpp: removing
        duplicate implementation of this class

2006-10-31  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Maciej, landed by Anders.

        * QtLauncher/CMakeLists.txt: Make linkage against kde libraries
          optional
        * QtLauncher/main.cpp: Make it compile without KDE.
        (main):

2006-11-02  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Maciej, landed by Anders.

        * QtLauncher/main.cpp:
        (main): Declare our frame as main frame to the Page object.
        Fixes crashes on various web sites

2006-10-31  Zack Rusin  <zack@kde.org>

        Reviewed by Mitz.

        Fix the Qt build after last nights changes.

        * QtLauncher/CMakeLists.txt:
        * WebKitPart/CMakeLists.txt:

2006-10-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin Adler.

        Fix Qt/Linux build.

        * QtLauncher/main.cpp:
        (main):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::openUrl):

2006-10-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix Qt/Linux build.

        - Remove BrowserExtensionQt, move it's methods to Page/FrameQt.
        - Fix CMakeLists.txt to include platform/network.

        * QtLauncher/CMakeLists.txt:
        * WebKitPart/CMakeLists.txt:

2006-10-24  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Darin Adler.

        * QtLauncher/CMakeLists.txt, WebKitPart/CMakeLists.txt: Added project name to
          kde4_automoc macro, as required by the latest KDE4 cmake module.

2006-10-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Adapt to FrameQtClient changes, and provide some kind of status
        information to the KPart wheter we're loading or not (started/completed signaling).

        * WebKitPart/CMakeLists.txt:
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::WebKitPart):
        (WebKitPart::~WebKitPart):
        (WebKitPart::openUrl):
        (WebKitPart::initView):
        * WebKitPart/WebKitPart.h:
        * WebKitPart/WebKitPartBrowserExtension.cpp: Added.
        (WebKitPartBrowserExtension::WebKitPartBrowserExtension):
        (WebKitPartBrowserExtension::~WebKitPartBrowserExtension):
        * WebKitPart/WebKitPartBrowserExtension.h: Added.
        * WebKitPart/WebKitPartClient.cpp:
        (WebKitPartClient::WebKitPartClient):
        (WebKitPartClient::loadFinished):
        * WebKitPart/WebKitPartClient.h:
        * WebKitPart/WebKitPartInterface.h:

2006-10-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Fix last remaining issue Qt/Linux build with gcc3.

        * WebKitPart/WebKitPart.h: Remove Q_PROPERTY usage, which is not needed and made problems.

2006-09-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Fix QtLauncher - it is supposed to create a FrameView on its own nowadays.

        * QtLauncher/main.cpp:
        (main):

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fixes last part of: http://bugs.webkit.org/show_bug.cgi?id=10644
        Move QtLauncher down to WebKitQt.

        * QtLauncher/CMakeLists.txt: Added.
        * QtLauncher/main.cpp: Added.
        (main):

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin Adler. Final polish by Sam.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10644
        Add WebKitPart, an embeddable KPart for the KDE platform.

        * WebKitPart/CMakeLists.txt: Added.
        * WebKitPart/WebKitFactory.cpp: Added.
        (WebKitFactory::WebKitFactory):
        (WebKitFactory::~WebKitFactory):
        (WebKitFactory::createPartObject):
        (WebKitFactory::instance):
        (WebKitFactory::ref):
        (WebKitFactory::deref):
        (init_libWebKitPart):
        * WebKitPart/WebKitFactory.h: Added.
        * WebKitPart/WebKitPart.cpp: Added.
        (WebKitPart::WebKitPart):
        (WebKitPart::~WebKitPart):
        (WebKitPart::openFile):
        (WebKitPart::openUrl):
        (WebKitPart::closeUrl):
        (WebKitPart::parentPart):
        (WebKitPart::frame):
        (WebKitPart::initView):
        * WebKitPart/WebKitPart.desktop: Added.
        * WebKitPart/WebKitPart.h: Added.
        (WebKitPart::):
        * WebKitPart/WebKitPart.rc: Added.
        * WebKitPart/WebKitPartBrowser.rc: Added.
        * WebKitPart/WebKitPartClient.cpp: Added.
        (WebKitPartClient::WebKitPartClient):
        (WebKitPartClient::~WebKitPartClient):
        * WebKitPart/WebKitPartClient.h: Added.
        * WebKitPart/WebKitPartInterface.cpp: Added.
        (WebKitPartInterface::WebKitPartInterface):
        (WebKitPartInterface::~WebKitPartInterface):
        (WebKitPartInterface::url):
        (WebKitPartInterface::closeURL):
        * WebKitPart/WebKitPartInterface.h: Added.
        * WebKitPart/org.kde.WebKitPart.xml: Added.

