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-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-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-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-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.

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-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-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-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-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-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-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-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-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-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-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-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-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  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-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-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-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-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-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-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  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-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-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  Alexis Menard  <alexis.menard@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Change the target path to QtWebKit.

        * declarative/declarative.pro:

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  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-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-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-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-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-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-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-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-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-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-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  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  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-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-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-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-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):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::inputMethods):

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-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  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-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-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-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-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-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-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-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-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-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  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-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-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-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-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-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-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-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-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-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-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  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-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-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-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-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-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-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-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-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-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-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  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-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-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-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  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-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-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] 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  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-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-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-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  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-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-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-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-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-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  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-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-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-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-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-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-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-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-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-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.

