2011-04-19  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename lengthReceived to encodedDataLength/dataLength
        https://bugs.webkit.org/show_bug.cgi?id=58883

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidReceiveContentLength):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        * webkit/webkitdownload.cpp:
        (DownloadClient::didReceiveData):

2011-04-18  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Martin Robinson.

        [GTK] Need support for dumping focus rectangles in pixel results
        https://bugs.webkit.org/show_bug.cgi?id=53647

        Add a support function that returns the rectangle of the current
        selection in frame.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::rectangleForSelection):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-04-12  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        * webkit/webkitwebhistoryitem.cpp:

2011-04-12  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=58280
        <rdar://problem/9252824> javascript in an inconsistent state due to serialization returning an un-handled exception.

        Add a header include.  Fallout from untangling some header files in WebCore.

        * webkit/webkitwebhistoryitem.cpp:

2011-02-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] The GTK+ DRT needs an implementation of the PlainTextController
        https://bugs.webkit.org/show_bug.cgi?id=53605

        Added jsValueToDOMRange to DumpRenderTreeSupportGtk. This static method can convert
        a JSValueRef to a WebKitDOMRange. When it's possible to do this with the public
        API, we can remove this method.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::jsValueToDOMRange): Added.
        * WebCoreSupport/DumpRenderTreeSupportGtk.h: Added declaration.

2011-04-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Implement support for Embedded Objects
        https://bugs.webkit.org/show_bug.cgi?id=52148

        New accessibility unit test for embedded objects.

        * tests/testatk.c:
        (testWebkitAtkEmbeddedObjects): New unit test.
        (main): Added the new unit test.

2011-04-08  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Roben.

        Make layoutTestController.shadowRoot return null, not undefined,
        when its argument is invalid.
        https://bugs.webkit.org/show_bug.cgi?id=58121

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::shadowRoot):

2011-04-08  Dominic Cooney  <dominicc@google.com>

        Reviewed by Kent Tamura.

        layoutTestController.shadowRoot should return undefined if its
        argument is not an element.
        https://bugs.webkit.org/show_bug.cgi?id=58119

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::shadowRoot):

2011-04-08  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement increment() and decrement() functions in DRT's AccessibilityUIElement
        https://bugs.webkit.org/show_bug.cgi?id=58039

        Implemented missing functions in GTK's DRT.

        * WebCoreSupport/DumpRenderTreeSupportGtk.h:
        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (modifyAccessibilityValue): Helper function to increment or decrement
        the current value for an object through the AccessibilityObject's API.
        (DumpRenderTreeSupportGtk::incrementAccessibilityValue): New function,
        to be used from GTK's DRT.
        (DumpRenderTreeSupportGtk::decrementAccessibilityValue): Ditto.

2011-04-06  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] Need a way to get the path to a WebKitWebPlugin
        https://bugs.webkit.org/show_bug.cgi?id=57968

        Expose the path of the plugin through the WebKitWebPlugin object.

        * webkit/webkitwebplugin.cpp:
        (webkit_web_plugin_get_path):
        * webkit/webkitwebplugin.h:
        * webkit/webkitwebpluginprivate.h:

2011-04-07  Alice Boxhall  <aboxhall@chromium.org>

        Reviewed by Ryosuke Niwa.

        Move the MouseEventWithHitTestResults::targetNode() method on to EventHandler.
        https://bugs.webkit.org/show_bug.cgi?id=57921

        * webkit/webkitwebview.cpp:
        (webkit_web_view_forward_context_menu_event):
        Call subframeForHitTestResult rather than subframeForTargetNode as the targetNode()
        method has moved on to EventHandler.

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

        Reviewed by Eric Seidel.

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

        Add a PlatformContextCairo which right now stores the cairo_t* for a
        GraphicsContextCairo. Later patches will move logic for tracking ContextShadow
        and image masking layers into this PlatformContextCairo class.

        * webkit/webkitwebframe.cpp:
        (draw_page_callback):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_expose_event):
        (webkit_web_view_draw):

2011-04-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Ryosuke Niwa.

        [Refactoring] SpellCheckingResult should be replaced with TextCheckingResult
        https://bugs.webkit.org/show_bug.cgi?id=56085

        * WebCoreSupport/TextCheckerClientEnchant.h:
        (WebKit::TextCheckerClientEnchant::requestCheckingOfString):

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

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebGL support
        https://bugs.webkit.org/show_bug.cgi?id=31517

        Add support for toggling WebGL at runtime when it's enabled.

        * webkit/webkitwebsettings.cpp: Add the enable-webgl property. When ENABLE_WEBGL
        is not enabled, it's a no-op.
        (webkit_web_settings_class_init): Update to support enable-webgl.
        (webkit_web_settings_set_property): Ditto.
        (webkit_web_settings_get_property): Ditto.
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings): Ditto.

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

        Reviewed by Dan Bernstein.

        REGRESSION (WebKit2): Caps-Lock indicator sometimes doesn't appear in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=51230
        <rdar://problem/8780989>

        * webkit/webkitwebview.cpp: (webkit_web_view_key_release_event): Moved Caps Lock handling from
        WebKits to WebCore, because WebKit shouldn't be smart.

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

        Reviewed by Xan Lopez.

        [Gtk] webkit_web_view_popup_menu_handler should call SelectionController::localCaretRect
        https://bugs.webkit.org/show_bug.cgi?id=54633

        Remove use of legacy editing positions when positioning keyboard-driven context
        menus. Simplify the code greatly.

        * webkit/webkitwebview.cpp:
        (getLocationForKeyboardGeneratedContextMenu): Added this helper which calculates
        the context menu position.
        (webkit_web_view_popup_menu_handler): Simplify code preventing the menu from bumping
        into the edges of the view. Remove (0,-1) hack as it no longer seems to be important.

2011-04-02  Dominic Cooney  <dominicc@google.com>

        Reviewed by Martin Robinson.

        Add layoutTestController.shadowRoot to GTK DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=57551

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::shadowRoot):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

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

        Unreviewed, rolling out r82721.
        http://trac.webkit.org/changeset/82721
        https://bugs.webkit.org/show_bug.cgi?id=57687

        This patch introduced assertion failures on the GTK+ bots.
        (Requested by mrobinson on #webkit).

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-04-01  Dominic Cooney  <dominicc@google.com>

        Reviewed by Martin Robinson.

        Add layoutTestController.shadowRoot to GTK DumpRenderTree.
        https://bugs.webkit.org/show_bug.cgi?id=57551

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::shadowRoot):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-03-31  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Link explicitly with XRender on Linux/Unix
        https://bugs.webkit.org/show_bug.cgi?id=57558

        * GNUmakefile.am: add XRender LIBS.

2011-03-31  Evan Martin  <evan@chromium.org>

        Build fix from previous change.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidReceiveTitle):

2011-03-31  Evan Martin  <evan@chromium.org>

        Reviewed by Eric Seidel.

        <title> should support dir attribute
        https://bugs.webkit.org/show_bug.cgi?id=50961

        Update to new FrameLoaderClient interface.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::FrameLoaderClient::setTitle):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2011-03-29  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, disable an assert in testwebview due to
        https://bugs.webkit.org/show_bug.cgi?id=57315

        * tests/testwebview.c:

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

        Build fix.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::webkitWebFrameSelectionHasSpellingMarker):

2011-03-28  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fullscreen tests failing after r82084
        https://bugs.webkit.org/show_bug.cgi?id=57219

        Added the withKeyboard parameter to supportsFullScreenForElement
        method in ChromeClient. Fullscreen will be disabled for keyboard
        access by default.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::supportsFullScreenForElement):
        * WebCoreSupport/ChromeClientGtk.h:

2011-03-25  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::objectContentType):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2011-03-25  Priit Laes  <plaes@plaes.org>

        Reviewed by Martin Robinson.

        [GTK] [PATCH] Avoid critical warning when free-ing list of plugins
        https://bugs.webkit.org/show_bug.cgi?id=57025

        * webkit/webkitwebplugindatabase.cpp:
        (webkit_web_plugin_database_plugins_list_free):
        Use regular check and return instead of g_return_if_fail.

2011-03-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81916 and r81917.
        http://trac.webkit.org/changeset/81916
        http://trac.webkit.org/changeset/81917
        https://bugs.webkit.org/show_bug.cgi?id=57071

        broke a test on platforms that do not have QuickTime installed
        (Requested by estes on #webkit).

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::objectContentType):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2011-03-24  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70748): latest nightly builds kills AC_QuickTime.js
        https://bugs.webkit.org/show_bug.cgi?id=49016

        Update objectContentType() implementation to handle the
        shouldPreferPlugInsForImages flag.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::objectContentType):
        * WebCoreSupport/FrameLoaderClientGtk.h:

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

        Reviewed by Sam Weinig.

        Change IconDatabase opening to allow for arbitrary filenames
        https://bugs.webkit.org/show_bug.cgi?id=56977

        * webkit/webkiticondatabase.cpp:
        (webkit_icon_database_set_path):

2011-03-22  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Applications that include WebKit headers fail to build when using strict warnings
        because the signature for webkit_application_cache_get_maximum_size is missing a
        'void' to make it explicit it takes no arguments.

        * webkit/webkitapplicationcache.h:

2011-03-21  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] 1.3.13 release bump
        https://bugs.webkit.org/show_bug.cgi?id=56795

        Version bump for 1.3.13 and updated NEWS file with release notes.

        * NEWS:

2011-03-21  Chang Shu  <cshu@webkit.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION (r79953): Can't type in MS Outlook 2011
        https://bugs.webkit.org/show_bug.cgi?id=56665

        r79953 removed the WebView level editablity which is persistent no matter whether
        underlying document itself is changed and editability gets lost. The resolution is to
        set this WebView editable value to WebCore. This avoids the callback from WebCore to
        WebKit which was the main goal in r79953 to improve performance.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_editable):
        (webkit_web_view_set_editable):

2011-03-21  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] [Stable] AtkHypertext exposes wrong offsets for links placed inside <span> nodes
        https://bugs.webkit.org/show_bug.cgi?id=56737

        * tests/testatk.c:
        (testWebkitAtkHypertextAndHyperlinks): Updated unit test to also
        check offsets for hyperlinks inside <span> nodes.

2011-03-18  David Keijser  <keijser@gmail.com> and Xan Lopez <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] On-demand event-listeners for DOM event signals
        https://bugs.webkit.org/show_bug.cgi?id=49649

        * tests/testdomdomwindow.c: update unit tests for new APIs.
        (load_event_callback): ditto.
        (test_dom_domview_signals): ditto.
        (load_status_callback): ditto.

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=56425
        More groundwork for WebKit2 IconDatabase

        Update already-used function names:
        * webkit/webkiticondatabase.cpp:
        (webkit_icon_database_get_icon_uri):
        (webkit_icon_database_get_icon_pixbuf):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_icon_uri):

2011-03-16  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport no longer allows an auto value for "user-scalable"
        https://bugs.webkit.org/show_bug.cgi?id=55416

        Make the default value for userScalable be true.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::dumpConfigurationForViewport): update test output to include userScalable.
        * webkit/webkitviewportattributes.cpp:
        (webkitViewportAttributesRecompute):

2011-03-15  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Tony Chang.

        Autofilled form elements are assigned fixed background color but not text color
        https://bugs.webkit.org/show_bug.cgi?id=48382

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::setAutofilled): Added.
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-03-14  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Possible leaks after splitting TextCheckerClientEnchant.
        https://bugs.webkit.org/show_bug.cgi?id=55989

        Convert gchar* to GOwnPtr<gchar> and refactor the code.

        * WebCoreSupport/TextCheckerClientEnchant.cpp:
        (WebKit::TextCheckerClientEnchant::checkSpellingOfString):

2011-03-11  Marco Peereboom  <marco@peereboom.us>

        Reviewed by Gustavo Noronha Silva.

        Provide a knob to enable/disable DNS prefetching.
        DNS prefetching is enabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=55973

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2011-03-08  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] close-web-view emitted on disposed WebView
        https://bugs.webkit.org/show_bug.cgi?id=55932

        * WebCoreSupport/ChromeClientGtk.cpp:
        (ChromeClient::chromeDestroyed): Remove the closeSoonTimer glib
        source before destruction of the ChromeClient.

2011-03-11  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Ryosuke Niwa.

        Bug 55570 - Remove dependency of dom/InputElement.cpp on html/ and wml/
        https://bugs.webkit.org/show_bug.cgi?id=55570

        Add a virtual function toInputElement() to Node that has a default
        implementation of returning 0.
        For HTMLInputElement and WMLInputElement (which derive from InputElement)
        override this to return the object.
        Change all calling sites of the old toInputElement to use the new member
        function. This also allows us to save some casts.

        No new tests (refactoring).

        * src/WebInputElement.cpp:
        (WebKit::toWebInputElement):

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::setValueForUser):

2011-03-10  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] unittests/testapplicationcache crashes
        https://bugs.webkit.org/show_bug.cgi?id=56083

        Removed the webkit_application_cache_get_database_directory_path
        API as the underlying ApplicationCacheStorage doesn't allow
        setting the cache path multiple times.

        * tests/testapplicationcache.c:
        (main):
        * webkit/webkitapplicationcache.cpp:
        (webkit_application_cache_get_database_directory_path):
        * webkit/webkitapplicationcache.h:
        * webkit/webkitglobals.cpp:
        (webkitInit):

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

        Reviewed by Mihai Parparita.

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

        * webkit/webkitwebsettings.cpp:
        (webkitOSVersion):

2011-03-08  Christian Dywan  <christian@lanedo.com>

        Reviewed by Martin Robinson.

        [GTK] provide an API to control the IconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=32510

        * GNUmakefile.am:
        * WebCoreSupport/FrameLoaderClientGtk.cpp: Emit signals on
            the icon database for new icons.
        * webkit/webkit.h:
        * webkit/webkitdefines.h:
        * webkit/webkitglobals.cpp:
        * webkit/webkitglobals.h: Add a function to obtain the global
            icon database.
        * webkit/webkiticondatabase.cpp:
        * webkit/webkiticondatabase.h: Implement public icon database
            object with methods for obtaining icon URLs, pixbufs, clearing
            waiting for new icons.
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h: Add a method to obtain an icon pixbuf
            for the web view.
2011-03-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add layoutTestController.setValueForUser() after r80412
        https://bugs.webkit.org/show_bug.cgi?id=55862

        Add setValueForUser method to DumpRenderTreeSupportGTK.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::setValueForUser):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

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

        Reviewed by Anders Carlsson.

        Replace WebKit2's decidePolicyForMIMEType with decidePolicyForResponse
        https://bugs.webkit.org/show_bug.cgi?id=55827

        Renamed FrameLoaderClient::dispatchDecidePolicyForMIMEType to dispatchDecidePolicyForResponse
        and pass the entire response, instead of just the MIMEType.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForResponse):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2011-03-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Windowless plugins override the view cursor
        https://bugs.webkit.org/show_bug.cgi?id=55531

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::setCursor): Moved the implementation of setCursor here
        which is more fitting since it sets the cursor for the entire window.

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=55721
        Global IconDatabase should be returned by reference, not as a pointer

        * webkit/webkitglobals.cpp:
        (closeIconDatabaseOnExit):
        (WebKit::setIconDatabaseEnabled):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_icon_uri):

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

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

        * WebCoreSupport/ChromeClientGtk.h:

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

        Reviewed by Darin Adler.

        REGRESSION (WebKit2): Tab keys no longer observe Full Keyboard Access
        https://bugs.webkit.org/show_bug.cgi?id=55633
        <rdar://problem/8963023>

        * WebCoreSupport/ChromeClientGtk.cpp: (WebKit::ChromeClient::keyboardUIMode):
        * WebCoreSupport/ChromeClientGtk.h:
        Implement keyboardUIMode() instead of tabsToLinks(). No change in functionality, since
        this platform doesn't observe or have full keyboard access state.

2011-03-03  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Xan Lopez.

        [GTK] Extended application cache database API and added unit tests file.
        https://bugs.webkit.org/show_bug.cgi?id=55335

        * GNUmakefile.am: Add testapplicationcache.c and remove webkitapplicationcacheprivate.h.
        * tests/testapplicationcache.c: Added.
        (test_applicationcache_maximum_size): Tests if application cache storage is set/get correctly.
        (test_applicationcache_database_directory_path): Tests if application cache directory path is set/get correctly.
        (main):
        * webkit/webkitapplicationcache.cpp:
        (webkit_application_cache_get_maximum_size): New API for getting application cache maximum storage size.
        * webkit/webkitapplicationcache.h: Declaration of API for getting/setting application cache maximum storage size.
        * webkit/webkitapplicationcacheprivate.h: Removed.
2011-03-03  Peter Kasting  <pkasting@google.com>

        Reviewed by James Robinson.

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

        * webkit/webkitwebsettings.cpp:
        (webkitPlatform):
        (webkitUserAgent):

2011-03-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Do a bit of cleanup in ChromeClientGtk. Instead of always fetching the
        WebKitWebView from the frame, simply get it from the member variable of
        the ChromeClientGtk instance itself.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::scrollbarsVisible):
        (WebKit::ChromeClient::exceededDatabaseQuota):
        (WebKit::ChromeClient::requestGeolocationPermissionForFrame):
        (WebKit::ChromeClient::cancelGeolocationPermissionRequestForFrame):
        (WebKit::ChromeClient::enterFullscreenForNode):
        (WebKit::ChromeClient::exitFullscreenForNode):

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed. Roll out r80068 and r80073 due to breaking WebKit2 Qt port.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::dumpConfigurationForViewport):
        * webkit/webkitviewportattributes.cpp:
        (webkitViewportAttributesRecompute):

2011-03-01  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport Warning/Error Messages Are Now Inaccurate
        https://bugs.webkit.org/show_bug.cgi?id=53707

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::dumpConfigurationForViewport): pass a Document into computeViewportAttributes for warnings to be reported to.
        * webkit/webkitviewportattributes.cpp:
        (webkitViewportAttributesRecompute): pass a Document into computeViewportAttributes for warnings to be reported to.

2011-03-01  Kamil Blank  <k.blank@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Fixing headers order in webkit.h.
        https://bugs.webkit.org/show_bug.cgi?id=55316

        * webkit/webkit.h: Style fix.

2011-03-01  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Convert use of cairo_t to RefPtr<cairo_t> in webkitwebiew.cpp
        https://bugs.webkit.org/show_bug.cgi?id=55437

        * webkit/webkitwebview.cpp: Convert use of cairo_t to RefPtr<cairo_t>.
        (webkit_web_view_expose_event): 

2011-02-28  Chang Shu  <cshu@webkit.org>

        Reviewed by Ryosuke Niwa.

        Remove the support of Frame::isContentEditable and its dependencies.
        https://bugs.webkit.org/show_bug.cgi?id=54292

        Remove the WebKit side implementation. Make WebKit support depend on Document::inDesignMode.

        * WebCoreSupport/EditorClientGtk.cpp:
        * WebCoreSupport/EditorClientGtk.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_init):
        (webkit_web_view_get_editable):
        (webkit_web_view_set_editable):
        * webkit/webkitwebviewprivate.h:

2011-02-26  Lukasz Slachciak  <l.slachciak@samsung.com>

        Reviewed by Xan Lopez.

        [GTK] Implemented API to set/get web application cache directory path database.

        * GNUmakefile.am: Add webkitapplicationcache.h file.
        * webkit/webkit.h: Add webkitapplicationcache.h file.
        * webkit/webkitapplicationcache.cpp: definition of API setting and getting
        web application cache directory path database.
        (webkit_application_cache_get_database_directory_path):
        (webkit_application_cache_set_database_directory_path):
        * webkit/webkitapplicationcache.h: Added new API file for setting and getting
        web application cache directory path database.
        * webkit/webkitglobals.cpp:
        (webkitInit): use webkit_application_cache_set_database_directory_path
        to set default web application cache directory path database.

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to DumpRenderTreeSupportGTK.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::clearOpener):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-02-26  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Make it possible to test the targetdensity-dpi support
        https://bugs.webkit.org/show_bug.cgi?id=55142

        Test the viewport meta tag feature targetdensity-dpi by
        adding extra arguments to dumpConfigurationForViewport

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::dumpConfigurationForViewport):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

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

        Unreviewed, rolling out r79764.
        http://trac.webkit.org/changeset/79764
        https://bugs.webkit.org/show_bug.cgi?id=55295

        "broke Chromium builds" (Requested by rniwa on #webkit).

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-02-26  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Pavel Feldman.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to DumpRenderTreeSupportGTK.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::clearOpener):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-02-24  Peter Kasting  <pkasting@google.com>

        Reviewed by Eric Seidel.

        Drop the "U; " encryption level from the User Agent string.
        https://bugs.webkit.org/show_bug.cgi?id=54566

        * webkit/webkitwebsettings.cpp:
        (webkitUserAgent):

2011-02-24  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r79570.
        http://trac.webkit.org/changeset/79570
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Breaks chromium build because glue/mocks/mock_web_frame.h/cc
        was not updated

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-02-24  Vsevolod Vlasov  <vsevik@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DumpRenderTree should reset frame opener between tests.
        https://bugs.webkit.org/show_bug.cgi?id=54874

        Added clearOpener method to DumpRenderTreeSupportGTK.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::clearOpener):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-02-22  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Alexey Proskuryakov.

        Drop the language tag part from the User Agent string
        https://bugs.webkit.org/show_bug.cgi?id=54560

        * webkit/webkitwebsettings.cpp:
        (webkitUserAgent):

2011-02-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] position:fixed elements flicker while scrolling after r74196
        https://bugs.webkit.org/show_bug.cgi?id=54981

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::ChromeClient): Initialize the new m_pendingScrollInvalidations
        boolean to false.
        (WebKit::ChromeClient::invalidateWindow): If this is an immediate invalidation and we
        having pending scrolling invalidations, instruct GDK to process updates now.
        (WebKit::ChromeClient::scroll): Remove the call to gdk_window_process_updates. Set
        m_pendingScrollInvalidations to true to force it to happen in invalidateWindow instead.
        * WebCoreSupport/ChromeClientGtk.h: Add new boolean member.

2011-02-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DRT needs an implementation of LayoutTestController.setSelectTrailingWhitespace
        https://bugs.webkit.org/show_bug.cgi?id=53603

        Add setSelectTrailingWhitespaceEnabled and selectTrailingWhitespaceEnabled which allow
        setting and querying the selectTrailingWhitespaceEnabled setting. EditorClient just
        listens to this value during DRT runs. Perhaps later we can expose this to the public
        API.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::setSelectTrailingWhitespaceEnabled): Added
        (DumpRenderTreeSupportGtk::selectTrailingWhitespaceEnabled): Added
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::isSelectTrailingWhitespaceEnabled): Ask DRTSupportGtk
        for the appropriate return value.

2011-02-21  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [REGRESSION] After r79130, spell tests did not work
        https://bugs.webkit.org/show_bug.cgi?id=54860

        * WebCoreSupport/TextCheckerClientEnchant.cpp:
        (WebKit::TextCheckerClientEnchant::checkSpellingOfString): Avoided
        freeing the default PangoLanguage.
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings): Initialized list of dictionaries.

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

        Reviewed by Kent Tamura.

        Rename Position::node() to Position::deprecatedNode()
        https://bugs.webkit.org/show_bug.cgi?id=54622

        Done the rename. All calls to node() are replaced by calls to deprecatedNode().

        * webkit/webkitwebview.cpp:
        (webkit_web_view_popup_menu_handler):

2011-02-19  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Remove mandatory Enchant dependency
        https://bugs.webkit.org/show_bug.cgi?id=51587

        Extract TextCheckerClientEnchant From EditorClientGtk and remove
        enchant dependency from other files.

        * GNUmakefile.am:
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::EditorClient):
        * WebCoreSupport/EditorClientGtk.h:
        (WebKit::EditorClient::textChecker):
        * WebCoreSupport/TextCheckerClientEnchant.cpp: Added.
        (WebKit::TextCheckerClientEnchant::TextCheckerClientEnchant):
        (WebKit::TextCheckerClientEnchant::~TextCheckerClientEnchant):
        (WebKit::TextCheckerClientEnchant::ignoreWordInSpellDocument):
        (WebKit::TextCheckerClientEnchant::learnWord):
        (WebKit::TextCheckerClientEnchant::checkSpellingOfString):
        (WebKit::TextCheckerClientEnchant::getAutoCorrectSuggestionForMisspelledWord):
        (WebKit::TextCheckerClientEnchant::checkGrammarOfString):
        (WebKit::TextCheckerClientEnchant::getGuessesForWord):
        (WebKit::getAvailableDictionariesCallback):
        (WebKit::TextCheckerClientEnchant::updateSpellCheckingLanguage):
        (WebKit::TextCheckerClientEnchant::freeSpellCheckingLanguage):
        * WebCoreSupport/TextCheckerClientEnchant.h: Added.
        (WebKit::TextCheckerClientEnchant::requestCheckingOfString):
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_finalize):
        (webkit_web_settings_set_property):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_settings_notify):

2011-02-19  Charlie Reis  <creis@chromium.org>

        Reviewed by Mihai Parparita.

        Ensure loading has stopped in HistoryController::goToItem
        https://bugs.webkit.org/show_bug.cgi?id=54517

        Add a FrameLoaderClient callback for whether to stop loading before goToItem.

        Test: http/tests/navigation/forward-to-fragment-fires-onload.html

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClientGtk::shouldStopLoadingForHistoryItem): Added.
        * WebCoreSupport/FrameLoaderClientGtk.h:

2011-02-18  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] atk_text_get_selection/atk_text_set_selection fails for list items
        https://bugs.webkit.org/show_bug.cgi?id=53453

        Update unit test to check the fix for this bug.

        * tests/testatk.c:
        (testWebkitAtkTextSelections): Check that functions from AtkText
        interface to set and get text selections work with list items.

2011-02-17  Robert Ancell  <rober.ancell@gmail.com>

        Reviewed by Martin Robinson.

        [PATCH] GTK documentation fails to build due to changed paths
        https://bugs.webkit.org/show_bug.cgi?id=54600

        * docs/GNUmakefile.am: Update the paths that have now moved the Source
        directory.

2011-02-16  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Match more various WebKit API enum values with WebCore enum values
        https://bugs.webkit.org/show_bug.cgi?id=54352

        AssertMatchingEnums.cpp was added to assert that various WebKit API enum values 
        continue matching WebCore defined enum values in the following changeset.
        http://trac.webkit.org/changeset/77868
        However, there are already enum values that have been asserted in other files, 
        so these assert macros defined need to be moved to AssertMatchingEnum.cpp.  

        * WebCoreSupport/AssertMatchingEnums.cpp: Add more enum values to be asserted.
        * webkit/webkitwebnavigationaction.cpp:  
        (webkit_web_navigation_action_class_init): Move the assert macros of 
        WEBKIT_WEB_NAVIGATION_REASON_* to AssertMatchingEnums.cpp.
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init): Move the assert macros of WEBKIT_EDITING_BEHAVIOR_* 
        to AssertMatchingEnums.cpp.

2011-02-16  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] events missing when a document is (re)loaded
        https://bugs.webkit.org/show_bug.cgi?id=25831

        Emit the right signals when reloading a document.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::notifyAccessibilityStatus): New function, to make sure
        the signals involved in reloading a document are properly emitted.
        (WebKit::notifyStatus): Also notify accessibility if enabled.

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

        Reviewed by Darin Fisher.

        Allow controlling minimum DOMTimer interval on a per-page basis
        https://bugs.webkit.org/show_bug.cgi?id=54312

        Added needed methods to implement LayoutTestController's new
        setMinimumTimerInterval method.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::defaultMinimumTimerInterval):
        (DumpRenderTreeSupportGtk::setMinimumTimerInterval):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-02-15  Christian Dywan  <christian@lanedo.com>

        Rubber-stamped by Gustavo Noronha Silva.

        * webkit/webkitwebsettings.cpp: Correct a typo, it is
            acces*s*ibility with two s.

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

        Reviewed by Ryosuke Niwa.

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

        * WebCoreSupport/EditorClientGtk.h:
        (WebKit::EditorClient::textChecker):

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

        Reviewed by Adam Barth.

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

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

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::canCopyCut): Added.
        (WebKit::EditorClient::canPaste): Added.
        * WebCoreSupport/EditorClientGtk.h:

2011-02-14  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] testwebdatasource test fails in the bots
        https://bugs.webkit.org/show_bug.cgi?id=54414

        Changed the uri we check, added www to avoid the rewrite that we
        get when we as the uri to the request in case it finishes.

        * tests/testwebdatasource.c:
        (notify_load_status_cb):

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

        Unreviewed, rolling out r78331.
        http://trac.webkit.org/changeset/78331
        https://bugs.webkit.org/show_bug.cgi?id=54295

        This patch broke 11 tests in GTK bots (Requested by svillar on
        #webkit).

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::notifyStatus):

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

        Reviewed by Adam Barth.

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

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):
        (WebKit::FrameLoaderClient::didRunInsecureContent):
        (WebKit::FrameLoaderClient::dispatchDidLoadMainResource):
        (WebKit::FrameLoaderClient::finishedLoading):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_encoding):

2011-02-11  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] events missing when a document is (re)loaded
        https://bugs.webkit.org/show_bug.cgi?id=25831

        Emit the right signals when reloading a document.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::notifyAccessibilityStatus): New function, to make sure
        the signals involved in reloading a document are properly emitted.
        (WebKit::notifyStatus): Also notify accessibility if enabled.

2011-02-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DRT needs an implementation of LayoutTestController.setIconDatabaseEnabled
        https://bugs.webkit.org/show_bug.cgi?id=54033

        Add a DumpRenderTreeSupportGtk method for turning the icon database on and off.
        This is a likely candidate for a new API point.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::setIconDatabaseEnabled): Added.
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:
        * webkit/webkitglobals.cpp:
        (webkitInit): Call setIconDatabaseEnabled(true) on startup, instead
        of initializing the database manually.
        (WebKit::setIconDatabaseEnabled): Added.
        * webkit/webkitglobalsprivate.h: Added declarations.

2011-02-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove orphan code from old parser
        https://bugs.webkit.org/show_bug.cgi?id=53984

        * WebCoreSupport/ChromeClientGtk.h:

2011-02-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move InspectorController's methods from InspectorAgent to InspectorController.

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

        Minor change enforced by major changes in WebCore/inspector/InspectorController.

        * WebCoreSupport/InspectorClientGtk.cpp:
        * webkit/webkitwebinspector.cpp:
        (webkit_web_inspector_get_property):

2011-02-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] DRT's TextInputController is unimplemented on GTK
        https://bugs.webkit.org/show_bug.cgi?id=52997

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::setComposition):
        (DumpRenderTreeSupportGtk::confirmComposition):
        (DumpRenderTreeSupportGtk::firstRectForCharacterRange):
        (DumpRenderTreeSupportGtk::selectedRange): New methods needed by
        TextInputController.
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-02-07  Enrica Casucci  <enrica@apple.com>

        Reviewed Adam Roben and Darin Adler.

        WebKit2: drag and drop support on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=52775

        Removed createDragImageForLink from DragClient.

        * WebCoreSupport/DragClientGtk.cpp:
        * WebCoreSupport/DragClientGtk.h:

2011-02-07  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

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

        * GNUmakefile.am: Add AssertMatchingEnums.cpp.
        * WebCoreSupport/AssertMatchingEnums.cpp: Add this file to assert that various 
        WebKit API enum values continue matching WebCore defined enum values.
        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::findString):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-02-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] fast/history/history-subframe-with-name.html fails with GTK DRT
        https://bugs.webkit.org/show_bug.cgi?id=44784

        Call FrameLoader::loadURLIntoChildFrame on the parent frame's loader, not the child's. 

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame): Fix the call to FrameLoader::loadURLIntoChildFrame.

2011-02-07  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] atk_text_get_caret_offset fails for list items
        https://bugs.webkit.org/show_bug.cgi?id=53436

        Update unit test to check the fix for this bug.

        * tests/testatk.c:
        (testWebkitAtkCaretOffsets): Check that the caret offset returned
        match the value previously set.

2011-02-04  Joone Hur  <joone.hur@collabora.co.uk>

        Unreviewed, Fix compilation warning.

        Constructor initialization list should follow the declaration order.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient): m_hasRepresentation is moved to 
        the last position in the initialization list.

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

        Reviewed by Xan Lopez.

        [GTK] WebKitWebFrame can return a stale frame name when calling webkit_web_frame_get_name
        https://bugs.webkit.org/show_bug.cgi?id=53797

        When the frame name changes between different calls to webkit_web_frame_get_name
        on the same frame, return the new frame name instead of the one valid during the
        previous call.

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_init): Initialize the frame name to 0.
        (webkit_web_frame_get_name): Check the current frame name first before
        returning the cached value.

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

        Reviewed by Gustavo Noronha Silva.

        [GTK] fast/events/pagehide-timeout.html fails
        https://bugs.webkit.org/show_bug.cgi?id=53771

        Add the document browser cache model. This model is optimized for viewing
        a series of local files, while the document viewer is optimized for only
        viewing one local file. Improve the documentation on the mapping of these
        enum values to actual cache settings.

        * webkit/webkitglobals.cpp:
        (webkit_set_cache_model): Add support for the document browser cache model and
        improve comments in this section better explaining where the magic numbers come from.
        * webkit/webkitglobals.h: Added an enum value for the document browser cache model.

2011-02-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove settings related methods from InspectorClient
        https://bugs.webkit.org/show_bug.cgi?id=53686

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorFrontendClient::InspectorFrontendClient):
        * WebCoreSupport/InspectorClientGtk.h:

2011-02-03  Adam Langley  <agl@chromium.org>

        Reviewed by Adam Barth.

        Plumb mixed script URL to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=52384

        Regressions covered by http/tests/security/mixedContent/*

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didRunInsecureContent):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2011-02-03  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        [Gtk] No need to set text encoding in the provisional phase
        https://bugs.webkit.org/show_bug.cgi?id=53487

        According to changeset 67253, setEncoding could be called multiple times from 
        committedLoad, finishedLoading, dispatchDidFailLoading, and setMainDocumentError 
        in FrameLoaderClient. To fix this, the relevant code was removed from 
        FrameLoaderClient and moved to DocumentLoader::commitData. However, that 
        code was not removed from FrameLoaderClient::finishedLoading in WebKitGtk+.

        Due to this reason, after loading a html document, other ports initialize the 
        text encoding from FrameLoaderClient::finishedLoading, but WebKitGtk+ sets 
        the same encoding again, even tries to set encoding in the provisional phase. 
        This causes unnecessary encoding setting.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient): Set m_hasRepresentation to false.
        (WebKit::FrameLoaderClient::makeRepresentation): Set m_hasRepresentation to true.
        (WebKit::FrameLoaderClient::revertToProvisionalState): Set m_hasRepresentation to true.
        (WebKit::FrameLoaderClient::finishedLoading): Skip the encoding setting when 
        m_hasRepresentation is false.
        * WebCoreSupport/FrameLoaderClientGtk.h: Added m_hasRepresentation.

2011-02-02  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Update the NEWS file in preparation for the 1.3.11 release.

        * NEWS: Update the NEWS.

2011-02-02  Dan Winship  <danw@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] drop soup cache stuff, which has been moved to libsoup
        https://bugs.webkit.org/show_bug.cgi?id=50747

        * GNUmakefile.am: Remove old cache files.

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

        Reviewed by Darin Adler.

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

        * webkit/webkitwebview.cpp:
        (webkit_web_view_popup_menu_handler):

2011-02-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] atk_text_set_caret_offset fails for list items
        https://bugs.webkit.org/show_bug.cgi?id=53388

        Update unit test to check the fix for this bug.

        * tests/testatk.c:
        (testWebkitAtkCaretOffsets): Ensure setting the caret in a list
        item through the AtkText interface is possible.

2011-02-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] character range extents is off when the end of a wrapped line is included
        https://bugs.webkit.org/show_bug.cgi?id=53323

        Update unit test to check the fix for this bug.

        * tests/testatk.c:
        (testWebkitAtkGetExtents): Check that the extent for a full line
        are the same height than for a partial section of the same line.

2011-02-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Caret Offset is one off at the end of wrapped lines
        https://bugs.webkit.org/show_bug.cgi?id=53300

        Update unit test to check the fix for this bug.

        * tests/testatk.c:
        (testWebkitAtkCaretOffsetsAndExtranousWhiteSpaces): Set and get
        the caret offset at the edge of the line.

2011-01-31  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] atk_text_set_caret_offset returns True even when it is unsuccessful
        https://bugs.webkit.org/show_bug.cgi?id=53389

        New unit test to check the fix for this bug.

        * tests/testatk.c:
        (testWebkitAtkCaretOffsets): New.
        (main): Add new test.

2011-01-29  Dan Winship  <danw@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] Remove HAVE_LIBSOUP_2_29_90 and HAVE_GSETTINGS conditionals;
        we depend on glib 2.27.4 and libsoup 2.33.1 now.
        https://bugs.webkit.org/show_bug.cgi?id=50675

        * GNUmakefile.am:
        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::storeSetting):
        * webkit/webkitprivate.cpp:
        (inspectorGSettings):
        * webkit/webkitprivate.h:

2011-01-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <select> can't display right-to-left (rtl) languages
        https://bugs.webkit.org/show_bug.cgi?id=19785

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::selectItemAlignmentFollowsMenuWritingDirection): Added.
        * WebCoreSupport/ChromeClientGtk.h:

2011-01-28  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix compilation warning
        https://bugs.webkit.org/show_bug.cgi?id=53292

        * webkit/webkitwebframe.cpp:
        (draw_page_callback): Cast the pageCount from size_t to int, it
        should be safe considering page_nr is the number of pages,
        0-based.

2011-01-27  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Use Document::url() instead of FrameLoader::url().
        https://bugs.webkit.org/show_bug.cgi?id=41165

        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_icon_uri):

2011-01-27  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Space characters in source document interfere with reported caret offset
        https://bugs.webkit.org/show_bug.cgi?id=53033

        New unit test to check the fix for this bug.

        * tests/testatk.c:
        (testWebkitAtkCaretOffsetsAndExtranousWhiteSpaces): New.
        (main): Add new unit test.

2011-01-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Reliable crash with getTextAtOffset()
        https://bugs.webkit.org/show_bug.cgi?id=53131

        New unit test to check the fix for this bug.

        * tests/testatk.c:
        (testWebkitAtkGetTextAtOffsetWithSpecialCharacters): New.
        (main): Add new unit test.

2011-01-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Show caps lock indicator in password fields
        https://bugs.webkit.org/show_bug.cgi?id=52878

        Test: manual-tests/password-caps-lock.html

        * webkit/webkitwebview.cpp:
        (webkit_web_view_key_release_event): Call
        capsLockStateMayHaveChanged() when caps lock key is pressed.

2011-01-19  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Andreas Kling.

        [GTK] No need to invalidate empty areas in ChromeClient::invalidateContentsAndWindow
        https://bugs.webkit.org/show_bug.cgi?id=52702

        Don't call gdk_window_invalidate_rect if an updated rectangle is empty.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::invalidateContentsAndWindow): 

2011-01-17  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, build fix for 2 GTK tests html file paths.

        * tests/testmimehandling.c:
        (main):
        * tests/testwebview.c:

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

        Rubber-stamped by Eric Seidel.

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

        * GNUmakefile.am:

2011-01-14  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Antti Koivisto.

        Rename cache() to memoryCache()
        https://bugs.webkit.org/show_bug.cgi?id=52433

        * webkit/webkitglobals.cpp:
        (webkit_set_cache_model):

2011-01-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: gtk build fix (2).

        * webkit/webkitwebview.cpp:

2011-01-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: gtk build fix.

        * webkit/webkitwebinspector.cpp:

2011-01-13  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [gtk] Zero-sized font does not yet work
        https://bugs.webkit.org/show_bug.cgi?id=49793

        Allow 0 as a minimum-font-size value for the settings.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):

2011-01-12  Philippe Normand  <pnormand@igalia.com>

        Unreviewed build fix for 32-bits Release. Include GRefPtrGtk.h so
        the GdkCursor templates are found and used at runtime.

        * WebCoreSupport/FullscreenVideoController.cpp:

2011-01-11  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] GRefPtr should not be used with Gtk widgets
        https://bugs.webkit.org/show_bug.cgi?id=51241

        GRefPtr breaks the widget life-cycle, the main problem is
        that GRefPtr calls g_object_unref() when it's destroyed,
        which is undesirable for widgets. In gtk+ widgets are created with
        a floating reference and when added to a container, the container
        takes the ownership of the widget consuming the floating
        reference. So you don't usually need to call g_object_ref/unref on
        widgets (only for some operations like reparent a widget) and
        toplevel widgets are destroyed with gtk_widget_destroy().

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::DragClient):
        (WebKit::DragClient::~DragClient):
        (WebKit::DragClient::startDrag):
        * WebCoreSupport/DragClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::postCommitFrameViewSetup):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_dispose):
        * webkit/webkitwebviewprivate.h:

2011-01-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Update the NEWS file in preparation for the 1.3.10 release.

        * NEWS: Update the NEWS.

2011-01-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Remove use of deprecated GTK+ methods before the 1.3.10 release
        https://bugs.webkit.org/show_bug.cgi?id=52173

        * WebCoreSupport/FullscreenVideoController.cpp:
        (FullscreenVideoController::enterFullscreen): Use a GRefPtr here to avoid having to
        call either g_object_unref or gdk_cursor_unref.
        * webkit/webkitwebview.cpp: Guard use of deprecated methods.
        (webkit_web_view_realize): Ditto.
        (webkit_web_view_drag_end): Ditto.

2011-01-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix gtk2 compilation for master
        https://bugs.webkit.org/show_bug.cgi?id=51885

        * webkit/webkitsoupauthdialog.c:
        (show_auth_dialog): Removed the call to
        gtk_dialog_set_has_separator API to remove a warning.

2011-01-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Create intermediate libWebCore library
        https://bugs.webkit.org/show_bug.cgi?id=52116

        * GNUmakefile.am: add libWebCore.la to LIBADD and remove webcore
        sources from the libwebkit library SOURCES.

2011-01-09  Xianzhu Wang <phnixwxz@gmail.com>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=41441
        createWindow method should only do window-creating without URL navigation

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::createWindow):

2011-01-08  Martin Robinson  <mrobinson@igalia.com>

        GTK+ build fix. Adding missing headers to the source list, fixing make dist.

        * GNUmakefile.am: Fix make dist.

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

        Rubber-stamped by Eric Seidel.

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

        * GNUmakefile.am:

2011-01-07  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        GTK: AX: atk tests need to be updated after recent changes
        https://bugs.webkit.org/show_bug.cgi?id=51932

        Fix gtk_widget_get_accessible() in WebKitWebView to keep returning
        the AtkObject of role ATK_ROLE_DOCUMENT_FRAME.

        With the change to support WK2 accessibility, the root object of
        the AX hierarchy is different from what GTK expects as the current
        hirarchy right now includes a new accessible object as the parent
        of the accessible web area (AXScrollView).

        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_accessible): Return the first child of the
        wrapper associated to the root accessible object in the document,
        to keep everything in the GTK port working as it used to be.

        Re-enable skipped ATK unit tests now they are passing again.

        * tests/testatk.c:
        (main): Re-enable skipped tests.
        * tests/testatkroles.c:
        (main): Ditto.

2011-01-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        GTK: AX: atk tests need to be updated after recent changes
        https://bugs.webkit.org/show_bug.cgi?id=51932

        Skip ATK unit tests until we can look into what is causing these failures.

        * tests/testatk.c:
        (main): Skip all tests.
        * tests/testatkroles.c:
        (main): Ditto.

2011-01-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Include a new header in the static headers list. This is necessary
        so that "make install" installs the header.

        * GNUmakefile.am: Include webkitglobals.h in the header list.

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

        Reviewed by Gustavo Noronha.

        Build fix for GTK+ 3.x. Remove the call to gtk_range_set_update_policy.
        GTK+ 3.x has removed this method and the default in GTK+ 2.x is continuous,
        so this call is unnecessary.

        * WebCoreSupport/FullscreenVideoController.cpp:
        (FullscreenVideoController::createHud): Remove call to gtk_range_set_update_policy().

2011-01-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Martin Robinson.

        GTK: AX: DRT needs to use correct root object method.
        https://bugs.webkit.org/show_bug.cgi?id=51911

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::getRootAccessibleElement):
        (DumpRenderTreeSupportGtk::getFocusedAccessibleElement):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2011-01-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Sam Weinig.

        WK2: Support Accessibility
        https://bugs.webkit.org/show_bug.cgi?id=51859

        Use rootObject() method to get top of ax tree.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::getFocusedAccessibleElement):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_accessible):

2011-01-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Darin Adler.

        Remove the last non-GObject usage of PlatformRefPtr and move the code to GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=51846

        Changed all references to PlatformRefPtr in GTK+ code to GRefPtr.

2011-01-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Split webkitprivate.{cpp,h} in more manageable chunks
        https://bugs.webkit.org/show_bug.cgi?id=50698

        Final patch, removing webkitprivate.{cpp,h}, and adding a
        webkitglobals module to hold non-object-specific functions and
        definitions that do not make sense on their own.

        * GNUmakefile.am:
        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::createWindow):
        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * WebCoreSupport/DocumentLoaderGtk.cpp:
        (WebKit::DocumentLoader::attachToFrame):
        * WebCoreSupport/DragClientGtk.cpp:
        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::ignoreWordInSpellDocument):
        (WebKit::EditorClient::learnWord):
        (WebKit::EditorClient::checkSpellingOfString):
        (WebKit::EditorClient::getGuessesForWord):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createDocumentLoader):
        * WebCoreSupport/InspectorClientGtk.cpp:
        * webkit/webkit.h:
        * webkit/webkitapplicationcache.cpp:
        (webkit_application_cache_set_maximum_size):
        * webkit/webkitdownload.cpp:
        (webkit_download_class_init):
        * webkit/webkitgeolocationpolicydecision.cpp:
        * webkit/webkitglobals.cpp: Added.
        (webkit_get_default_session):
        (webkit_set_cache_model):
        (webkit_get_cache_model):
        (webkit_get_web_plugin_database):
        (currentToplevelCallback):
        (closeIconDatabaseOnExit):
        (webkitInit):
        (WebKit::pasteboardHelperInstance):
        * webkit/webkitglobals.h: Added.
        * webkit/webkitglobalsprivate.h: Copied from WebKit/gtk/webkit/webkitwebsettingsprivate.h.
        * webkit/webkithittestresult.cpp:
        (webkit_hit_test_result_class_init):
        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_class_init):
        * webkit/webkitnetworkresponse.cpp:
        (webkit_network_response_class_init):
        * webkit/webkitprivate.cpp: Removed.
        * webkit/webkitprivate.h: Removed.
        * webkit/webkitsecurityorigin.cpp:
        * webkit/webkitviewportattributes.cpp:
        * webkit/webkitwebbackforwardlist.cpp:
        (webkit_web_back_forward_list_class_init):
        * webkit/webkitwebdatabase.cpp:
        * webkit/webkitwebdatasource.cpp:
        (webkit_web_data_source_class_init):
        (webkit_web_data_source_new_with_request):
        (WebKit::kitNew):
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_class_init):
        * webkit/webkitwebframeprivate.h:
        * webkit/webkitwebhistoryitem.cpp:
        (webkit_web_history_item_class_init):
        * webkit/webkitwebinspector.cpp:
        * webkit/webkitwebnavigationaction.cpp:
        * webkit/webkitwebplugin.cpp:
        (webkit_web_plugin_class_init):
        * webkit/webkitwebplugindatabase.cpp:
        (webkit_web_plugin_database_class_init):
        * webkit/webkitwebpluginprivate.h:
        * webkit/webkitwebpolicydecision.cpp:
        * webkit/webkitwebresource.cpp:
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkitWebViewGetEnchantDicts):
        (WebKit::core):
        * webkit/webkitwebsettingsprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):
        * webkit/webkitwebview.h:
        * webkit/webkitwebwindowfeatures.cpp:
        (webkit_web_window_features_class_init):
        (WebKit::kitNew):

2011-01-02  Xan Lopez  <xlopez@igalia.com>

        Fix GTK+ build.

        * GNUmakefile.am: tests do actually include JSC.

2011-01-02  Xan Lopez  <xlopez@igalia.com>

        Fix GTK+ build.

        * GNUmakefile.am: remove individual -I$(srcdir)/Source when we'll
        already get them from javascriptcore_cppflags, and add it for the
        introspection build (which is not tested in the bots).

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

        Speculative build fix for GTK.  Add Source to the include paths.

        * GNUmakefile.am:

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

        Reviewed by Eric Seidel.

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

        * GNUmakefile.am:
        * docs/GNUmakefile.am:
          - Point to JavaScriptCore in its new location.

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

        Build fix for GTK+.

        * webkit/webkitwebinspector.cpp: Add missing DumpRenderTreeSupportGtk include.

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

        [GTK] GSettings warning is concealing real warnings on the build bots
        https://bugs.webkit.org/show_bug.cgi?id=51691

        Reviewed by Xan Lopez.

        Do not print the GSettings warning message when running in DumpRenderTree.

        * webkit/webkitwebinspector.cpp:
        (inspectorGSettings): Do not print the GSettings warning if we are running
        in DumpRenderTree. This should clean up the test results page a great deal.

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

        Reviewed by Xan Lopez.

        [GTK] Closing a window during an onload event can trigger serious GLib warnings
        https://bugs.webkit.org/show_bug.cgi?id=51686

        Don't emit the close-web-view signal immediately during execution of closeWindowSoon.
        The signal handler may choose to destroy the web view while handling that signal,
        which may remove the last reference to the web view. FrameLoaderClient depends on the
        view still existing though. Instead, let the caller finish executing and emit the signal
        after a 0 length timeout. This matches the behavior on the Windows and Mac ports.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::ChromeClient): Initialize the timer id.
        (WebKit::emitCloseWebViewSignalLater): Callback for the timer.
        (WebKit::ChromeClient::closeWindowSoon): Do the actual signal invocation after
        the caller finishes its tasks.
        * WebCoreSupport/ChromeClientGtk.h: Add a new member for the timer id. We
        can use this to prevent emitting the close-web-view signal twice.

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

        Reviewed by Eric Seidel.

        [GTK] Clean up usage of NULL in webkitwebframe.cpp
        https://bugs.webkit.org/show_bug.cgi?id=51685

        Replace occurrences of NULL with 0, in webkitwebframe.cpp. Not all
        uses of NULL have been changed, as certain GLib functions require
        an explicit NULL as a sentinel.

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_data_source_from_core_loader):
        (webkit_web_frame_class_init):
        (webkit_web_frame_new):
        (webkit_web_frame_get_title):
        (webkit_web_frame_get_uri):
        (webkit_web_frame_get_web_view):
        (webkit_web_frame_get_name):
        (webkit_web_frame_get_parent):
        (webkit_web_frame_load_string):
        (webkit_web_frame_load_alternate_string):
        (webkit_web_frame_find_frame):
        (webkit_web_frame_get_global_context):
        (webkit_web_frame_get_data_source):
        (webkit_web_frame_get_provisional_data_source):
        (webkit_web_frame_print_full):
        (webkit_web_frame_get_security_origin):
        (webkit_web_frame_get_network_response):

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

        Reviewed by Ryosuke Niwa.

        [GTK] EditorClient::generateEditorCommands queues up "null string" commands
        https://bugs.webkit.org/show_bug.cgi?id=51569

        Prevent adding "null string" editor commands by first checking whether or not
        the command string is null in generateEditorCommands before appending it to the
        list of pending editor command strings.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::generateEditorCommands): Check for the null string (no
        command for this key combination) before appending a command string to the list of
        pending editor commands.
        (WebKit::EditorClient::executePendingEditorCommands): Add an ASSERT which detects
        null command strings.

2010-12-27  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Remove unneeded includes from our headers.

        * WebCoreSupport/PasteboardHelperGtk.h: ditto.
        * webkit/webkitprivate.h: ditto.
        * webkit/webkitsoupauthdialog.h: ditto.

2010-12-21  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Seidel.

        [GTK] minimal build with --database fails
        https://bugs.webkit.org/show_bug.cgi?id=51394

        * webkit/webkitprivate.cpp:
        (webkit_init): Use cacheStorage() only if the
        OFFLINE_WEB_APPLICATIONS feature is enabled.

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

        Reviewed by Darin Adler.

        WebKit2 needs to mirror the frame tree in the UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=51546

        - Add client functions to notify that a frame has been added or
          removed from the page cache.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didSaveToPageCache):
        (WebKit::FrameLoaderClient::didRestoreFromPageCache):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2010-12-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        * NEWS: update for 1.3.9 release.

2010-12-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Add WebPlugin, WebPluginDatabase, and ViewportAttributes to the
        documentation control files, in preparation for 1.3.8. Also take
        the opportunity to add descriptions to WebPlugin and
        WebPluginDatabase.

        * docs/GNUmakefile.am:
        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:
        * webkit/webkitwebplugin.cpp:
        * webkit/webkitwebplugindatabase.cpp:

2010-12-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        * GNUmakefile.am: add missing files.
        * NEWS: update for 1.3.8 release.

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

        Reviewed by Xan Lopez.

        [GTK+] Simplify spatial navigation handling in EditorClientGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=51302

        Patch changes:
        1) The editor command for LEFT arrow key press without modifier
           from MoveBackward to MoveLeft;
        2) And similarly changes the editor command for RIGHT arrow key
          press without modifier from MoveForward to MoveRight.

        It has no implications since SelectionController::modifyMovingRight()
        handles "MoveRight" equaly to how SelectionController::modifyMovingForward()
        handles "MoveForward" when granularity is 'CharacterGranularity'. The former
        falls back to the later in the case of other editor commands.

        Analogously, the same applies to how SelectionController::modifyMovingLeft() and
        SelectionController::modifyMovingForward() handle "MoveLeft" and "MoveBackward"
        editor commands, respectively.

        With this change we can remove the spatial navigation hack from moveCursorCallback(),
        in EditorClientGtk.cpp.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::moveCursorCallback):

2010-12-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] scrolling artifacts
        https://bugs.webkit.org/show_bug.cgi?id=45029

        Call gdk_window_process_updates() right after moving the window
        when scrolling.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::scroll):

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

        Unreviewed, rolling out r74117.
        http://trac.webkit.org/changeset/74117
        https://bugs.webkit.org/show_bug.cgi?id=51113

        This broke the GTK1 build. (Requested by mrobinson on
        #webkit).

        * GNUmakefile.am:

2010-12-15  Amruth Raj  <amruthraj@motorola.com> and Ravi Phaneendra Kasibhatla  <ravi.kasibhatla@motorola.com>

        Reviewed by Martin Robinson.

        Changes to enable building WebKit2 for Gtk port.
        (https://bugs.webkit.org/show_bug.cgi?id=37369)

        * GNUmakefile.am: Added WebCore/bindings/gobject to webkitgtk_sources & webkitgtk_cppflags.
        They should get compiled only when WebKit/gtk/GNUmakefile.am is getting included but not
        with WebKit2/GNUmakefile.am inclusion.

2010-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Simplify context-menu handling code
        https://bugs.webkit.org/show_bug.cgi?id=49658

        Use gtk_container_foreach() so that we only iterate the list of
        children once and we avoid creating/destroying the list. It also
        connects the activate signal for submenu items.

        * webkit/webkitwebview.cpp:
        (contextMenuConnectActivate):
        (webkit_web_view_forward_context_menu_event):

2010-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix several issues in r73858
        https://bugs.webkit.org/show_bug.cgi?id=51032

        - It uses both glib private data and it allocates its own private
          structure.
        - It calls parent's dispose method from finalize.
        - webkit_web_plugin_get_mimetypes() uses a wrong annotation for the
          returned value, it should be transfer none rather than transfer
          container.
        - Since the mime type list is internal and we return the list and not a
          copy, it should never be freed by the caller, so
          webkit_web_plugin_mime_type_list_free() should be removed from the
          public API.
        - Mime types list is used uninitialized.
        - Mention in the docs that list returned by
          webkit_web_plugin_database_get_plugins() must be freed with
          webkit_web_plugin_database_plugins_list_free().

        * webkit/webkitwebplugin.cpp:
        (webkit_web_plugin_finalize):
        (webkit_web_plugin_class_init):
        (webkit_web_plugin_init):
        * webkit/webkitwebplugin.h:
        * webkit/webkitwebplugindatabase.cpp:

2010-12-14  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [gtk] misnamed gtk-doc strings for webkit_web_view_can_{c|c|p}_clipboard
        https://bugs.webkit.org/show_bug.cgi?id=50571

        * webkit/webkitwebview.cpp:

2010-12-13  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add API to enable/disable plugins at runtime
        https://bugs.webkit.org/show_bug.cgi?id=50891

        * tests/testwebplugindatabase.c:
        (test_webkit_web_plugin_database_get_plugins): test that disabling
        a plugin works.
        * webkit/webkitwebplugin.cpp:
        (webkit_web_plugin_get_property): hook 'enabled' property.
        (webkit_web_plugin_set_property): ditto.
        (webkit_web_plugin_class_init): define 'enabled' property.
        (webkit_web_plugin_set_enabled): setter for the property.
        (webkit_web_plugin_get_enabled): getter for the property.
        * webkit/webkitwebplugin.h: add the APIs to the header.

2010-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Do not use GET_PRIVATE macros
        https://bugs.webkit.org/show_bug.cgi?id=50915

        GET_PRIVATE macros are slow and should only be used in the object
        init() method.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::inputMethodsMenuItem):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::postProgressFinishedNotification):
        (WebKit::FrameLoaderClient::setTitle):
        (WebKit::FrameLoaderClient::dispatchCreatePage):
        (WebKit::postCommitFrameViewSetup):
        * webkit/webkitdownload.cpp:
        (webkit_download_init):
        * webkit/webkitgeolocationpolicydecision.cpp:
        (webkit_geolocation_policy_decision_init):
        * webkit/webkithittestresult.cpp:
        (webkit_hit_test_result_init):
        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_init):
        * webkit/webkitsecurityorigin.cpp:
        (webkit_security_origin_init):
        * webkit/webkitsecurityoriginprivate.h:
        * webkit/webkitviewportattributes.cpp:
        (webkit_viewport_attributes_init):
        * webkit/webkitwebbackforwardlist.cpp:
        (webkit_web_back_forward_list_init):
        * webkit/webkitwebdatabase.cpp:
        (webkit_web_database_init):
        * webkit/webkitwebdatasource.cpp:
        (webkit_web_data_source_init):
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_init):
        (webkit_web_frame_new):
        * webkit/webkitwebframeprivate.h:
        * webkit/webkitwebhistoryitem.cpp:
        (webkit_web_history_item_init):
        * webkit/webkitwebinspector.cpp:
        (webkit_web_inspector_init):
        * webkit/webkitwebnavigationaction.cpp:
        (webkit_web_navigation_action_init):
        * webkit/webkitwebplugin.cpp:
        (webkit_web_plugin_init):
        * webkit/webkitwebplugindatabase.cpp:
        (webkit_web_plugin_database_init):
        * webkit/webkitwebplugindatabaseprivate.h:
        * webkit/webkitwebpluginprivate.h:
        * webkit/webkitwebpolicydecision.cpp:
        (webkit_web_policy_decision_init):
        * webkit/webkitwebresource.cpp:
        (webkit_web_resource_init):
        * webkit/webkitwebresourceprivate.h:
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_init):
        * webkit/webkitwebview.cpp:
        (PopupMenuPositionFunc):
        (webkit_web_view_forward_context_menu_event):
        (webkit_web_view_drag_end):
        (webkit_web_view_drag_data_get):
        (webkit_web_view_query_tooltip):
        (webkit_web_view_init):
        * webkit/webkitwebwindowfeatures.cpp:
        (webkit_web_window_features_init):

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

        Reviewed by Ojan Vafai.

        spellcheck does not check pasted text
        https://bugs.webkit.org/show_bug.cgi?id=40092

        Added a stub implememntation.

        * WebCoreSupport/EditorClientGtk.h:
        (WebKit::EditorClient::requestCheckingOfString):

2010-12-12  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Martin Robinson.

        * webkit/webkitwebplugin.h: add a note about the extension list
        being a NULL-terminated array.

2010-12-12  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Gustavo Noronha.

        Stop checking for glib >= 2.16, we have dependend on a newer
        version for a long time now.

        * tests/testatk.c: Stop checking for glib >= 2.16.
        * tests/testatkroles.c: ditto.
        * tests/testdomdocument.c: ditto.
        * tests/testdomdomwindow.c: ditto.
        * tests/testdomnode.c: ditto.
        * tests/testglobals.c: ditto.
        * tests/testhttpbackend.c: ditto.
        * tests/testloading.c: ditto.
        * tests/testmimehandling.c: ditto.
        * tests/testnetworkrequest.c: ditto.
        * tests/testnetworkresponse.c: ditto.
        * tests/testwebbackforwardlist.c: ditto.
        * tests/testwebdatasource.c: ditto.
        * tests/testwebframe.c: ditto.
        * tests/testwebhistoryitem.c: ditto.
        * tests/testwebresource.c: ditto.
        * tests/testwebsettings.c: ditto.
        * tests/testwebview.c: ditto.
        * tests/testwindow.c: ditto.

2010-12-11  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add APIs for plugin management
        https://bugs.webkit.org/show_bug.cgi?id=50827

        Add WebKitWebPluginDatabase and WebKitWebPlugin classes for basic
        plugin management at the client level. For now they provide
        "read-only" access to the plugin list.

        * GNUmakefile.am: add new files to the build.
        * tests/testwebplugindatabase.c: Test that the database contains
        the test plugin, which should always be loaded.
        * webkit/webkit.h: add new headers.
        * webkit/webkitdefines.h: add new defines.
        * webkit/webkitwebplugin.cpp: An new class representing a plugin object.
        * webkit/webkitwebplugin.h: ditto.
        * webkit/webkitwebplugindatabase.cpp: A new class that contains the list of active plugins.
        * webkit/webkitwebplugindatabase.h: ditto.
        * webkit/webkitwebplugindatabaseprivate.h: Private header.
        * webkit/webkitwebpluginprivate.h: Private header.
        * webkit/webkitwebview.cpp:
        (webkit_get_web_plugin_database): returns the WebKitWebPluginDatabase for this session.
        * webkit/webkitwebview.h: add method to header.

2010-12-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Split webkitprivate.{cpp,h} in more manageable chunks
        https://bugs.webkit.org/show_bug.cgi?id=50698

        Split private bits of several objects to their own private
        headers, and to their implementation files.

        * GNUmakefile.am:
        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/EditorClientGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchWillSendRequest):
        * webkit/webkitdownload.cpp:
        (webkit_download_set_response):
        * webkit/webkitdownloadprivate.h: Added.
        * webkit/webkithittestresult.cpp:
        (WebKit::kit):
        * webkit/webkithittestresultprivate.h: Added.
        * webkit/webkitnetworkresponse.cpp:
        (WebKit::core):
        (WebKit::kitNew):
        * webkit/webkitnetworkresponseprivate.h: Added.
        * webkit/webkitprivate.cpp:
        * webkit/webkitprivate.h:
        * webkit/webkitsecurityorigin.cpp:
        (webkit_security_origin_get_web_database):
        (WebKit::core):
        (WebKit::kit):
        * webkit/webkitsecurityoriginprivate.h: Added.
        * webkit/webkitviewportattributes.cpp:
        * webkit/webkitviewportattributesprivate.h: Added.
        * webkit/webkitwebbackforwardlist.cpp:
        * webkit/webkitwebbackforwardlistprivate.h: Added.
        * webkit/webkitwebdatabase.cpp:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_network_response):
        * webkit/webkitwebhistoryitem.cpp:
        * webkit/webkitwebhistoryitemprivate.h: Added.
        * webkit/webkitwebnavigationaction.cpp:
        (WebKit::kit):
        (WebKit::core):
        * webkit/webkitwebnavigationactionprivate.h: Added.
        * webkit/webkitwebpolicydecision.cpp:
        * webkit/webkitwebpolicydecisionprivate.h: Added.
        * webkit/webkitwebresource.cpp:
        * webkit/webkitwebresourceprivate.h: Added.
        * webkit/webkitwebsettings.cpp:
        * webkit/webkitwebsettingsprivate.h: Added.
        * webkit/webkitwebview.cpp:

2010-12-10  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, fixed small typo in the name of a function.

        * webkit/webkitwebsettings.cpp:
        (getAvailableDictionariesCallback):
        (webkit_web_settings_set_property):

2010-12-09  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add hasSpellingMarker support to the DRT
        https://bugs.webkit.org/show_bug.cgi?id=50739

        Added a new private API function to support the spelling marker
        tests in the DRT.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::webkitWebFrameSelectionHasSpellingMarker):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2010-12-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Choose a dictionary in case there is no one defined or the
        env LANG does not propose one
        https://bugs.webkit.org/show_bug.cgi?id=50738

        In case no dict is set and we can not find one using the
        environment just get the first dictionary installed in the list.

        * webkit/webkitwebsettings.cpp:
        (getAvilableDictionariesCallback):
        (webkit_web_settings_set_property):

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

        Reviewed by Gustavo Noronha Silva.

        Remove unnecessary variable names from DumpRenderTreeSupportGtk
        https://bugs.webkit.org/show_bug.cgi?id=50815

        There were some unnecessary variable names in DumpRenderTreeSupportGtk,
        so remove them.

        * WebCoreSupport/DumpRenderTreeSupportGtk.h: Do it.

2010-12-10  Joone Hur  <joone@kldp.org>

        Reviewed by Xan Lopez.

        [GTK] Unskipping some test cases in /userscripts dependent on addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=50808

        Unskipping the following test cases:
        userscripts/mixed-case-stylesheet.html
        userscripts/simple-stylesheet.html
        userscripts/user-style-all-frames.html

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::addUserStyleSheet): Added "bool allFrames" parameter.
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2010-12-10  Joone Hur  <joone@kldp.org>

        Reviewed by Eric Seidel.

        [GTK] Add DRT support for pageProperty, isPageBoxVisible, pageSizeAndMarginsInPixels, and addUserStyleSheet
        https://bugs.webkit.org/show_bug.cgi?id=50783
        
        This patch allows to unskip the following test cases:
        printing/page-rule-selection.html
        printing/page-format-data.html

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::pageProperty): Added.
        (DumpRenderTreeSupportGtk::isPageBoxVisible): Ditto.
        (DumpRenderTreeSupportGtk::pageSizeAndMarginsInPixels): Ditto.
        (DumpRenderTreeSupportGtk::addUserStyleSheet): Ditto.
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

2010-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Split webkitprivate.{cpp,h} in more manageable chunks
        https://bugs.webkit.org/show_bug.cgi?id=50698

        Split private bits of WebKitWebInspector to its own private
        header, and to its implementation file.

        * WebCoreSupport/InspectorClientGtk.cpp:
        * webkit/webkitprivate.cpp:
        * webkit/webkitprivate.h:
        * webkit/webkitwebinspector.cpp:
        (isSchemaAvailable):
        (inspectorGSettings):
        * webkit/webkitwebinspectorprivate.h: Added.
        * webkit/webkitwebview.cpp:

2010-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Split webkitprivate.{cpp,h} in more manageable chunks
        https://bugs.webkit.org/show_bug.cgi?id=50698

        Split private bits of WebKitNetworkRequest to its own private
        header, and to its implementation file. Also take the opportunity
        to use PlatformRefPtr for NetworkRequest where it makes sense, and
        make the creation less verbose by adding kitNew.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchWillSendRequest):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::FrameLoaderClient::download):
        (WebKit::FrameLoaderClient::startDownload):
        * webkit/webkitdownload.cpp:
        * webkit/webkitnetworkrequest.cpp:
        (WebKit::kitNew):
        (WebKit::core):
        * webkit/webkitnetworkrequestprivate.h: Added.
        * webkit/webkitprivate.cpp:
        * webkit/webkitprivate.h:
        * webkit/webkitwebdatasource.cpp:
        (webkit_web_data_source_get_initial_request):
        (webkit_web_data_source_get_request):
        * webkit/webkitwebframe.cpp:

2010-12-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Split webkitprivate.{cpp,h} in more manageable chunks
        https://bugs.webkit.org/show_bug.cgi?id=50698

        Split private bits of WebKitWebFrame to its own private header, and
        to its implementation file.

        * GNUmakefile.am:
        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/DragClientGtk.cpp:
        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * webkit/webkitprivate.cpp:
        * webkit/webkitprivate.h:
        * webkit/webkitwebdatasource.cpp:
        * webkit/webkitwebframe.cpp:
        (WebKit::getViewFromFrame):
        (WebKit::core):
        (WebKit::kit):
        * webkit/webkitwebframeprivate.h: Added.
        * webkit/webkitwebpolicydecision.cpp:
        * webkit/webkitwebview.cpp:

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

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk (part IV)
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Moved also webkit_worker_thread_count() to DumpRenderTreeSupportGtk,
        since it was only used by DRT for now.

        Since this method was the only one in webkitworker.cpp, the file was
        also removed.

        * GNUmakefile.am:
        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::workerThreadCount):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:
        * webkit/webkitprivate.h:
        * webkit/webkitworkers.cpp: Removed.

2010-12-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Support the Mozilla-style Fullscreen Javascript API
        https://bugs.webkit.org/show_bug.cgi?id=50572

        Fullscreen API support. It is controlled at runtime using a new
        setting called enable-fullscreen, set to FALSE by default.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::supportsFullScreenForElement):
        (WebKit::ChromeClient::enterFullScreenForElement):
        (WebKit::ChromeClient::exitFullScreenForElement):
        * WebCoreSupport/ChromeClientGtk.h:
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):

2010-12-09  Joone Hur  <joone@kldp.org>

        Reviewed by Martin Robinson.

        [GTK] Support for viewport meta tag
        https://bugs.webkit.org/show_bug.cgi?id=45443

        This patch adds a new gobject to offer the viewport properties to user agents.
        It is WebKitViewportAttributes that contains the viewport size, initial scale with limits, 
        and information about whether a user is able to scale the contents in the viewport.
        
        This feature was introduced by Safari on the iPhone. For more information on 
        the viewport properties, refer to the Safari reference library at 
        http://developer.apple.com/safari/library/documentation/appleapplications/reference/safarihtmlref/articles/metatags.html

        * GNUmakefile.am: Added webkitviewportattributes.h webkitviewportattributes.cpp. 
        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::dispatchViewportDataDidChange): Added this callback to know whether the viewport arguments is available.
        * WebCoreSupport/ChromeClientGtk.h:
        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::dumpConfigurationForViewport): Added this function to compute the viewport attributes with the given availableWidth and availableHeight.
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp: 
        (WebKit::postCommitFrameViewSetup): Invalidate the viewport attributes.
        * webkit/webkit.h:
        * webkit/webkitdefines.h:
        * webkit/webkitprivate.h: Added webkitViewportAttributesRecompute as a private function.
        * webkit/webkitviewportattributes.cpp: Added.
        (webkit_viewport_attributes_class_init):
        (webkit_viewport_attributes_init):
        (webkit_viewport_attributes_get_property):
        (webkit_viewport_attributes_set_property):
        (webkitViewportAttributesRecompute): Recompute the optimal viewport attributes and emit the viewport-attributes-changed signal.
        (webkit_viewport_attributes_recompute): a public API for calling webkitViewportAttributesRecompute.
        * webkit/webkitviewportattributes.h: Added.
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_property): Added PROP_VIEWPORT_ATTRIBUTES.
        (webkit_web_view_dispose): Deallocate the WebKitViewportAttributes instance.
        (webkit_web_view_class_init): Added the viewport-attributes-recompute-requested and viewport-attributes-changed signals.
        (webkit_web_view_init): Set the WebKitViewportAttributes instance.
        (webkit_web_view_get_viewport_attributes): Added a getter to obtain the WebKitViewportAttributes instance held by the given WebKitWebView.
        * webkit/webkitwebview.h:
        * webkit/webkitwebviewprivate.h: Added WebKitViewportAttributes as a private variable.

2010-12-09  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Fix 'make install' woes with some versions of automake.

        * GNUmakefile.am: use $(top_builddir) instead of $(builddir),
        since we actually want a valid path for the file regardless of the
        place from where the script is called.

2010-12-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Build fix. Take webView{Enter,Exit}Fullscreen back out of the
        WebKit namespace, and remove a function signature that got in by
        mistake because of a bad merge.

        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (WebKit::core):
        (WebKit::kit):

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

        Reviewed by John Sullivan.

        Layering Violation in ContextMenu - member variable of type HitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=50586
        
        Update users of ContextMenu and ContextMenuController to match where the new functions 
        are located.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::ContextMenuClient::getCustomMenuFromDefaultItems):

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

        Reviewed by John Sullivan.

        [GTK] Layering violation in ContextMenuGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50676

        ContextMenuGtk accesses the page's ContextMenuController, which is a layering
        violation. This was fixed for Mac with change r73469. We make a similar fix here
        by moving the "activated" signal connection to the WebKit layer.

        * webkit/webkitwebview.cpp:
        (popupMenuItemActivated): Have ContextMenuController handle this signal.
        (webkit_web_view_forward_context_menu_event): For all items in the untouched
        context menu, connect their "activated" signal to the new popupMenuItemActivated
        handler.

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

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk (part III)
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Adjusted some call sites of previously internal API declared
        webkitprivate.h that have moved to DumpRenderTreeSupportGtk.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::gcCollectJavascriptObjects):
        (DumpRenderTreeSupportGtk::gcCollectJavascriptObjectsOnAlternateThread):
        (DumpRenderTreeSupportGtk::gcCountJavascriptObjects):
        (DumpRenderTreeSupportGtk::layoutFrame):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:

2010-12-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Split webkitprivate.{cpp,h} in more manageable chunks
        https://bugs.webkit.org/show_bug.cgi?id=50698

        Split private bits of WebKitWebView to its own private header, and
        to its implementation file. Take the opportunity to fix includes
        sorting to comply with the style guide.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::enterFullscreenForNode):
        (WebKit::ChromeClient::exitFullscreenForNode):
        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * WebCoreSupport/DragClientGtk.cpp:
        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        * WebCoreSupport/EditorClientGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * WebCoreSupport/InspectorClientGtk.cpp:
        * WebCoreSupport/PasteboardHelperGtk.cpp:
        * webkit/webkitprivate.cpp:
        (webkit_init):
        * webkit/webkitprivate.h:
        * webkit/webkitwebbackforwardlist.cpp:
        * webkit/webkitwebdatasource.cpp:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebview.cpp:
        (WebKit::core):
        (WebKit::kit):
        (WebKit::webViewEnterFullscreen):
        (WebKit::webViewExitFullscreen):
        * webkit/webkitwebviewprivate.h: Added.

2010-12-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        The storage for the subresources is a GHashTable which does not
        guarantee order, so we need to make our checking more resilient.

        * tests/testwebresource.c:
        (test_web_resource_sub_resource_loading):

2010-12-08  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        Fix assertion in the API test, we are requesting the favicon and
        the subresource so we have to make sure we are assigning just the
        first subresource.

        * tests/testwebresource.c:
        (resource_request_starting_sub_cb):

2010-12-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] clears the subresources prematurely
        https://bugs.webkit.org/show_bug.cgi?id=50634

        Make adding the main resource explicit, and only clear
        subresources when the new load is committed, avoid clearing them
        prematurely.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::assignIdentifierToInitialRequest):
        (WebKit::FrameLoaderClient::provisionalLoadStarted):
        (WebKit::FrameLoaderClient::prepareForDataSourceReplacement):
        (WebKit::postCommitFrameViewSetup):
        * tests/testwebdatasource.c:
        (notify_load_status_lifetime_cb):
        (test_webkit_web_data_source_lifetime):
        (main):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_add_main_resource):
        (webkit_web_view_add_resource):
        (webkit_web_view_clear_resources):

2010-12-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] testwebdatasource - unreachable test is broken
        https://bugs.webkit.org/show_bug.cgi?id=50629

        Fix, and disable testwebdatasource's unreachable test (it is not
        passing now that it actually tests what it should). This also
        fixes the wait timer to actually work as expected.

        * tests/testwebdatasource.c:
        (notify_load_status_unreachable_cb):
        (notify_load_status_cb):
        (test_webkit_web_data_source):

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

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

        This commit caused crashes on the GTK+ bots

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::finishedLoading):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_encoding):

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

        Reviewed by Adam Barth.

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

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::finishedLoading):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_encoding):

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

        Reviewed by Xan Lopez.

        [GTK] Build is broken after r73353
        https://bugs.webkit.org/show_bug.cgi?id=50568

        Fix the gtk-doc build by making all members of the cache model
        enum public. gtk-doc does not support making only some enum
        members private. We should also expose it so that users querying
        the cache model do not get mysterious, undocumented results.

        * webkit/webkitwebview.h: Fix gtk-doc for the cache model enum.

2010-12-06  Derek Weitzel  <djw8605@gmail.com>

        Reviewed by Martin Robinson.

        [GTK] API Documentation referencing depreciated GTK_WIDGET_TOPLEVEL
        https://bugs.webkit.org/show_bug.cgi?id=50512

        Fixed reference to depreciated GTK_WIDGET_TOPLEVEL.

        * webkit/webkitwebview.cpp:

2010-12-06  Joone Hur  <joone@kldp.org>

        Reviewed by Xan Lopez.

        [GTK] The webkit cache model needs to be set when WebFrameLoaderClient::didPerformFirstNavigation() is called
        https://bugs.webkit.org/show_bug.cgi?id=50430

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didPerformFirstNavigation): Set the webview cache model.
        * webkit/webkitprivate.cpp:
        (webkit_init): Removed the code of setting the webview cache model.

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

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk (Part II)
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Moved more private method declared with WEBKIT_API to
        DumpRenderTreeSupportGtk, since they were only being used by DRT.

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::executeCoreCommandByName):
        (DumpRenderTreeSupportGtk::isCommandEnabled):
        (DumpRenderTreeSupportGtk::whiteListAccessFromOrigin):
        (DumpRenderTreeSupportGtk::resetOriginAccessWhiteLists):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:
        * webkit/webkitprivate.cpp:
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:

2010-11-08  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [Gtk] Populate DumpRenderTreeSupportGtk
        https://bugs.webkit.org/show_bug.cgi?id=48429

        Moved most of the webkit_web_frame* methods defined as private APIs in webkitprivate.h
        to DumpRenderTreeSupportGtk, as static class methods. These methods had
        not gone throught the formal API review process and were only being used by DRT for now.

        The essence of each original method name were kept. For example
        webkit_web_frame_get_children(...) was renamed to DumpRenderTreeSupportGtk::getFrameChildren(...),
        and so on.

        Also some of the method bodies were changed to return non-glib types (gchar* -> CString).

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::getFrameChildren):
        (DumpRenderTreeSupportGtk::getInnerText):
        (DumpRenderTreeSupportGtk::dumpRenderTree):
        (DumpRenderTreeSupportGtk::counterValueForElementById):
        (DumpRenderTreeSupportGtk::pageNumberForElementById):
        (DumpRenderTreeSupportGtk::numberOfPagesForFrame):
        (DumpRenderTreeSupportGtk::getPendingUnloadEventCount):
        (DumpRenderTreeSupportGtk::pauseAnimation):
        (DumpRenderTreeSupportGtk::pauseTransition):
        (DumpRenderTreeSupportGtk::pauseSvgAnimation):
        (DumpRenderTreeSupportGtk::markerTextForListItem):
        (DumpRenderTreeSupportGtk::numberOfActiveAnimations):
        (DumpRenderTreeSupportGtk::suspendAnimations):
        (DumpRenderTreeSupportGtk::resumeAnimations):
        (DumpRenderTreeSupportGtk::clearMainFrameName):
        (DumpRenderTreeSupportGtk::getFocusedAccessibleElement):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:

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

        Reviewed by Xan Lopez.

        [GTK] DumpRenderTree has two copies of JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=49877

        Keep WebKit/WebCore symbols hidden.

        * GNUmakefile.am: Move the symbol visibility rules here, because
        now JSC symbols are visible, but WebCore/WebKit symbols are hidden.

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

        Ignore WebKit/gtk/docs/GNUmakefile.in and WebKit/gtk/po/*.pot so that
        these files do not appear in an svn stat. This change makes SVN
        consistent with the current Git ignore behavior for these files.

        * docs: Added property svn:ignore.
        * po: Added property svn:ignore.

2010-12-01  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Support multiple correction candidates panel for misspelled word on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=50137
        <rdar://problem/8568059>

        Adopted new function signature defined in base class.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::getGuessesForWord):
        * WebCoreSupport/EditorClientGtk.h:

2010-11-30  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Fix wrong type in assert return value
        https://bugs.webkit.org/show_bug.cgi?id=50208

        Use appropriate return type in different g_return_val_if_fail(). This
        removes some compiler warning.

        * webkit/webkitwebdatasource.cpp:
        (webkit_web_data_source_is_loading):
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_page_number_for_element_by_id):
        (webkit_web_frame_number_of_pages):

2010-11-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Implement ROLE_COMBO_BOX
        https://bugs.webkit.org/show_bug.cgi?id=25678

        New test to check the implementation of the combo boxes.

        * tests/testatk.c:
        (testWebkitAtkComboBox): New test, checking that the roles and the
        implemented interfaces for a combo box and its descendants work.
        (main): Added the new unit test.

2010-11-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Test fast/events/mouseover-mouseout2.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=50214

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::mouseDidMoveOverElement):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_query_tooltip):

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

        Unreviewed, rolling out r72764.
        http://trac.webkit.org/changeset/72764
        https://bugs.webkit.org/show_bug.cgi?id=50215

        This change is causing assertion failures on the debug bots.
        (Requested by mrobinson on #webkit).

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::notifyStatus):
        * tests/testatk.c:
        (main):

2010-11-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        * NEWS: update for 1.3.7 release.

2010-11-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Tooltips should be fully keyboard accessible
        https://bugs.webkit.org/show_bug.cgi?id=25525

        Position the tooltip under the current focused element when the
        tooltip has been triggered using the keyboard.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_query_tooltip):
        (webkit_web_view_show_help):
        (webkit_web_view_class_init):

2010-11-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Tooltips not shown when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=50143

        Convert tooltip area to window coordinates so that tooltips are
        shown even after scrolling.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::mouseDidMoveOverElement):

2010-11-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Inspector: add a way to inspect a WebKitDOMNode
        https://bugs.webkit.org/show_bug.cgi?id=49903

        * webkit/webkitwebinspector.cpp:
        (webkit_web_inspector_inspect_node):
        * webkit/webkitwebinspector.h:

2010-11-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] events missing when a document is (re)loaded
        https://bugs.webkit.org/show_bug.cgi?id=25831

        Emit the right signals when reloading a document.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::notifyAccessibilityStatus): New function, to make sure
        the signals involved in reloading a document are properly emitted.
        (WebKit::notifyStatus): Also notify accessibility if enabled.

        New unit test to check the signals are being actually emitted.

        * tests/testatk.c:
        (stateChangedCb): Callback for 'state-change' signal emitted by
        the accessible object associated to the webView.
        (documentReloadCb): Callback for 'reload' signal.
        (documentLoadCompleteCb): Callback for 'load-complete' signal.
        (webviewLoadStatusChangedCb): Callback for 'notify::load-status'
        signal, emitted by the WebKitWebView object (not the AtkObject).
        (testWebkitAtkDocumentReloadEvents): New unit test.
        (main): Added the new unit test.

2010-11-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Make kit() methods return the proper type instead of gpointer
        https://bugs.webkit.org/show_bug.cgi?id=50034

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::shouldDeleteRange): get rid of unneeded cast.
        (WebKit::EditorClient::shouldShowDeleteInterface): ditto.
        (WebKit::EditorClient::shouldBeginEditing): ditto.
        (WebKit::EditorClient::shouldEndEditing): ditto.
        (WebKit::EditorClient::shouldInsertText): ditto.
        (WebKit::EditorClient::shouldChangeSelectedRange): ditto.
        (WebKit::EditorClient::shouldApplyStyle): ditto.
        (WebKit::EditorClient::shouldInsertNode): ditto.
        * webkit/webkitprivate.cpp:
        (WebKit::kit): ditto.
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_dom_document): ditto.

2010-11-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Fix crashes in GTK+ bots. Use kit() instead of wrapFoo, otherwise
        the DOM objects won't be in the cache and we'll ASSERT when
        unreffing them.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::shouldDeleteRange): use kit to get the
        GObject wrapper for the DOM object.
        (WebKit::EditorClient::shouldShowDeleteInterface): ditto.
        (WebKit::EditorClient::shouldBeginEditing): ditto.
        (WebKit::EditorClient::shouldEndEditing): ditto.
        (WebKit::EditorClient::shouldInsertText): ditto.
        (WebKit::EditorClient::shouldChangeSelectedRange): ditto.
        (WebKit::EditorClient::shouldApplyStyle): ditto.
        (WebKit::EditorClient::shouldInsertNode): ditto.

2010-11-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] The WebKitWebView should expose a set of signals encapsulating the behavior of the EditorClient
        https://bugs.webkit.org/show_bug.cgi?id=49143

        Add signals that encapsulate the functionality of the Mac EditingDelegate. These signals
        are private for now, but DRT consumes them to produce proper output for editing tests.
        After some time, these may be part of the public API.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::shouldDeleteRange): Fire the appropriate editing signal.
        (WebKit::EditorClient::shouldShowDeleteInterface): Ditto.
        (WebKit::EditorClient::shouldBeginEditing): Ditto.
        (WebKit::EditorClient::shouldEndEditing): Ditto.
        (WebKit::kit): Added helper function.
        (WebKit::EditorClient::shouldInsertText): Fire the appropriate editing signal.
        (WebKit::EditorClient::shouldChangeSelectedRange): Ditto.
        (WebKit::EditorClient::shouldApplyStyle): Ditto.
        (WebKit::EditorClient::didBeginEditing): Ditto.
        (WebKit::EditorClient::respondToChangedContents): Ditto.
        (WebKit::EditorClient::respondToChangedSelection): Ditto.
        (WebKit::EditorClient::didEndEditing): Ditto.
        (WebKit::EditorClient::shouldInsertNode): Ditto.
        * webkit/webkitwebview.cpp:
        (webkit_web_view_real_should_allow_editing_action): Added this default signal
        callback which explicitly allows cancellable editing actions.
        (webkit_web_view_class_init): Add new editing signal declarations to the view.
        * webkit/webkitwebview.h:
        * webkitmarshal.list: Added some new marshaling definitions.

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

        Unreviewed, rolling out r72499.
        http://trac.webkit.org/changeset/72499
        https://bugs.webkit.org/show_bug.cgi?id=50022

        This change is causing crashes on the bots. (Requested by
        mrobinson on #webkit).

        * tests/testatk.c:
        (main):

2010-11-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix IFrame DOM bindings API
        https://bugs.webkit.org/show_bug.cgi?id=49980

        * tests/testdomdocument.c:
        (test_dom_document_garbage_collection): change to use the fixed
        IFrame APIs.

2010-11-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        focus issue with links that have tooltips
        https://bugs.webkit.org/show_bug.cgi?id=49498

        Set the area of the widget where the tooltip should be shown when
        a new tooltip is set. Since the widget is the same (the view), if
        the tooltip area is not set and a new tooltip is triggered while
        the previous one is still visible, the text of the tooltip is
        updated but its position doesn't change.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::mouseDidMoveOverElement):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_query_tooltip):

2010-11-21  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Implement ROLE_COMBO_BOX
        https://bugs.webkit.org/show_bug.cgi?id=25678

        New test to check the implementation of the combo boxes.

        * tests/testatk.c:
        (testWebkitAtkComboBox): New test, checking that the roles and the
        implemented interfaces for a combo box and its descendants work.
        (main): Added the new unit test.

2010-11-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Remove leftover code in unit test.

        * GNUmakefile.am: remove unneeded utils file in dependency list.
        * tests/testdomdocument.c:
        (main): do not change to the directory of a non existing resource
        list.

2010-11-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Memory managament for DOM GObject wrappers
        https://bugs.webkit.org/show_bug.cgi?id=40302

        Initial attempt to have a kind of poor man's garbage collection
        for GObject DOM objects. We tie the object's lifecycle to their
        parent Frame and/or its document; that is, all objects will be
        collected when their parent frame is destroyed or when that frame
        transitions to a new document. Manual management (calling
        g_object_unref on them) is also allowed, and is required for
        objects that are not in the DOM tree (eg NodeLists).

        * GNUmakefile.am: add testutils file to testdomdocument.c
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::setMainFrameDocumentReady): collect
        DOM objects on document transition.
        * tests/testdomdocument.c:
        (dom_document_fixture_teardown): only destroy the view if it's not
        already destroyed, since the new test detroys it on its own.
        (test_dom_document_get_elements_by_tag_name): manually unref node list.
        (test_dom_document_get_elements_by_class_name): ditto.
        (test_dom_document_get_links): ditto.
        (test_dom_document_garbage_collection): test all possible
        scenarios for DOM object "garbage collection".
        (main): add new test.
        * tests/testdomnode.c:
        (test_dom_node_hierarchy_navigation): manually unref node list.
        (test_dom_node_insertion): ditto.
        * webkit/webkithittestresult.cpp:
        (webkit_hit_test_result_dispose): unref the inner node on dispose
        now that the memory management model is clarified.
        (webkit_hit_test_result_class_init): hook dispose.
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_core_frame_gone): clear DOM objects attached to this frame.
        (webkit_web_frame_finalize): ditto.

2010-11-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Fix introspection build, we were missing a -I flag.

        * GNUmakefile.am:

2010-11-18  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk]  atk_text_get_selection returns the wrong offsets after a link
        https://bugs.webkit.org/show_bug.cgi?id=49514

        Updated test case to also chech this specific subcase.

        We need to explicitly check the case of having a selection in a
        paragraph after an embedded object (i.e. a link) to make sure the
        right calculations are being done when the paragraph is composed
        of more than just one text object, and the current selection is
        made only in one of them.

        * tests/testatk.c:
        (testWebkitAtkTextSelections): Make sure that a selection after a
        link in a paragraph is working ok when asking for the text
        selection from the point of view of the paragraph.

2010-11-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Changing any GNUmakefile.am in the source tree forces a rebuld of the DOM bindings and WebKit APi
        https://bugs.webkit.org/show_bug.cgi?id=49400

        Add GNUmakefile.am and include all WebKit API build rules. Make webkitenum.*
        depend on this new file, instead of the generated GNUmakefile.am.

        * GNUmakefile.am: Copied from GNUmakefile.am.

2010-11-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        Fix a typo that leads to emitting the wrong signal if it is done
        by using the signals array.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):

2010-11-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Some key-press events can't be handled by WebView
        https://bugs.webkit.org/show_bug.cgi?id=48986

        The problem is that "popup-menu" and "show-help" signals are
        handled by GtkTextView, as they are added to the key bindings set
        of every widget in gtk_widget_class_init(). For all other bindings
        handled by GtkTextView we are stopping the signal emission in
        their callbacks, so we only need to do the same for "popup-menu"
        and "show-help" signals.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::toggleOverwriteCallback):
        (WebKit::popupMenuCallback):
        (WebKit::showHelpCallback):
        (WebKit::EditorClient::EditorClient):

2010-11-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Show default context menu for the currently focused element when activated with keyboard
        https://bugs.webkit.org/show_bug.cgi?id=49376

        * webkit/webkitwebview.cpp:
        (webkit_web_view_popup_menu_handler):

2010-11-11  Joone Hur  <joone@kldp.org>

        Reviewed by Antonio Gomes.

        [GTK][DRT] Implement LayoutTestController::nodesFromRect
        https://bugs.webkit.org/show_bug.cgi?id=46598

        Support nodesFromRect in DRT

        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp:
        (DumpRenderTreeSupportGtk::nodesFromRect): Added.
        * WebCoreSupport/DumpRenderTreeSupportGtk.h:

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

        Reviewed by Antonio Gomes.

        [GTK] Replace "MoveForward"/"MoveBackward" with "MoveRight"/"MoveLeft"
        to make spatial navigation work on input/textarea.
        https://bugs.webkit.org/show_bug.cgi?id=49056

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::moveCursorCallback):

2010-11-08  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Link with target name set does not work
        https://bugs.webkit.org/show_bug.cgi?id=48865

        When a new page is created with a name (target=myFrame), the new
        mainFrame could not be found because they where not stored in the
        same PageGroup. As PageGroup are not exposed externally so the
        simpliest solution is to use a global page group name. This also fixes
        issue with visited link coloration across pages. After this change the
        private function webkit_web_view_set_group_name() was no longer used
        so it was removed completly.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::closeWindowSoon):
        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_init):

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

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48685
        Notify UI process about focused frame

        Added an empty implementation of the new ChromeClient method.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::focusedFrameChanged):
        * WebCoreSupport/ChromeClientGtk.h:

2010-11-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Andreas Kling.

        [GTK] Error page templates are not filled properly
        https://bugs.webkit.org/show_bug.cgi?id=49148

        Replace a call to makeString with String::format. This was mistakenly
        changed to makeString in an earlier commit.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFailLoad):

2010-11-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        * NEWS: update for release.

2010-11-08  Csaba Osztrogonac  <ossy@webkit.org>

        Unreviewed, rolling out r71466.
        http://trac.webkit.org/changeset/71466
        https://bugs.webkit.org/show_bug.cgi?id=48865

        It broke layout tests on GTK bots.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::closeWindowSoon):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_init):
        (webkit_web_view_set_group_name):

2010-11-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename Cache to MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=49159

        * webkit/webkitwebview.cpp:

2010-11-05  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Link with target name set does not work correctly
        https://bugs.webkit.org/show_bug.cgi?id=48865

        When a new page is created with a name (target=myFrame), the new
        mainFrame could not be found because they where not stored in the
        same PageGroup. As PageGroup are not exposed externally so the
        simpliest solution is to use a global page group name. This also fixes
        issue with visited link coloration across pages. After this change the
        private function webkit_web_view_set_group_name() was no longer used
        so it was removed completly.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::closeWindowSoon):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_init):

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Move resumeAnimations/suspendAnimations from Frame to AnimationController.
        https://bugs.webkit.org/show_bug.cgi?id=49073

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_suspend_animations):
        (webkit_web_frame_resume_animations):

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Small fix to GTK build

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_suspend_animations):
        (webkit_web_frame_resume_animations):

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make suspendAnimations/resumeAnimations and setCSSAnimations traverse through subframes and remember state
        https://bugs.webkit.org/show_bug.cgi?id=46945

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_suspend_animations):
        (webkit_web_frame_resume_animations):

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

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Part 1 of 2.

        Substitute FrameTree::uniqueName() for FrameTree::name() in the GTK port.

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_name):

2010-11-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Barth.

        [Cairo] Remove PlatformRefPtrCairo
        https://bugs.webkit.org/show_bug.cgi?id=48192

        Replace instances of PlatformRefPtr smart pointers that wrap Cairo
        types with RefPtrs.

        * WebCoreSupport/DragClientGtk.cpp: Use RefPtr instead of PlatformRefPtr.
        (WebKit::dragIconWindowDrawEventCallback):
        * WebCoreSupport/DragClientGtk.h: Ditto.

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

        Reviewed by Martin Robinson.

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

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

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

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):

2010-11-01  Jennifer Braithwaite  <jennb@google.com>

        Reviewed by Martin Robinson.

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

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transferLoadingResourceFromPage):
        Assign resource id to current web view and remove from former web view.
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_remove_resource):
        Added.

2010-11-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Cleanup needed in testatk.c file
        https://bugs.webkit.org/show_bug.cgi?id=48759

        Cleanup done in testatk.c, mainly addressing the following issues:

        - Removed any trace of extra main loops in tests, so now we just
        spin the original main loop in all of them to get the a11y
        objects.

        - As we no longer use the extra main loops, removed the bail_out
        function, used along with g_idle_add() to stop those extra loops.

        - As we now spin the loop in every test, created a new function
        waitForAccessibilityObjects() to write the loop just once.

        - Fixed name in incorrectly named test testWekitAtkTextSelections.

        - Alphabetically sorted the list of includes.

        - Renamed all identifiers to camel Case notation.

        - Declare variables when needed only (instead of declaring all of
        them at the beginning of the function).

        - Don't declare two variables of the same type in the same line.

        - No more short names like 'obj', 'textObj' or 'alloc'. Use names
        like 'object', 'textObject' and 'allocation' instead.

        - Fixed indentation.

        - Make sure all comments finish with '.'

        - Replace NULL's with 0's.

        * tests/testatk.c:
        (waitForAccessibleObjects): New, manually spins the main context
        to make sure accessible objects are created before continuing.
        (testGetTextFunction): Fixed this function to be compliant with
        the WebKit's coding style.
        (runGetTextTests): Ditto.
        (testWebkitAtkGetTextAtOffsetForms): Ditto.
        (testWebkitAtkGetTextAtOffset): Ditto.
        (testWebkitAtkGetTextAtOffsetNewlines): Ditto.
        (testWebkitAtkGetTextAtOffsetTextarea): Ditto.
        (testWebkitAtkGetTextAtOffsetTextInput): Ditto.
        (testWebkitAtkGetTextInParagraphAndBodySimple): Ditto.
        (testWebkitAtkGetTextInParagraphAndBodyModerate): Ditto.
        (testWebkitAtkGetTextInTable): Ditto.
        (testWebkitAtkGetHeadersInTable): Ditto.
        (compAtkAttribute): Ditto.
        (atkAttributeSetAttributeNameHasValue): Ditto.
        (testWebkitAtkTextAttributes): Ditto.
        (testWebkitAtkTextSelections): Ditto.
        (testWebkitAtkGetExtents): Ditto.
        (testWebkitAtkLayoutAndDataTables): Ditto.
        (testWebkitAtkLinksWithInlineImages): Ditto.
        (testWebkitAtkHypertextAndHyperlinks): Ditto.
        (testWebkitAtkListsOfItems): Ditto.
        (testWebkitAtkTextChangedNotifications): Ditto.
        (main): Ditto.

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

        Reviewed by Anders Carlsson.

        <rdar://problem/7660547> and https://bugs.webkit.org/show_bug.cgi?id=48699
        Context menu support for WebKit 2.

        * WebCoreSupport/ChromeClientGtk.h:
        (WebKit::ChromeClient::showContextMenu):

2010-11-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Pasting markup into Thunderbird compose window produces no text
        https://bugs.webkit.org/show_bug.cgi?id=43737

        Added a test verifying that the meta tag prefix on markup data exists.

        * tests/testcopyandpaste.c:
        (load_status_cb): Add a check for the meta tag prefix.

2010-11-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] AtkHyperlink needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=33785

        New test to ensure the AtkHypertext/AtkHyperlink stuff works.

        * tests/testatk.c:
        (testWebkitAtkHypertextAndHyperlinks): New test, checking both the
        implementation of the AtkHypertext interface, the subclass of the
        AtkHyperlink abstract class, and the implementation of the
        AtkAction interface in that subclass.
        (main): Added the new unit test.

2010-10-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use new width for height APIs in GTK+ 3.x
        https://bugs.webkit.org/show_bug.cgi?id=48709

        Use the new width for height APIs in GTK+ 3.x, since size-request
        is deprecated.

        For now we just return the same value for preferred and minimum
        width/height, which should match the 2.x behavior. Probably we
        could do something smarter for the minimum values.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_preferred_width): return our preferred width.
        (webkit_web_view_get_preferred_height): return our preferred height.
        (webkit_web_view_class_init): hook the new default handlers.

2010-10-29  Daniel Bates  <dbates@rim.com>

        No review, rolling out 70971.
        http://trac.webkit.org/changeset/70971
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Rolling out changeset 70971 <http://trac.webkit.org/changeset/70971> since
        it caused layout test failures on all bots. In particular, the
        child count in a generated frame name differs after this patch. We need
        to look into this further.

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_name):

2010-10-28  Antonio Gomes  <agomes@rim.com>

        Reviewed by Ojan Vafai.

        Needs a "LinuxEditingBehavior", perhaps with a better name
        https://bugs.webkit.org/show_bug.cgi?id=36627

        Added the corresponding GTK+ setting to WebCore's EditingUnixBehavior: WEBKIT_EDITING_BEHAVIOR_UNIX.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        * webkit/webkitwebsettings.h:

2010-10-29  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Modified GTK-port to use FrameTree::uniqueName().

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_name):

2010-10-29  Martin Robinson  <mrobinson@igalia.com>

        Build fix for GTK+ after BackForwardListImpl introduction.

        * webkit/webkitwebbackforwardlist.cpp:
        (webkit_web_back_forward_list_new_with_web_view):

2010-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Change BackForwardList clients to use BackForwardListImpl to prepare for further refactoring
        https://bugs.webkit.org/show_bug.cgi?id=48574

        * webkit/webkitprivate.h:
        * webkit/webkitwebbackforwardlist.cpp:
        (webkit_web_back_forward_list_dispose):
        (webkit_web_back_forward_list_new_with_web_view):
        (webkit_web_back_forward_list_go_forward):
        (webkit_web_back_forward_list_go_back):
        (webkit_web_back_forward_list_contains_item):
        (webkit_web_back_forward_list_go_to_item):
        (webkit_web_back_forward_list_get_forward_list_with_limit):
        (webkit_web_back_forward_list_get_back_list_with_limit):
        (webkit_web_back_forward_list_get_back_item):
        (webkit_web_back_forward_list_get_current_item):
        (webkit_web_back_forward_list_get_forward_item):
        (webkit_web_back_forward_list_get_nth_item):
        (webkit_web_back_forward_list_get_back_length):
        (webkit_web_back_forward_list_get_forward_length):
        (webkit_web_back_forward_list_get_limit):
        (webkit_web_back_forward_list_set_limit):
        (webkit_web_back_forward_list_add_item):
        (webkit_web_back_forward_list_clear):
        (WebKit::core):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_set_maintains_back_forward_list):
        (webkit_web_view_get_back_forward_list):
        Use BackForwardListImpl.

2010-10-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48576
        Let WebKit2 client know when a frame is a frameset

        Added a blank implementation of the new FrameLoaderClient method.

        * WebCoreSupport/FrameLoaderClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidBecomeFrameset):

2010-10-29  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add the GtkScrollablePolicy property to the webview
        https://bugs.webkit.org/show_bug.cgi?id=48357

        Added the GtkScrollablePolicy properties to the webview widget, it
        is now required for GtkScrollable widgets in GTK+ 3.x.

        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (setHorizontalScrollPolicy): Added.
        (setVerticalScrollPolicy): Added.
        (getHorizontalScrollPolicy): Added.
        (getVerticalScrollPolicy): Added.
        (webkit_web_view_get_property):
        (webkit_web_view_set_property):
        (webkit_web_view_class_init):

2010-10-28  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] WebKitWebFrame's load-status is not properly notified to the tests
        https://bugs.webkit.org/show_bug.cgi?id=48048

        "frame-created" signal must be issued before loading any data,
        that way clients can correctly capture all the loading related
        signals for that frame.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):

2010-10-27  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        getTextAtOffset returns incorrect results if a link includes text and an image
        https://bugs.webkit.org/show_bug.cgi?id=47365

        New test to make sure this bug is actually fixed.

        * tests/testatk.c:
        (testWebkitAtkLinksWithInlineImages): New test.
        (main): Added new test.

2010-10-26  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson.

        [GTK] Implement DumpRenderTreeSupportGtk (similarly to DumpRenderTreeSupportQt idea)
        https://bugs.webkit.org/show_bug.cgi?id=48199

        Implemented an initial version of the DumpRenderTreeSupportGtk class.
        The main idea is that it groups together the bodies of many LayoutTestController
        methods, so they can directly access WebCore features. This way we eliminate the
        need of adding APIs to WebKitGTK just to expand its test coverage through DRT.

        The DumpRenderTreeSupportGtk class so far includes a getter and setter for the WebKitTabToLinksPreferenceKey
        property as a sample implementation. Also it makes it possible to unskip fast/events/tab-focus-anchor.html and
        to fix stderr messages from all 22 spatial-navigation tests in fast/events/spatial-navigation.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::tabsToLinks):
        * WebCoreSupport/DumpRenderTreeSupportGtk.cpp: Added.
        (DumpRenderTreeSupportGtk::DumpRenderTreeSupportGtk):
        (DumpRenderTreeSupportGtk::~DumpRenderTreeSupportGtk):
        (DumpRenderTreeSupportGtk::setDumpRenderTreeModeEnabled):
        (DumpRenderTreeSupportGtk::dumpRenderTreeModeEnabled): Getter to the WebKitTabToLinksPreferenceKey property.
        (DumpRenderTreeSupportGtk::setLinksIncludedInFocusChain): Setter to the WebKitTabToLinksPreferenceKey property.
        (DumpRenderTreeSupportGtk::linksIncludedInFocusChain):
        * WebCoreSupport/DumpRenderTreeSupportGtk.h: Added.

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

        Reviewed by Dmitry Titov.

        Resource tracking failure when trying to move a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=44713

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transferLoadingResourceFromPage):
        Empty method.
        * WebCoreSupport/FrameLoaderClientGtk.h:

2010-10-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Layout tables should indicate that they are not data tables via an object attribute
        https://bugs.webkit.org/show_bug.cgi?id=35422

        New unit test to check the 'layout-guess' attribute in tables.

        * tests/testatk.c:
        (atkAttributeSetAttributeNameHasValue): New, looks for a attribute
        with a specific value, by the name of attribute.
        (atkAttributeSetContainsAttributeName): New, just checks whether
        an attribute with a specified name is present in the set.
        (atkAttributeSetAttributeHasValue): Modified to relay on the new
        function atkAttributeSetAttributeNameHasValue().
        (testWebkitAtkLayoutAndDataTables): New test.
        (main): Added the new test.

2010-10-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Port to new GtkScrollable interface in GTK+ 3.x
        https://bugs.webkit.org/show_bug.cgi?id=48202

        Use the new GtkScrollable interface when compiling against GTK+
        3.x.

        * webkit/webkitwebview.cpp:
        (setHorizontalAdjustment):
        (setVerticalAdjustment):
        (getHorizontalAdjustment):
        (getVerticalAdjustment):
        (webkit_web_view_get_property):
        (webkit_web_view_set_property):
        (webkit_web_view_class_init):

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

        Reviewed by Anders Carlsson.

        WebKit2 needs to pass the current event modifier flags when requesting a new window
        https://bugs.webkit.org/show_bug.cgi?id=48140

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::createWindow):
        * WebCoreSupport/ChromeClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchCreatePage):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        Add NavigationAction parameter.

2010-10-20  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] use gtk_widget_hide instead of gtk_widget_hide_all in the fullscreen video conroller
        https://bugs.webkit.org/show_bug.cgi?id=47972

        * WebCoreSupport/FullscreenVideoController.cpp:
        (FullscreenVideoController::hideHud):
        (FullscreenVideoController::exitFullscreen):

2010-10-19  Joone Hur  <joone@kldp.org>

        Reviewed by Martin Robinson.

        [GTK] Needs fixing mistyped comments in the API documentation
        https://bugs.webkit.org/show_bug.cgi?id=47656

        Fixed mistyped comments in the API documenentation.

        * webkit/webkitwebsettings.cpp: Fixed a mistyped comment in the the section block.
        * webkit/webkitwebwindowfeatures.cpp: Fixed a mistyped comment in the section block.

2010-10-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        * NEWS: update for 1.3.5 release.
        * docs/webkitgtk-sections.txt: add new APIs.

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

        Reviewed by Simon Fraser.

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

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::sendMessageToFrontend):

2010-10-14  Antonio Gomes  <agomes@rim.com>

        Reviewed by Martin Robinson and Xan Lopez.

        [Gtk]: DRT does not support frame flattening testing
        https://bugs.webkit.org/show_bug.cgi?id=38650

        Implement enable-frame-flattening API for Gtk+.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

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

        Reviewed by Dirk Schulze.

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

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFailLoad):
        * webkit/webkitwebsettings.cpp:
        (webkitOSVersion):
        (webkitUserAgent):

2010-10-14  Joone Hur  <joone@kldp.org>

        Reviewed by Andreas Kling.

        [GTK] google.co.kr was missed when checking Google domains
        https://bugs.webkit.org/show_bug.cgi?id=47652

        WebKitGtk+ maintains a list of Google domains for working well with Google sites.
        Add google.co.kr also to the list to be checked with other Google domains.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::initializeDomainsList): Added google.co.kr.

2010-10-13  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        WebKitGtk+ to use the new API from the imported SoupURILoader code

        [GTK] Add HTTP caching support
        https://bugs.webkit.org/show_bug.cgi?id=44261

        ResourceHandleInternal m_msg is now called m_soupMessage.

        * webkit/webkitdownload.cpp:
        (webkit_download_new_with_handle):
        (webkit_download_start):

2010-10-13  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Remove more warnings from the g-i scanner run
        https://bugs.webkit.org/show_bug.cgi?id=47255

        Fixes almost all warnings coming from the g-i scanner.

        * webkit/webkitsecurityorigin.cpp: Rename parameter names in
        gtk-doc blurb to the actual name of the parameter.
        * webkit/webkitsoupauthdialog.c: ditto.
        (webkit_soup_auth_dialog_class_init): Write missing doc for the
        'current-toplevel' signal.
        * webkit/webkitsoupauthdialog.h: Rename signal parameter to its
        actual name.
        * webkit/webkitwebdatabase.cpp: Rename parameter names in
        gtk-doc blurb to the actual name of the parameter.
        * webkit/webkitwebinspector.cpp: ditto.
        (webkit_web_inspector_class_init): ditto.
        * webkit/webkitwebview.cpp: ditto.
        (webkit_web_view_class_init): ditto.
        * webkit/webkitwebview.h: Rename the parameter names to be in sync
        with the ones we use in the function definition.

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

        Unreviewed, rolling out r69589.
        http://trac.webkit.org/changeset/69589
        https://bugs.webkit.org/show_bug.cgi?id=47547

        Wrong patch landed from a bug with two patches (Requested by
        mrobinson on #webkit).

        * webkit/webkitdownload.cpp:
        (webkit_download_new_with_handle):
        (webkit_download_start):

2010-10-12  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add HTTP caching support
        https://bugs.webkit.org/show_bug.cgi?id=44261

        ResourceHandle's m_msg renamed to m_soupMsg and it's also now a PlatformRefPtr

        * webkit/webkitdownload.cpp:
        (webkit_download_new_with_handle):
        (webkit_download_start):

2010-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Removed unused callback in webkitwebview
        https://bugs.webkit.org/show_bug.cgi?id=47092

        In webkit_web_view_forward_context_menu_event() a callback is
        connected for the destroy signal of the popup menu, however we
        reuse the same menu always, holding a ref to it, so it's not
        destroyed when withdrawn by the user.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_forward_context_menu_event):

2010-10-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Remove duplicate code in WebKit/gtk/WebCoreSupport/DragClientGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=47367

        Remove as much duplicate code as possible from DragClientGtk. Most of this code
        is GTK2/GTK3 independent, so only the bits that aren't should be protected by
        #ifdefs.

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::dragIconWindowDrawEventCallback): Modified the name of this callback
        so that it is shared between build types.
        (WebKit::DragClient::DragClient): Updated the signal connectors to reflect the change above.
        (WebKit::DragClient::~DragClient): The build types share the callback name, so remove
        the #ifdef here.
        (WebKit::DragClient::drawDragIconWindow): Changed the name of this method and make it
        independent of the build type.
        * WebCoreSupport/DragClientGtk.h: Update method declaration and remove #ifdefs.

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Use draw instead of expose_event in WebView when building with gtk3
        https://bugs.webkit.org/show_bug.cgi?id=47338

        * webkit/webkitwebview.cpp:
        (webkit_web_view_expose_event):
        (webkit_web_view_draw):
        (webkit_web_view_class_init):

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Don't use GtkObject
        https://bugs.webkit.org/show_bug.cgi?id=47090

        GtkObject has been removed in gtk3.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::generateEditorCommands):
        * WebCoreSupport/FullscreenVideoController.cpp:
        (FullscreenVideoController::createHud):

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the build for GTK+ 3
        https://bugs.webkit.org/show_bug.cgi?id=47249

        Use GdkVisual instead of GdkColormap. GdkColormap has been removed
        in gtk3

        * webkit/webkitwebview.cpp:
        (webkit_web_view_realize):

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the build for GTK+ 3
        https://bugs.webkit.org/show_bug.cgi?id=47249

        Do not use GdkDrawable deprecated API. Some methods of GdkDrawable
        are deprecated in gtk2 and have been removed in gtk3. Equivalent
        API has been added to GdkWindow.

        * tests/testcopyandpaste.c:
        (runPasteTestCallback):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_button_press_event):

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Use draw signal instead of expose_event in DragClientGtk when building with gtk3
        https://bugs.webkit.org/show_bug.cgi?id=47326

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::dragIconWindowDrawCallback):
        (WebKit::DragClient::DragClient):
        (WebKit::DragClient::~DragClient):
        (WebKit::DragClient::startDrag):
        (WebKit::DragClient::dragIconWindowDraw):
        * WebCoreSupport/DragClientGtk.h:

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the build for GTK+ 3
        https://bugs.webkit.org/show_bug.cgi?id=47249

        Don't use gtk_size_request_get_size(). It has been removed,
        gtk_widget_get_preferred_size() should be used instead

        * webkit/webkitwebview.cpp:
        (PopupMenuPositionFunc):

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

        Unreviewed, rolling out r69201.
        http://trac.webkit.org/changeset/69201
        https://bugs.webkit.org/show_bug.cgi?id=47279

        This change broke the WebKitGTK+ build for GTK+ 2.0.
        (Requested by mrobinson on #webkit).

        * tests/testcopyandpaste.c:
        (runPasteTestCallback):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_button_press_event):

2010-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        Port to gtk+3 (2.91.0)
        https://bugs.webkit.org/show_bug.cgi?id=47249

        Do not use GdkDrawable deprecated API

        Some methods of GdkDrawable are deprecated in gtk2 and have been
        remmoved in gtk3. Equivalent API has been added to GdkWindow.

        * tests/testcopyandpaste.c:
        (runPasteTestCallback):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_button_press_event):

2010-09-28  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Added oldPage param to FrameLoaderClient::didTransferChildFrameToNewDocument.
        https://bugs.webkit.org/show_bug.cgi?id=46663

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didTransferChildFrameToNewDocument):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2010-09-27  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Adjust atk_text_get_text_at_offset to account for bullets/numbers in list items
        https://bugs.webkit.org/show_bug.cgi?id=45381

        Updated test to match the new exposure of list item markers.

        Also, added some extra assertions in that test to make sure the
        accessible objects associated to the items implement AtkText.

        * tests/testatk.c:
        (testWebkitAtkListsOfItems):
        (main):

2010-09-27  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Doesn't build with gtk+ 2.14
        https://bugs.webkit.org/show_bug.cgi?id=46565

        Fixed the build for GTK+ 2.14. Don't use gdk_window_get_cursor()
        for that GTK+ version as I found no acceptable way to work-around
        its absence.

        * WebCoreSupport/FullscreenVideoController.cpp:
        (FullscreenVideoController::showHud):
        (FullscreenVideoController::hideHud):
        (FullscreenVideoController::enterFullscreen):

2010-09-26  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Adam Barth.

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

        Test: fast/frames/iframe-reparenting-adopt-node.html

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didTransferChildFrameToNewDocument):
        Update the webView for the frame to match the parent frame's
        webView.

2010-09-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] opening local files on win32
        https://bugs.webkit.org/show_bug.cgi?id=31066

        Add tests that check the mime type returned by local files loaded via file URLs.

        * tests/testmimehandling.c:
        (testRemoteMimeType): Added.
        (testLocalMimeType): Added.
        (main): Run tests by using g_test_add_data_func with either 
        testRemoteMimeType or testLocalMimeType.

2010-09-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Nate Chapin.

        [GTK] Some tests from r68174 fail on the GTK+ bots
        https://bugs.webkit.org/show_bug.cgi?id=46396

        Fix since version number in this new WebKitWebSettings property.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init): Fix the since version number.

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

        Unreviewed, build fix.

        Add a missing comma in webkitwebsettings.cpp.

        * webkit/webkitwebsettings.cpp:

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

        Reviewed by Darin Fisher.

        Add hyperlink auditing settings (i.e., <a ping>).
        https://bugs.webkit.org/show_bug.cgi?id=30458

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2010-09-22  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Replace instances of g_timeout_add() with g_idle_add() in testatk.c
        https://bugs.webkit.org/show_bug.cgi?id=46284

        Use g_idle_add() whenever g_timeout_add() was being used.

        This is desired because it's better to rely on the main loop to
        decide when it's a good moment to execute the task (when idle)
        than manually setting a timeout, which also sets a minimum amount
        of time needed to get the function executed.

        * tests/testatk.c:
        (testWekitAtkTextSelections):
        (testWebkitAtkGetExtents):
        (testWebkitAtkListsOfItems):
        (main):

2010-09-22  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] object:text-changed events should be emitted for entries and password text
        https://bugs.webkit.org/show_bug.cgi?id=25898

        New unit test to make sure text-changed signals are emitted

        * tests/testatk.c:
        (textChangedCb): New. Signal handler for the
        text-changed::insert and text-changed::delete signals.
        (checkTextChangesAndBailOut): New. Source function to check
        the global result of the test and quit from the main loop.
        (testWebkitAtkTextChangedNotifications): New test.
        (main):

2010-09-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Added information about drop shadow improvements to the NEWS file.

        * NEWS: Added information about drop shadow improvements.

2010-09-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix transfer annotations for WebKitGTK+ static API
        https://bugs.webkit.org/show_bug.cgi?id=46244

        Deal with all the warnings related to transfer issues. Mostly the
        problem was the transfer being missing, but there were also typos
        in the function name or missing ':' at the end of the function
        name in the gtk-doc.

        * webkit/webkitdownload.cpp:
        * webkit/webkitnetworkrequest.cpp:
        * webkit/webkitnetworkresponse.cpp:
        * webkit/webkitsecurityorigin.cpp:
        * webkit/webkitwebdatabase.cpp:
        * webkit/webkitwebdatasource.cpp:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebhistoryitem.cpp:
        * webkit/webkitwebinspector.cpp:
        * webkit/webkitwebresource.cpp:
        * webkit/webkitwebsettings.cpp:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):
        (webkit_web_view_get_main_frame):

2010-09-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update for 1.3.4 release.

        * NEWS:

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

        Reviewed by Sam Weinig.

        REGRESSION (r60104): Zoom level is unexpectedly reset on page reload
        https://bugs.webkit.org/show_bug.cgi?id=42863

        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_zoom_level):
        (webkit_web_view_apply_zoom_level):
        (webkit_web_view_set_full_content_zoom):
        Call functions on Frame instead of FrameView.

2010-09-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Implement dissolveDragImageToFraction
        https://bugs.webkit.org/show_bug.cgi?id=45826

        To support full alpha in the drag icon, changed the drag icon to be a 
        GtkWindow with an RGBA colormap. Added logic to support painting the drag
        image to this window during the expose event.

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::dragIconWindowExposeEventCallback): Added.
        (WebKit::DragClient::DragClient): Initialize the new drag icon window.
        (WebKit::DragClient::~DragClient): Disconnect the expose event signal.
        (WebKit::DragClient::startDrag): Resize the drag icon window the appropriate size and
        if necessary, set its colormap.
        (WebKit::DragClient::dragIconWindowExposeEvent): Added.
        * WebCoreSupport/DragClientGtk.h: Added new member and method declarations.

2010-09-14  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson and Martin Robinson.

        [GTK] eventSender.contextClick() should return the contents of the context menu
        https://bugs.webkit.org/show_bug.cgi?id=39102

        New private WebView API to retrieve the context-menu widget. This
        is used by DRT only.

        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_context_menu):

2010-09-16  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        GTK+ 3.x. updates, gtk_widget_size_request is deprecated and
        "activate-slider" style property for scrollbars is gone.

        * webkit/webkitwebview.cpp:
        (PopupMenuPositionFunc):

2010-09-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by David Levin.

        [GTK] [REGRESSION] r67591 broke the testwebbackforwardlist API test and introduced a memory leak
        https://bugs.webkit.org/show_bug.cgi?id=45865

        When initializing the backForwardList private member of the WebView, do
        so with adoptPlatformRef to prevent a memory leak.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_init): Initialize member with adoptPlatformRef.

2010-09-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Eric Seidel.

        [Gtk] Use GOwnPtr for code that needs it
        https://bugs.webkit.org/show_bug.cgi?id=21594

        Convert as reference counted private members of WebKitWebView to
        smart pointers as possible. This removes a lot of unecessary manual
        memory management. Also convert some pointer members away from pointer
        types, now that we are sure their destructors are called.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::inputMethodsMenuItem): Updated to reflect PlatformRefPtr changes.
        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::startDrag): Ditto.
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::setInputMethodState): Ditto.
        (WebKit::EditorClient::respondToChangedSelection): Ditto.
        (WebKit::EditorClient::handleInputMethodKeydown): Ditto.
        (WebKit::EditorClient::handleInputMethodMousePress): Ditto.
        (WebKit::EditorClient::EditorClient): Ditto.
        (WebKit::EditorClient::~EditorClient): Ditto.
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::postCommitFrameViewSetup): Ditto.
        * webkit/webkitprivate.h: Ditto.
        * webkit/webkitwebview.cpp: Ditto.
        (destroy_menu_cb): Ditto.
        (webkit_web_view_forward_context_menu_event): Ditto.
        (webkit_web_view_key_release_event): Ditto.
        (webkit_web_view_button_press_event): Ditto.
        (webkit_web_view_button_release_event): Ditto.
        (webkit_web_view_focus_in_event): Ditto.
        (webkit_web_view_focus_out_event): Ditto.
        (webkit_web_view_realize): Ditto.
        (webkit_web_view_set_scroll_adjustments): Ditto.
        (webkit_web_view_dispose): Changed all g_object_unref calls to
        PlatformRefPtr.clear(). Although this will also be done by the manual
        call to the WebKitWebViewPrivate destructor, the order that these
        fields are zero'd in is still very sensitive.
        (webkit_web_view_finalize): Updated to reflect PlatformRefPtr changes.
        (webViewGetDPI): Ditto.
        (webkit_web_view_screen_changed): Ditto.
        (webkit_web_view_drag_end): Ditto.
        (webkit_web_view_drag_data_get): Ditto.
        (doDragLeaveLater): Ditto.
        (webkit_web_view_drag_leave): Ditto.
        (webkit_web_view_drag_motion): Ditto.
        (webkit_web_view_drag_data_received): Ditto.
        (webkit_web_view_drag_drop): Ditto.
        (webkit_web_view_get_im_context): Ditto.
        (webkit_web_view_update_settings): Ditto.
        (webkit_web_view_init): Ditto.
        (webkit_web_view_set_settings): Ditto.
        (webkit_web_view_get_settings): Ditto.
        (webkit_web_view_get_inspector): Ditto.
        (webkit_web_view_set_window_features): Ditto.
        (webkit_web_view_get_window_features): Ditto.
        (webkit_web_view_get_back_forward_list): Ditto.
        (webkit_web_view_zoom_in): Ditto.
        (webkit_web_view_zoom_out): Ditto.
        (webkit_web_view_add_resource): Ditto.
        (webkit_web_view_get_resource): Ditto.
        (webkit_web_view_get_main_resource): Ditto.
        (webkit_web_view_clear_resources): Ditto.
        (webkit_web_view_get_subresources): Ditto.

2010-09-14  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] fast/events/keydown-numpad-keys.html produces many GLib warnings
        https://bugs.webkit.org/show_bug.cgi?id=45775

        Handle the toggle-overwrite signal on the GtkTextView used for generating editing
        commands. Ignore this signals, as the default handler assumes that the GtkTextView
        has a layout and this one does not.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::toggleOverwriteCallback): Added. Cancels the default handler.
        (WebKit::EditorClient::EditorClient): Attach a handler for toggle-overwrite.

2010-09-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Provide network-based load timing.
        Before this change, inspector used timers taken from
        within WebCore notifications (that are by definition
        synchronous and serialized). As a result, timing was
        affected by the routines running on the main thread
        (JavaScript and such).
        https://bugs.webkit.org/show_bug.cgi?id=45664

        * webkit/webkitdownload.cpp:
        (DownloadClient::didFinishLoading):

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

        Unreviewed, rolling out r67551.
        http://trac.webkit.org/changeset/67551
        https://bugs.webkit.org/show_bug.cgi?id=45816

        "Plugin tests fail" (Requested by yurys on #webkit).

        * webkit/webkitdownload.cpp:
        (DownloadClient::didFinishLoading):

2010-09-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Provide network-based load timing.
        Before this change, inspector used timers taken from
        within WebCore notifications (that are by definition
        synchronous and serialized). As a result, timing was
        affected by the routines running on the main thread
        (JavaScript and such).
        https://bugs.webkit.org/show_bug.cgi?id=45664

        * webkit/webkitdownload.cpp:
        (DownloadClient::didFinishLoading):

2010-09-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Paste should be implemented in WebCore like Copy and Cut for Mac also.
        https://bugs.webkit.org/show_bug.cgi?id=45494
        <rdar://problem/7660537>

        On the Mac platform, the implementation of the paste operation is all done
        at the WebKit level. In order to support it on WebKit2 it is necessary to
        refactor the code and move this functionality at the level of WebCore like
        we already have on Windows.
        The original code relies on some in AppKit functions that call back into
        WebKit causing problems in WebKit2. All this functionality has been moved
        at the level of the editor client where it can be dealt with appropriately.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::canShowMIMETypeAsHTML): Added stub.
        * WebCoreSupport/FrameLoaderClientGtk.h:

2010-09-13  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Provide unit tests for AtkText's text selection functions
        https://bugs.webkit.org/show_bug.cgi?id=43919

        New tests to check getting, setting and removing text selections

        * tests/testatk.c:
        (testWekitAtkTextSelections): New unit tests to check all the text
        selection related functions altogether through a single test
        function.
        (main):

        Make sure that code dependant on getting information from the
        clipboard gets executed only when there's a GDK window associated
        to the webview widget, as that's not the case when executing the
        unit tests (the wedbview is not inside of any toplevel window) and
        will make the tests crash if not taken into account.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::respondToChangedSelection):

2010-09-11  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Make introspection work with g-o-i 0.9.5
        https://bugs.webkit.org/show_bug.cgi?id=45590

        Use new type syntax and bump version number of the gir file.

        * JSCore.gir.in:

2010-09-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        * webkit/webkitdownload.cpp:
        (webkit_download_start):
        * webkit/webkitprivate.cpp:
        (currentToplevelCallback):

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

        Fix GTK build.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_set_full_content_zoom):

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

        Reviewed by Darin Adler.

        Remove unnecessary constraint in WebCore of choosing either text zoom or full page zoom.
        Precursor to <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45522

        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_zoom_level):
        (webkit_web_view_apply_zoom_level):
        (webkit_web_view_set_full_content_zoom):

2010-09-10  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Fix warnings because of bad assignments in testatk.c
        https://bugs.webkit.org/show_bug.cgi?id=45538

        Use AtkObject and AtkText instances properly in the code.

        * tests/testatk.c:
        (testWebkitAtkListsOfItems):

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

        Reviewed by Darin Fisher.

        Move code from WebKit-layer to DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=45569

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):

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

        Reviewed by Eric Seidel.

        Main resource bytes shouldn't bounce through FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=45496

        Now return the bytes to the DocumentLoader.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):

2010-09-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Placement new / manual destructor invocation should be used on private GObject memory
        https://bugs.webkit.org/show_bug.cgi?id=45550

        GLib allocates and deallocates GObject private data structs itself. When
        those structs contain C++ members, their constructors and destructors are not
        called. This is not only dangerous, it makes RefPtr-type smart pointers much
        less useful. We can fix this problem by calling placement new on the private
        data struct during instance initialization and calling the destructor during
        finalization.

        This patch takes that approach and switches plain char* members of
        WebKitWebView (with manual memory allocation) to use CString.

        * webkit/webkitprivate.h: Switch char* members to CString.
        * webkit/webkitwebview.cpp:
        (webkit_web_view_finalize): Manually call the destructor on the private
        data. Remove manual deallocation of members which are now CString.
        (webkit_web_view_query_tooltip): Update to reflect CString change.
        (webkit_web_view_init): Use placement new to initialize C++ members of
        the private data section.
        (webkit_web_view_get_encoding): Update to reflect CString change.
        (webkit_web_view_get_custom_encoding): Ditto.
        (webkit_web_view_add_resource): Ditto.
        (webkit_web_view_get_resource): Ditto.
        (webkit_web_view_clear_resources): Ditto.
        (webkit_web_view_set_tooltip_text): Ditto.
        (webkit_web_view_get_icon_uri): Ditto.

2010-09-10  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] Google sites do not like WebKitGTK+
        https://bugs.webkit.org/show_bug.cgi?id=39617

        Special-case Google domains, and spoof User-Agent when talking to
        them, to stop being treated as a second-class citizen.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::initializeDomainsList):
        (WebKit::isGoogleDomain):
        (WebKit::FrameLoaderClient::userAgent): If enable-site-specific-quirks
        is enabled, send the standard WebKit User-Agent string, disregarding the
        custom one set by the browser for Google domains.
        * webkit/webkitprivate.h:
        * webkit/webkitwebsettings.cpp:
        (webkitPlatform): Fix style, and simplify.
        (webkitOSVersion): Ditto.
        (webkitUserAgent): Add the Version/x.y string Safari has been
        using since Safari 2.2.

2010-09-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Fix compilation with GTK+ 3.x.

        GDK key macros were renamed from GDK_FOO to GDK_KEY_FOO, we need
        to include the compat header provided if we want to keep using the
        old names.

        * WebCoreSupport/FullscreenVideoController.cpp: include GtkVersioning.h

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

        Reviewed by Adam Barth.

        Move functions from Frame to Editor as planned
        https://bugs.webkit.org/show_bug.cgi?id=45218

        * webkit/webkitwebview.cpp:
        (webkit_web_view_set_highlight_text_matches):
        (webkit_web_view_get_selected_text):
        (webkit_web_view_set_editable):
        Changed call sites to use editor().

2010-09-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] testmimehandling falsely succeeds testing Ogg mime type
        https://bugs.webkit.org/show_bug.cgi?id=45349

        Make this actually test an ogg file request instead of pdf and
        changed the expected result to match libsoup content-sniffing
        result in the case of ogg/vorbis file.

        * tests/testmimehandling.c:
        (mime_type_policy_decision_requested_cb):
        (test_mime_ogg):

2010-09-08  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] A list item's number/bullet should not be a child of that list item
        https://bugs.webkit.org/show_bug.cgi?id=45190

        New unit test added.

        * tests/testatk.c:
        (testWebkitAtkListsOfItems): New test to check ordered/unordered
        list of items are properly exposed to AT technologies.
        (main):

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

        Reviewed by Xan Lopez.

        [GTK] Fix some feature guards
        https://bugs.webkit.org/show_bug.cgi?id=45302

        * webkit/webkitprivate.h: Add ENABLE(VIDEO) guards for video specific members.

2010-09-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Add GTK's specific implementation of FrameNetworkingContext.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createNetworkingContext):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2010-09-03  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Dialog separators are gone in GTK+ 3.x.

        * webkit/webkitsoupauthdialog.c:
        (show_auth_dialog):

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

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::notifyWebViewDestroyed):
        (WebKit::InspectorFrontendClient::destroyInspectorWindow):
        (WebKit::InspectorFrontendClient::closeWindow):
        (WebKit::InspectorFrontendClient::disconnectFromBackend):
        * WebCoreSupport/InspectorClientGtk.h:

2010-08-31  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=44863, disentangle style recalc from layout, so that
        the former can occur in more places without having to do the latter.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_expose_event):

2010-08-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Isolate all GTK+ typedefs into one file
        https://bugs.webkit.org/show_bug.cgi?id=44900

        * WebCoreSupport/EditorClientGtk.h: Remove GTK+ typedefs.
        * WebCoreSupport/FullscreenVideoController.h: Ditto.

2010-08-31  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        Preparations for the 1.3.4 release.

        * NEWS:
        * docs/webkitgtk-docs.sgml:

2010-08-31  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Minor documentation typo fix.

        * webkit/webkitwebview.cpp:

2010-08-30  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] gdk_display_get_core_pointer and gdk_device_get_core_pointer
        are deprecated
        https://bugs.webkit.org/show_bug.cgi?id=44787

        We have replaced GtkVersioning.cpp with GtkVersioning.c and
        created a function (getDefaultGDKPointerDevice) to get the pointer
        of the window with the new APIs. We added that function to DRT and
        copyandpaste unit test.

        * tests/testcopyandpaste.c:
        (runPasteTestCallback):

2010-08-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66198.
        http://trac.webkit.org/changeset/66198
        https://bugs.webkit.org/show_bug.cgi?id=44856

        It made tests crash on Qt bot (Requested by Ossy_ on #webkit).

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::notifyWebViewDestroyed):
        (WebKit::InspectorFrontendClient::destroyInspectorWindow):
        (WebKit::InspectorFrontendClient::closeWindow):
        * WebCoreSupport/InspectorClientGtk.h:

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

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::notifyWebViewDestroyed):
        (WebKit::InspectorFrontendClient::destroyInspectorWindow):
        (WebKit::InspectorFrontendClient::closeWindow):
        (WebKit::InspectorFrontendClient::disconnectFromBackend):
        * WebCoreSupport/InspectorClientGtk.h:

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

        Unreviewed. Revert r66103 since Qt tests are failing.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::notifyWebViewDestroyed):
        (WebKit::InspectorFrontendClient::destroyInspectorWindow):
        (WebKit::InspectorFrontendClient::closeWindow):
        * WebCoreSupport/InspectorClientGtk.h:

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

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::notifyWebViewDestroyed):
        (WebKit::InspectorFrontendClient::destroyInspectorWindow):
        (WebKit::InspectorFrontendClient::closeWindow):
        (WebKit::InspectorFrontendClient::disconnectFromBackend):
        * WebCoreSupport/InspectorClientGtk.h:

2010-08-26  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] WebKitGTK+ needs proper introspection annotation for most types and methods
        https://bugs.webkit.org/show_bug.cgi?id=44565

        Add documentation and introspection specific information to a few
        getter and setter methods.

        * webkit/webkitwebview.cpp:

2010-08-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        confirm dialog should show OK/Cancel instead of Yes/No for consistency
        https://bugs.webkit.org/show_bug.cgi?id=32877

        Change the button labels for the fallback confirmation dialog to be
        OK and Cancel.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_script_dialog):

2010-08-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        Cairo and EFL port shouldn't depend on glib.
        https://bugs.webkit.org/show_bug.cgi?id=44354

        Replace occurrences of GRefPtr and adoptGRef with PlatformRefPtr and
        adoptPlatformRef.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::requestGeolocationPermissionForFrame):
        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::startDrag):
        * WebCoreSupport/EditorClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchWillSendRequest):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::FrameLoaderClient::createPlugin):
        * WebCoreSupport/FullscreenVideoController.h:
        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::populateSetting):
        (WebKit::InspectorClient::storeSetting):
        * webkit/webkitdownload.cpp:
        (webkit_download_error):
        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_new_with_core_request):
        * webkit/webkitnetworkresponse.cpp:
        (webkit_network_response_new_with_core_response):

2010-08-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Set a device to the event struct when building with GTK+ 3.x, it's
        mandatory.

        * tests/testcopyandpaste.c:
        (runPasteTestCallback):

2010-08-24  Martin Robinson  <mrobinson@igalia.com>

        Build fix for GTK+.

        * tests/testkeyevents.c:
        (key_press_event_cb):
        (key_release_event_cb):

2010-08-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
        https://bugs.webkit.org/show_bug.cgi?id=44534

        Fix an issue where a GdkEvent* is treated like a GdkEvent.

        * tests/testkeyevents.c:
        (key_press_event_cb):
        (key_release_event_cb):

2010-08-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GTK3: EventSender and API tests should use gdk_event_new when synthesizing events
        https://bugs.webkit.org/show_bug.cgi?id=44534

        * tests/testcopyandpaste.c:
        (runPasteTestCallback): Switch to using gdk_event_new and also reference the GdkWindow.
        when setting it on the event. It is dereferenced by gdk_event_free(...).
        * tests/testhittestresult.c:
        (load_status_cb): Switch to using gdk_event_new.

2010-08-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Do not initialize the GSettings object in webkit_init - the other
        call sites are always called in the main thread so this is
        unnecessary.

        * webkit/webkitprivate.cpp:
        (webkit_init):

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

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector tests were disabled for GTK.
        https://bugs.webkit.org/show_bug.cgi?id=43977

        Allow setting the inspector resources path via an environment variables
        and add a method, inspectorFilesPath, to the WebKit InspectorClient that
        encapsulates this logic.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend): Use the new inspectorFilesPath method to
        get the path to the resource.
        (WebKit::InspectorClient::inspectorFilesPath): Added.
        (WebKit::InspectorFrontendClient::localizedStringsURL): Use inspectorFilesPath method.
        * WebCoreSupport/InspectorClientGtk.h: Add method and member variables for caching the result.

2010-08-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Kenneth Rohde Christiansen.

        [Gtk] Enable view mode media feature layout test
        https://bugs.webkit.org/show_bug.cgi?id=43278

        Add the view-mode property, to control the WebCore page's viewMode.

        * docs/webkitgtk-sections.txt:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_property):
        (webkit_web_view_set_property):
        (webkit_web_view_class_init):
        (webkit_web_view_set_view_mode):
        (webkit_web_view_get_view_mode):
        * webkit/webkitwebview.h:

2010-08-19  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] GTK XOverlay support in GStreamerGWorld
        https://bugs.webkit.org/show_bug.cgi?id=39474

        New FullscreenVideoController object, private in the webview. It
        is created when the user presses the fullscreen button of the
        video controls. Video is displayed in fullscreen, controls are
        displayed when the user moves the mouse and when the video is
        paused. There's also basic keyboard shortcuts support: F/f to
        leave fullscreen, space to toggle play/pause and up/down to
        control volume.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::supportsFullscreenForNode):
        (WebKit::ChromeClient::enterFullscreenForNode):
        (WebKit::ChromeClient::exitFullscreenForNode):
        * WebCoreSupport/ChromeClientGtk.h:
        * WebCoreSupport/FullscreenVideoController.cpp: Added.
        (hideHudCallback):
        (onFullscreenGtkMotionNotifyEvent):
        (onFullscreenGtkActiveNotification):
        (onFullscreenGtkConfigureEvent):
        (onFullscreenGtkDestroy):
        (togglePlayPauseActivated):
        (exitFullscreenActivated):
        (progressBarUpdateCallback):
        (timeScaleButtonPressed):
        (timeScaleButtonReleased):
        (timeScaleValueChanged):
        (volumeValueChanged):
        (playerVolumeChangedCallback):
        (playerMuteChangedCallback):
        (FullscreenVideoController::FullscreenVideoController):
        (FullscreenVideoController::~FullscreenVideoController):
        (FullscreenVideoController::setMediaElement):
        (FullscreenVideoController::gtkConfigure):
        (FullscreenVideoController::showHud):
        (FullscreenVideoController::hideHud):
        (onFullscreenGtkKeyPressEvent):
        (FullscreenVideoController::enterFullscreen):
        (FullscreenVideoController::updateHudPosition):
        (FullscreenVideoController::exitOnUserRequest):
        (FullscreenVideoController::exitFullscreen):
        (FullscreenVideoController::canPlay):
        (FullscreenVideoController::play):
        (FullscreenVideoController::pause):
        (FullscreenVideoController::playStateChanged):
        (FullscreenVideoController::togglePlay):
        (FullscreenVideoController::volume):
        (FullscreenVideoController::muted):
        (FullscreenVideoController::setVolume):
        (FullscreenVideoController::volumeChanged):
        (FullscreenVideoController::muteChanged):
        (FullscreenVideoController::currentTime):
        (FullscreenVideoController::setCurrentTime):
        (FullscreenVideoController::duration):
        (FullscreenVideoController::percentLoaded):
        (FullscreenVideoController::beginSeek):
        (FullscreenVideoController::doSeek):
        (FullscreenVideoController::endSeek):
        (timeToString):
        (FullscreenVideoController::updateHudProgressBar):
        (FullscreenVideoController::createHud):
        * WebCoreSupport/FullscreenVideoController.h: Added.
        (FullscreenVideoController::mediaElement):
        * webkit/webkitprivate.cpp:
        (webkit_web_view_enter_fullscreen):
        (webkit_web_view_exit_fullscreen):
        * webkit/webkitprivate.h:

2010-08-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] WebBackForwardList's new_with_web_view should not be public
        https://bugs.webkit.org/show_bug.cgi?id=43802

        Deprecate the constructor. The introspection annotation has been
        fixed in a previous commit.

        * webkit/webkitwebbackforwardlist.cpp:

2010-08-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: replace hand written InspectorBackendStub.js with generated one.
        https://bugs.webkit.org/show_bug.cgi?id=43791

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend):

2010-08-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65595.
        http://trac.webkit.org/changeset/65595
        https://bugs.webkit.org/show_bug.cgi?id=44161

        qt build failed (Requested by loislo on #webkit).

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend):

2010-08-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: replace hand written InspectorBackendStub.js by generated one.
        https://bugs.webkit.org/show_bug.cgi?id=43791

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend):

2010-08-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix the builds when HAVE_GSETTINGS is defined.

        * webkit/webkitprivate.cpp:
        (isSchemaAvailable):
        (inspectorGSettings):

2010-08-17  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Preparation: Just add the files to the build system.

        * WebCoreSupport/FrameNetworkingContextGtk.h: Added.
        Placeholder with tentative code that might be changed when landing
        the rest of it.

2010-08-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        WebBackForwardList.get_{back|forward}_list_with_limit not introspectable
        https://bugs.webkit.org/show_bug.cgi?id=43054

        Annotate WebKitWebBackForwardList and the function that is used to fetch it from
        the WebKitWebView. More will follow.

        * webkit/webkitwebbackforwardlist.cpp: Annotations, and small
        improvements to the docs.
        * webkit/webkitwebbackforwardlist.h: Couple empty lines missing.
        * webkit/webkitwebview.cpp:

2010-08-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Clean up WebCore/platform/graphics/gtk/ImageGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44069

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend): Switched to using the new WEBKITGTK_API_VERSION_STRING define.
        * webkit/webkitprivate.cpp:
        (inspectorGSettings): Ditto.

2010-08-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65500.
        http://trac.webkit.org/changeset/65500
        https://bugs.webkit.org/show_bug.cgi?id=44108

        Qt bots failed to compile. (Requested by loislo on #webkit).

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend):

2010-08-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: replace hand written InspectorBackendStub.js by generated one.
        https://bugs.webkit.org/show_bug.cgi?id=43791

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend):

2010-08-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] GSettings support adds annoying warnings on systems with older glib versions
        https://bugs.webkit.org/show_bug.cgi?id=44056

        Use #ifdef instead of #if for HAVE_GSETTINGS to avoid warnings
        when it is not defined.

        * WebCoreSupport/InspectorClientGtk.cpp:
        * webkit/webkitprivate.cpp:
        (webkit_init):
        * webkit/webkitprivate.h:

2010-08-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Really add a missing file. I wish I would remember running git add
        on them after applying a patch =(.

        * org.webkitgtk.gschema.xml.in: Added.

2010-08-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Use GSettings to save/restore Web Inspector settings
        https://bugs.webkit.org/show_bug.cgi?id=43512

        Use GSettings to save/restore settings used by the Web Inspector.
        A few helper functions were added to have settings that use
        boolean values be actual booleans, and also to conform with the
        GSettings naming requirements for keys.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::toGSettingName):
        (WebKit::truthStringFromVariant):
        (WebKit::variantFromTruthString):
        (WebKit::InspectorClient::populateSetting):
        (WebKit::InspectorClient::storeSetting):
        * org.webkit.gtk.gschema.xml: Added.
        * webkit/webkitprivate.cpp:
        (inspectorGSettings):
        (webkit_init):
        * webkit/webkitprivate.h:

2010-08-11  Joone Hur  <joone@kldp.org>

        Reviewed by Martin Robinson.

        [GTK] Last Hangul letter is typed again when a composition is finished with mouse press
        https://bugs.webkit.org/show_bug.cgi?id=40518

        When a mouse press fires during a IME composition, the current composition character   
        can be entered twice at the previous editing position and a new editing position.
        Because the IME commit signal is emitted after the mouse press event. 
        This patch allows to prevent the commit signal during a composition when a mouse press fires.

        * WebCoreSupport/EditorClientGtk.cpp: 
        (WebKit::imContextCommitted):
        (WebKit::EditorClient::handleInputMethodKeydown): Allow to accept the next composition commit.
        (WebKit::EditorClient::handleInputMethodMousePress): Added for handling IME when a mouse press fires.
        (WebKit::EditorClient::EditorClient):  Initialize m_preventNextCompositionCommit
        * WebCoreSupport/EditorClientGtk.h:
        (WebKit::EditorClient::preventNextCompositionCommit): Added for checking whether skipping a commit.
        * webkit/webkitwebview.cpp:
        (webkit_web_view_button_press_event): Call handleInputMethodMousePress() 

2010-08-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        Small improvement to the documentation of the geolocation-policy-decision-requested
        signal, stating more clearly what is expected from the handler.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):

2010-08-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Geolocation policy decision object leaking
        https://bugs.webkit.org/show_bug.cgi?id=43884

        Use GRefPtr on the policy decision object to fix the leak.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::requestGeolocationPermissionForFrame):

2010-08-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Oliver Hunt.

        Add suspendAnimations/resumeAnimation API to DRT
        https://bugs.webkit.org/show_bug.cgi?id=43733
        
        Gtk specific API.

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_suspend_animations):
        (webkit_web_frame_resume_animations):

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

        Rubber stamped by Sam Weinig.

        Bug 43786 - Move AtomicStringHash from WebCore to WTF
        Also remove deprecated string headers from WebCore/platform/text.

        * gdom/ConvertToGCharPrivate.h:

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

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * WebCoreSupport/InspectorClientGtk.h:

2010-08-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [gtk] gtk_im_context_focus_in() should only be called when an input-able element has focus
        https://bugs.webkit.org/show_bug.cgi?id=43602

        Only call gtk_im_context_focus_in() when we focus a frame which is currently in
        an editable node. 

        * webkit/webkitwebview.cpp:
        (webkit_web_view_focus_in_event): Conditionalize call to gtk_im_context_focus_in().

2010-08-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Use the new paths, and also fix the path for localizedStrings.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend):
        (WebKit::InspectorFrontendClient::localizedStringsURL):

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

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

        * WebCoreSupport/InspectorClientGtk.h:

2010-08-05  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Use correct path for Inspector data files in GTK+3.x builds
        https://bugs.webkit.org/show_bug.cgi?id=43445

        Use the right data path for inspector files when building with
        GTK+ 3.x.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::openInspectorFrontend):

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

        Fix misspelled word 'teh' in the description of the XSS Auditor setting.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):

2010-08-03  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Fix DOM event dispatch
        https://bugs.webkit.org/show_bug.cgi?id=40847

        Test DOM event dispatch.

        * tests/testdomdomwindow.c:
        (load_event_callback):
        (test_dom_domview_signals):
        (clicked_cb):
        (load_status_callback):
        (test_dom_domview_dispatch_event):
        (main):

2010-08-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Does not paint the node highlight used by the inspector
        https://bugs.webkit.org/show_bug.cgi?id=43429

        Implement highlighting the nodes when using the inspector.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::highlight):
        (WebKit::InspectorClient::hideHighlight):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_expose_event):

2010-08-03  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update unit tests now that string parameters are 'const char*'.

        * tests/testdomdocument.c:
        (test_dom_document_title):
        (test_dom_document_get_elements_by_tag_name):
        (test_dom_document_get_elements_by_class_name):
        (test_dom_document_get_element_by_id):
        * tests/testdomnode.c:
        (test_dom_node_insertion):

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DRT implement execCommand()
        https://bugs.webkit.org/show_bug.cgi?id=35351

        * webkit/webkitprivate.h: Add some private methods for the DRT which enable
        LayoutTestController.execCommand and LayoutTestController.isCommandEnabled:
        webkit_web_view_execute_core_command_by_name and webkit_web_view_is_command_enabled.
        * webkit/webkitwebview.cpp: 
        (webkit_web_view_execute_core_command_by_name): added.
        (webkit_web_view_is_command_enabled): Added.

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

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::selectItemWritingDirectionIsNatural):
        (WebKit::ChromeClient::createPopupMenu):
        (WebKit::ChromeClient::createSearchPopupMenu):
        * WebCoreSupport/ChromeClientGtk.h:

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Create a frame-created signal
        https://bugs.webkit.org/show_bug.cgi?id=43284

        Add a frame-created signal, which will allow developers to track
        the beginning of a frame lifecycle and attach signal handlers to
        all new frames.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame): Emit the frame-created signal.
        * tests/testwebframe.c: Add a test which verifies that the correct number of
        frame-created signals is fired when a page with iframes loads.
        (createFrameSignalTestFrameCreatedCallback): Added.
        (createFrameSignalTestTimeout): Added.
        (test_webkit_web_frame_created_signal): Added.
        (main): Add a reference to the new test.
        * webkit/webkitprivate.h: De-normalize webkit_web_frame_init_with_web_view into
        the one place that it is used, so that the frame-created signal may be fired there.
        * webkit/webkitwebframe.cpp: Remove webkit_web_frame_init_with_web_view.
        * webkit/webkitwebview.cpp: 
        (webkit_web_view_class_init): Add the frame-created signal declaration.

2010-08-02  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Implement support for get_character_extents and get_range_extents
        https://bugs.webkit.org/show_bug.cgi?id=25677

        Added new unit tests to check get_character_extents and
        get_range_extents functions for the ATK_TEXT interface

        Based on a previous patch by Joanmarie Diggs.

        * tests/testatk.c:
        (test_webkit_atk_get_extents):
        (main):

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

        Speculative revert of 64425 due to Chromium instability
        https://bugs.webkit.org/show_bug.cgi?id=43347

        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/ChromeClientGtk.h:

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

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::selectItemWritingDirectionIsNatural):
        (WebKit::ChromeClient::createPopupMenu):
        (WebKit::ChromeClient::createSearchPopupMenu):
        * WebCoreSupport/ChromeClientGtk.h:

2010-07-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64422.
        http://trac.webkit.org/changeset/64422
        https://bugs.webkit.org/show_bug.cgi?id=43304

        Build fixes are needed for Snow Leopard and Windows.
        (Requested by lca on #webkit).

        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/ChromeClientGtk.h:

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

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        As ChromeClient was made responsible for providing PopupMenu and SearchPopupMenu
        instances, concrete classes that inherit from ChromeClient needed to be changed to
        implement the new methods.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::selectItemWritingDirectionIsNatural):
        (WebKit::ChromeClient::createPopupMenu):
        (WebKit::ChromeClient::createSearchPopupMenu):
        * WebCoreSupport/ChromeClientGtk.h:

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::reachedApplicationCacheOriginQuota):
        * WebCoreSupport/ChromeClientGtk.h:
2010-07-26  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Page clients should be passed to Page constructor via structure of pointers
        https://bugs.webkit.org/show_bug.cgi?id=42834

        * webkit/webkitwebview.cpp:
        (webkit_web_view_init):

2010-07-16  Zhe Su  <suzhe@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r61484): Broke focus behaviour on Qt and probably other platforms
        https://bugs.webkit.org/show_bug.cgi?id=42253

        Dummy implementation of EditorClient::willSetInputMethodState.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::willSetInputMethodState):
        * WebCoreSupport/EditorClientGtk.h:

2010-07-16  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Uncomment an assert that broke due to r63100.

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

        * tests/testwebview.c:

2010-07-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42232
        Make changing Cursors work in WebKit2.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::setCursor):
        * WebCoreSupport/ChromeClientGtk.h:
        Change prototype to match new one.

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

        Reviewed by Gustavo Noronha Silva.

        [GTK] r63100 broke the testwebview test
        https://bugs.webkit.org/show_bug.cgi?id=42114

        * tests/testwebview.c: Disable a failing assertion in test_webkit_web_view_adjustments
        until we can get to the bottom of the failure.

2010-07-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update for 1.3.3

        * NEWS:

2010-07-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix compilation with sealed GTK+.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_drag_motion):
        (webkit_web_view_drag_data_received):
        (webkit_web_view_drag_drop):

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

        Reviewed by Xan Lopez.

        [GTK] WebKitWebView should support drops
        https://bugs.webkit.org/show_bug.cgi?id=39843

        Add support for dropping content onto GTK+ WebViews.

        * webkit/webkitprivate.h:
        Add a DroppingContext struct to keep track of drop data while the drop is
        in progress. Have WebKitWebView keep a map of GdkDragContexts to DroppingContexts.
        * webkit/webkitwebview.cpp: Add necessary includes and globalPointForClientPoint helper.
        (webkit_web_view_popup_menu_handler): Use globalPointForClientPoint helper.
        (webkit_web_view_dispose): Properly clean up droppingContexts member.
        (webkit_web_view_finalize): Delete droppingContext member.
        (globalPointForClientPoint): Added.
        (doDragLeaveLater): Added.
        (webkit_web_view_drag_leave): Added.
        (webkit_web_view_drag_motion): Added.
        (webkit_web_view_drag_data_received): Added.
        (webkit_web_view_drag_drop): Added.
        (webkit_web_view_class_init): Connect new drop signal handlers to the widget definition.
        (webkit_web_view_init): Set up the widget as a drop destination and initialize droppingContexts.

2010-07-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
        Add basic piping for BackForwardControllerClient.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_init):

2010-06-19  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: js function name was fixed.
        dispatchMessageToFrontend -> dispatchMessageFromBackend.
        https://bugs.webkit.org/show_bug.cgi?id=40675

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::sendMessageToFrontend):

2010-06-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Separate DerivedSources per-project
        https://bugs.webkit.org/show_bug.cgi?id=41109

        Separate WebKitGTK+ DerivedSources into per-project subdirectories to prepare
        for properly building WebKit2.

        * webkitmarshal.list: Touch this file to force a rebuild of the marshaling code.

2010-07-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Stop using GdkRegion in 3.x mode
        https://bugs.webkit.org/show_bug.cgi?id=41463

        Make us compile without using GdkRegion, since it's gone from GTK+
        3.x.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::scroll):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_expose_event):

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

        Reviewed by Xan Lopez.

        [GTK] Convert WebKitWebView's private draggingDataObjects member to a pointer
        https://bugs.webkit.org/show_bug.cgi?id=40333

        Convert draggingDataObjects to a pointer. The constructor and destructor of the
        HashMap should be called explicitly. GObject memory allocation does not do this.

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::startDrag):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_dispose):
        (webkit_web_view_drag_end):
        (webkit_web_view_drag_data_get):
        (webkit_web_view_init):

2010-06-30  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed, rolling out r62226.
        http://trac.webkit.org/changeset/62226
        https://bugs.webkit.org/show_bug.cgi?id=40333

        This change caused 13 new crashers.

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::startDrag):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_dispose):
        (webkit_web_view_drag_end):
        (webkit_web_view_drag_data_get):
        (webkit_web_view_init):

2010-06-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Convert WebKitWebView's private draggingDataObjects member to a pointer
        https://bugs.webkit.org/show_bug.cgi?id=40333

        Convert draggingDataObjects to a pointer. The constructor and destructor of the
        HashMap should be called explicitly. GObject memory allocation does not do this.

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::startDrag):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_dispose):
        (webkit_web_view_drag_end):
        (webkit_web_view_drag_data_get):
        (webkit_web_view_init):

2010-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Unit test for DOM insertion methods
        https://bugs.webkit.org/show_bug.cgi?id=40495

        Add unit test for webkit_dom_node_remove_child.

        * tests/testdomnode.c:
        (test_dom_node_insertion):

2010-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Unit test for DOM insertion methods
        https://bugs.webkit.org/show_bug.cgi?id=40495

        Add unit tests for node insertion and replacement methods.

        * tests/testdomnode.c:
        (test_dom_node_insertion):
        (main):

2010-06-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Random failure on 'testdownload' unit test
        https://bugs.webkit.org/show_bug.cgi?id=38256

        Make sure the set_filename function is called after handling the
        'download-requested' signal for the asynchronous test. This change
        is needed because it could happen, with the current code, that the
        set_filename () function got called too early in the mainloop,
        therefore screwing the tests because the 'theDownload' global
        variable wouldn't be properly set yet.

        With this modification we ensure the set_filename() function gets
        called always after handling the download-requested signal,
        therefore avoiding potentialproblems.

        * tests/testdownload.c:
        (set_filename):
        (handle_download_requested_cb):
        (download_requested_cb):
        (download_requested_asynch_cb):
        (test_webkit_download_perform):

2010-06-30  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Text attributes not exposed
        https://bugs.webkit.org/show_bug.cgi?id=25528

        Added new tests for accessible text attributes

        * tests/testatk.c:
        (compAtkAttribute):
        (compAtkAttributeName):
        (atkAttributeSetAttributeHasValue):
        (atkAttributeSetAreEqual):
        (testWebkitAtkTextAttributes):
        (main):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update for 1.3.2.

        * NEWS:

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Does not compile with -DGSEAL_ENABLE
        https://bugs.webkit.org/show_bug.cgi?id=37851

        Fix build with GSEAL enabled.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):
        * webkit/webkitsoupauthdialog.c:
        (show_auth_dialog):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add support for GTK+3
        https://bugs.webkit.org/show_bug.cgi?id=41253

        Adapt build system to 3.x support, allow the JSCore gir and webkit
        pc files to be configurable at build time for different API
        versions.

        * JSCore-1.0.gir: Removed.
        * JSCore.gir.in: Added.
        * docs/GNUmakefile.am:
        * webkit.pc.in:

2010-06-25  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Implement atk_table_get_column_header
        https://bugs.webkit.org/show_bug.cgi?id=30896

        Replace g_timeout_add() with g_idle_add().

        * tests/testatk.c:
        (test_webkit_atk_get_text_at_offset_forms):
        (test_webkit_atk_get_text_at_offset):
        (test_webkit_atk_get_text_at_offset_newlines):
        (test_webkit_atk_get_text_at_offset_textarea):
        (test_webkit_atk_get_text_at_offset_text_input):
        (testWebkitAtkGetTextInParagraphAndBodySimple):
        (testWebkitAtkGetTextInParagraphAndBodyModerate):
        (testWebkitAtkGetTextInTable):
        (testWebkitAtkGetHeadersInTable):

2010-06-25  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Implement atk_table_get_column_header
        https://bugs.webkit.org/show_bug.cgi?id=30896

        Added new test to check whether the implementation of
        get_column_headers() and get_row_headers() works ok.

        * tests/testatk.c:
        (testWebkitAtkGetHeadersInTable):
        (main):

2010-06-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Pasteboard code does not take into account the nil character when getting and setting markup/netscape-url data
        https://bugs.webkit.org/show_bug.cgi?id=41221

        Add a test for this issue which simulates a paste keyboard event into an editable
        body. The pasteboard should contain a markup portion containing a null terminator.

        * tests/testcopyandpaste.c:
        (test_info_new):
        (test_info_destroy):
        (load_status_cb):
        (runPasteTestCallback):
        (window_object_cleared_callback):
        (pasting_test_get_data_callback):
        (pasting_test_clear_data_callback):
        (test_pasting_markup):
        (main):

2010-06-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Cannot change the selection via the keyboard
        https://bugs.webkit.org/show_bug.cgi?id=41162

        Fix issue where the selection could not be extended via the keyboard by
        adjusting the logic guarding against inserting text in non-editable nodes.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeyboardEvent):
        Allow editor commands that do not insert text in non-editable nodes. This
        fixes keyboard selection extension in non-editable nodes. Move the existing
        check to after the execution of any editor commands.

2010-06-15  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Move isAvailable()/setIsAvailable() from Database/DatabaseSync to AbstractDatabase.
        https://bugs.webkit.org/show_bug.cgi?id=39041

        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):
        (webkit_get_cache_model):

2010-06-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Remove the abuse of GDK_CURRENT_TIME in the DRT
        https://bugs.webkit.org/show_bug.cgi?id=40600

        * WebCoreSupport/DragClientGtk.cpp: 
        (WebKit::DragClient::startDrag): Reset the click count after a drag starts.
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::postCommitFrameViewSetup): Reset the click count after a load is committed.
        * webkit/webkitprivate.h: Move static click counting variables to be per-view.
        * webkit/webkitwebview.cpp: 
        (getEventTime): Added.
        (webkit_web_view_button_press_event): If the event time is zero, use the current time.
        (webkit_web_view_finalize): Clean up click counting member.
        (webkit_web_view_init): Initialize click counting member.

2010-06-15  Xan Lopez  <xlopez@igalia.com>

        Fix compilation with older GTK+.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::pageRect):

2010-06-15  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Does not compile with -DGSEAL_ENABLE
        https://bugs.webkit.org/show_bug.cgi?id=37851

        Fix compilation with GSEAL_ENABLE.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::pageRect):
        (WebKit::ChromeClient::contentsSizeChanged):
        * tests/testdomnode.c:
        (test_dom_node_insertion):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_realize):
        (webkit_web_view_script_dialog):
        (webkit_web_view_drag_end):
        (webkit_web_view_init):

2010-06-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix.

        This is a fix for flaky inspector tests at gtk-debug bots.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorFrontendClient::destroyInspectorWindow):

2010-06-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: On the way to Remote Debugging we want to transfer dom/timeline/etc
        data from inspected page to WebInspector as JSON string via http. The native
        serialization to JSON string is supported by InspectorValue's classes. This patch
        has the implementation of sendMessageToFrontend function. WebKit version of it still
        uses ScriptFunctionCall and will be switched to another transport a little bit later.
        https://bugs.webkit.org/show_bug.cgi?id=40134

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::releaseFrontendPage):
        (WebKit::InspectorClient::sendMessageToFrontend):
        * WebCoreSupport/InspectorClientGtk.h:

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

        Reviewed by Adam Barth.

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

        * webkit/webkitwebinspector.cpp:
         - Include RenderLayer.h

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

        Unreviewed, rolling out r60889.
        http://trac.webkit.org/changeset/60889
        https://bugs.webkit.org/show_bug.cgi?id=40365

        gtk bot has some kind of memory corruption (Requested by
        loislo on #webkit).

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::InspectorClient):
        (WebKit::InspectorClient::openInspectorFrontend):
        (WebKit::InspectorFrontendClient::InspectorFrontendClient):
        (WebKit::InspectorFrontendClient::destroyInspectorWindow):
        * WebCoreSupport/InspectorClientGtk.h:

2010-06-07  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: On the way to Remote Debugging we want to transfer dom/timeline/etc
        data from inspected page to WebInspector as JSON string via http. The native
        serialization to JSON string is supported by InspectorValue's classes. This patch
        has the implementation of sendMessageToFrontend function. WebKit version of it still
        uses ScriptFunctionCall and will be switched to another transport a little bit later.
        https://bugs.webkit.org/show_bug.cgi?id=40134

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::releaseFrontendPage):
        (WebKit::InspectorClient::sendMessageToFrontend):
        * WebCoreSupport/InspectorClientGtk.h:

2010-06-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Unit testing for WebKitDOMNode hierarchy walk
        https://bugs.webkit.org/show_bug.cgi?id=40171

        Add some DOM node unit testing.

        * tests/testdomnode.c: Added.
        (finish_loading):
        (dom_node_fixture_setup):
        (dom_node_fixture_teardown):
        (test_dom_node_hierarchy_navigation):
        (main):

2010-06-08  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ojan Vafai and Darin Adler.

        Refactor platform dependent editing behavior code out of Settings
        https://bugs.webkit.org/show_bug.cgi?id=39854

        EditingBehavior enum was renamed to EditingBehaviorTypes and moved out from Settings.h to
        EditingBehaviorTypes.h . Call sites in WebKit/ adjusted accordingly.

        * webkit/webkitprivate.cpp:
        (WebKit::core):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2010-06-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add inner-node property to WebKitHitTestResult
        https://bugs.webkit.org/show_bug.cgi?id=40131

        Add a 'inner-node' property to WebKitHitTestResult, carrying the
        DOM node where the hit test happened.

        * tests/testhittestresult.c:
        (load_status_cb):
        * webkit/webkithittestresult.cpp:
        (webkit_hit_test_result_get_property):
        (webkit_hit_test_result_set_property):
        (webkit_hit_test_result_class_init):
        * webkit/webkitprivate.cpp:
        (WebKit::kit):

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

        Reviewed by Xan Lopez.

        [GTK] gtk_widget_get_window should replace widget->window
        https://bugs.webkit.org/show_bug.cgi?id=40180

        Replace uses of widget->window with gtk_widget_get_window.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::invalidateContentsAndWindow): Replace widget->window uses.
        (WebKit::ChromeClient::scroll): Ditto.
        (WebKit::widgetScreenPosition): Ditto.
        * WebCoreSupport/DragClientGtk.cpp: Move gtk_widget_get_window define to GtkVersioning.h.
        * webkit/webkitwebview.cpp:
        (webkit_web_view_popup_menu_handler): Replace widget->window uses.
        (webkit_web_view_button_press_event): Ditto.

2010-06-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Drag gesture can take mouse grab indefinitely
        https://bugs.webkit.org/show_bug.cgi?id=32840

        Initiate drag events with the current GTK+ event instead of synthesizing
        an event. Something about synthesized events is causing a drag freeze in
        certain situations.

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::startDrag): Start the drag with the current GTK+ event.

2010-06-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60632.
        http://trac.webkit.org/changeset/60632
        https://bugs.webkit.org/show_bug.cgi?id=40143

        This change broke the 64-bit bots. (Requested by mrobinson on
        #webkit).

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::DragClient):
        (WebKit::DragClient::startDrag):
        * WebCoreSupport/DragClientGtk.h:

2010-06-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Drag gesture can take mouse grab indefinitely
        https://bugs.webkit.org/show_bug.cgi?id=32840

        Start GTK+ drags with the previous mouse button down event instead of
        synthesizing the event. The synthesized event was not completely valid
        and froze some drags indefinitely.

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::buttonPressEvent): Added.
        (WebKit::DragClient::DragClient):
        Connect to the 'button-press-event' signal of the WebView.
        (WebKit::DragClient::startDrag):
        Instead of synthesizing a button press event use the last real one.
        * WebCoreSupport/DragClientGtk.h:
        (WebKit::DragClient::setLastButtonPressEvent): Added.

2010-06-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Memory Leak: The main resource of page is not free.
        https://bugs.webkit.org/show_bug.cgi?id=39973

        Fix refcount tracking of the main resource. Patch by Genhua Liu.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFinishLoading):

2010-06-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix-up for previous leak fix, the identifier was not always duped.

        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_add_resource):

2010-06-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Plug a small leak.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::assignIdentifierToInitialRequest):

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Double clicks cause three button press events
        https://bugs.webkit.org/show_bug.cgi?id=38853

        Handle click counting much like the Windows port. GTK+ only
        counts triple-clicks natively, so use GTK+ double-click settings
        to count clicks with even larger click counts. Also filter the
        extra GDK_BUTTON_PRESS before GDK_{2,3}BUTTON_PRESS events using
        gdk_event_peek().

        * webkit/webkitwebview.cpp:
        (webkit_web_view_button_press_event): Count clicks manually. Filter extra events.

2010-05-31  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Missing links to documentation of general functions
        https://bugs.webkit.org/show_bug.cgi?id=39964

        Add global functions section, and move those functions that are
        currently in WebKitWebView's source file to the bottom, along with
        the description.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_dom_document):
        (webkit_get_default_session):

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

        Reviewed by Gustavo Noronha Silva.

        [GTK] Text copied from a WebView cannot be pasted into gnome-terminal
        https://bugs.webkit.org/show_bug.cgi?id=39827

        Add a test to prevent regressions for this issue.

        * tests/testcopyandpaste.c: Added.
        (test_info_new):
        (test_info_destroy):
        (copy_and_paste_fixture_setup):
        (copy_and_paste_fixture_teardown):
        (load_status_cb):
        (map_event_cb):
        (test_copy_and_paste):
        (main):

2010-05-27  Gustavo Noronha Silva  <gns@gnome.org>

        Update documentation control files, and fix Since tags for 1.3.1.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:
        * webkit/webkitwebbackforwardlist.cpp:
        * webkit/webkitwebview.cpp:

2010-05-27  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update for 1.3.1 release.

        * NEWS:

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

        Reviewed by Xan Lopez.

        [GTK] Dragging onto the desktop causes a critical GLib warning
        https://bugs.webkit.org/show_bug.cgi?id=39718

        Only increment the window reference count if it is not null during drag-end
        signal processing.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_drag_end): Guard against null window values.

2010-05-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add support for DOM events in the GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=38844

        Test DOMWindow signals.

        * tests/testdomdomwindow.c: Added.
        (finish_loading):
        (dom_domview_fixture_setup):
        (dom_domview_fixture_teardown):
        (loadedCallback):
        (clickedCallback):
        (map_event_cb):
        (load_event_callback):
        (test_dom_domview_signals):
        (main):

2010-05-24  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        Move view-related functions from Frame to FrameView
        https://bugs.webkit.org/show_bug.cgi?id=39366

        * webkit/webkitwebview.cpp:
        (webkit_web_view_set_editable): Remove call to empty function
        removeEditngStyleFromBodyElement.
        (webkit_web_view_get_zoom_level): Call functions on FrameView.
        (webkit_web_view_apply_zoom_level): Ditto.

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

        Reviewed by Xan Lopez.

        [GTK] webkit_web_view_drag_end should call EventHandler::dragSourceEndedAt
        https://bugs.webkit.org/show_bug.cgi?id=39465

        Properly call EventHandler::dragSourceEndedAt so that dragEnd events are processed in the DOM.
        dragSourceEndedAt is responsible for calling the dragEnd DOM event as well as cleaning up assets
        (such as the Clipboard) associated with the drag source.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_drag_end): Remember to call dragSourceEndedAt here.

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

        Reviewed by Xan Lopez.

        [GTK] WebKit/gtk/WebCoreSupport/DragClientGtk::startDrag should use the Clipboard::sourceOperation
        https://bugs.webkit.org/show_bug.cgi?id=39459

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::startDrag):
        Use Clipboard::sourceOperation instead of trying to figure out the GdkDragAction
        manually. The DOM may have changed the appropriate list of actions anyhow.

2010-05-21  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Add DeviceOrientation and DeviceOrientationClient
        https://bugs.webkit.org/show_bug.cgi?id=39479

        * webkit/webkitwebview.cpp:
        (webkit_web_view_init):

2010-05-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r59240.
        http://trac.webkit.org/changeset/59240
        https://bugs.webkit.org/show_bug.cgi?id=39377

        "Might cause crashes in GTK+ bots" (Requested by xan_ on
        #webkit).

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::inputMethodsMenuItem):
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::setInputMethodState):
        (WebKit::EditorClient::respondToChangedSelection):
        (WebKit::EditorClient::handleInputMethodKeydown):
        (WebKit::EditorClient::EditorClient):
        (WebKit::EditorClient::~EditorClient):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::postCommitFrameViewSetup):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (destroy_menu_cb):
        (webkit_web_view_forward_context_menu_event):
        (webkit_web_view_key_release_event):
        (webkit_web_view_button_release_event):
        (webkit_web_view_focus_in_event):
        (webkit_web_view_focus_out_event):
        (webkit_web_view_realize):
        (webkit_web_view_set_scroll_adjustments):
        (webkit_web_view_dispose):
        (webkit_web_view_finalize):
        (webViewGetDPI):
        (webkit_web_view_screen_changed):
        (webkit_web_view_query_tooltip):
        (webkit_web_view_get_im_context):
        (webkit_web_view_update_settings):
        (webkit_web_view_init):
        (webkit_web_view_set_settings):
        (webkit_web_view_get_settings):
        (webkit_web_view_get_inspector):
        (webkit_web_view_set_window_features):
        (webkit_web_view_get_window_features):
        (webkit_web_view_get_back_forward_list):
        (webkit_web_view_zoom_in):
        (webkit_web_view_zoom_out):
        (webkit_web_view_get_encoding):
        (webkit_web_view_get_custom_encoding):
        (webkit_web_view_add_resource):
        (webkit_web_view_get_resource):
        (webkit_web_view_get_main_resource):
        (webkit_web_view_clear_resources):
        (webkit_web_view_get_subresources):
        (webkit_web_view_set_tooltip_text):
        (webkit_web_view_get_icon_uri):

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

        Reviewed by Xan Lopez.

        [GTK] DragClientGtk::startDrag leaks GdkEvents
        https://bugs.webkit.org/show_bug.cgi?id=39322

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::startDrag): Properly clean up allocated GdkEvent.

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

        Reviewed by Xan Lopez.

        [Gtk] Use GOwnPtr for code that needs it
        https://bugs.webkit.org/show_bug.cgi?id=21594

        Convert many uses of raw pointers to GRefPtr and GOwnPtr in WebKitWebView.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::inputMethodsMenuItem):
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::setInputMethodState):
        (WebKit::EditorClient::respondToChangedSelection):
        (WebKit::EditorClient::handleInputMethodKeydown):
        (WebKit::EditorClient::EditorClient):
        (WebKit::EditorClient::~EditorClient):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::postCommitFrameViewSetup):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (destroy_menu_cb):
        (webkit_web_view_forward_context_menu_event):
        (webkit_web_view_key_release_event):
        (webkit_web_view_button_release_event):
        (webkit_web_view_focus_in_event):
        (webkit_web_view_focus_out_event):
        (webkit_web_view_realize):
        (webkit_web_view_set_scroll_adjustments):
        (webkit_web_view_dispose):
        (webkit_web_view_finalize):
        (webViewGetDPI):
        (webkit_web_view_screen_changed):
        (webkit_web_view_query_tooltip):
        (webkit_web_view_get_im_context):
        (webkit_web_view_update_settings):
        (webkit_web_view_init):
        (webkit_web_view_set_settings):
        (webkit_web_view_get_settings):
        (webkit_web_view_get_inspector):
        (webkit_web_view_set_window_features):
        (webkit_web_view_get_window_features):
        (webkit_web_view_get_back_forward_list):
        (webkit_web_view_zoom_in):
        (webkit_web_view_zoom_out):
        (webkit_web_view_get_encoding):
        (webkit_web_view_get_custom_encoding):
        (webkit_web_view_add_resource):
        (webkit_web_view_get_resource):
        (webkit_web_view_get_main_resource):
        (webkit_web_view_clear_resources):
        (webkit_web_view_get_subresources):
        (webkit_web_view_set_tooltip_text):
        (webkit_web_view_get_icon_uri):

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

        Reviewed by Xan Lopez.

        [Gtk] Doesn't support gtk-key-themes
        https://bugs.webkit.org/show_bug.cgi?id=28257

        Add support for GTK+ key themes.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::backspaceCallback): Added.
        (WebKit::cutClipboardCallback): Added.
        (WebKit::copyClipboardCallback): Added.
        (WebKit::pasteClipboardCallback): Added.
        (WebKit::selectAllCallback): Added.
        (WebKit::deleteFromCursorCallback): Added.
        (WebKit::moveCursorCallback): Added.
        (WebKit::EditorClient::generateEditorCommands): Added.
        (WebKit::EditorClient::executePendingEditorCommands): Added.
        (WebKit::EditorClient::handleKeyboardEvent): Derive editor commands both from internal text widget and a list of fallbacks.
        (WebKit::EditorClient::EditorClient): Add m_nativeWidget initializer.
        * WebCoreSupport/EditorClientGtk.h:
        (WebKit::EditorClient::addPendingEditorCommand): Add m_nativeWidget member.

2010-05-06  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Xan Lopez.

        Remove use of GOwnPtr to hold GObject types.
        https://bugs.webkit.org/show_bug.cgi?id=38669

        Change use of GOwnPtr to GRefPtr to types which are natively reference-counted.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchWillSendRequest): Change GOwnPtr to GRefPtr in some places.
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType): Ditto.
        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_new_with_core_request): Ditto.
        * webkit/webkitnetworkresponse.cpp:
        (webkit_network_response_new_with_core_response): Ditto.
        * webkit/webkitprivate.cpp: Remove GOwnPtr reference counting template specialization.
        * webkit/webkitprivate.h: Ditto.

2010-05-06  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Convert dragging portion of drag-and-drop to use DataObjectGtk.

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::willPerformDragDestinationAction): Remove the notImplemented. It is implemented, it's just a no-op.
        (WebKit::DragClient::startDrag): Start the drag context via the ClipboardGtk and PasteboardHelper now.
        * WebCoreSupport/DragClientGtk.h: Small style fix.
        * webkit/webkitprivate.h: Add a HashMap of contexts and DataObjects here to to represent all current drag operations.
        * webkit/webkitwebview.cpp: 
        (webkit_web_view_dispose): Clear all data objects during disposal.
        (webkit_web_view_drag_end): When a drag is over, just remove it from the map.
        (webkit_web_view_drag_data_get): To get the drag data, just grab it from the DataObject.

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

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2010-05-03  Jens Alfke  <snej@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add "willSendSubmitEvent" hook to WebFrameClient and FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=38397

        No tests (functionality is exposed only through native WebKit API.)

        * WebCoreSupport/FrameLoaderClientGtk.h:
        (WebKit::FrameLoaderClient::dispatchWillSendSubmitEvent):

2010-05-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Test webkit_dom_document_get_links.

        * tests/testdomdocument.c:
        (test_dom_document_get_links):
        (main):

2010-04-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Test webkit_dom_document_get_element_by_id;

        * tests/testdomdocument.c:
        (test_dom_document_get_element_by_id):
        (main):

2010-04-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Test webkit_dom_document_get_elements_by_class_name.

        * tests/testdomdocument.c:
        (test_dom_document_get_elements_by_class_name):
        (main):

2010-04-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Test webkit_dom_document_get_elements_by_tag_name.

        * tests/testdomdocument.c:
        (test_dom_document_get_elements_by_tag_name):
        (main):

2010-04-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Move WebKitDOMDocument unit tests to their own file.

        * tests/testdomdocument.c: Added.
        (finish_loading):
        (dom_document_fixture_setup):
        (dom_document_fixture_teardown):
        (test_dom_document_title):
        (main):
        * tests/testwebview.c:

2010-04-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Include <webkit/webkitdom.h> in the main webkit.h header.

        * webkit/webkit.h:

2010-04-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=38097
        Disentangle initializing the main thread from initializing threading

        * webkit/webkitprivate.cpp:
        (webkit_init): Add call to initializeMainThread.

2010-04-22  Dave Moore  <davemoore@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added notification when the favicons for a page are changed
        from a script.
        The Document object will notify the frame loader, which will
        notify the client. Implementations of FrameLoaderClient will
        have to add one method; dispatchDidChangeIcons().

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidChangeIcons):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2010-04-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        Add webkit_web_view_get_document to retrieve the WebKitDOMDocument
        from a WebKitWebView, and a very simple test for it.

        * tests/testwebview.c:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_document):
        * webkit/webkitwebview.h:

2010-04-22  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Evaluate and create tests for all the AtkRole's implemented by
        WebKitGtk
        https://bugs.webkit.org/show_bug.cgi?id=34449

        Expand testatkroles to test ATK_ROLE_COMBO_BOX.

        * tests/testatkroles.c:
        (test_webkit_atk_get_role_combobox):
        (main):

2010-04-22  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Evaluate and create tests for all the AtkRole's implemented by
        WebKitGtk
        https://bugs.webkit.org/show_bug.cgi?id=34449

        Expand testatkroles to test ATK_ROLE_SEPARATOR.

        * tests/testatkroles.c:
        (test_webkit_atk_get_role_separator):
        (main):

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

        Unreviewed, rolling out r58069.
        http://trac.webkit.org/changeset/58069
        https://bugs.webkit.org/show_bug.cgi?id=27751

        Broke compile on Windows.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2010-04-22  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Add support for controlling clipboard access from javascript.
        Clipboard access from javascript is disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=27751

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2010-04-21  Jakub Wieczorek  <jwieczorek@webkit.org>

        Reviewed by Darin Adler.

        List item markers are not always updated after changes in the DOM.
        https://bugs.webkit.org/show_bug.cgi?id=37060

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_marker_text_for_list_item): Add a private API to get the marker text for a list item.

2010-04-21  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Evaluate and create tests for all the AtkRole's implemented by
        WebKitGtk
        https://bugs.webkit.org/show_bug.cgi?id=34449

        Expand testatkroles to test ATK_ROLE_FORM.

        * tests/testatkroles.c:
        (test_webkit_atk_get_role_form):
        (main):

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

        Reviewed by Eric Seidel.

        Factor DocumentWriter out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=37175

        Update these callsites because the method moved to DocumentWriter.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):
        (WebKit::FrameLoaderClient::finishedLoading):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_encoding):

2010-04-20  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Change a parameter type of chooseIconForFiles()
        https://bugs.webkit.org/show_bug.cgi?id=37504

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::chooseIconForFiles):
        * WebCoreSupport/ChromeClientGtk.h:

2010-04-20  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Move most of the PasteboardHelper logic into WebCore. This helps
        prepare for WebKit2 and leads to a clearer separation of concerns
        between the WebKit and WebCore layers.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::collapseSelection): Converted this logic to a GClosure callback.
        (WebKit::EditorClient::respondToChangedSelection): Collapse selection via GClosure now.
        * WebCoreSupport/PasteboardHelperGtk.cpp: Moved most of the code to WebCore.
        (WebKit::PasteboardHelperGtk::PasteboardHelperGtk): This constructor just initializes the target list.
        (WebKit::PasteboardHelperGtk::~PasteboardHelperGtk): The destructor no longer needs to free the target list.
        (WebKit::PasteboardHelperGtk::getIdForTargetType): Added, virtual method for getting target ids.
        (WebKit::PasteboardHelperGtk::usePrimarySelectionClipboard): Added, virtual method for querying current clipboard.
        * WebCoreSupport/PasteboardHelperGtk.h: Update method list to reflect reduced functionality.

2010-04-19  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Evaluate and create tests for all the AtkRole's implemented by
        WebKitGtk
        https://bugs.webkit.org/show_bug.cgi?id=34449

        Expand testatkroles to test ATK form roles.

        * tests/testatkroles.c:
        (test_webkit_atk_get_role_check_box):
        (test_webkit_atk_get_role_entry):
        (test_webkit_atk_get_role_label):
        (test_webkit_atk_get_role_listbox):
        (test_webkit_atk_get_role_password_text):
        (test_webkit_atk_get_role_push_button):
        (test_webkit_atk_get_role_radio_button):
        (main):

2010-04-19  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Evaluate and create tests for all the AtkRole's implemented by
        WebKitGtk
        https://bugs.webkit.org/show_bug.cgi?id=34449

        Add testatkroles to test ATK non form roles.

        * tests/testatkroles.c: Added.
        (finish_loading):
        (atk_roles_fixture_setup):
        (atk_roles_fixture_teardown):
        (get_child_and_test_role):
        (test_webkit_atk_get_role_document_frame):
        (test_webkit_atk_get_role_heading):
        (test_webkit_atk_get_role_image):
        (test_webkit_atk_get_role_link):
        (test_webkit_atk_get_role_list_and_item):
        (test_webkit_atk_get_role_paragraph):
        (test_webkit_atk_get_role_section):
        (test_webkit_atk_get_role_table):
        (main):

2010-04-17  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        We have to initialize the timer attribute after destroying it, not
        doing it was causing crashes in some situations.

        * webkit/webkitdownload.cpp:
        (webkit_download_finalize):

2010-04-13  Timothy Hatcher  <timothy@apple.com>

        Rename SecurityOrigin::whiteListAccessFromOrigin to addOriginAccessWhitelistEntry.
        And SecurityOrigin::resetOriginAccessWhiteLists to resetOriginAccessWhitelists.

        SecurityOrigin needs a way to remove individual OriginAccessEntries
        https://bugs.webkit.org/show_bug.cgi?id=37449

        Reviewed by Dave Hyatt.

        * webkit/webkitprivate.cpp:
        (webkit_white_list_access_from_origin):
        (webkit_reset_origin_access_white_lists):

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

        Unreviewed, rolling out r57468.
        http://trac.webkit.org/changeset/57468
        https://bugs.webkit.org/show_bug.cgi?id=37433

        Broke the world...  Must have applied the patch wrong
        (Requested by abarth on #webkit).

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):
        (WebKit::FrameLoaderClient::finishedLoading):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_encoding):

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

        Reviewed by Eric Seidel.

        Factor DocumentWriter out of FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=37175

        Update these callsites because the method moved to DocumentWriter.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):
        (WebKit::FrameLoaderClient::finishedLoading):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_encoding):

2010-04-07  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Removed redundant FrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest()
        https://bugs.webkit.org/show_bug.cgi?id=36949

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.h:

2010-04-01  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        [GTK] webkit_get_default_session() should make sure webkit_init() is called
        https://bugs.webkit.org/show_bug.cgi?id=36754

        Make sure global functions that do not require a WebKitWebView to
        be created call webkit_init() before doing their job. Also add an
        API test to check for that.

        * tests/testglobals.c: Added.
        (test_globals_default_session):
        (main):
        * webkit/webkitwebview.cpp:
        (webkit_get_default_session):
        (webkit_set_cache_model):
        (webkit_get_cache_model):

2010-03-31  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Adds Geolocation param for cancelGeolocationPermissionRequestForFrame.
        https://bugs.webkit.org/show_bug.cgi?id=35031

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::cancelGeolocationPermissionRequestForFrame):
        * WebCoreSupport/ChromeClientGtk.h:

2010-03-30  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=36866
        Move CString to WTF

        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * WebCoreSupport/EditorClientGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * WebCoreSupport/InspectorClientGtk.cpp:
        * gdom/ConvertToGCharPrivate.h:
        * webkit/webkitdownload.cpp:
        * webkit/webkithittestresult.cpp:
        * webkit/webkitnetworkrequest.cpp:
        * webkit/webkitprivate.h:
        * webkit/webkitsecurityorigin.cpp:
        * webkit/webkitwebdatabase.cpp:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebhistoryitem.cpp:
        (webkit_web_history_item_finalize):
        (webkit_web_history_item_get_target):
        * webkit/webkitwebresource.cpp:
        * webkit/webkitwebsettings.cpp:
        * webkit/webkitwebview.cpp:

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

        Build fix. Include WindowsKeyboardCodes.h instead of KeyboardCodes.h.

        * WebCoreSupport/EditorClientGtk.cpp:

2010-03-27  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Eric Seidel.

        FrameLoader emits onload-event when handling
        dispatchDidHandleOnloadEvents

        [GTK] Improve reporting of frame loader callbacks in DRT
        https://bugs.webkit.org/show_bug.cgi?id=36454

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidHandleOnloadEvents):
        implemented, now it emits onload-event signal
        * webkit/webkitwebview.cpp: added onload-event signal

2010-03-25  Sergio Villar Senín  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        Added new API webkit_web_back_forward_list_clear. This function
        clears the back forward list

        [GTK] http/history tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=36173

        * tests/testwebbackforwardlist.c:
        (test_webkit_web_back_forward_list_clear):
        (main): added new unit test for the new API
        * webkit/webkitwebbackforwardlist.cpp:
        (webkit_web_back_forward_list_clear):
        * webkit/webkitwebbackforwardlist.h: new function that clears the
        back forward list

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

2010-03-23  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        [GTK] Does not build with latest GTK+ development release
        https://bugs.webkit.org/show_bug.cgi?id=36398

        Fix building with newest GTK+ versions.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::windowRect):
        (WebKit::ChromeClient::setWindowRect):
        (WebKit::ChromeClient::unfocus):
        (WebKit::ChromeClient::canTakeFocus):
        (WebKit::ChromeClient::contentsSizeChanged):
        * webkit/webkitprivate.cpp:
        (currentToplevelCallback):
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_print_full):
        (webkit_web_frame_print):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_grab_focus):
        (webkit_web_view_focus_in_event):
        (webkit_web_view_script_dialog):

2010-03-18  Philip Chimento  <philip.chimento@gmail.com>

        Reviewed by Oliver Hunt.

        Setting the GObject WebKitWebView property 'window-features' to NULL
        causes a crash. 
        https://bugs.webkit.org/show_bug.cgi?id=36144

        * tests/testwebview.c: Add unit test for this bug.
        * webkit/webkitwebview.cpp: Don't allow the 'window-features' property
        to be set to NULL.
        * webkit/webkitwebwindowfeatures.cpp: 
        (webkit_web_window_features_equal): Don't examine the members of either
        web_window_features argument if either is NULL, just return that they
        are not equal. Additionally, if they are the same object, return that 
        they are equal.

2010-03-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update for 1.1.90 release.

        * NEWS:

2010-03-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Fix one too many empty lines in documentation of
        window-obejct-cleared signal, which caused the documentation to be
        rendered funny. Thanks to Martin Robinson for noticing.

        * webkit/webkitwebview.cpp:

2010-03-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Add missing symbol to GeoLocation documentation
        section.

        * docs/webkitgtk-sections.txt:

2010-03-16  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Xan Lopez.

        can't input korean into lower all input box except adress input box in webkit gtk launcher
        https://bugs.webkit.org/show_bug.cgi?id=32290

        Make the GTK+ EditorClient properly handle different types of input module
        behavior such as commit and preedit signals that happen outside of key event
        filtering and multiple times in a row. Filter keyup events as well as keydown
        events and call gtk_im_context_focus_{in/out} when the WebView focus changes.

        Added tests for this behavior to the GTK+ unit tests.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::imContextCommitted): Handle this signal properly when it happens outside of
        key event filtering.
        (WebKit::imContextPreeditChanged): Immediately update the preedit state and do not reject
        empty preedits, so that cancellation works properly.
        (WebKit::EditorClient::updatePendingComposition): Add this method, which handles the
        situation where a commit signal happens when there is still a pending commit.
        (WebKit::EditorClient::shouldBeginEditing): Clear pending composition state before editing
        starts.
        (WebKit::EditorClient::shouldEndEditing): Clear pending composition state before editing ends.
        (WebKit::EditorClient::handleKeyboardEvent): No longer special case preedits which happen during
        key event filtering. When confirming a pending composition use insertText instead of confirmComposition.
        (WebKit::EditorClient::handleInputMethodKeydown):
        * WebCoreSupport/EditorClientGtk.h: Make pendingComposition a member, so that multiple WebViews
        do not share state.
        (WebKit::EditorClient::webView): Added.
        (WebKit::EditorClient::treatContextCommitAsKeyEvent): Added.
        (WebKit::EditorClient::clearPendingComposition): Added.
        * tests/testkeyevents.c:
        (test_keypress_events_load_status_cb):
        (map_event_cb):
        (setup_keyevent_test):
        (test_keypress_events):
        (element_text_equal_to):
        (test_ime_load_status_cb):
        (test_ime):
        (main):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_key_release_event):
        (webkit_web_view_focus_in_event):

2010-03-16  Yury Semikhatsky <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Introduce InspectorFrontendClient that provides InspectorFrontend with an interface to the embedder. InspectorClient now serves as a delegate for InspectorController and does not contain methods for managing inspector frontend window. That allows to create remote InspectorFrontendHost.

        Introduce InspectorFrontendClient that would provide InspectorFrontend with an interface to the embedder
        https://bugs.webkit.org/show_bug.cgi?id=35036

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::notifyWebViewDestroyed):
        (WebKit::InspectorClient::InspectorClient):
        (WebKit::InspectorClient::inspectorDestroyed):
        (WebKit::InspectorClient::openInspectorFrontend):
        (WebKit::InspectorClient::highlight):
        (WebKit::InspectorClient::hideHighlight):
        (WebKit::InspectorClient::populateSetting):
        (WebKit::InspectorClient::storeSetting):
        (WebKit::InspectorFrontendClient::InspectorFrontendClient):
        (WebKit::InspectorFrontendClient::~InspectorFrontendClient):
        (WebKit::InspectorFrontendClient::destroyInspectorWindow):
        (WebKit::InspectorFrontendClient::localizedStringsURL):
        (WebKit::InspectorFrontendClient::hiddenPanels):
        (WebKit::InspectorFrontendClient::bringToFront):
        (WebKit::InspectorFrontendClient::closeWindow):
        (WebKit::InspectorFrontendClient::attachWindow):
        (WebKit::InspectorFrontendClient::detachWindow):
        (WebKit::InspectorFrontendClient::setAttachedWindowHeight):
        (WebKit::InspectorFrontendClient::inspectedURLChanged):
        * WebCoreSupport/InspectorClientGtk.h:

2010-03-15  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=35502
        [Gtk] Objects of ATK_ROLE_TABLE should not implement AtkText

        New test to be sure we do not accidentally implement AtkText for tables

        * tests/testatk.c
        (testWebkitAtkGetTextInTable):
        (main):

2010-03-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Holger Freyther.

        [GTK] GTK_WIDGET_IS_SENSITIVE is deprecated in GTK+ 2.20
        https://bugs.webkit.org/show_bug.cgi?id=35909

        * webkit/webkitwebview.cpp: GTK_WIDGET_IS_SENSITIVE has been
        deprecated in gtk 2.20. Use gtk_widget_is_sensitive when available.

2010-03-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Kenneth Rohde Christiansen.

        Misc documentation fixes. Fixes (almost) all warnings emitted by
        the documentation build process. Only the broken references to JSC
        objects remain.

        * webkit/webkitsecurityorigin.cpp:
        * webkit/webkitwebbackforwardlist.cpp:
        * webkit/webkitwebdatasource.cpp:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebhistoryitem.cpp:
        * webkit/webkitwebinspector.cpp:
        (webkit_web_inspector_class_init):
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        * webkit/webkitwebview.cpp:
        (DNDContentsRequest::webkit_web_view_class_init):

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

2010-03-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] testkeyevents doesn't stop if input event injection fails
        https://bugs.webkit.org/show_bug.cgi?id=35922

        * tests/testkeyevents.c:
        (load_status_cb): Added a safeguard to exit from the test if the
        input event injection failed.

2010-03-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Documentation control files update for 1.1.23.

        * docs/webkitgtk-docs.sgml:

2010-03-08  Csaba Osztrogonác  <ossy@webkit.org>

        [GTK] Unreviewed buildfix after r55688.

        * webkit/webkitdownload.cpp:
        (webkit_download_start):

2010-03-02  Adam Treat  <atreat@rim.com>

        Reviewed by Dave Hyatt.

        Adapt the gtk port to the refactoring of repaint methods.

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

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

        * webkit/webkitwebview.cpp: Remove the calls into Settings.
        (DNDContentsRequest::webkit_web_view_update_settings):
        (DNDContentsRequest::webkit_web_view_settings_notify):

2010-03-06  Arno Renevier  <arno@renevier.net>

        Reviewed by Eric Seidel.

        [Gtk] GEOLOCATION_POLICY_DECISION_CANCELLED unused
        https://bugs.webkit.org/show_bug.cgi?id=35803

        * webkit/webkitwebview.cpp:
        (DNDContentsRequest::webkit_web_view_class_init):

2010-03-03  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Gustavo Noronha.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        [Gtk] Add 'enable-spatial-navigation' setting for toggle Spatial Navigation on/off
        https://bugs.webkit.org/show_bug.cgi?id=35701

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (DNDContentsRequest::webkit_web_view_update_settings):
        (DNDContentsRequest::webkit_web_view_settings_notify):

2010-03-03  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Xan Lopez.

        Miscellaneous little fixes for the windows build of webkit-gtk
        https://bugs.webkit.org/show_bug.cgi?id=35640

        * webkit/webkitdownload.cpp: Windows headers define ERROR
        which breaks the build. Undef ERROR if it is defined.

2010-03-03  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, build fix after r55452.

        * webkit/webkitwebview.cpp:
        (DNDContentsRequest::webkit_web_view_settings_notify): added missing braces.

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

        * webkit/webkitwebview.cpp:  Add calls to Database::setIsAvailable
        (DNDContentsRequest::webkit_web_view_update_settings):
        (DNDContentsRequest::webkit_web_view_settings_notify):

2010-03-02  Arno Renevier  <arno@renevier.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] implements ChromeClient::requestGeolocationPermissionForFrame
        https://bugs.webkit.org/show_bug.cgi?id=35210

        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/ChromeClientGtk.h:
        * docs/webkitgtk-sections.txt:
        * webkit/webkit.h:
        * webkit/webkitdefines.h:
        * webkit/webkitgeolocationpolicydecision.cpp: Added.
        (webkit_geolocation_policy_decision_class_init):
        (webkit_geolocation_policy_decision_init):
        (webkit_geolocation_policy_decision_new):
        (webkit_geolocation_policy_allow):
        (webkit_geolocation_policy_deny):
        * webkit/webkitgeolocationpolicydecision.h: Added.
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (DNDContentsRequest::webkit_web_view_class_init):
        * webkitmarshal.list:

2010-03-01  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Right click does not activate text entry
        https://bugs.webkit.org/show_bug.cgi?id=29177

        Makes the frame handle the mouse click event before sending the
        context menu event.

        * webkit/webkitwebview.cpp:
        (PopupMenuPositionFunc):
        Function created to make the popup menu appear in the correct position, especially
        when invoked from the keyboard.
        (webkit_web_view_forward_context_menu_event):
        Mouse click event is sent to frame before creating context menu,
        PopupMenuPositionFunc used to determine the position where the menu should appear.
        (webkit_web_view_popup_menu_handler):
        Improved focused node position detection. Event button set to right button.

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

        * webkit/webkitwebview.cpp:
        (DNDContentsRequest::webkit_web_view_apply_zoom_level):

2010-03-01  Kalle Vahlman  <zuh@iki.fi>

        Reviewed by Gustavo Noronha Silva.

        Queue a resize when either of the content dimensions change
        https://bugs.webkit.org/show_bug.cgi?id=35489

        The check for size changes only queued a resize if both of the content
        dimensions change, leaving the widget size out-of-sync if eg. only the
        width changes.

        * WebCoreSupport/ChromeClientGtk.cpp:

2009-12-04  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Needs proper reporting of frame loader callbacks, in DRT
        https://bugs.webkit.org/show_bug.cgi?id=32170

        Add new signal to report when the document load is finished for a
        frame.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFinishDocumentLoad):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):

2010-02-26  Antonio Gomes  <tonikitoo@webkit.org>

        Complementary commit of r55300. Missing "notify::" to signal name.

        * tests/testwebview.c:
        (test_webkit_web_view_grab_focus):

2010-02-26  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Xan Lopez.
        Patch by Antonio Gomes <tonikitoo@webkit.org>

        [GTK] Make webkit_web_view_grab_focus to active focus controller.
        https://bugs.webkit.org/show_bug.cgi?id=35402

        When programatically setting focus to an element in an inner document,
        calling "hasFocus()" from this document returns FALSE, because
        document's FocusController is not activated. It does not happen
        if |document| is the main document.

        Making webkit_web_view_grab_focus to actually activate the FocusController,
        fixes the issue.

        * tests/testwebview.c:
        (server_callback):
        (test_webkit_web_view_grab_focus):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_grab_focus):

2010-02-26  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed.

        Reverted last patch (r55295), it causes problems with the frames.

        * WebCoreSupport/ChromeClientGtk.cpp:

2010-02-19  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Some region checks in scroll are not required
        https://bugs.webkit.org/show_bug.cgi?id=35142

        Removes some of the operations checking the moved and invalidated
        regions when scrolling, it is done already in
        gdk_window_move_region.

        * WebCoreSupport/ChromeClientGtk.cpp:

2010-02-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [Gtk] crashed when destroying
        https://bugs.webkit.org/show_bug.cgi?id=31271

        NULL-check the page before relaying the focus out event, since
        this might happen when destroying the widget without destroying
        its parent, and we currently crash.

        * tests/testwebview.c:
        (delayed_destroy):
        (test_webkit_web_view_destroy):
        (main):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_focus_in_event):

2010-02-24  Krzysztof Kotlenga <pocek@users.sf.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] Creation of a WebkitWebView widget is very slow
        https://bugs.webkit.org/show_bug.cgi?id=30032

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::ignoreWordInSpellDocument): Change 'langs' to 'dicts'
        to reflect the fact that the list just holds Enchant dictionaries now.
        (WebKit::EditorClient::learnWord): Ditto.
        (WebKit::EditorClient::checkSpellingOfString): Ditto.
        (WebKit::EditorClient::getGuessesForWord): Ditto.
        * webkit/webkitprivate.h: Remove the now unused SpellLanguage struct.
        * webkit/webkitwebsettings.cpp: Change function call to reflect new
        webkit_web_settings_get_enchant_dicts name.
        (get_enchant_broker): Add this method which returns the enchant broker singleton.
        (free_spell_checking_language): The list contents have changed, so change
        the way each element is freed.
        (webkit_web_settings_finalize): Change to reflect 'spell_checking_languages_list'
        to 'enchant_dicts' member name change.
        (webkit_web_settings_set_property): Use the broker singleton here instead of making
        a new one for each language. The Enchant dictionary is now the list payload.
        (webkit_web_settings_copy): More name-change updates.
        (webkit_web_settings_get_enchant_dicts): Ditto.

2010-02-23  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        Fixes references to GOwnPtr and GRefPtr so the GTK+ port builds
        again.
        http://webkit.org/b/35084

        * WebKit/gtk/webkit/webkitwebview.cpp:

2010-02-23  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Eric Seidel.

        [Gtk] Implement layoutTestController.numberOfPages
        https://bugs.webkit.org/show_bug.cgi?id=35228

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_number_of_pages):

2010-02-23  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Server message not shown on http authentication
        https://bugs.webkit.org/show_bug.cgi?id=34219

        * webkit/webkitsoupauthdialog.c:
        (show_auth_dialog):
        Server message is displayed, messageLabel and message variables were
        renamed to avoid confusion.

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/ChromeClientGtk.h:
        (WebKit::ChromeClient::cancelGeolocationPermissionRequestForFrame):

2010-02-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Do not do unnecessary work during size_allocate.

        FrameView::resize will already queue a layout, so there's no need
        to force one ourselves. On top of that, the layout function
        already adjusts the view size when needed, so there's no need to
        do that manually either. No change in the layout tests or unit
        tests after this.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_size_allocate):

2010-02-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update for release.

        * NEWS:

2010-02-22  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [Soup] loses information related to message flags when converting from/to Resource{Request,Response}
        https://bugs.webkit.org/show_bug.cgi?id=35093

        Update the flags that are stored in the request, when the response
        is received.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidReceiveResponse):

2010-02-20  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Trivial fix - unnecessary variable got added by
        mistake.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidReceiveResponse):

2010-02-18  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebKitDownload documentation is incomplete
        https://bugs.webkit.org/show_bug.cgi?id=35018

        Concretely the error signal was undocumented. Also two relevant enums
        were not included.

        * docs/webkitgtk-sections.txt:
        * docs/webkitgtk.types:
        * webkit/webkitdownload.cpp:
        (webkit_download_class_init):

2010-02-17  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin, Darin Fisher, Simon Hausmann.

        When a live iframe element is moved between pages, it still depends on the old page.
        https://bugs.webkit.org/show_bug.cgi?id=34382

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didTransferChildFrameToNewDocument):
        Added empty implementation of a new virtual method.

        * WebCoreSupport/FrameLoaderClientGtk.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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::iconForFiles):
        * WebCoreSupport/ChromeClientGtk.h:

2010-02-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Rename 'enable-java' setting to 'enable-java-applet', since it
        only controls whether <applet> is supported or not instead of
        whether all Java content is supported or not.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (DNDContentsRequest::webkit_web_view_update_settings):
        (DNDContentsRequest::webkit_web_view_settings_notify):

2010-02-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [Linux] Webkit incompatible with Java plugins
        https://bugs.webkit.org/show_bug.cgi?id=24912

        Implement FrameLoaderClient::createJavaAppletWidget.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createJavaAppletWidget):

2010-02-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [Linux] Webkit incompatible with Java plugins
        https://bugs.webkit.org/show_bug.cgi?id=24912

        Add a WebKitWebSetting to enable/disable the Java plugin support.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2010-02-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Test that data URIs that cause downloads to be started do not crash.

        * tests/testdownload.c:
        (mime_type_policy_decision_requested_cb):
        (idle_quit_loop_cb):
        (test_webkit_download_data):
        (main):

2010-02-17  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        Missing property warning after r54873
        https://bugs.webkit.org/show_bug.cgi?id=35023

        Add a new WebKitWebSettings setting, 'enable-file-access-from-file-uris', set to
        FALSE by default, that when enabled will assign each file:// URI
        their own security domain.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):

2010-02-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Check if the handle has a SoupMessage before trying to use
        it. This will be the case in non-HTTP(S) URLs.

        * webkit/webkitdownload.cpp:
        (webkit_download_new_with_handle):
        (webkit_download_start):

2010-02-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Add a new WebKitWebSettings setting, 'auto-resize-window', set to
        FALSE by default, that when enabled will apply any resizes or
        moves done by a page through various DOM methods (moveTo,
        resizeTo, moveBy, resizeBy).

        * WebCoreSupport/ChromeClientGtk.cpp:
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):

2010-02-15  Emilio Pozuelo Monfort  <pochu27@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Fails to build on GNU/Hurd because of PATH_MAX usage
        https://bugs.webkit.org/show_bug.cgi?id=34920

        Use dynamic allocation instead of fixed PATH_MAX size buffers to
        fix the build on GNU/Hurd, where PATH_MAX is undefined.

        * tests/testmimehandling.c:
        (main):
        * tests/testwebview.c:
        (main):

2010-02-14  Diego Escalante Urrelo  <descalante@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [gtk] WebKitDownload's currentSize property is guint, should be guint64
        https://bugs.webkit.org/show_bug.cgi?id=34829

        Actually use a guint64 for current-size property in WebKitDownload, we
        were using a guint which is likely the cause for wrong sizes for files
        over 4 Gb.

        * webkit/webkitdownload.cpp:

2010-02-09  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] Hits assertion on history back, with page cache enabled, in specific conditions
        https://bugs.webkit.org/show_bug.cgi?id=34773

        Make sure cached frames have their scrollbars disconnected from
        the WebView's adjustments.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::savePlatformDataToCachedFrame):

2010-02-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Set GtkAdjustments on our FrameView when loading a page in the PageCache
        https://bugs.webkit.org/show_bug.cgi?id=34754

        Test that lower, and upper bounds are kept when goibg back with
        page cache enabled, and disabled. Page cache behaviour is still a
        bit broken (see FIXME).

        * tests/testwebview.c:
        (server_callback):
        (map_event_cb):
        (do_test_webkit_web_view_adjustments):
        (test_webkit_web_view_adjustments):
        (main):

2010-02-09  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Set GtkAdjustments on our FrameView when loading a page in the PageCache
        https://bugs.webkit.org/show_bug.cgi?id=34754

        Set the Gtk Adjustments of the FrameViews when they are restored
        from the PageCache too. Right we only do it for the newly created
        FrameViews in transitionToCommittedForNewPage, but we it also
        needs to be done in the equilavent transition method for cached
        pages.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::postCommitFrameViewSetup):
        (WebKit::FrameLoaderClient::transitionToCommittedFromCachedFrame):
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):

2010-02-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Implement FrameLoaderClient::hasWebView
        https://bugs.webkit.org/show_bug.cgi?id=34682

        Used for sanity-check ASSERTS in the FrameLoader code.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::hasWebView):

2010-02-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        News about 1.1.21.

        * NEWS:

2010-02-05  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] Implement layoutTestController.pageNumberForElementById
        https://bugs.webkit.org/show_bug.cgi?id=34572

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_page_number_for_element_by_id):

2010-02-04  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Add and cleanup return values of signals in view and frame
        https://bugs.webkit.org/show_bug.cgi?id=33484

        Add missing and cleanup return values of web frame and web view signals.

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_class_init):
        * webkit/webkitwebview.cpp:
        (DNDContentsRequest::webkit_web_view_class_init):

2010-02-02  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        Changes in 1.1.20, and documentation control files update.

        * NEWS:
        * docs/webkitgtk-docs.sgml:

2010-02-02  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] When selection changes selections in other WebView are not collapsed
        https://bugs.webkit.org/show_bug.cgi?id=34043

        Collapse the selection of a WebView even when the new selection owner is
        a new WebView.

        * WebCoreSupport/PasteboardHelperGtk.cpp:
        (WebKit::clearClipboardContentsCallback): Only clear the DataObject we are setting
        is not the same as the one referenced in this callback. Use the same behavior for
        collapsing the selection.
        (WebKit::PasteboardHelperGtk::writeClipboardContents): Instead of recording a boolean
        record the actual data used while writing to the clipboard.

2010-01-27  Martin Robinson  <mrobinson@webkit.org>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Expose the IM context via the API
        https://bugs.webkit.org/show_bug.cgi?id=33327

        Expose the GtkIMMultiContext as a property of WebKitWebView. This will
        allow embedders to generate the input method context menu entries and
        make testing certain IM context behavior possible.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_property):
        (DNDContentsRequest::webkit_web_view_get_im_context):
        (DNDContentsRequest::webkit_web_view_class_init):

2010-01-19  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30883
        [Gtk] Implement AtkText for HTML elements which contain text

        Adds two news tests.

        * tests/testatk.c
        (testWebkitAtkGetTextInParagraphAndBodySimple):
        (testWebkitAtkGetTextInParagraphAndBodyModerate):
        (main):

2010-01-19  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. Changes to the test I forgot to make after a last
        minute change before landing 53294 - this causes make distcheck to
        fail.

        * tests/testloading.c:
        (load_error_status_changed_cb):
        (test_loading_error):

2010-01-19  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        News items for 1.1.19.

        * NEWS:

2010-01-19  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] More crashes related to the clipboard management
        https://bugs.webkit.org/show_bug.cgi?id=33746

        Pass the WebKitWebView object (which is a GObject, thus
        ref-counted) to the clipboard functions instead of passing the
        Page - this allows us to explicitely protect the object inbetween
        the clipboard call and its callbacks, which fixes the crash.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::respondToChangedSelection):
        * WebCoreSupport/PasteboardHelperGtk.cpp:
        (WebKit::getClipboardContentsCallback):
        (WebKit::clearClipboardContentsCallback):
        (WebKit::PasteboardHelperGtk::writeClipboardContents):

2010-01-15  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Original patch by David Ronis <david.ronis@mcgill.ca>

        Upgrade 1.1.17->1.1.18 fails: GTK_WIDGET_TOPLEVEL' was not declared in this scope
        https://bugs.webkit.org/show_bug.cgi?id=33486

        Deprecated symbols replaced for gtk+ versions over 2.18.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::windowRect):
        * webkit/webkitprivate.cpp:
        (currentToplevelCallback):
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_print_full):
        (webkit_web_frame_print):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_focus_in_event):

2010-01-14  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Eric Seidel.

        [GTK] Crashes cleaning clipboard contents, with page cache enabled
        https://bugs.webkit.org/show_bug.cgi?id=32900

        Null-check the focus controller to avoid crashing. Could not find
        a way to reproduce this consistently, thus no test.

        * WebCoreSupport/PasteboardHelperGtk.cpp:
        (WebKit::clearClipboardContentsCallback):

2010-01-14  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Oliver Hunter.

        [GTK] couple fixes for signal emissions, and property notifications
        https://bugs.webkit.org/show_bug.cgi?id=33428

        Do not emit signals and property notifications for error
        pages. The notifications are not really useful for anything, you
        can get them back by overriding the error pages, and it avoids a
        number of hacks.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):
        (WebKit::FrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::FrameLoaderClient::dispatchDidReceiveIcon):
        (WebKit::FrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::FrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::FrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
        (WebKit::FrameLoaderClient::dispatchDidFailLoad):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        * tests/testloading.c:
        (load_error_status_changed_cb):
        (test_loading_error):

2010-01-14  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Use DataObjectGtk when setting and clearing pasteboard data on
        the GDK_SELECTION_PRIMARY clipboard.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::respondToChangedSelection):
        (WebKit::EditorClient::EditorClient):
        * WebCoreSupport/EditorClientGtk.h:
        * WebCoreSupport/PasteboardHelperGtk.cpp:
        (WebKit::fillSelectionData):
        (WebKit::targetListForDataObject):
        (WebKit::getClipboardContentsCallback):
        (WebKit::clearClipboardContentsCallback):
        (WebKit::PasteboardHelperGtk::writeClipboardContents):
        * WebCoreSupport/PasteboardHelperGtk.h:

2010-01-14  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Review the tooltip implementation
        https://bugs.webkit.org/show_bug.cgi?id=32819

        Change the GTK tooltip implementation to avoid the workaround that
        we are currently using. Now we use a new private API to set the
        text and all the tooltip handling is done in the webview widget.

        * WebCoreSupport/ChromeClientGtk.cpp:
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_set_tooltip_text): Added, new private API.
        (webkit_web_view_query_tooltip): Added

2010-01-09  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] couple fixes for signal emissions, and property notifications
        https://bugs.webkit.org/show_bug.cgi?id=33428

        Fix commitedLoad being called where it should not, causing it to
        be called one time too many in some cases. We now match Qt's and
        Mac's behavior here.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::finishedLoading):
        * tests/testloading.c:
        (load_error_status_changed_cb):

2010-01-08  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        [GTK] loading test should use SoupServer instead of actual sites
        https://bugs.webkit.org/show_bug.cgi?id=33353

        Make all the loading tests use SoupServer, instead of fetching
        stuff from the Internet.

        * tests/testloading.c:
        (server_callback):
        (get_uri_for_path):
        (test_loading_status):
        (test_loading_error):
        (test_loading_cancelled):
        (load_wentback_status_changed_cb):
        (load_error_test):
        (test_loading_goback):
        (main):

2010-01-06  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30883
        [Gtk] Implement AtkText for HTML elements which contain text

        * tests/testatk.c
        (test_webkit_atk_get_text_at_offset):
        (test_webkit_atk_get_text_at_offset_forms):
        (test_webkit_atk_get_text_at_offset_newlines):

2010-01-05  Gustavo Noronha Silva  <gns@gnome.org>

        Updated docs for 1.1.18 release.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2010-01-05  Xan Lopez  <xlopez@igalia.com>

        Update for 1.1.18 release.

        * NEWS:

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Fisher.

        Reorganize, document and rename OS() platform macros.
        https://bugs.webkit.org/show_bug.cgi?id=33198

        Adapt to name changes.

        * webkit/webkitwebsettings.cpp:
        (webkit_get_user_agent):

2010-01-04  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Barth.

        Reorganize, document and rename CPU() platform macros.
        https://bugs.webkit.org/show_bug.cgi?id=33145

        * webkit/webkitwebsettings.cpp:
        (webkit_get_user_agent):

2009-12-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Remove emission of signal that does not exist.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::inspectorDestroyed):
        (WebKit::InspectorClient::webViewDestroyed):

2009-12-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Unset the adjustments in our FrameView when detaching from
        parent. Fixes some crashers when transitioning to a new page from
        a scrolled page.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::detachedFromParent2):

2009-12-20  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Gustavo Noronha.

        Disable the page cache by default since:

        - It was previously off by default.
        - There are still some issues when enabling it.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):

2009-12-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Provides a new API to copy WebKitWebHistoryItem objects.

        * webkit/webkitwebhistoryitem.cpp:
        (webkit_web_history_item_copy):
        * webkit/webkitwebhistoryitem.h:

2009-12-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Make sure we get the URI that is being loaded when updating
        WebKitWebFrame's knowledge of it. This was causing problems now
        that page cache is enabled.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidCommitLoad):
        * tests/testloading.c:
        (load_goback_status_changed_cb):
        (load_wentback_status_changed_cb):
        (test_loading_goback):
        (main):

2009-12-20  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Cache control APIs
        https://bugs.webkit.org/show_bug.cgi?id=24001

        Original patch by Bobby Powers <bobby@laptop.org>

        Added new API to specify cache models for GTK port.

        * webkit/webkitprivate.cpp:
        (webkit_init): set a default cache model.
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:
        (webkit_set_cache_model): Added function.
        (webkit_get_cache_model): Added function.

2009-12-20  Xan Lopez  <xlopez@igalia.com>

        Revert the previous patch, it introduces some failures in the
        bots.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):

2009-12-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] crash when loading new page
        https://bugs.webkit.org/show_bug.cgi?id=32752

        Wait until the document is attached to adjust our alignments,
        since we need to make sure the FrameView in the document content
        render object matches the newly created FrameView for the new
        page, otherwise we'll try to relayout the wrong view.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):

2009-12-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Create a new WebKitDataSource object when attaching to a frame, if
        one does not exist. This may happen when we are fetching data from
        the page cache.

        * WebCoreSupport/DocumentLoaderGtk.cpp:
        (WebKit::DocumentLoader::attachToFrame):
        (WebKit::DocumentLoader::unrefDataSource):

2009-12-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Make sure the text encoding machinery is initialized from the main
        frame, before opening the icon database.

        * webkit/webkitprivate.cpp:
        (webkit_init):

2009-12-19  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Fixed the problem when pasting in the same window with the
        middle-button, now we store a reference to the range instead of
        requesting it every time, and we do not release it until the
        clipboard is requested.
        https://bugs.webkit.org/show_bug.cgi?id=28153

        * WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:
        * WebKit/gtk/WebCoreSupport/EditorClientGtk.h:

2009-12-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Protect download objects when reporting errors, to make sure the
        download stays alive between the status change notification, and
        the error signal emission.

        * webkit/webkitdownload.cpp:
        (webkit_download_error):

2009-12-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix gtk-doc of webkit_web_resource_new.

        * webkit/webkitwebresource.cpp:

2009-12-18  Adam Roben  <aroben@apple.com>

        GTK build fix

        * webkit/webkitprivate.cpp: Added #include.

2009-12-18  Kalle Vahlman  <kalle.vahlman@movial.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Add enable-page-cache property to WebSettings for disabling the Page Cache

        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::):
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        (_WebKitWebSettingsPrivate::webkit_web_settings_set_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_get_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:

2009-12-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        More make distcheck fixes. Use a more robust solution to making
        sure we are in the correct directory for running these tests.

        * tests/testmimehandling.c:
        (main):
        * tests/testwebview.c:
        (main):

2009-12-17  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Don't assume downloads are always synchronous
        http://bugs.webkit.org/show_bug.cgi?id=32359

        * tests/testdownload.c:
        (download_requested_cb):
        (set_filename):
        (test_webkit_download_perform):
        (test_webkit_download_synch):
        (test_webkit_download_asynch):
        (main): Test downloads synchronously and asynchronously.
        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):
        (webkit_web_view_request_download): Only try to start a requested
        download if the destination URI is set and clarify the documentation.

2009-12-17  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Xan Lopez.

        Deprecate the title-changed signal of WebKitWebFrame.

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_class_init):

2009-12-17  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebKit GTK needs a wrapper for ref counted glib/gobject structs
        https://bugs.webkit.org/show_bug.cgi?id=21599

        Convert a use of GOwnPtr for a reference counted type to GRefPtr.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createPlugin):

2009-12-17  Evan Martin  <evan@chromium.org>

        Reviewed by Xan Lopez.

        Expose the page workarounds ("quirks") setting to the GTK+ WebKit API.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):

2009-12-16  Dan Winship  <danw@gnome.org>

        Reviewed by Gustavo Noronha Silva.

        Content-Encoding support

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

        * webkit/webkitprivate.cpp:
        (webkit_init): add a SoupContentDecoder feature to the session

2009-12-16  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha Silva.

        Deprecate the old loading signals load-started, load-committed,
        load-finished, load-progress-changed and change unit tests to use
        load-status instead.

        * tests/testmimehandling.c:
        (idle_quit_loop_cb):
        (test_mime_type): use notify::load-status
        * tests/testwebdatasource.c:
        (notify_load_status_unreachable_cb):
        (notify_load_status_cb):
        (test_webkit_web_data_source):
        (test_webkit_web_data_source_unreachable_uri): Remove uses of
        g_main_loop_is_running. It's an error if the loop is wrongly terminated.
        * tests/testwebresource.c:
        (notify_load_status_cb):
        (test_web_resource_loading):
        (notify_load_status_sub_cb):
        (test_web_resource_sub_resource_loading): use notify::load-status
        * tests/testwebview.c:
        (idle_quit_loop_cb):
        (test_webkit_web_view_icon_uri):
        * tests/testwindow.c:
        (notify_load_status_cb):
        (test_webkit_window_scrollbar_policy): use notify::load-status
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_class_init):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init): Deprecate old load signals.

2009-12-16  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha Silva.

        Take into account favicon.ico in the webresource test.

        * tests/testwebresource.c:
        (test_web_resource_sub_resource_loading):

2009-12-16  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Add tab_key_cycles_through_elements to copies of
        WebKitWebSettings.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_copy):

2009-12-16  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] webkit_web_navigation_action_get_button() documentation
        https://bugs.webkit.org/show_bug.cgi?id=25555

        Small documentation improvement for webkit_web_navigation_action_get_button.

        * webkit/webkitwebnavigationaction.cpp:

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.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_init):

2009-12-14  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        New setting to allow applications to completely suppress the
        default context menu that is generated by WebKit. This allows them
        to still pass the event to the default handler without needing to
        use ugly hacks such as handling populate-popup, and removing all
        the items from the default context menu.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_forward_context_menu_event):

2009-12-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Also give the right click event to the frame's event handler, if
        there WebCore decides to not generate the default context
        menu. This fixes some pages that handle right-button clicks for
        things other than context menu creation.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_forward_context_menu_event):

2009-12-13  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=31014
        [Gtk] Build fails with gtk+-2.10 (no tested with older releases)

        Guard GTK+ 2.12 specific tooltip code with #ifdef.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::mouseDidMoveOverElement):

2009-12-11  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Eric Seidel.

        [GTK] Build with --disable-svg is broken
        http://bugs.webkit.org/show_bug.cgi?id=32361

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_pause_svg_animation): Fix ENABLE(SVG) guards.

2009-12-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Add a missing null-check, that is causing some crash reports.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):

2009-12-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Should provide an API to control the IconDatabase
        https://bugs.webkit.org/show_bug.cgi?id=32334

        First step towards a full IconDatabase API. This provides
        notification for pages with favicons, and lets clients handle
        them.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::registerForIconNotification):
        (WebKit::FrameLoaderClient::dispatchDidReceiveIcon):
        * tests/resources/blank.ico: Added.
        * tests/testwebview.c: Added.
        (server_callback):
        (idle_quit_loop_cb):
        (icon_uri_changed_cb):
        (icon_loaded_cb):
        (test_webkit_web_view_icon_uri):
        (main):
        * webkit/webkitprivate.cpp:
        (closeIconDatabaseOnExit):
        (webkit_init):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_property):
        (webkit_web_view_finalize):
        (webkit_web_view_class_init):
        (webkit_web_view_get_icon_uri):
        * webkit/webkitwebview.h:

2009-12-08  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha Silva.

        Point out the meaning of "Content-Disposition" when implementing the
        mime-type-policy-decision-requested signal.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):

2009-12-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Doesn't respect Content-Disposition for downloads, and provides no way for apps to do that
        https://bugs.webkit.org/show_bug.cgi?id=32247

        Provide a way for applications to respect Content-Disposition, by
        fetching the WebKitNetworkResponse from the frame during
        mime-type-policy-decision-requested.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType): Download
        content when Content-Disposition is attachment.
        * tests/testmimehandling.c:
        (server_callback):
        (mime_type_policy_decision_requested_cb):
        * tests/testwebframe.c:
        (test_webkit_web_frame_response):
        (main):
        * webkit/webkitprivate.cpp:
        (WebKit::core):
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_network_response):
        * webkit/webkitwebframe.h:

2009-12-07  Gyuyoung Kim  <gyuyoung@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=32024
        [GTK] WebKit does not compile without JAVASCRIPT_DEBUGGER

        Fix build errors when javascript-debugger is disabled on GTK

        * webkit/webkitwebinspector.cpp:
        (webkit_web_inspector_set_property):
        (webkit_web_inspector_get_property):

2009-12-07  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Eliminate the segfaults which occur when accessing the text interface now
        implemented by text controls.

        * tests/testatk.c
        (test_webkit_atk_get_text_at_offset_textarea):
        (test_webkit_atk_get_text_at_offset_text_input):
        (main):

2009-12-06  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        New test to make sure we do not regress this feature anymore. All
        test files were created by me.

        [GTK] REGRESSION: webkit thinks it can render PDFs
        https://bugs.webkit.org/show_bug.cgi?id=32183

        * tests/resources/test.html: Added.
        * tests/resources/test.ogg: Added.
        * tests/resources/test.pdf: Added.
        * tests/resources/test.txt: Added.
        * tests/testmimehandling.c: Added.
        (server_callback):
        (idle_quit_loop_cb):
        (mime_type_policy_decision_requested_cb):
        (test_mime_type):
        (test_mime_pdf):
        (test_mime_html):
        (test_mime_text):
        (test_mime_ogg):
        (main):

2009-12-05  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Use a better URI for the unreachable test. localhost:80 is very
        likely to be open.

        * tests/testwebdatasource.c:
        (load_finished_unreachable_cb):
        (test_webkit_web_data_source_unreachable_uri):

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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidPushStateWithinPage):
        (WebKit::FrameLoaderClient::dispatchDidReplaceStateWithinPage):
        (WebKit::FrameLoaderClient::dispatchDidPopStateWithinPage):
        * WebCoreSupport/FrameLoaderClientGtk.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/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::populateSetting):
        (WebKit::InspectorClient::storeSetting):
        * WebCoreSupport/InspectorClientGtk.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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidAddBackForwardItem): Add an empty implementation. Method added to FrameLoaderClient by Android (see bug).
        (WebKit::FrameLoaderClient::dispatchDidRemoveBackForwardItem): ditto.
        (WebKit::FrameLoaderClient::dispatchDidChangeBackForwardIndex): ditto.
        * WebCoreSupport/FrameLoaderClientGtk.h:

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.

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_pause_svg_animation):

2009-11-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Prepare for 1.1.17 release.

        * NEWS:
        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):

2009-11-26  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Oliver Hunt.

        Move GOwnPtr* from wtf to wtf/gtk
        https://bugs.webkit.org/show_bug.cgi?id=31793

        * webkit/webkitwebview.cpp: Change the path for GOwnPtr.h.

2009-11-24  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        When building up the pango layout from text boxes, only append a
        newline char after verifying there are no more boxes on this line.

        * tests/testatk.c
        (test_webkit_atk_get_text_at_offset_newlines):
        (main):

2009-11-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Gustavo Noronha Silva.

        Web Inspector: Implement "show inspector" in WebKit GTK
        API and enable console tests.

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

        * webkit/webkitwebinspector.cpp:
        (webkit_web_inspector_show):
        * webkit/webkitwebinspector.h:

2009-11-18  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Tab key does not cycle through elements by default
        https://bugs.webkit.org/show_bug.cgi?id=31505

        Properly localize documentation strings for the
        tab-key-cycles-through-elements property.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):

2009-11-17  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Tab key does not cycle through elements by default
        https://bugs.webkit.org/show_bug.cgi?id=31505

        Ensure that WebKitWebSettings tab-key-cycles-through-elements
        property is true by default with the G_PARAM_CONSTRUCT_FLAG.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):

2009-11-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Failing test media/video-document-types.html
        https://bugs.webkit.org/show_bug.cgi?id=31352

        Match what Mac has been doing since r36001: cancel the main load,
        and handle failures caused by 'will be handled by plugin' errors.

        Covered by test media/video-document-types.html

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):
        (WebKit::FrameLoaderClient::shouldFallBack):

2009-11-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Make DRT show web inspector for tests in inspector/ folder.
        - Updated DRT to show/close inspector for all tests under /inspector
        - Introduced LayoutTestController::setTimelineProfilingEnabled and
          WebInspector::setTimelineProfilingEnabled beside setJavaScriptProfilingEnabled
        - Removed reload on each inspector test
        - Renamed fast/inspector to fast/inspector-support in order not to trigger
        inspector for those.
        - Reimplemented timeline tests in order to get rid of reload there.
        - Moved tests that don't require harness into the fast group.

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

        * webkit/webkitwebinspector.cpp:
        (webkit_web_inspector_class_init):
        (webkit_web_inspector_set_property):
        (webkit_web_inspector_get_property):

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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidClearWindowObjectInWorld):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        Replaced windowObjectCleared with this function. Does nothing if the
        passed-in world is not the mainThreadNormalWorld().

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.

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_dump_render_tree):

2009-11-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        Should not print javascript console messages to stdout
        https://bugs.webkit.org/show_bug.cgi?id=31346

        * webkit/webkitwebview.cpp:
        (webkit_web_view_real_console_message): Print console messages to
        stderr instead, using the recommended method (a g_log variant).

2009-11-11  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30221
        [GTK] fails to load media embedded in iframe element

        The FrameLoader can show Media if the audio/video support is
        enabled at compile time.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::canShowMIMEType):

2009-11-10  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Remove WebSocket configuration from WebKitWebSettings
        https://bugs.webkit.org/show_bug.cgi?id=31244

        Remove non-functional enable-web-sockets property from WebKitWebSettings.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):

2009-11-09  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Expose Page::tabKeyCyclesThroughElements in the API
        https://bugs.webkit.org/show_bug.cgi?id=30482

        Expose Page::tabKeyCyclesThroughElements as a property of
        WebKitWebSettings.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2009-11-04  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Jan Alonzo.

        [GTK] Enable DOM clipboard and drag-and-drop access
        https://bugs.webkit.org/show_bug.cgi?id=30623

        Move handling of target list to PasteboardHelperGtk.

        * WebCoreSupport/PasteboardHelperGtk.cpp:
        (WebKit::PasteboardHelperGtk::PasteboardHelperGtk):
        (WebKit::PasteboardHelperGtk::~PasteboardHelperGtk):
        (WebKit::PasteboardHelperGtk::fullTargetList):
        * WebCoreSupport/PasteboardHelperGtk.h:
        * webkit/webkitprivate.cpp:
        (WebKit::pasteboardHelperInstance):
        (webkit_init):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_dispose):
        (webkit_web_view_init):
        (webkit_web_view_get_copy_target_list):
        (webkit_web_view_get_paste_target_list):

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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::focusedNodeChanged):
        * WebCoreSupport/ChromeClientGtk.h:

2009-10-29  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Trivial fix - move public API declaration into the
        public subsection of the doc.

        * docs/webkitgtk-sections.txt:

2009-10-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        [GTK] API to start inspector for a WebView
        https://bugs.webkit.org/show_bug.cgi?id=22551

        Provide a simple, coordinates-based API to start the inspector.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::createPage): Use files from the source
        tree when running from the top of the source directory.
        (WebKit::InspectorClient::localizedStringsURL): Ditto.
        * webkit/webkitprivate.h:
        * webkit/webkitwebinspector.cpp:
        (webkit_web_inspector_inspect_coordinates):
        (webkit_web_inspector_close):
        (webkit_web_inspector_execute_script):
        * webkit/webkitwebinspector.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

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_counter_value_for_element_by_id):

2009-10-28  Joe Mason  <jmason@rim.com>

        Reviewed by Adam Treat.

        Call the shared FrameLoader::defaultObjectContentType instead of
        copying code into FrameLoaderClient::objectContentType.  This causes no
        behavioural change.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::objectContentType):

2009-10-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        [Gtk] Extraneous object of ROLE_PANEL in hierarchy for entries
        https://bugs.webkit.org/show_bug.cgi?id=25897

        Update test to also check that entries implement the AtkText
        interface.

        * tests/testatk.c:
        (run_get_text_tests):
        (test_webkit_atk_get_text_at_offset_forms):
        (test_webkit_atk_get_text_at_offset):
        (main):

2009-10-26  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Update documentation control files for 1.1.16.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2009-10-26  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=30759
        [GTK] Should use WebKitNetworkResponse, and expose it

        WebKitDownload now uses our WebKitNetworkResponse instead of using
        ResourceResponse directly. By exposing the response, like we do
        with the request, we give our users the ability to look at the
        response headers, status code, and so on, through the SoupMessage
        object.

        * webkit/webkitdownload.cpp:
        (webkit_download_dispose):
        (webkit_download_finalize):
        (webkit_download_get_property):
        (webkit_download_set_property):
        (webkit_download_class_init):
        (webkit_download_get_network_response):
        (webkit_download_set_response):
        (webkit_download_get_total_size):
        (webkit_download_get_progress):
        (webkit_download_received_data):
        * webkit/webkitdownload.h:

2009-10-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update for 1.1.16 release.

        * NEWS:

2009-10-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (build fix).
        Build fix following bug #30696.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::windowObjectCleared):
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_global_context):

2009-10-22  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        m_webView should be private attribute of the EditorClientGtk.
        https://bugs.webkit.org/show_bug.cgi?id=30664

        * WebKit/gtk/WebCoreSupport/EditorClientGtk.h:

2009-10-20  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by David Levin.

        Removed WebSocket runtime settings.
        https://bugs.webkit.org/show_bug.cgi?id=29896

        WebSocket runtime configuration is supported by chromium/v8 only.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2009-10-19  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Alexey Proskuryakov.

        [Gtk] ApplicationCacheStorage error while compiling WebKit/gtk/webkit/webkitapplicationcache.cpp
        https://bugs.webkit.org/show_bug.cgi?id=30358

        Guard calls to cacheStorage() with ENABLE(OFFLINE_WEB_APPLICATIONS).

        * webkit/webkitapplicationcache.cpp:

2009-10-19  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        Add a settings to allow DOM pastes to be performed.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2009-10-19  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Make WebKitHitTestResult actually appear in the
        documentation index.

        * docs/webkitgtk-docs.sgml:

2009-10-15  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Protect WebSocket calls in case the feature is not compiled in.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2009-10-15  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        Add a settings to enable support for experimental Web Sockets.
        Currently this comes in handy in layout tests.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2009-10-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        page transition may crash webkit
        https://bugs.webkit.org/show_bug.cgi?id=29890

        There are actually cases in which a resource may be asked using
        webkit_web_view_get_resource after a new load has already been
        started, so protect ourselves from crashes in this case.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFinishLoading):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_resource):

2009-10-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Remove unnecessary self-include.

        * webkit/webkitsecurityorigin.h:

2009-10-12  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha.

        [GTK] Crash when right-clicking misspelled word
        https://bugs.webkit.org/show_bug.cgi?id=29772

        Make sure the dictionary exist before adding it to the list of
        dictionaries.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::checkSpellingOfString):
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_set_property):

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.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_execute_script):

2009-10-07  Xan Lopez  <xlopez@igalia.com>

        Fix the GTK+ build.

        * webkit/webkitwebpolicydecision.cpp:
        (webkit_web_policy_decision_use):
        (webkit_web_policy_decision_ignore):
        (webkit_web_policy_decision_download):

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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchWillSubmitForm):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2009-10-07  Martin Robinson  <martin.james.robinson@gmail.com>

        [GTK] Segfault while testing fast/events/keydown-keypress-preventDefault.html
        https://bugs.webkit.org/show_bug.cgi?id=30121

        Clear previous preedit or pending composition before storing new ones.
        This can happen when a WebView receives a native keydown event without
        a matching keyup event or when preventDefault() is called on DOM keydown
        events.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::setPendingComposition):
        (WebKit::setPendingPreedit):
        (WebKit::clearPendingIMData):
        (WebKit::imContextCommitted):
        (WebKit::imContextPreeditChanged):

2009-10-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=25526
        [Gtk] Additional support is needed for caret browsing

        Remove special cases for caret browsing, they are now handled in
        cross-platform code.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeyboardEvent):

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/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::createPage):

2009-10-06  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        ASSERT executing the webhistory unittest in a debug build
        https://bugs.webkit.org/show_bug.cgi?id=28947

        We have to call g_object_new first to initialize webkit threading
        before creating the KURL.

        * WebKit/gtk/webkit/webkitwebhistoryitem.cpp:

2009-10-06  José Millán Soto  <fid@gpul.org>

        Reviewed by Xan Lopez.

        Header files of WebKitGTK do not comply with WebKit coding style (Patch attached)
        https://bugs.webkit.org/show_bug.cgi?id=30076

        Solves various issues in header files.

        * WebCoreSupport/DocumentLoaderGtk.h: Added "headed guards"
        * webkit/webkitdefines.h:
        * webkit/webkitdownload.h:
        * webkit/webkiterror.h:
        * webkit/webkithittestresult.h:
        * webkit/webkitnetworkrequest.h:
        * webkit/webkitnetworkresponse.h:
        * webkit/webkitprivate.h:
        * webkit/webkitsecurityorigin.h:
        * webkit/webkitsoupauthdialog.h:
        * webkit/webkitversion.h.in:
        * webkit/webkitwebbackforwardlist.h:
        * webkit/webkitwebdatabase.h:
        * webkit/webkitwebdatasource.h:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebhistoryitem.h:
        * webkit/webkitwebinspector.h:
        * webkit/webkitwebnavigationaction.h:
        * webkit/webkitwebpolicydecision.h:
        * webkit/webkitwebresource.h:
        * webkit/webkitwebsettings.h:
        * webkit/webkitwebview.h:
        * webkit/webkitwebwindowfeatures.h:

2009-10-03  Adam Barth  <abarth@webkit.org>

        More build fixing.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_go_back_or_forward):
        (webkit_web_view_can_go_back_or_forward):

2009-10-03  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_go_back_or_forward):

2009-10-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Factor PageController out of FrameLoader and Page
        https://bugs.webkit.org/show_bug.cgi?id=30037

        * webkit/webkitwebview.cpp:
        (webkit_web_view_can_go_back_or_forward):

2009-10-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Set the type for the fake event, otherwise the test ASSERTs in
        debug builds.

        * tests/testhittestresult.c:
        (load_status_cb):

2009-10-01  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] GtkIMContext filtering interferes with DOM key events
        https://bugs.webkit.org/show_bug.cgi?id=28733

        Ensure that keyboard events filtered by the GtkIMContext still create
        the proper DOM events.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::clearPendingIMData):
        (WebKit::imContextCommitted):
        (WebKit::imContextPreeditChanged):
        (WebKit::EditorClient::shouldBeginEditing):
        (WebKit::EditorClient::shouldEndEditing):
        (WebKit::interpretEditorCommandKeyEvent):
        (WebKit::handleCaretBrowsingKeyboardEvent):
        (WebKit::EditorClient::handleKeyboardEvent):
        (WebKit::EditorClient::handleInputMethodKeydown):
        * tests/testkeyevents.c: Added.
        (test_info_new):
        (test_info_destroy):
        (key_event_fixture_setup):
        (key_event_fixture_teardown):
        (key_press_event_cb):
        (key_release_event_cb):
        (load_status_cb):
        (map_event_cb):
        (test_keypress):
        (main):

2009-09-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Do not set a non-default parent window for child widgets. We are
        just doing the same than the default path does, and on top of that
        if the widget's window changes (for example, during DnD widgets
        are usually unrealized/realized) the child widget will we left
        pointing to a dead window.

        For examples of crashers caused by this see
        https://bugzilla.gnome.org/show_bug.cgi?id=596397 and
        https://bugzilla.gnome.org/show_bug.cgi?id=596398

        * webkit/webkitwebview.cpp:
        (webkit_web_view_container_add):

2009-09-29  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Eric Seidel.

        [Gtk] Crash when saving a password
        https://bugs.webkit.org/show_bug.cgi?id=28070

        Disconnect the 'got-headers' callback when we are done with
        it. The signal can be emitted more than once if the message is
        retransmitted, but each time that happens authData is created
        again and a new callback connected, so we have to get rid of the
        old one (which will crash because we free authData).

        * webkit/webkitsoupauthdialog.c:
        (save_password_callback):

2009-09-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Pop down the context menu when the page transitions to committed,
        to avoid keeping a context menu out of context.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (destroy_menu_cb):
        (webkit_web_view_forward_context_menu_event):

2009-09-24  Jon Honeycutt  <jhoneycutt@apple.com>

        Reviewed by Alice Liu.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_init):
        Pass 0 for new Page constructor argument.

2009-09-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha and Jan Alonzo.
        [GTK] Add WEBKIT_LOAD_ERROR status
        https://bugs.webkit.org/show_bug.cgi?id=29644

        Add a new load-status enum value, WEBKIT_LOAD_FAILED, emitted when
        there's an error during the load process. This is needed if we
        want notify::load-status to be able to handle all situations,
        since WEBKIT_LOAD_FINISHED is not emitted when there's an error
        and we are lacking a notification of the load being stopped.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFailLoad):
        * tests/testloading.c:
        (web_loading_fixture_setup):
        (load_error_status_changed_cb):
        (load_error_cb):
        (test_loading_error):
        (load_cancelled_cb):
        (stop_load):
        (load_cancelled_status_changed_cb):
        (test_loading_cancelled):
        (main):
        * webkit/webkitwebframe.h:

2009-09-24  Xan Lopez  <xlopez@igalia.com>

        Revert r48697, since it broke key handling notification to GTK+.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::imContextCommitted):
        (WebKit::imContextPreeditChanged):
        (WebKit::EditorClient::shouldBeginEditing):
        (WebKit::EditorClient::shouldEndEditing):
        (WebKit::interpretKeyEvent):
        (WebKit::handleEditingKeyboardEvent):
        (WebKit::EditorClient::handleKeyboardEvent):
        (WebKit::EditorClient::handleInputMethodKeydown):

2009-09-23  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] REGRESSION: BitmapImage::getGdkPixbuf fails for non-square images
        https://bugs.webkit.org/show_bug.cgi?id=29654

        Ensure that even when GTKSimpleIMContext filters non-IME keystrokes,
        keyboard events are fired properly.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::clearPendingIMData):
        (WebKit::imContextCommitted):
        (WebKit::imContextPreeditChanged):
        (WebKit::EditorClient::shouldBeginEditing):
        (WebKit::EditorClient::shouldEndEditing):
        (WebKit::interpretEditorCommandKeyEvent):
        (WebKit::handleCaretBrowsingKeyboardEvent):
        (WebKit::EditorClient::handleKeyboardEvent):
        (WebKit::EditorClient::handleInputMethodKeydown):

2009-09-23  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] need to dump number of pending unload handlers
        https://bugs.webkit.org/show_bug.cgi?id=29685

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_pending_unload_event_count): New function to
        satisfy DRT needs.

2009-09-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        Minor reorganization to the patch landed in
        http://trac.webkit.org/changeset/48670. Also move JSCore-1.0.gir
        in the gtk directory as that's only useful to the Gtk port at the
        moment.

        * JSCore-1.0.gir: Renamed from JSCore-1.0.gir.

2009-09-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Hardcode element positions at 0,0 so that we know where to
        generate events to test WebKitHitTestResult.

        * tests/testhittestresult.c:
        (load_status_cb):
        (test_webkit_hit_test_result):
        (main):

2009-09-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        [GTK] WebKitHitTestResult is completely broken in gmail
        https://bugs.webkit.org/show_bug.cgi?id=29527

        We need to use the main or focused frame when doing the coordinate
        transformation instead of always using the main frame.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_hit_test_result):

2009-09-21  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Update documentation control files to 1.1.15.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2009-09-21  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed docs build fix. Current CFLAGS and LIBS variables no
        longer bring gthread in.

        * docs/GNUmakefile.am:

2009-09-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update for release.

        * NEWS:

2009-09-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Small documentation fix.

        * webkit/webkithittestresult.cpp:

2009-09-18  Xan Lopez  <xlopez@igalia.com>

        Build fix.

        Add missing file to the repository.

        * tests/testhittestresult.c: Added.
        (test_info_new):
        (test_info_destroy):
        (hit_test_result_fixture_setup):
        (hit_test_result_fixture_teardown):
        (load_status_cb):
        (test_webkit_hit_test_result):
        (main):

2009-09-18  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        [Gtk] Unreviewed build fix.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::platformPageClient):

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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::platformPageClient):
        (WebKit::ChromeClient::runOpenPanel):
        * WebCoreSupport/ChromeClientGtk.h:
        * webkit/webkitprivate.cpp:
        (currentToplevelCallback):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_popup_menu_handler):

2009-09-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Document webkit_web_view_stop_loading.

        * webkit/webkitwebview.cpp:

2009-09-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha and Jan Alonzo.

        [GTK] context menu overriding API is very limited
        https://bugs.webkit.org/show_bug.cgi?id=27546

        Add webkit_web_view_get_hit_test_result, a function to get a hit
        test result from a GdkEventButton. Useful to let applications
        decide between several actions on button press depending on what
        is being pressed.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_stop_loading):
        (documentPointForWindowPoint):
        (webkit_web_view_get_hit_test_result):
        * webkit/webkitwebview.h:

2009-09-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha and Jan Alonzo.

        [GTK] context menu overriding API is very limited
        https://bugs.webkit.org/show_bug.cgi?id=27546

        Add WebKitHitTestResult, a wrapper over HitTestResult. It contains
        context information about a point in the web page.

        * webkit/webkit.h:
        * webkit/webkitdefines.h:
        * webkit/webkithittestresult.cpp: Added.
        (webkit_hit_test_result_finalize):
        (webkit_hit_test_result_get_property):
        (webkit_hit_test_result_set_property):
        (webkit_hit_test_result_class_init):
        (webkit_hit_test_result_init):
        * webkit/webkithittestresult.h: Added.
        * webkit/webkitprivate.cpp:
        (WebKit::kit):
        * webkit/webkitprivate.h:

2009-09-14  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez and Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=29134
        [GTK] Add API to access sub resources

        Implement getting subresources, and improve testing of
        main, and sub resources loading.

2009-09-11  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        [GTK] Use gtk_style_set_background instead of gdk_window_set_background
        https://bugs.webkit.org/show_bug.cgi?id=29173

        Use gtk_style_set_background instead of gdk_window_set_background,
        as suggested by the documentation. Also, use GTK_STATE_NORMAL
        directly, since that's the default state of a GtkWidget.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_realize):

2009-09-09  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] DumpRenderTree needs eventSender object and implementation
        https://bugs.webkit.org/show_bug.cgi?id=25990

        Creates a function that is accessible from the DumpRenderTree tool
        and calls the layout method on the frame view.

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_layout):

2009-09-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=29044
        [GTK] Should update suggested-filename when the response is received

        Set suggested filename also when the response only comes after the
        download has started.

        * webkit/webkitdownload.cpp:
        (webkit_download_set_response):
        (webkit_download_set_suggested_filename):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_request_download):

2009-09-08  Priit Laes  <plaes@plaes.org>

        Reviewed by Gustavo Noronha.

        Fix up erroneus 'Since: @version@' tags in documentation.

        * webkit/webkitwebdatasource.cpp:
        * webkit/webkitwebresource.cpp:
        (webkit_web_resource_class_init):
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):
        * webkit/webkitwebwindowfeatures.cpp:

2009-09-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Link new objects documents in the main document.

        * docs/webkitgtk-docs.sgml:

2009-09-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Documentation control files updated for 1.1.14.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2009-09-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        What's new for 1.1.14.

        * NEWS:

2009-09-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Use g_return_if_fail to check for the SoupURI creation, instead of
        printing a custom warning.

        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_set_uri):

2009-09-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=26854
        [GTK] Needs API to allow more control over outgoing requests

        Map the willSendRequest delegate to the 'resource-request-starting'
        signal, allowing more control of the resources that are fetched.

        Mapping willSendRequest properly requires an appropriate Response
        object, so we are introducing WebKitNetworkResponse, which works in a
        way similar to WebKitNetworkRequest.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchWillSendRequest):
        (WebKit::FrameLoaderClient::assignIdentifierToInitialRequest):
        (WebKit::FrameLoaderClient::dispatchDidFinishLoading):
        (WebKit::FrameLoaderClient::dispatchDidFailLoading):
        * tests/testnetworkresponse.c: Added.
        (test_network_response_create_destroy):
        (test_network_response_properties):
        (main):
        * tests/testwebresource.c:
        (resource_request_starting_cb):
        (load_finished_cb):
        (test_web_resource_loading):
        (main):
        * webkit/webkit.h:
        * webkit/webkitdefines.h:
        * webkit/webkitnetworkrequest.cpp:
        * webkit/webkitnetworkresponse.cpp: Added.
        (webkit_network_response_dispose):
        (webkit_network_response_finalize):
        (webkit_network_response_get_property):
        (webkit_network_response_set_property):
        (webkit_network_response_class_init):
        (webkit_network_response_init):
        (webkit_network_response_new_with_core_response):
        (webkit_network_response_new):
        (webkit_network_response_set_uri):
        (webkit_network_response_get_uri):
        (webkit_network_response_get_message):
        * webkit/webkitnetworkresponse.h: Added.
        * webkit/webkitprivate.cpp:
        (WTF::SoupMessage):
        (WTF::WebKitNetworkRequest):
        (WTF::WebKitNetworkResponse):
        (WTF::WebKitWebResource):
        * webkit/webkitprivate.h:
        * webkit/webkitwebresource.cpp:
        (webkit_web_resource_cleanup):
        (webkit_web_resource_finalize):
        (webkit_web_resource_class_init):
        (webkit_web_resource_set_property):
        (webkit_web_resource_get_uri):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):
        * webkitmarshal.list:

2009-09-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=28979
        [GTK] Misc improvments to NetworkRequest

        Unref message in dispose, as it should be, not in finalize.

        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_dispose):
        (webkit_network_request_finalize):
        (webkit_network_request_class_init):

2009-09-07  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=28979
        [GTK] Misc improvments to NetworkRequest

        Bring documentation up-to-date with reality regarding NetworkRequest.

        * webkit/webkitnetworkrequest.cpp:

2009-09-07  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Make the auth dialog usable when libsoup does not have a
        SoupPasswordManager, since it might go away in the next
        development cycle.

        * webkit/webkitsoupauthdialog.c:
        (response_callback):
        (session_can_save_passwords):
        (session_authenticate):
2009-09-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update the unitests to latest changes wrt scrollbar policy.

        * tests/testwindow.c:
        (test_webkit_window_scrollbar_policy):

2009-09-06  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Gustavo Noronha, Jan Alonzo and Xan Lopez.

        [Gtk] Expose a database API
        https://bugs.webkit.org/show_bug.cgi?id=27899

        Expose an HTML5 database API for GTK+.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::print):
        * webkit/webkit.h:
        * webkit/webkitdefines.h:
        * webkit/webkitprivate.cpp:
        (webkit_init):
        * webkit/webkitprivate.h:
        * webkit/webkitsecurityorigin.cpp: Added.
        (webkit_security_origin_finalize):
        (webkit_security_origin_dispose):
        (webkit_security_origin_set_property):
        (webkit_security_origin_get_property):
        (webkit_security_origins):
        (webkit_security_origin_class_init):
        (webkit_security_origin_init):
        (webkit_security_origin_get_protocol):
        (webkit_security_origin_get_host):
        (webkit_security_origin_get_port):
        (webkit_security_origin_get_web_database_usage):
        (webkit_security_origin_get_web_database_quota):
        (webkit_security_origin_set_web_database_quota):
        (webkit_security_origin_get_all_web_databases):
        (WebKit::kit):
        (WebKit::core):
        (webkit_security_origin_get_web_database):
        * webkit/webkitsecurityorigin.h: Added.
        * webkit/webkitwebdatabase.cpp: Added.
        (webkit_web_database_finalize):
        (webkit_web_database_dispose):
        (webkit_web_database_set_property):
        (webkit_web_database_get_property):
        (webkit_web_database_class_init):
        (webkit_web_database_init):
        (webkit_web_database_set_security_origin):
        (webkit_web_database_set_name):
        (webkit_web_database_get_security_origin):
        (webkit_web_database_get_name):
        (webkit_web_database_get_display_name):
        (webkit_web_database_get_expected_size):
        (webkit_web_database_get_size):
        (webkit_web_database_get_filename):
        (webkit_web_database_remove):
        (webkit_remove_all_web_databases):
        (webkit_get_web_database_directory_path):
        (webkit_set_web_database_directory_path):
        (webkit_get_default_web_database_quota):
        * webkit/webkitwebdatabase.h: Added.
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_new):
        (webkit_web_frame_get_focused_accessible_element):
        (webkit_web_frame_get_horizontal_scrollbar_policy):
        * webkit/webkitwebframe.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):

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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didDisplayInsecureContent):
        (WebKit::FrameLoaderClient::didRunInsecureContent):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2009-09-03  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Access private member variables directly instead of using the
        accessor.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):
        (WebKit::FrameLoaderClient::windowObjectCleared):

2009-09-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Remove bogus asserts that break Debug builds at runtime.

        * WebCoreSupport/DocumentLoaderGtk.cpp:
        (WebKit::DocumentLoader::detachFromFrame):
        (WebKit::DocumentLoader::decreaseLoadCount):

2009-09-02  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez and Gustavo Noronha.

         [Gtk] Implement a WebDataSource for the gtk port
         https://bugs.webkit.org/show_bug.cgi?id=24758

        Add data source API getters to WebKitWebFrame.
        Also add WebKitWebDataSource unit test.

        * tests/testwebdatasource.c: Added.
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebframe.h:

2009-09-02  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez and Gustavo Noronha.

        [Gtk] Implement a WebDataSource for the gtk port
        https://bugs.webkit.org/show_bug.cgi?id=24758

        Subclass DocumentLoader for Gtk and implement it under the WebKit
        namespace. Add WebKitWebDataSource implementation that closely
        follows the mac implementation of the API.

        * WebCoreSupport/DocumentLoaderGtk.cpp: Added.
        * WebCoreSupport/DocumentLoaderGtk.h: Added.
        * webkit/webkitwebdatasource.cpp: Added.
        * webkit/webkitwebdatasource.h: Added.

2009-09-01  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Avoid causing unexpected issues with window sizing when sites
        disable scrollbars completely.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::scrollbarsModeDidChange):
        * tests/testwindow.c:
        (test_webkit_window_scrollbar_policy):
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_class_init):

2009-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez and Gustavo Noronha.

        [Gtk] Implement a WebDataSource for the gtk port
        https://bugs.webkit.org/show_bug.cgi?id=24758

        Implement WebKitWebResource for the resource-related API for
        WebKitWebDataSource.

        * GNUmakefile.am:

2009-09-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=28842
        [GTK] Do not emit extra FINISHED load-status signals

        Do not emit FINISHED load-status signals on our own, just rely on
        WebCore for that. Avoids emitting FINISHED several times when we
        fail to load a URI.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::FrameLoaderClient::dispatchDidFailLoad):
        * tests/testloading.c:
        (web_loading_fixture_setup):
        (web_loading_fixture_teardown):
        (load_finished_cb):
        (status_changed_cb):
        (test_loading_status):
        (load_error_status_changed_cb):
        (load_error_cb):
        (test_loading_error):
        (main):
        * webkit/webkitwebframe.h:

2009-08-31  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=28466
        When downloading a file, two GET requests are sent to the HTTP server

        Support reusing a connection that is already ongoing, instead of
        cancelling the connection and creating another.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::download):
        * webkit/webkitdownload.cpp:
        (webkit_download_new_with_handle):
        (webkit_download_start):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_request_download):

2009-08-31  Alexey Proskuryakov  <ap@apple.com>

        Gtk build fix.

        This is also a behavior fix, at least on debug builds - a caller of
        webkit_web_history_item_new_with_data() could pass an URL that could cause an assertion
        failure in KURL.

        * webkit/webkitwebhistoryitem.cpp: (webkit_web_history_item_new_with_data): Pass a null
        KURL as base to parse properly.

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 properties and a signal to report scrollbar policy changes to
        client code, and a default handler that does the right thing when
        using GtkScrolledWindow.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::scrollbarsModeDidChange):
        * WebCoreSupport/ChromeClientGtk.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_property):
        (webkit_web_frame_class_init):
        (webkit_web_frame_get_horizontal_scrollbar_policy):
        (webkit_web_frame_get_vertical_scrollbar_policy):
        * webkit/webkitwebframe.h:
        * tests/testwindow.c: Added.
        (load_finished_cb):
        (test_webkit_window_scrollbar_policy):
        (main):

2009-08-28  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha and Xan Lopez.

        [Gtk] Add view source mode API
        https://bugs.webkit.org/show_bug.cgi?id=28805

        Implement setter and getter for "view source" mode.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_set_view_source_mode):
        (webkit_web_frame_get_view_source_mode):
        * webkit/webkitwebview.h:

2009-08-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=28738
        Expose undo/redo functionality in WebKitWebView

        Expose undo/redo functionality in WebKitWebView, keeping the
        default bindings as they were.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_real_undo):
        (webkit_web_view_real_redo):
        (webkit_web_view_class_init):
        (webkit_web_view_can_undo):
        (webkit_web_view_undo):
        (webkit_web_view_can_redo):
        (webkit_web_view_redo):
        * webkit/webkitwebview.h:

2009-08-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        News about the 1.1.13 release.

        * NEWS:

2009-08-24  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Add new symbols, and an index of new symbols for the 1.1.13
        release.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2009-08-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix a couple of typos.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):

2009-08-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update editing-behavior property here too.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_settings_notify):

2009-08-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Rubberstamped by Gustavo Noronha.

        Fix regressions introduced by http://trac.webkit.org/changeset/47690.

        Update the setting whenever the property gets set.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_settings_notify):

2009-08-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] API for disabling local file access to web URLs
        https://bugs.webkit.org/show_bug.cgi?id=28663

        Add a setting to enable or disable file access to web URLs. It's
        disabled by default for security reasons.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):

2009-08-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=28154
        clicking below end of text in a textarea moves cursor to wrong position

        Expose the EditingBehavior setting and set it by default to Mac,
        since that what matches the GTK+ default behavior.

        * webkit/webkitprivate.cpp:
        (WebKit::core):
        * webkit/webkitprivate.h:
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebsettings.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):

2009-08-20  Aaron Boodman  <aa@chromium.org>

        Hopefully the last speculative build for gtk.

        * webkit/webkitprivate.cpp:
        (webkit_white_list_access_from_origin):
        * webkit/webkitprivate.h:

2009-08-20  David Levin  <levin@chromium.org>

        Another speculative build for gtk.

        * webkit/webkitprivate.cpp:
        (webkit_white_list_access_to_origin):

2009-08-20  David Levin  <levin@chromium.org>

        Speculative build for gtk.

        * webkit/webkitprivate.cpp:
        (webkit_white_list_access_to_origin):

2009-08-19  Aaron Boodman  <aa@chromium.org>

        Fix build break.

        * webkit/webkitprivate.h: "WEBKIT API" -> "WEBKIT_API"

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.

        * webkit/webkitprivate.cpp:
        (webkit_white_list_access_to_origin): Add API to manipulate origin access whitelists.
        (webkit_reset_origin_access_white_lists): Ditto.
        * webkit/webkitprivate.h: Ditto.

2009-08-18  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Holger Freyther.

        Remove an unneeded include.

        * WebCoreSupport/DragClientGtk.cpp:

2009-08-18  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=28443
        Fix build break with gtk older than 2.14.

        WebKit gtk port requires gtk 2.10 or later, but DragClientGtk.cpp
        uses gtk_widget_get_window that is introduced in 2.14.

        * WebCoreSupport/DragClientGtk.cpp:
         define gtk_widget_get_window for gtk older than 2.14.

2009-08-18  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Oliver Hunt.

        [Gtk] crash when closing page from javascript
        https://bugs.webkit.org/show_bug.cgi?id=27439

        Do not unref the WebView in ChromeClientGtk::closeWindowSoon
        because (1) a create-web-view handler can return a NULL WebView,
        (2) the created WebView is owned by its containing widget, and (3)
        clients may not handle the close-web-view signal so this avoids
        unreffing a WebView more than once.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::closeWindowSoon):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):

2009-08-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=19360
        Frags on current page don't generate "navigation-requested" events

        Fix order of parameters for the creation of SubstituteData object,
        so that normal data loads do not have an unreachable URL. Also
        remove a confusion about the purpose of the last parameter.

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_load_data):

2009-08-18  Drew Wilson  <atwilson@google.com>

        Reviewed by Eric Seidel.

        Need to extend DumpRenderTree to expose number of worker threads
        https://bugs.webkit.org/show_bug.cgi?id=28292

        * webkit/webkitprivate.h:
        * webkit/webkitworkers.cpp: Added.
        (webkit_worker_thread_count):
        Exposed WebCore::WorkerThread::workerThreadCount() for the gtk version of DumpRenderTree.

2009-08-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix the ATK unit test.

        We now support line boundaries in the get_text functions, so we
        need to make sure the test has the layout we expect by giving it
        enough space to fit in one line.

        * tests/testatk.c:
        (test_webkit_atk_get_text_at_offset):

2009-08-15  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Xan Lopez.

        Fix compiler warnings.

        * webkit/webkitwebview.cpp:
        (clipboard_contents_received):
        (webkit_web_view_drag_data_get):

2009-08-14  Jiahua Huang  <jhuangjiahua@gmail.com>

        Reviewed by Jan Alonzo.

        [gtk] Pasteboard/GtkClipboard can't handle the "text/html" target.
        https://bugs.webkit.org/show_bug.cgi?id=27028

        Add a function in WebKit::PasteboardHelperGtk that will return the
        value of WEBKIT_WEB_VIEW_TARGET_INFO_HTML,
        and WebCore::clipboard_get_contents_cb will use that.

        * WebCoreSupport/PasteboardHelperGtk.cpp:
        (WebKit::PasteboardHelperGtk::getWebViewTargetInfoHtml):
        * WebCoreSupport/PasteboardHelperGtk.h:

2009-08-14  Benjamin Otte  <otte@gnome.org>

        Reviewed by Gustavo Noronha.

        Fix webkit_web_view_set_highlight_text_matches() so that highlighting
        works properly in documents with frames.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_set_highlight_text_matches):

2009-08-13  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Gustavo Noronha.

        [GTK] Drag and drop support
        https://bugs.webkit.org/show_bug.cgi?id=23642

        Adds support for drag actions in WebKitWebView and DragClient.

        Defines a support structure that can hold additional drag and drop data,
        such as selection data or target IDs (infos) and can be passed through
        clipboard requests.

        Implements DragClient functions that gather start position of the drag
        and start the GTK drag.

        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::DragClient):
        (WebKit::DragClient::willPerformDragSourceAction):
        (WebKit::DragClient::startDrag):
        (WebKit::DragClient::createDragImageForLink): A small style fix.
        * WebCoreSupport/DragClientGtk.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_drag_end):
        (clipboard_contents_received): GtkClipboard callback.
        (webkit_web_view_drag_data_get):
        (webkit_web_view_class_init):
        (webkit_web_view_init):
        * webkit/webkitwebview.h: Add GTK selection targets.

2009-08-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed build fix.

        Last-minute change on the new soup API to use the keyring was not
        reflected in our usage - the documentation says we should use
        g_slist_free, and soup_auth_free_saved_users doesn't exist.

        * webkit/webkitsoupauthdialog.c:
        (session_authenticate):

2009-08-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        [GTK] Remove keyring optional features
        https://bugs.webkit.org/show_bug.cgi?id=28173

        Remove keyring support from our code and rely on libsoup to store
        the authentication data if the user requests that support in their
        application/library.

        * webkit/webkitsoupauthdialog.c:
        (response_callback):
        (show_auth_dialog):
        (session_authenticate):

2009-08-11  Benjamin Otte  <otte@gnome.org>

        Reviewed by Xan Lopez.

        When instructed to print an out-of-range page, print an empty page
        instead of crashing.

        * webkit/webkitwebframe.cpp:
        (draw_page_callback):

2009-08-10  Brady Eidson  <beidson@apple.com>

        GTK build fix.

        * webkit/webkitdownload.cpp:
        (webkit_download_get_suggested_filename):

2009-08-08  Xan Lopez  <xlopez@igalia.com>

        Roll out r46928, since it wasn't done in accordance with the
        agreed naming.

        * ChangeLog:

        Remove the ChangeLog entry, since it was added at the bottom of
        the file.

        * gdom/GdomDOMObject.h: Removed.
        * gdom/GdomDOMObjectPrivate.h: Removed.

2009-08-08  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [Gtk] Enable accessibility in Gtk DRT
        https://bugs.webkit.org/show_bug.cgi?id=25989

        Add SPI to get the focused accessible element to be used by DRT.

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_focused_accessible_element):

2009-07-30  Martin Robinson  <mrobinson@appcelerator.com>

        Reviewed by Xan Lopez, Gustavo Noronha and Jan Alonzo.

        [GTK] new-window-policy-decision-requested provides no information about the target frame
        https://bugs.webkit.org/show_bug.cgi?id=27792

        Add frameName property to the WebKitWebNavigation object.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::getNavigationAction):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * webkit/webkitwebnavigationaction.cpp:
        (webkit_web_navigation_action_get_property):
        (webkit_web_navigation_action_set_property):
        (webkit_web_navigation_action_class_init):
        (webkit_web_navigation_action_get_target_frame):
        (webkit_web_navigation_action_set_target_frame):
        * webkit/webkitwebnavigationaction.h:

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/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::inspectorWindowObjectCleared):
        * WebCoreSupport/InspectorClientGtk.h:

2009-07-29  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Eric Seidel and Xan Lopez.

        [Gtk] Enable http/tests/appcache tests
        https://bugs.webkit.org/show_bug.cgi?id=27674

        Add 'enable-offline-web-application-cache' WebSetting to enable
        or disable the appcache. Also, Add appcache SPI for DRT to use.

        * webkit/webkitapplicationcache.cpp: Added.
        (webkit_application_cache_set_maximum_size):
        * webkit/webkitprivate.cpp:
        (webkit_init):
        * webkit/webkitprivate.h:
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2009-07-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Add information about the regression fix for WEBKIT_DEBUG.

        * NEWS:

2009-07-28  Priit Laes  <plaes@plaes.org>

        Reviewed by Xan Lopez.

        Fix mnemonics in the soup authentication dialog.

        * webkit/webkitsoupauthdialog.c:
        (show_auth_dialog):

2009-07-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        * NEWS: update for 1.1.12 release.

2009-07-27  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * webkit/webkitwebframe.cpp: (webkit_gc_count_javascript_objects): Added a namespace to
        SilenceAssertionsOnly.

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

        * webkit/webkitwebframe.cpp:
        (webkit_gc_count_javascript_objects):

2009-07-24  Priit Laes  <plaes@plaes.org>

        Reviewed by Xan Lopez.

        [Gtk] Password is saved into gnome-keyring even if auth. fails
        https://bugs.webkit.org/show_bug.cgi?id=27560

        Check authentication result and save password only when authentication
        succeeds.

        * webkit/webkitsoupauthdialog.c:
        (free_authData):
        (response_callback):
        (save_password_callback):

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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::reachedMaxAppCacheSize):
        Adds empty implementation of reachedMaxAppCacheSize.
        * WebCoreSupport/ChromeClientGtk.h:

2009-07-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Eric Seidel.

        [Gtk] Add implementation of GCController for DRT
        https://bugs.webkit.org/show_bug.cgi?id=27636

        Add SPI for GCController to use.

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_gc_collect_javascript_objects):
        (webkit_gc_collect_javascript_objects_on_alternate_thread):
        (webkit_gc_count_javascript_objects):

2009-07-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        Fix compiler warning.

        * tests/testwebsettings.c:
        (test_webkit_web_settings_user_agent):

2009-07-22  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Remove unused variables.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_grab_focus):
        (webkit_web_view_focus_in_event):

2009-07-21  Priit Laes  <plaes@plaes.org>

        Reviewed by Holger Freyther.

        [GTK+] Missing accelerator in authentication dialog
        https://bugs.webkit.org/show_bug.cgi?id=25509

        Add accelerator to checkbox text.

        * WebKit/gtk/webkit/webkitsoupauthdialog.c:
        (show_auth_dialog):

2009-07-21  Priit Laes  <plaes@plaes.org>

        Reviewed by Holger Freyther.

        [GTK] http auth dialog pops up twice after a cancelled atempt
        https://bugs.webkit.org/show_bug.cgi?id=24818

        Remove workaround required for libsoup versions <=2.26.2 as we depend
        on 2.27.4 now.

        * webkit/webkitsoupauthdialog.c:
        (session_authenticate):

2009-07-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        [GTK] Widget size negotiation
        https://bugs.webkit.org/show_bug.cgi?id=17154

        Implement proper size request for the WebView widget.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::contentsSizeChanged):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_size_request):
        (webkit_web_view_class_init):

2009-07-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Jan Alonzo.

        [GTK+] Update the focus handling code.

        Change focus-in to always call setActive(true), call
        FocusController::setFocusedFrame when no focused frame exists
        other SelectionController::setActive. This is matching Windows
        and Qt.

        On focus-out call FocusController::setActive(false) and
        SelectionController::setFocued(false). This is matching Windows
        and Qt as well.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_focus_in_event):
        (webkit_web_view_focus_out_event):

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.


        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::mouseDidMoveOverElement): Add direction as a parameter to the callee of HitTestResult::title().

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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::setToolTip): Add directionality as 2nd parameter to setToopTip() (without handling it yet).
        * WebCoreSupport/ChromeClientGtk.h: Add directionality as 2nd parameter to setToolTip().

2009-07-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Jan Alonzo.

        Fix enable-xss-auditor property documentation, and default value
        to match the fact that it is now enabled by default.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):

2009-07-14  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>

        Reviewed by Darin Adler.

        Change all Noncopyable inheriting visibility to public.
        https://bugs.webkit.org/show_bug.cgi?id=27225

        Change all Noncopyable inheriting visibility to public because
        it is needed to the custom allocation framework (bug #20422).

        * webkit/webkitdownload.cpp:

2009-07-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Late NEWS file for 1.1.11.

        * NEWS:

2009-07-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Changes to the doc control files for 1.1.11.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2009-07-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Holger Freyther.

        Fix unit test to use the correct assumption that the SoupMessage
        will be NULL when WebKitNetworkRequest is created from an URI.

        * tests/testnetworkrequest.c:
        (test_network_request_create_destroy):

2009-07-13  Jan Michael Alonzo  <jmalonzo@webkit.org>

        <https://bugs.webkit.org/show_bug.cgi?id=27171> [Gtk]
        REGRESSION (r45440): fails at fast/events/frame-programmatic-focus.html

        Reviewed by Gustavo Noronha.

        focus-in and focus-out events only get triggered when there's user
        interaction, hence setFocused(bool) never gets called when
        focusEvent is triggered when running the layout tests. The
        solution seems to be to implement grab-focus too so we can call
        setFocused(bool) when a widget has focus.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_grab_focus):
        (webkit_web_view_focus_in_event):
        (webkit_web_view_class_init):

2009-07-13  Jan Michael Alonzo  <jmalonzo@webkit.org>

        https://bugs.webkit.org/show_bug.cgi?id=26718 [Gtk] Add support for javascript windows for DRT

        Reviewed by Gustavo Noronha and Xan Lopez.

        Add API to support opening and closing of JavaScript windows automatically.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::closeWindowSoon):
        * webkit/webkitprivate.h:
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_real_close_web_view):
        (webkit_web_view_class_init):
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):
        (webkit_web_view_set_group_name):
        * webkit/webkitwebview.h:

2009-07-12  Brent Fulgham  <bfulgham@gmail.com>

        Speculative build fix after http://trac.webkit.org/changeset/45786.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::addMessageToConsole):
        * WebCoreSupport/ChromeClientGtk.h:

2009-07-09  Beth Dakin and Jon Honeycutt <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Make Widget RefCounted to fix:

        <rdar://problem/7038831> REGRESSION (TOT): In Mail, a crash occurs 
        at WebCore::Widget::afterMouseDown() after clicking To Do's close 
        box
        <rdar://problem/6978804> WER #16: Repro Access Violation in 
        WebCore::PluginView::bindingInstance (1310178023)
        -and-
        <rdar://problem/6991251> WER #13: Crash in WebKit!
        WebCore::PluginView::performRequest+203 (1311461169) 

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createPlugin):
        (WebKit::FrameLoaderClient::createJavaAppletWidget):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2009-07-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Jan Alonzo.

        Use soup's content sniffing
        https://bugs.webkit.org/show_bug.cgi?id=26982

        Add the new Content Sniffing feature provided by libsoup.

        * webkit/webkitprivate.cpp:
        (webkit_init):

2009-07-05  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Xan Lopez.

        Always initialize WebCore.

        It is possible that WebKitWebSettings and other classes get
        constructed before the WebKitWebView. In this case WebCore is
        not yet properly initialized. Add webkit_init to every class
        that can be constructed by API users.

        * webkit/webkitdownload.cpp:
        (webkit_download_class_init):
        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_class_init):
        * webkit/webkitwebbackforwardlist.cpp:
        (webkit_web_back_forward_list_class_init):
        * webkit/webkitwebhistoryitem.cpp:
        (webkit_web_history_item_class_init):
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        * webkit/webkitwebwindowfeatures.cpp:
        (webkit_web_window_features_class_init):

2009-07-03  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez and Gustavo Noronha.

        Set user-agent from application
        https://bugs.webkit.org/show_bug.cgi?id=17375

        Add 'user-agent' setter/getter API to WebSettings.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):
        (WebKit::FrameLoaderClient::userAgent):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        * webkit/webkitprivate.h:
        * webkit/webkitversion.h.in:
        * webkit/webkitwebsettings.cpp:
        (webkit_get_user_agent):
        (webkit_web_settings_class_init):
        (webkit_web_settings_finalize):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        (webkit_web_settings_get_user_agent):
        * webkit/webkitwebsettings.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_dispose):

2009-07-02  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        Update the new boolean property in FocusController that keeps
        track of whether or not the Page is focused.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_focus_in_event):
        (webkit_web_view_focus_out_event):

2009-06-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Fix a couple of compiler warnings.

        * webkit/webkitwebnavigationaction.cpp:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_real_move_cursor):

2009-06-28  Xan Lopez  <xlopez@igalia.com>

        Fix the GTK+ build.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::ContextMenuClient::isSpeaking):
        * WebCoreSupport/ContextMenuClientGtk.h:

2009-06-24  Jiahua Huang  <jhuangjiahua@gmail.com>

        Reviewed by Holger Freyther.

        [Gtk] Add Undo/Redo support to WebKitGtk
        https://bugs.webkit.org/show_bug.cgi?id=26573

        Implement EditorClient::undo and other interested funcs.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::registerCommandForUndo):
        (WebKit::EditorClient::registerCommandForRedo):
        (WebKit::EditorClient::clearUndoRedoOperations):
        (WebKit::EditorClient::canUndo):
        (WebKit::EditorClient::canRedo):
        (WebKit::EditorClient::undo):
        (WebKit::EditorClient::redo):
        (WebKit::EditorClient::EditorClient):
        * WebCoreSupport/EditorClientGtk.h:

2009-06-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha and Xan Lopez.

        [Gtk] Implement DRT XSS auditor support
        https://bugs.webkit.org/show_bug.cgi?id=26571

        Add a setting "enable-xss-auditor" to enable this feature.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

2009-06-20  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha and Xan Lopez.

        webkit_web_back_forward_list_add_item() should add a ref for the history item
        https://bugs.webkit.org/show_bug.cgi?id=26517

        Add a ref to the WebHistoryItem when it's added to the back
        forward list through webkit_web_back_forward_list_add_item.
        This keeps the history item alive and prevents pywebkitgtk from
        crashing

        * tests/testwebbackforwardlist.c:
        (test_webkit_web_history_item_lifetime):
        (test_webkit_web_back_forward_list_order):
        (test_webkit_web_back_forward_list_add_item):
        * webkit/webkitwebbackforwardlist.cpp:
        (webkit_web_back_forward_list_add_item):

2009-06-20  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Jan Alonzo.

        Initial test case for loading statuses.

        * tests/testloading.c: Added.
        (load_finished_cb):
        (status_changed_cb):
        (test_loading_status):
        (main):

2009-06-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Jan Alonzo.

        Fix the ordering in which the new load status goes into the enum
        to avoid ABI breakage.

        * webkit/webkitwebframe.h:

2009-06-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez and Christian Dywan.

        Add a new load status to report that the first visually non-empty
        layout has been done.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
        * webkit/webkitwebframe.h:

2009-06-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Fix parameters of navigation-policy-decision-requested callback,
        to be correct in number and type

        * tests/testhttpbackend.c:
        (navigation_policy_decision_requested_cb):

2009-06-18  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::loadDone):
        (WebKit::FrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::FrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::FrameLoaderClient::dispatchDidFailLoad): Introduce the static
        function loadDone to emit "load-done" and update the status and update
        the relevent places. We missed some status notifications before.

2009-06-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Be consistent in always using the term URI instead of URL in the
        documentation of WebKitWebView signals.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):

2009-06-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Do not use g_assert_cmpint to test for NULL pointer, just
        g_assert.

        * tests/testnetworkrequest.c:
        (test_network_request_create_destroy):

2009-06-15  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=26377
        [GTK] Confusion about range of 'progress' property

        Range for the progress property is 0.0 .. 1.0, don't multiply it
        by 100 to make it a percentage.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_progress):

2009-06-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Add new symbols list for 1.1.10 release.

        * docs/webkitgtk-docs.sgml:

2009-06-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Xan Lopez.

        Fix Since tags for the new uri and message properties.

        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_class_init):

2009-06-15  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Adding new documented API to the generated
        documentation.

        * docs/webkitgtk-sections.txt:

2009-06-15  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update NEWS for 1.1.10 release.

        * NEWS:

2009-06-11  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        Add a test to perform an actual download.

        * tests/testdownload.c:
        (navigation_policy_decision_requested_cb):
        (notify_status_cb):
        (download_requested_cb):
        (test_webkit_download_perform):
        (main):

2009-06-11  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        Fix crash when downloading, caused by assuming SoupMessage would
        be there. This change factors the logic required to create a
        ResourceRequest from a WebKitNetworkRequest into a core()
        function, like we have for some other classes.

        * webkit/webkitdownload.cpp:
        (webkit_download_start):
        * webkit/webkitprivate.cpp:
        (WebKit::core):
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_load_request):

2009-06-10  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        Make WebKitNetworkRequest a proper GObject, making URI and
        SoupMessage properties. Also adding unit tests for creation and
        destruction.

        * tests/testnetworkrequest.c: Added.
        (test_network_request_create_destroy):
        (test_network_request_properties):
        (main):
        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_get_property):
        (webkit_network_request_set_property):
        (webkit_network_request_class_init):
        (webkit_network_request_init):
        (webkit_network_request_constructor):
        (webkit_network_request_new_with_core_request):
        (webkit_network_request_new):
        (webkit_network_request_set_uri):
        (webkit_network_request_get_uri):
        * webkit/webkitnetworkrequest.h:

2009-06-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        News for 1.1.9.

        * NEWS:

2009-06-09  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        Clear the frame name before we run each tests so we don't get
        "someFloaString" or "3" in the target frame name.

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_clear_main_frame_name):


2009-06-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        Update test for new implementation (it fixes two bugs and adds
        actual implementations for LINE boundaries).

        * tests/testatk.c:
        (test_webkit_atk_get_text_at_offset):

2009-06-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=26104
        [GTK] Make NetworkRequest a proper GObject and expose SoupMessage

        Refactor how SoupMessage is handled, so that our ResourceRequest
        object doesn't have to store it as a member, which complicates
        managing ResourceRequest's lifetvime.

        * tests/testhttpbackend.c:
        (navigation_policy_decision_requested_cb):
        (test_soup_message_lifetime):
        * webkit/webkitnetworkrequest.cpp:
        (WTF::SoupMessage):
        (webkit_network_request_new_with_core_request):

2009-06-08  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26240
        [GTK] Try again button loses query strings

        Only trigger reload, when try again is clicked, this way we do not
        lose the query strings, like we did when also triggering a form
        submission.

        * resources/error.html:

2009-06-06  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=26175
        [GTK] Download progress notification should be throttled, for the benefit of download managers

        Throttle notifications for the 'progress' property of the Download
        object, and update documentation to note the fact that this is
        being done, and how to get all notifications if you really care
        about them.

        * webkit/webkitdownload.cpp:
        (webkit_download_class_init):
        (webkit_download_received_data):

2009-05-29  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha.

        Fixed compile warning when comparing the different navigation types

        * webkit/webkitwebnavigationaction.cpp:
        (webkit_web_navigation_action_class_init):

2009-05-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=26075
        [GTK] Refactor key scrolling code

        After the scrolling changes in r44177 we can now use the
        FrameView::scroll method like the other ports, keeping the magic
        constants for the scrolling amounts inside WebCore proper.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_real_move_cursor):

2009-05-29  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Jan Alonzo.

        Make NetworkRequest carry a reference of the SoupMessage used by
        ResourceRequest, and use that to create new ResourceRequests where
        needed, so that no information is lost while passing around
        NetworkRequest objects.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::FrameLoaderClient::startDownload):
        * webkit/webkitdownload.cpp:
        (webkit_download_start):
        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_finalize):
        (webkit_network_request_new_with_core_request):
        (webkit_network_request_new):
        (webkit_network_request_get_message):
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_load_request):

2009-05-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=26048
        navigation-policy-decision-requested documentation incomplete

        Fix documentation for all policy decision request signals, to
        mention that an actual decision is expected when you return TRUE,
        meaning that you handled the signal.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):

2009-05-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Mention the implementation of the new AtkText methods.

        * NEWS:

2009-05-19  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo and Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25415
        [GTK][ATK] Please implement support for get_text_at_offset

        New test file for ATK functionality.

        * tests/testatk.c: Added.
        (bail_out):
        (test_get_text_function):
        (test_webkit_atk_get_text_at_offset):
        (main):

2009-05-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Document changes worth noting for 1.1.8.

        * NEWS:

2009-05-27  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=26039
        [GTK] WebKitWebHistoryItem lifetime fixes

        Modify the management of history items by the BackForward list.

        Having the objects add themselves to a hash table with an extra
        reference made impossible for the cleanup code in the dispose
        method to be ever called in normal conditions, since dispose is
        called before getting rid of the last reference, which the objects
        were making to themselves. Get rid of this extra reference and
        move the responsibility of the cleanup to the BackForward list
        itself, which effectively owns the WebKitWebHistoryItems now.

        Also, update the tests to reflect this change.

        * tests/testwebbackforwardlist.c:
        (test_webkit_web_history_item_lifetime):
        (test_webkit_web_back_forward_list_order):
        (test_webkit_web_back_forward_list_add_item):
        * tests/testwebhistoryitem.c:
        (web_history_item_fixture_setup):
        (web_history_item_fixture_teardown):
        * webkit/webkitprivate.h:
        * webkit/webkitwebbackforwardlist.cpp:
        (webkit_web_back_forward_list_dispose):
        (webkit_web_back_forward_list_class_init):
        * webkit/webkitwebhistoryitem.cpp:
        (webkit_history_items):
        (webkit_history_item_add):
        (webkit_web_history_item_dispose):
        (WebKit::kit):

2009-05-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=26039
        [GTK] WebKitWebHistoryItem lifetime fixes

        Delete the BackForwardList before the Page, otherwise the references
        to the WebKitWebHistoryItems will be gone.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_dispose):

2009-05-27  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        Add comment to clarify why scrolling is done as it is and not with
        gdk_window_scroll.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::scroll):

2009-05-27  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Adding new symbols index for 1.1.8.

        * docs/webkitgtk-docs.sgml:

2009-05-26  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Xan Lopez.

        Add a new signal called "create-plugin-widget" and emit it from
        within the FrameLoaderClientGtk::createPlugin method. If a
        GtkWidget gets returned it will be embedded as a WebCore::Widget
        using the new GtkPluginWidget.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createPlugin):
        * webkit/webkitwebview.cpp:
        (webkit_signal_accumulator_object_handled):
        (webkit_web_view_class_init):
        * webkitmarshal.list:

2009-05-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=25987
        [GTK] Clarify WebKitWebView::download-requested documentation

        Explain a bit why this signal is not emitted by default and offer
        a common solution/setup for that issue.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_class_init):

2009-05-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Rubber-stamped by Gustavo Noronha.

        Break the switch once private browsing is selected.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):

2009-05-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Gustavo Noronha and Xan Lopez.

        [Gtk] Enable database and localStorage support
        https://bugs.webkit.org/show_bug.cgi?id=25629

        Add settings to enable or disable database and localStorage
        support and enable them by default. This allows databases to be
        shown in the WebInspector as well as allow us to run the storage
        layout tests.

        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_class_init):
        (webkit_web_settings_set_property):
        (webkit_web_settings_get_property):
        (webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        (webkit_web_view_update_settings):
        (webkit_web_view_settings_notify):

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/ChromeClientGtk.h:
        (WebKit::ChromeClient::createHTMLParserQuirks): Return a
        PassOwnPtr<> instead of a raw HTMLParserQuirks pointer.

2009-05-22  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Jan Alonzo.

        Improve NetworkRequest documentation.

        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_class_init):
        (webkit_network_request_init):

2009-05-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=24818
        [GTK] http auth dialog pops up twice after a cancelled atempt

        Workaround libsoup bug
        http://bugzilla.gnome.org/show_bug.cgi?id=583462, which made
        libsoup emit the 'authenticate' signal more often than it was
        expected.

        We'll be able to remove this when we depend on libsoup > 2.26.2.

        * webkit/webkitsoupauthdialog.c:
        (session_authenticate):

2009-05-21  Darin Fisher  <darin@chromium.org>

        Fix build bustage.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::getAutoCorrectSuggestionForMisspelledWord): Add stub for method.
        * WebCoreSupport/EditorClientGtk.h:

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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::setCursor):
        (WebKit::ChromeClient::requestGeolocationPermissionForFrame):
        * WebCoreSupport/ChromeClientGtk.h:
        (WebKit::ChromeClient::scrollRectIntoView):

2009-05-19  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jan Alonzo.

        Do not try to free enchant broker and dictionary if they do not
        exist, those functions aren't NULL-safe.

        * webkit/webkitwebsettings.cpp:
        (free_spell_checking_language):

2009-05-15  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Jan Alonzo.

        Plug memory leak.

        * webkit/webkitwebsettings.cpp:
        (free_spell_checking_language):
        (webkit_web_settings_finalize):
        (webkit_web_settings_set_property):

2009-05-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Jan Alonzo.

        Converting filename to uri by concatenating strings is broken
        on Windows. Use proper glib conversion functions.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_open):
        * tests/testdownload.c:
        (test_webkit_download_create):

2009-05-13  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Do not handle KeyEvents with Ctrl or Alt modifiers that we
        otherwise know nothing about. Otherwise shortcuts defined in the
        WebView will never be executed.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::handleEditingKeyboardEvent):

2009-05-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Add information about the SVG index bounds check committed in
        r43590.

        * NEWS:

2009-05-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Note changes since 1.1.6.

        * NEWS:

2009-05-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Updated control file, and main file for the 1.1.7
        release.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2009-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25685
        [GTK] Middle click paste form the pasteboard

        For paste from middle button (button==2) we want to use
        the GDK_PRIMARY_SELECTION. Implement the new getCurrentTarget
        method in PasteboardHelperGtk by asking the WebView which
        clipboard to use.

        * WebCoreSupport/PasteboardHelperGtk.cpp:
        (WebKit::PasteboardHelperGtk::getCurrentTarget):
        * WebCoreSupport/PasteboardHelperGtk.h:
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_button_press_event):
        (webkit_web_view_use_primary_for_paste):

2009-05-12  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [Gtk] Various autotools build refactoring and fixes
        https://bugs.webkit.org/show_bug.cgi?id=25286

        Add glib-2.0 to the list of required package.

        * webkit.pc.in:

2009-05-11  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25697
        [GTK] Warnings building WebKit/gtk/tests/testwebframe.c

        * tests/testwebframe.c:
        (test_webkit_web_frame_create_destroy): Declare webView as a GtkWidget*
        to fix pointer type incompatibility warnings.

2009-05-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Make the scan program call g_thread_init(NULL) in addition to
        g_type_init(), so that it actually works.

        * docs/GNUmakefile.am:

2009-05-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Unify scrolling code via adjustments and keys. Use the WebCore
        defined constants, since that's what people are most used to at
        this point.

        * ChangeLog:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_real_move_cursor):

2009-05-07  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebKit::FrameLoaderClient::dispatchDidCommitLoad): Add missing
        call to notifyStatus in the committed case and a missing property notify.

2009-05-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=24786
        WebKitDownload sometimes suggests peculiar filenames

        When a download is requested by an ongoing request, use the already
        provided response to set the suggested filename for the WebKitDownload
        object, if available.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::download):
        * webkit/webkitdownload.cpp:
        (_WebKitDownloadPrivate::webkit_download_set_property):
        (_WebKitDownloadPrivate::webkit_download_get_suggested_filename):
        (_WebKitDownloadPrivate::webkit_download_set_suggested_filename):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:

2009-05-06  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        GTK+ API implementation files have bogus extern "C" entries
        https://bugs.webkit.org/show_bug.cgi?id=24322

        Remove bogus extern "C" from the source files.

        * webkit/webkitdownload.cpp:
        (DownloadClient::cannotShowURL):
        * webkit/webkiterror.cpp:
        (webkit_plugin_error_quark):
        * webkit/webkitnetworkrequest.cpp:
        (webkit_network_request_get_uri):
        * webkit/webkitprivate.cpp:
        (webkit_init):
        * webkit/webkitversion.cpp:
        (webkit_micro_version):
        * webkit/webkitwebbackforwardlist.cpp:
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_get_load_status):
        * webkit/webkitwebhistoryitem.cpp:
        * webkit/webkitwebinspector.cpp:
        (webkit_web_inspector_set_inspector_client):
        * webkit/webkitwebnavigationaction.cpp:
        (webkit_web_navigation_action_get_modifier_state):
        * webkit/webkitwebpolicydecision.cpp:
        (webkit_web_policy_decision_cancel):
        * webkit/webkitwebsettings.cpp:
        (webkit_web_settings_get_spell_languages):
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebwindowfeatures.cpp:
        (webkit_web_window_features_equal):

2009-05-06  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        Misc fixes to InspectorClientGtk.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::createPage): use g_filename_to_uri to
        get the URI and use web_view_load_uri instead of the deprecated
        web_view_open method for loading the URI.
        (WebKit::InspectorClient::localizedStringsURL): implement.

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

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::exceededDatabaseQuota):
        * WebCoreSupport/ChromeClientGtk.h:

2009-05-06  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Gustavo Noronha.

        http://bugs.webkit.org/show_bug.cgi?id=17066
        [GTK] Improve frameloader signals

        Implement load-status and progress properties on the view, as well as
        load-status on the frame. This supersedes the different load signals
        load-progress-changed, load-committed, load-done, load-started and
        load-finished which are not only misnamed but broken by design.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::notifyStatus):
        (WebKit::FrameLoaderClient::postProgressStartedNotification):
        (WebKit::FrameLoaderClient::postProgressEstimateChangedNotification):
        (WebKit::FrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::FrameLoaderClient::dispatchDidStartProvisionalLoad):
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2009-05-05  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        Fix memory leaks.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::checkSpellingOfString):

2009-05-02  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25466
        WebKitGtk+ 1.1.6 prints weird error messages in Liferea

        Use strlen instead of g_utf8_strlen when calculating the size of
        the data that is being given to webkit_web_frame_load_string to be
        loaded, so that we don't miss any of the content.

        * webkit/webkitwebframe.cpp:

2009-05-01  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, bulid fix.

        Fix mis-applied patch.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):

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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2009-04-30  David Kilzer  <ddkilzer@apple.com>

        Provide a mechanism to create a quirks delegate for HTMLParser

        Reviewed by David Hyatt.

        * WebCoreSupport/ChromeClientGtk.h:
        (WebKit::ChromeClient::createHTMLParserQuirks): Added.  The
        default implementation of this factory method returns 0.

2009-04-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dimitri Glazkov.

        https://bugs.webkit.org/show_bug.cgi?id=25342
        Add MessageSource and MessageLevel parameters to the ChromeClient::addMessageToConsole.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::addMessageToConsole):
        * WebCoreSupport/ChromeClientGtk.h:

2009-04-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Update gtk-doc control and base sgml files for 1.1.6.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2009-04-28  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Updated with news for the 1.1.6 release.

        * NEWS:

2009-04-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Leave a bit of space from the previous page when advacing a whole
        page. This matches the behavior of our scrollbar scrolling code
        and is just nicer in general.

        * webkit/webkitwebview.cpp:

2009-04-28  Xan Lopez  <xlopez@igalia.com>

        Unreviewed: committed a few bits by mistake, remove them.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::handleEditingKeyboardEvent):

2009-04-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=16135
        [GTK] Support caret browsing

        Refactor keyboard event handling to work properly under caret
        browsing mode. Most of the code comes from the Windows port.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::):
        (WebKit::interpretKeyEvent):
        (WebKit::handleEditingKeyboardEvent):
        (WebKit::EditorClient::handleKeyboardEvent):

2009-04-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=16135
        [GTK] Support caret browsing

        Based on a patch by Alp Toker.

        Add enable-caret-browsing setting to WebKitWebView.

        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::):
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        (_WebKitWebSettingsPrivate::webkit_web_settings_set_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_get_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:

2009-04-27  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25409
        [GTK] incorrectly fallsback on cancellation

        Check whether we should fallback also on didFailLoad, so that we
        don't get error pages showing up in parts of the content of some
        sites because of, for instance, location changes.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFailLoad):

2009-04-27  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25409
        [GTK] incorrectly fallsback on cancellation

        Correctly handle cancellation and frame loading interruption
        caused by policy change.  This also fixes
        fast/frames/location-change.html.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::shouldFallBack):

2009-04-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        Plug memory leak.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFailLoad):

2009-04-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=25391
        G_SIGNAL_ACTION flag in WebKitWebView signals

        Most of the signals in WebKitGTK+ have the G_SIGNAL_ACTION flag,
        but I don't think this makes sense. The flag is meant for those
        signals that can be emitted by the user to trigger some action in
        the view, as if it were a normal API, which is not the case for
        most of them.

        * webkit/webkitdownload.cpp:
        (_WebKitDownloadPrivate::webkit_download_class_init):
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebinspector.cpp:
        (_WebKitWebInspectorPrivate::webkit_web_inspector_class_init):
        * webkit/webkitwebview.cpp:

2009-04-26  Xan Lopez  <xlopez@igalia.com>

        Unreviewed, actually apply the right patch.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_move_cursor):

2009-04-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Pass a variable to hold the return value of the 'move-cursor'
        signal, otherwise a crash can happen.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_move_cursor):

2009-04-25  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=24786
        WebKitDownload sometimes suggests peculiar filenames

        Refactor the emission of the download-requested signal so that we
        have less code duplication.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::ContextMenuClient::downloadURL):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::startDownload):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:

2009-04-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [GTK] Error reporting
        https://bugs.webkit.org/show_bug.cgi?id=18344

        Update FrameLoad errors to use WebKitErrors.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::cancelledError):
        (WebKit::FrameLoaderClient::blockedError):
        (WebKit::FrameLoaderClient::cannotShowURLError):
        (WebKit::FrameLoaderClient::interruptForPolicyChangeError):
        (WebKit::FrameLoaderClient::cannotShowMIMETypeError):
        (WebKit::FrameLoaderClient::fileDoesNotExistError):
        (WebKit::FrameLoaderClient::pluginWillHandleLoadError):
        (WebKit::FrameLoaderClient::shouldFallBack):
        * webkit/webkiterror.h: Added.
        * webkit/webkiterror.cpp: Added.

2009-04-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Xan Lopez.

        [GTK] Error reporting
        https://bugs.webkit.org/show_bug.cgi?id=18344

        Display a default error page for load errors.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFailLoad):
        * resources/error.html: Added.

2009-04-25  Jan Michael Alonzo  <jmalonzo@webkit.org>

         Reviewed by Xan Lopez.

         [GTK] Error reporting
         https://bugs.webkit.org/show_bug.cgi?id=18344

         Add a WebKitWebFrame API to load alternate content for unreachable URLs.
         Also add a new signal "load-error" for handling load errors.

         * WebCoreSupport/FrameLoaderClientGtk.cpp:
         (WebKit::FrameLoaderClient::postProgressFinishedNotification):
         (WebKit::FrameLoaderClient::dispatchDidFailLoading):
         (WebKit::FrameLoaderClient::dispatchDidFailProvisionalLoad):
         (WebKit::FrameLoaderClient::dispatchDidFailLoad):
         * webkit/webkitwebframe.cpp:
         * webkit/webkitwebframe.h:
         * webkit/webkitwebview.cpp:

2009-04-24  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Rubber-stamped by Gustavo Noronha.

        Fix braces to comply with style guidelines.

        * WebCoreSupport/PasteboardHelperGtk.cpp:
        (WebKit::PasteboardHelperGtk::getClipboard):
        (WebKit::PasteboardHelperGtk::getCopyTargetList):
        (WebKit::PasteboardHelperGtk::getPasteTargetList):

2009-04-24  Sergio García-Cuevas  <sergio_gcg@telefonica.net>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=17267
        [GTK] Primary selection/clipboard support

        Add a method for getting the primary selection.

        * WebCoreSupport/PasteboardHelperGtk.cpp:
        (WebKit::PasteboardHelperGtk::getPrimary):
        * WebCoreSupport/PasteboardHelperGtk.h:

2009-04-24  Johan Bilien  <jobi@via.ecp.fr>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=25373
        Popup menu has the wrong size when popped up near the edge
        of the screen

        * webkit/webkitwebview.cpp:
        (webkit_web_view_forward_context_menu_event): Let GTK place
        the popup menu instead of trying to do better and failing

2009-04-24  Christian Dywan  <christian@twotoasts.de>

        Rubber-stamped by Gustavo Noronha.

        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init): Reword the
        description of the enable-spell-checking property and correct the
        mentioning of the default language used.

2009-04-24  Diego Escalante Urrelo  <diegoe@gnome.org>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=15616
        [GTK] Add spell checking

        Implement EditorClient::ignoreWordInSpellDocument,
        EditorClient::learnWord and EditorClient::getGuessesForWord. This
        enables the corresponding user actions.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::ignoreWordInSpellDocument):
        (WebKit::EditorClient::learnWord):
        (WebKit::EditorClient::getGuessesForWord):

2009-04-24  Diego Escalante Urrelo  <diegoe@gnome.org>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=15616
        [GTK] Add spell checking

        Implement EditorClient::checkSpellingOfString; enabling spell checking
        to actually happen, this is the basis for other spelling functions.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::checkSpellingOfString):

2009-04-24  Diego Escalante Urrelo  <diegoe@gnome.org>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=15616
        [GTK] Add spell checking

        Add spell-checking-languages property to WebKitWebSettings.

        * webkit/webkitprivate.h:
        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::):
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        (_WebKitWebSettingsPrivate::webkit_web_settings_init):
        (_WebKitWebSettingsPrivate::webkit_web_settings_finalize):
        (_WebKitWebSettingsPrivate::webkit_web_settings_set_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_get_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_copy):
        (_WebKitWebSettingsPrivate::webkit_web_settings_get_spell_languages):

2009-04-24  Diego Escalante Urrelo  <diegoe@gnome.org>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=15616
        [GTK] Add spell checking

        Add enable-spell-checking property to WebKitWebSettings and implement
        EditorClient::isContinuousSpellCheckingEnabled and
        EditorClient::toggleContinuousSpellChecking to allow the UI to
        enable check as you type spell checking.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::isContinuousSpellCheckingEnabled):
        (WebKit::EditorClient::toggleContinuousSpellChecking):
        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::):
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        (_WebKitWebSettingsPrivate::webkit_web_settings_set_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_get_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_copy):

2009-04-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Implement window<->screen coordinate transformation functions.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::widgetScreenPosition):
        (WebKit::ChromeClient::windowToScreen):
        (WebKit::ChromeClient::screenToWindow):

2009-04-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        https://bugs.webkit.org/show_bug.cgi?id=24786
        WebKitDownload sometimes suggests peculiar filenames

        Remove query and ref from the URI that is to be downloaded when
        using it to provide a file name suggestion.

        * webkit/webkitdownload.cpp:
        (_WebKitDownloadPrivate::webkit_download_set_property):

2009-04-20  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Handle the case when the plugin view is destroyed during
        didReceiveResponse, to avoid crashing.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::committedLoad):

2009-04-17  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=25251
        Crash when frame creation removes it from the parent

        This brings us up-to-date with the expectations of sub-frame
        creation, following what Mac has done. It fixes crashes when
        calling init on the child frame removes it from the page.

        This makes the following test pass instead of crash:

          fast/loader/frame-creation-removal.html

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):

2009-04-16  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=25042
        destroying webview widget directly causes crash.

        * tests/testwebframe.c:
        (test_webkit_web_frame_create_destroy): Add a test case for destroying
        a web view shortly after packing it in a window.

2009-04-16  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=25241
        Remove superfluous NotImplemented.h includes.

        * webkit/webkitprivate.cpp:

2009-04-14  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Update gtk-doc control and base sgml files for 1.1.5.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2009-04-14  Xan Lopez  <xlopez@igalia.com>

        * NEWS: updated for 1.1.5 release.

2009-04-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=22898
        [GTK] need proper API for printing

        Added simple printing unit tests.

        * tests/testwebframe.c:
        (print_requested_cb):
        (print_timeout):
        (test_webkit_web_frame_printing):
        (main):

2009-04-13  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=22898
        [GTK] need proper API for printing

        Implement proper printing API, using the GTK+ printing API.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::print):
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebview.cpp:

2009-04-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25124
        [GTK] many strings still missing translation calls

        Mark the missing strings for translation.

        * webkit/webkitdownload.cpp:
        (_WebKitDownloadPrivate::webkit_download_cancel):
        * webkit/webkitsoupauthdialog.c:
        (show_auth_dialog):
        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_class_init):
        * webkit/webkitwebinspector.cpp:
        (_WebKitWebInspectorPrivate::webkit_web_inspector_class_init):
        * webkit/webkitwebnavigationaction.cpp:
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_class_init):
        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        * webkit/webkitwebview.cpp:

2009-04-08  Alejandro Piñeiro  <apinheiro@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=21546
        [GTK] ATK accessibility enhancements

        Use getOrCreate instead of just get, as we need to actually create
        the wrapper object the first time this function is called.

        * webkit/webkitwebview.cpp:

2009-04-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Rubber-stamped by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=20575
        No localization in WebKitGtk

        Implemented localization support for WebKitGTK+.

        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * po/POTFILES: Added.
        * po/README: Added.
        * po/webkit.pot: Added.
        * webkit/webkitdownload.cpp:
        (_WebKitDownloadPrivate::webkit_download_class_init):
        * webkit/webkitprivate.cpp:
        (webkit_init):
        * webkit/webkitwebframe.cpp:

2009-04-05  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25042
        destroying webview widget directly causes crash.

        Do not connect the WebView to its own screen-changed signal, set a
        default handler instead.

        * webkit/webkitwebview.cpp:

2009-04-05  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25042
        destroying webview widget directly causes crash.

        GtkWidget::screen-changed can be emitted when a widget is being
        destroyed, protect against it.

        * webkit/webkitwebview.cpp:

2009-04-05  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [Gtk] Implement LayoutTestControllerGtk::setPrivateBrowsingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=24487

        Updated documentation and put more information about the
        private-browsing setting for WebKitGtk.

        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):

2009-04-03  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        Remove pre-processor checks for GTK+ >= 2.10, since we now require
        at least that version.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::clipboard_clear_contents_cb):
        (WebKit::EditorClient::respondToChangedSelection):
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebview.cpp:

2009-04-02  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Alexey  Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24844
        Unit test WebKitDownload

        Extra checks to avoid crashing and a critical message when
        property accessor functions are called before the download is
        started.

        * webkit/webkitdownload.cpp:
        (_WebKitDownloadPrivate::webkit_download_get_progress):
        (_WebKitDownloadPrivate::webkit_download_get_elapsed_time):

2009-04-01  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        * tests/testdownload.c: Added.
        (test_webkit_download_create):
        (main): Add an initial unit test for downloading.

2009-04-01  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed typo fixes, and naming normalization in the
        documentation.

        * docs/webkitenvironment.xml:
        * webkit/webkitwebview.cpp:

2009-03-31  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        Updated gtk-doc configuration files for the 1.1.1, 1.1.2, 1.1.3,
        and 1.1.4 versions of WebKitGTK+.

        * docs/webkitgtk-docs.sgml:
        * docs/webkitgtk-sections.txt:

2009-03-31  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=17045
        [GTK] Documentation

        Added header documentation for WebKitWebNavigationAction and
        WebKitWebPolicyDecision.

        Added missing documentation pieces for WebKitSoupAuthDialog,
        WebKitDownload and WebKitWebPolicyDecision.

        Wrote a section about using the WEBKIT_DEBUG environment variable.

        * docs/GNUmakefile.am:
        * docs/webkitenvironment.xml: Added.
        * docs/webkitgtk-docs.sgml:
        * webkit/webkitdownload.cpp:
        * webkit/webkitsoupauthdialog.c:
        * webkit/webkitwebnavigationaction.cpp:
        * webkit/webkitwebpolicydecision.cpp:

2009-03-30  Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk>

        Reviewed by Holger Freyther.

        Integrate gtk-doc into the Gtk+ buildsystem.

        Based on original work by Holger Freyther.

        Integrate gtk-doc into our buildsystem. We are forced to
        use recursive make for gtk-doc itself as the to be installed
        gtk-doc.make (done by gtkdocize) is not working in a non
        recursive environment.

        The documentation can only be generated when srcdir == builddir.
        In all other cases the generated files will not be found. This
        limitation can be found in pango and gtk+ as well. There is no
        easy way around. The resulting html documentation will be saved
        in the srcdir as well.

        * docs/GNUmakefile.am: Added.
        * docs/version.xml.in: Added.
        * docs/webkitgtk-docs.sgml:

2009-03-30  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Documenting what changed since the 1.1.3 release, in
        the GTK+ port.

        * NEWS:

2009-03-30  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Add information on the bug-fix-only 1.1.3 release.

        * NEWS:

2009-03-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24878
        [GTK] Use GtkBinding system to handle key events in WebView

        Use GtkBinding system for key events in WebKitWebView. Allows the
        user to reconfigure the bindings and fixes a bunch of bugs along
        the way (we were not checking modifier keys in most actions).

        * webkit/webkitwebview.cpp:
        (webkit_web_view_move_cursor):
        * webkit/webkitwebview.h:
        * webkitmarshal.list:

2009-03-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=24790
        [GTK] webkitsoupauthdialog.h lacks WEBKIT_API before function

        Set the right visibility to the WebKitSoupAuthDialog get_type
        function.

        * webkit/webkitsoupauthdialog.h:

2009-03-28  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Gtk build fix. Not reviewed.

        FrameLoader::loadURL and FrameLoader::detachChildren went private
        per changes in http://trac.webkit.org/changeset/42055. Follow
        Mac's behaviour and use FrameLoader::loadURLIntoChildFrame for
        loadURL and FrameLoader::detachParent for detachChildrem.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):
        * webkit/webkitwebview.cpp:

2009-03-25  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=15793
        [GTK] tooltip position doesn't update when hovering consecutive links

        Work-around tooltips not updating their location when the elements
        are consecutive, by clearing the tooltip when handling
        mouseDidMoveOverElement.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::mouseDidMoveOverElement):

2009-03-23  Alejandro Garcia Castro  <alex@igalia.com>

        Reviewed by Holger Freyther.

        [Gtk] Current API does not allow us to open target="_blank" links
        in new tabs instead of windows
        https://bugs.webkit.org/show_bug.cgi?id=23932

        Added a signal to the API (new-window-policy-decision-requested)
        that allows the browser to decide the policy for the new window
        request, if the signal is not handled we open the new window as
        usual.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::getNavigationAction):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * webkit/webkitwebview.cpp:

2009-03-20  Jan Michael Alonzo  <jmalonzo@gmail.com>

        Not reviewed. Fix style issues with my previous commit (r41866) as
        suggested by Holger in https://bugs.webkit.org/show_bug.cgi?id=24493

        * tests/testwebhistoryitem.c:
        (test_webkit_web_history_item_get_data):
        (test_webkit_web_history_item_alternate_title):

2009-03-20  Jan Michael Alonzo  <jmalonzo@gmail.com>

        Reviewed by Holger Freyther.

        [GTK] Misc patches for WebKitWebHistoryItem
        https://bugs.webkit.org/show_bug.cgi?id=24493

        Add unit test for WebKitWebHistoryItem

        * tests/testwebhistoryitem.c: Added.
        (web_history_item_fixture_setup):
        (web_history_item_fixture_teardown):
        (test_webkit_web_history_item_get_data):
        (test_webkit_web_history_item_alternate_title):
        (main):

2009-03-20  Jan Michael Alonzo  <jmalonzo@gmail.com>

        Reviewed by Holger Freyther.

        Separate gtk unit tests
        https://bugs.webkit.org/show_bug.cgi?id=24039

        Split the current single-file unit test to make it more
        modularized and manageable in the future as more unit tests are
        written.

        * tests/main.c: Removed.
        * tests/testwebbackforwardlist.c: Copied from WebKit/gtk/tests/main.c.
        (main):
        * tests/testwebframe.c: Copied from WebKit/gtk/tests/main.c.
        (main):

2009-03-16  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Adam Roben.

        [gtk] API implementation: url and title
        http://bugs.webkit.org/show_bug.cgi?id=14807

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebKit::FrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::FrameLoaderClient::dispatchDidCommitLoad):
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h: Implement "title" and "uri" properties as well
        as according functions. "uri" always reflects the current location
        including navigation inside the same page. title-changed is deprecated.

2009-03-15  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Anders Carlsson.

        Fix default policy decision to be ignore, on MIME checks, if
        WebKit doesn't know how to handle the MIME type. The documentation
        is already correct, and this was an oversight when the policy
        decision code was first committed. Since 1.1.2 will be the first
        release to support download, there is no practical change in
        behavior.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType):

2009-03-15  Xan Lopez  <xlopez@igalia.com>

        * NEWS: update for 1.1.2.

2009-03-14  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [GTK] use of confirm dialog (yes/no) causes segfault
        https://bugs.webkit.org/show_bug.cgi?id=20940

        Change the script-confirm marshaller from OBJECT,STRING,BOOLEAN to
        OBJECT,STRING,POINTER

        * webkit/webkitwebview.cpp:
        * webkitmarshal.list:

2009-03-12  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alexey  Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24553
        [GTK] Improvements to WebKitDownload

        Rename 'state' to 'status' to match the naming in the frame
        loader rework that we plan to land soonish, and make it a
        property, for the same reason.

        * webkit/webkitdownload.cpp:
        (_WebKitDownloadPrivate::):
        (_WebKitDownloadPrivate::webkit_download_finalize):
        (_WebKitDownloadPrivate::webkit_download_get_property):
        (_WebKitDownloadPrivate::webkit_download_set_property):
        (_WebKitDownloadPrivate::webkit_download_class_init):
        (_WebKitDownloadPrivate::webkit_download_init):
        (_WebKitDownloadPrivate::webkit_download_start):
        (_WebKitDownloadPrivate::webkit_download_cancel):
        (_WebKitDownloadPrivate::webkit_download_set_destination_uri):
        (_WebKitDownloadPrivate::webkit_download_get_status):
        (_WebKitDownloadPrivate::webkit_download_set_status):
        (_WebKitDownloadPrivate::webkit_download_received_data):
        (_WebKitDownloadPrivate::webkit_download_finished_loading):
        (_WebKitDownloadPrivate::webkit_download_error):
        * webkit/webkitdownload.h:

2009-03-12  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alexey  Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24553
        [GTK] Improvements to WebKitDownload

        Improved documentation for the download-requested signal, to make
        its usage clear.

        * webkit/webkitwebview.cpp:

2009-03-12  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=24541
        Scrolling with home and end keys not always works

        Also make page up and page down keys be handled by the webview key
        event code, so that they also work in cases where the GTK+
        scrollbars don't handle them directly, like in the bugzill's patch
        review page.

        * webkit/webkitwebview.cpp:

2009-03-12  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=24541
        Scrolling with home and end keys not always works

        Make home and end keys behave more consistently for scrolling the
        view.

        * webkit/webkitwebview.cpp:

2009-03-12  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=24254
        [GTK] spacebar doesn't scroll down

        Make spacebar and shift+spacebar scroll like page up and down
        respectively would.

        * webkit/webkitwebview.cpp:

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24493
        [GTK] Misc patches for WebKitWebHistoryItem

        Only run code in dispose once per instance.

        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_dispose):

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24493
        [GTK] Misc patches for WebKitWebHistoryItem

        Call deref() on our internal HistoryItem on dispose, as we always
        acquire it with a releaseRef() call to a PassRefPtr, which passes
        ownership.

        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_dispose):

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=24493
        [GTK] Misc patches for WebKitWebHistoryItem

        return foo? foo : NULL == return foo

        * webkit/webkitwebhistoryitem.cpp:
        (WebKit::core):

2009-03-11  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        Gtk] Implement LayoutTestControllerGtk::setPrivateBrowsingEnabled
        https://bugs.webkit.org/show_bug.cgi?id=24487

        Add private browsing option "enable-private-browsing" to WebKitWebSettings.

        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::):
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        (_WebKitWebSettingsPrivate::webkit_web_settings_set_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_get_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:

2009-03-11  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [GTK] BackForward history leak?
        https://bugs.webkit.org/show_bug.cgi?id=19528

        Don't ref the history items when returning the back/forward list
        Added test_webkit_web_history_item_lifetime test case for this.

        * tests/main.c:
        (test_webkit_web_history_item_lifetime):
        (test_webkit_web_back_forward_list_order): Style fix.
        (test_webkit_web_back_forward_list_add_item): Style fix.
        (main):
        * webkit/webkitwebbackforwardlist.cpp:
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_forward_list_with_limit):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_back_list_with_limit):

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24493
        [GTK] Misc patches for WebKitWebHistoryItem

        Use g_hash_table_new_full so we can save the manual unref on the
        values when removing them from the table.

        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_dispose):

2009-03-10  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24493
        [GTK] Misc patches for WebKitWebHistoryItem

        Use 'if (foo)' instead of 'if (foo != NULL)', per coding style
        guidelines.

        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_history_item_remove):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_alternate_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_uri):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_original_uri):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_last_visited_time):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_target):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_is_target_item):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_children):

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Alexey Proskuryakov.

        Correct return value to false instead of NULL.

        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_is_target_item):

2009-03-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark Rowe.

        Add javascript-profiling-enabled property and implement it. This
        will enable/disable the profiler on the InstpectorController.

        * webkit/webkitprivate.h:
        * webkit/webkitwebinspector.cpp:
        (_WebKitWebInspectorPrivate::webkit_web_inspector_class_init):
        (_WebKitWebInspectorPrivate::webkit_web_inspector_set_property):
        (_WebKitWebInspectorPrivate::webkit_web_inspector_get_property):
        (_WebKitWebInspectorPrivate::webkit_web_inspector_set_inspector_client):
        * webkit/webkitwebview.cpp:

2009-03-05  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Olliej.

        https://bugs.webkit.org/show_bug.cgi?id=24295
        webkit_web_back_forward_list_add_item needs a Since tag

        Add missing Since tag to webkit_web_back_forward_list_add_item
        documentation.

        * webkit/webkitwebbackforwardlist.cpp:

2009-03-05  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=24417
        [GTK] WebKitDownload's _cancel and _dispose methods may emit warnings

        NULL-check for timer on _cancel and _dispose, to avoid bad
        warnings.

        * webkit/webkitdownload.cpp:
        (_WebKitDownloadPrivate::webkit_download_finalize):
        (_WebKitDownloadPrivate::webkit_download_cancel):

2009-03-02  Xan Lopez  <xan@gnome.org>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=24287
        [GTK] Move auth dialog feature to WebKit/

        Add WebKitSoupAuthDialog and add it to the session in webkit_init.

        * webkit/webkitprivate.cpp:
        (currentToplevelCallback):
        (webkit_init):
        * webkit/webkitsoupauthdialog.c: Added.
        (webkit_soup_auth_dialog_class_init):
        (webkit_soup_auth_dialog_init):
        (webkit_soup_auth_dialog_session_feature_init):
        (free_authData):
        (set_password_callback):
        (response_callback):
        (table_add_entry):
        (show_auth_dialog):
        (find_password_callback):
        (session_authenticate):
        (attach):
        * webkit/webkitsoupauthdialog.h: Added.

2009-03-03  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=16826
        [Gtk] Implement WebKitDownload

        Implement download, and provide a nice object wrapping the
        download process. Initial work done by Marco Barisione and
        Pierre-Luc Beaudoin for Collabora.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::ContextMenuClient::downloadURL):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::download):
        (WebKit::FrameLoaderClient::startDownload):
        * webkit/webkit.h:
        * webkit/webkitdefines.h:
        * webkit/webkitdownload.cpp: Added.
        (_WebKitDownloadPrivate::):
        (_WebKitDownloadPrivate::webkit_download_dispose):
        (_WebKitDownloadPrivate::webkit_download_finalize):
        (_WebKitDownloadPrivate::webkit_download_get_property):
        (_WebKitDownloadPrivate::webkit_download_set_property):
        (_WebKitDownloadPrivate::webkit_download_class_init):
        (_WebKitDownloadPrivate::webkit_download_init):
        (_WebKitDownloadPrivate::webkit_download_new):
        (_WebKitDownloadPrivate::webkit_download_open_stream_for_uri):
        (_WebKitDownloadPrivate::webkit_download_close_stream):
        (_WebKitDownloadPrivate::webkit_download_start):
        (_WebKitDownloadPrivate::webkit_download_cancel):
        (_WebKitDownloadPrivate::webkit_download_get_uri):
        (_WebKitDownloadPrivate::webkit_download_get_network_request):
        (_WebKitDownloadPrivate::webkit_download_set_response):
        (_WebKitDownloadPrivate::webkit_download_get_suggested_filename):
        (_WebKitDownloadPrivate::webkit_download_get_destination_uri):
        (_WebKitDownloadPrivate::webkit_download_set_destination_uri):
        (_WebKitDownloadPrivate::webkit_download_get_state):
        (_WebKitDownloadPrivate::webkit_download_get_total_size):
        (_WebKitDownloadPrivate::webkit_download_get_current_size):
        (_WebKitDownloadPrivate::webkit_download_get_progress):
        (_WebKitDownloadPrivate::webkit_download_get_elapsed_time):
        (_WebKitDownloadPrivate::webkit_download_received_data):
        (_WebKitDownloadPrivate::webkit_download_finished_loading):
        (_WebKitDownloadPrivate::webkit_download_error):
        (_WebKitDownloadPrivate::DownloadClient::DownloadClient):
        (_WebKitDownloadPrivate::DownloadClient::didReceiveResponse):
        (_WebKitDownloadPrivate::DownloadClient::didReceiveData):
        (_WebKitDownloadPrivate::DownloadClient::didFinishLoading):
        (_WebKitDownloadPrivate::DownloadClient::didFail):
        (_WebKitDownloadPrivate::DownloadClient::wasBlocked):
        (_WebKitDownloadPrivate::DownloadClient::cannotShowURL):
        * webkit/webkitdownload.h: Added.
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        * webkitmarshal.list:

2009-03-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

         [Gtk] get the HTTP layout tests going
         https://bugs.webkit.org/show_bug.cgi?id=24259

        Added API to get the response mime type from a frame. We need this
        so we can decide if we need to dump the frame as text or its
        render tree

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:

2009-03-01  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Holger Freyther.

        [Gtk] get the HTTP layout tests going
        https://bugs.webkit.org/show_bug.cgi?id=24259

        Create a WebKitWebHistoryItem for each WebCore::HistoryItem when
        necessary.
        Add necessary API additions for us to be able to dump a WebKitWebHistoryItem

        * webkit/webkitprivate.h:
        * webkit/webkitwebbackforwardlist.cpp:
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_forward_list_with_limit):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_back_list_with_limit):
        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_core_item):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_data):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_target):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_is_target_item):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_children):
        (WebKit::core):
        (WebKit::kit):

2009-03-01  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_get_encoding):
        * webkit/webkitwebview.h: Implement 'encoding' and 'custom-encoding'
        properties as well as webkit_web_view_get_encoding.

2009-03-01  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed simple wording fix for the NEWS file.

        * NEWS:

2009-03-01  Xan Lopez  <xan@gnome.org>

        Add NEWS file to track progress between releases.

        * NEWS: Added.

2009-02-28  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        * webkit/webkitwebview.cpp: Let webkit_web_view_open add file:// if a
        locale path is passed for compatibility, since we used to support that.

2009-02-27  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by David Hyatt.

        Automatically ignore empty requests to avoid crashing. This fixes
        the crash in fast/loader/empty-embed-src-attribute.html.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2009-02-27  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24221
        [GTK] Do not emit load-finished when being disposed

        webkit_web_view_stop_load() is called from dispose() on
        WebKitWebView. This eventually calls postProgressFinishedNotification
        in FrameLoaderClientGtk, which emits load-finished. Add
        a 'disposing' flag to WebView that we can check here, so
        we avoid emitting signals on objects on their way to be
        destroyed.  This fixes a bunch of critical warnings when
        closing a loading WebView.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::postProgressFinishedNotification):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:

2009-02-27  Xan Lopez  <xan@gnome.org>

        Rubber-stamped by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24222
        [GTK] Remove checks for old glib versions

        libsoup, which is a hard dependency, needs at least glib 2.15.3,
        so remove all glib checks for versions older than that.

        * webkit/webkitwebview.cpp:

2009-02-26  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=16947
        [GTK] Missing HTTP Auth challenge

        Add new marshalers list.

        * webkitmarshal.list: Added.

2009-02-26  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24193
        [GTK] Checkbuttons not activated with space

        Do not swallow key events with GtkIMContext for non-editable
        content.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleInputMethodKeydown):

2009-02-26  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24103
        [GTK] Use correct return value for WebView button-release handler

        We are returning whatever the core code tells us it did, but this
        does not play well with the GTK+ model. GTK+ in general expects it
        will see a button-release if it saw a button-press and no
        motion/leave/etc events in between. EventHandler.cpp will, in some
        cases, not handle press but handle release, confusing the parent
        container of the WebView.

        As a workaround return always FALSE for button-release (this is
        the same than the Windows port does).

        * webkit/webkitwebview.cpp:

2009-02-26  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=17585
        [gtk] get|set encoding api

        Add functions to get and set a custom encoding an a view.

        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        (webkit_web_view_set_custom_encoding):
        (webkit_web_view_get_custom_encoding):
        * webkit/webkitwebview.h:

2009-02-23  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22624
        [SOUP][GTK] Need API to get SoupSession from WebKit.

        Add API to get the default soup session.

        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2009-02-23  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=22624
        [SOUP][GTK] Need API to get SoupSession from WebKit.

        Add soup dependency to pc file.

        * webkit.pc.in:

2009-02-23  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Mark Rowe.

        [GTK] Back / Forward history menus are flipped
        https://bugs.webkit.org/show_bug.cgi?id=22694

        Don't call g_list_reverse when returning the back or forward list.

        * tests/main.c:
        (test_webkit_web_back_forward_list_order):
        (main):
        * webkit/webkitwebbackforwardlist.cpp:
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_forward_list_with_limit):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_back_list_with_limit):

2009-02-17  Xan Lopez  <xan@gnome.org>

        Rubber-stamped by Alexey Proskuryakov.

        Restoring change landed in r40715, which was accidentally undone
        by r40918.

        * webkit/webkitwebframe.cpp:

2009-02-12  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=17176
        [GTK] API: hovering-over-link and webkit_web_view_open /_load_foo

        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h: Introduce webkit_web_frame_load_uri,
        webkit_web_frame_load_string, webkit_web_view_load_uri and
        webkit_web_view_load_request and unify implementations.

2009-02-11  Dimitri Dupuis-latour  <dupuislatour@apple.com>

        Stub out InspectorClient::hiddenPanels.

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::hiddenPanels):
        * WebCoreSupport/InspectorClientGtk.h:

2009-02-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix Use toNormalizedRange().

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::clipboard_get_contents_cb):

2009-02-06  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::updateGlobalHistoryRedirectLinks):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2009-02-06  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        Reported by Daniel Macks.

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

        Use positive numbers for the target info IDs, gtk_target_list_add
        casts them to 'guint'. Also just start them from 0, since the
        values are not relevant or magic in any way, they are just used as
        tokens for the user of the API.

        * webkit/webkitwebview.h:

2009-02-06  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

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

        Do not use empty ResourceError errors.

        Rather create bogus but non-null errors, since some codepaths
        expect these. For example, see DocumentLoader::mainReceivedError.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::cancelledError):
        (WebKit::FrameLoaderClient::blockedError):
        (WebKit::FrameLoaderClient::cannotShowURLError):
        (WebKit::FrameLoaderClient::interruptForPolicyChangeError):
        (WebKit::FrameLoaderClient::cannotShowMIMETypeError):
        (WebKit::FrameLoaderClient::fileDoesNotExistError):
        (WebKit::FrameLoaderClient::pluginWillHandleLoadError):

2009-02-06  Xan Lopez  <xan@gnome.org>

        Reviewed by Alexey Proskuryakov.

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

        Use two-arg KURL ctor.

        We are using the one-arg ctor currently, but:

        - It assumes the strings are already encoded, which is not
        necesarily the case for us.

        - The single-argument KURL ctors expect their input to already be
        the output of a previous KURL::parse call, so for the general
        case (ie, random user input) we need to use the two-arg ctor
        anyway.

        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebview.cpp:

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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::documentElementAvailable):
        Stub out documentElementAvailable()
        * WebCoreSupport/FrameLoaderClientGtk.h:
        Ditto.

2009-02-03  Hiroyuki Ikezoe  <poincare@ikezoe.net>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=22988
        [GTK] Need a public method to add a WebKitWebHistoryItem to
        WebKitWebBackForwardList.

        Wrap WebCore::BackForwardList::addItem.

        * tests/main.c:
        (test_webkit_web_back_forward_list_add_item):
        (main):
        * webkit/webkitwebbackforwardlist.cpp:
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_add_item):
        * webkit/webkitwebbackforwardlist.h:

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * webkit/webkitwebview.cpp:

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * webkit/webkitwebframe.cpp:

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Track redirects in global history.

        Keep GTK building.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):
        (WebKit::FrameLoaderClient::updateGlobalHistoryForRedirectWithoutHistoryItem):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientGtk.h:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Update for changes to WebCore.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createPlugin):
        (WebKit::FrameLoaderClient::createJavaAppletWidget):
        * WebCoreSupport/FrameLoaderClientGtk.h:

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.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::forceLayout):
        * webkit/webkitwebview.cpp:

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):

2009-01-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein

        Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::savePlatformDataToCachedFrame):
        (WebKit::FrameLoaderClient::transitionToCommittedFromCachedFrame):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2009-01-25  Darin Adler  <darin@apple.com>

        Try to fix GTK build.

        * webkit/webkitwebview.cpp: Added include of FloatQuad.h.

2009-01-13  Alexander V. Butenko  <alex@digiqube.com>

        Reviewed by Holger Freyther.

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

        Fix crash on WebView dispose stage.

        Add null checks to webkit_web_view_set_scroll_adjustments  and
        webkit_web_view_get_accessible as they get called from within
        the dispose.

        * webkit/webkitwebview.cpp:

2009-01-11  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        Use NULL instead of 0 when dealing with pointers, as agreed for
        the coding style of the WebKit GTK port for its GTK+ specific
        files.

        * webkit/webkitwebview.cpp:

2009-01-11  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        Add padding to the class structs to avoid breaking ABI each time
        we add stuff there.

        * webkit/webkitnetworkrequest.h:
        * webkit/webkitwebbackforwardlist.h:
        * webkit/webkitwebhistoryitem.h:
        * webkit/webkitwebnavigationaction.h:
        * webkit/webkitwebpolicydecision.h:
        * webkit/webkitwebview.h:

2009-01-09  Benjamin Otte  <otte@gnome.org>

        Reviewed by Holger Freyther.

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

        make the finalize function the dispose function. Not releasing held
        objects in dispose can cause crashers later.

        * webkit/webkitwebview.cpp:

2009-01-09  Benjamin Otte  <otte@gnome.org>

        Reviewed by Holger Freyther.

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

        Remove broken code that uses a fallback. The previous code did 2
        policy decisions which caused crashes.
        Download is still notImplemented();

        * webkit/webkitwebpolicydecision.cpp:
        (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_download):

2009-01-03  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        [GTK] Need a public method to reload view bypassing cache
        https://bugs.webkit.org/show_bug.cgi?id=19815

        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

        Add webkit_web_view_reload_bypass_cache.

2009-01-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Maciej Stachowiak.

        Add private API to get the number of active animations of
        a frame. This is required by the DumpRenderTree utility.

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Fix build

        * WebCoreSupport/ChromeClientGtk.h:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Build fix for contentsSizeChanged

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::contentsSizeChanged):
        * WebCoreSupport/ChromeClientGtk.h:

2009-01-04  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Make the gtk port build with the new fixedLayoutSize feature

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):

2009-01-03  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        [GTK] Fix the reference counting of WebKitWebFrames

        The ownership is the following: WebKitWebView owns a WebCore::Page.
        WebKitWebView is creating one WebKitWebFrame which will be the
        mainFrame of the WebCore::Page (having the reference on the Frame).

        The FrameLoaderClient has the reference of the WebKitWebFrame for
        the main frame and also any other frame. This means when the
        WebCore::Frame goes away the FrameLoaderClient will go away which
        will normally remove the last reference of the WebKitWebFrame. Because
        an API user might have g_object_ref'ed the WebKitWebFrame null
        checks had to be added to WebKitWebFrame.

        For WebCore::Frames created by the FrameLoaderClient the ownership
        will be passed down to the FrameTree, the WebKitWebFrame is not holding
        a reference to the WebCore::Frame.

        Do not g_object_unref the mainFrame in the destructor of the
        WebKitWebFrame as this will happen from within the WebCore::Page
        destruction. Do not hold a reference to the WebCore::Frame (circle) in
        WebKitWebFrame, add null checks as the WebCore::Frame might have gone
        away. Do not keep track of the FrameLoaderClient in the private
        structures as it was mostly unusued.

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

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::frameLoaderDestroyed):
        (WebKit::FrameLoaderClient::createFrame):
        * tests/main.c: Add test case.
        (test_webkit_web_frame_create_destroy):
        (test_webkit_web_frame_lifetime):
        (main):
        * webkit/webkitprivate.cpp:
        (WebKit::core):
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebview.cpp:

2009-01-02  Holger Hans Peter Freyther  <zecke@selfish.org>

        Unreviewed build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:

2008-12-31  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Nikolas Zimmermann.

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

        Add section information for View, Frame, Settings, HistoryItem, BackForwardList, WindowFeatures and Inspector

        Add section information and informal examples for WebKitWebView,
        WebKitWebFrame, WebKitWebSettings, WebKitWebNetworkRequest,
        WebKitWebWindowFeatures, WebKitWebHistoryItem,
        WebKitWebBackForwardList and WebKitWebInspector.

        * docs/webkitgtk-sections.txt: Decide to not document some bits
        * webkit/webkitnetworkrequest.cpp:
        * webkit/webkitwebbackforwardlist.cpp:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebhistoryitem.cpp:
        * webkit/webkitwebhistoryitem.h:
        * webkit/webkitwebinspector.cpp:
        * webkit/webkitwebsettings.cpp:
        * webkit/webkitwebsettings.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebwindowfeatures.cpp:

2008-12-21  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=16092
        [GTK] Middle-mouse click should allow opening a URL in a new tab

        Add mouse button and keyboard state modifiers info to navigation action.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * webkit/webkitwebnavigationaction.cpp:
        (_WebKitWebNavigationActionPrivate::):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_property):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_set_property):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_class_init):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_button):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_modifier_state):
        * webkit/webkitwebnavigationaction.h:

2008-12-19  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=16562
        [gtk] Implement WebPolicyDelegate methods

        Original work by Pierre-Luc Beaudoin. Final touches by Gustavo
        Noronha.

        This implements the delegates methods of WebPolicyDelegate.
        Since Gtk+/C doesn't have delegate methods, they are replaced with
        signals.

        A new object WebKitWebPolicyDecision allows the browser to delay its
        response in certain cases. WebKitWebNavigationAction contains the
        information about what caused a navigation request.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):
        (WebKit::FrameLoaderClient::~FrameLoaderClient):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForMIMEType):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::FrameLoaderClient::cancelPolicyCheck):
        (WebKit::FrameLoaderClient::canShowMIMEType):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        * webkit/webkit.h:
        * webkit/webkitdefines.h:
        * webkit/webkitprivate.cpp:
        (WebKit::kit):
        (WebKit::core):
        * webkit/webkitprivate.h:
        * webkit/webkitwebnavigationaction.cpp: Added.
        (_WebKitWebNavigationActionPrivate::):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_property):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_set_property):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_init):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_finalize):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_class_init):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_reason):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_set_reason):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_get_original_uri):
        (_WebKitWebNavigationActionPrivate::webkit_web_navigation_action_set_original_uri):
        * webkit/webkitwebnavigationaction.h: Added.
        * webkit/webkitwebpolicydecision.cpp: Added.
        (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_class_init):
        (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_init):
        (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_new):
        (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_use):
        (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_ignore):
        (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_download):
        (_WebKitWebPolicyDecisionPrivate::webkit_web_policy_decision_cancel):
        * webkit/webkitwebpolicydecision.h: Added.
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-12-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - stub out FrameLoaderClient::shouldUseCredentialStorage().

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::shouldUseCredentialStorage):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2008-12-18  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        Stub out FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2008-12-13  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Cameron Zwarich.

        [GTK] Fix crash with LayoutTests/fast/loader/frame-creation-removal.html

        Call WebCore::Frame::init after the frame has been given
        a name and been added to the FrameTree of the parent.

        Removing the call to init is fine as FrameLoaderClientGtk::createFrame
        is the only user of webkit_web_frame_init_with_web_view and is already
        calling WebCore::Frame::init.

        * webkit/webkitwebframe.cpp:

2008-12-13  Adam Bergkvist <adam.bergkvist@ericsson.com>

        Reviewed by Holger Freyther.

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

        Check for GTK version >= 2.14.0 before using gtk_test_init.

        * tests/main.c:
        (main):

2008-12-13  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Darin Adler.

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

        Implement animation and transition pausing as needed by DumpRenderTree.

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:

2008-11-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Simon Hausmann.

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

        Make webkit_web_view_set_window_features internal

        Calling this method will not result in a notify::window-features
        signal being emitted. This would allow replacing a
        WebKitWebWindowFeature on a WebKitWebView without anyone noticing
        and the client code would monitor the wrong object.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::createWindow):
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

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/ChromeClientGtk.h:
        (WebKit::ChromeClient::formStateDidChange):

2008-12-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric Seidel.

        [Gtk+] Use glib's unit test facilities to test the WebKit/Gtk+ API

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

        Add the skeleton to WebKit/gtk/tests and integrate that into the
        buildsystem. Testing support was added in glib 2.16. For versions
        using glib < 2.16 we compile an empty application.

        * tests/main.c: Added. https://bugs.webkit.org/show_bug.cgi?id=21837
        will be the first consumer.
        (main):

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

        * webkit/webkitwebview.cpp:

2008-12-01  Xan Lopez  <xan@gnome.org>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=22553
        Remove unneeded GObject casts.

        Remove unneeded casts to GObject in functions that take a gpointer
        argument.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::setWindowRect):
        (WebKit::ChromeClient::createWindow):
        (WebKit::ChromeClient::setToolbarsVisible):
        (WebKit::ChromeClient::toolbarsVisible):
        (WebKit::ChromeClient::setStatusbarVisible):
        (WebKit::ChromeClient::statusbarVisible):
        (WebKit::ChromeClient::setScrollbarsVisible):
        (WebKit::ChromeClient::scrollbarsVisible):
        (WebKit::ChromeClient::setMenubarVisible):
        (WebKit::ChromeClient::menubarVisible):
        (WebKit::ChromeClient::setToolTip):
        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::createPage):
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebwindowfeatures.cpp:
        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new_from_core_features):

2008-11-29  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=17122
        [GTK] Bad font default settings

        Implement a property "enforce-96-dpi" in WebKitWebSettings
        that can be enabled to force the view to assume 96 DPI.

        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::):
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        (_WebKitWebSettingsPrivate::webkit_web_settings_set_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_get_property):
        * webkit/webkitwebview.cpp:

2008-11-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Nikolas Zimmermann.

        Simplify the code. There is no reason to have code like
        if (true) return false; which is using temporary variables.

        * webkit/webkitwebview.cpp:

2008-11-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Nikolas Zimmermann.

        Remove bogus null checks. The WebKitWebView own's a WebCore::Page
        which is owning a WebCore::ChromeClient. There is no way that a
        WebCore::ChromeClient is still around when the WebKitWebView is gone.

        m_webView can only be null when a ChromeClient gets constructed with
        a null WebKitWebView which is not allowed.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::ChromeClient):
        (WebKit::ChromeClient::windowRect):
        (WebKit::ChromeClient::setWindowRect):
        (WebKit::ChromeClient::pageRect):
        (WebKit::ChromeClient::focus):
        (WebKit::ChromeClient::unfocus):
        (WebKit::ChromeClient::show):
        (WebKit::ChromeClient::setToolbarsVisible):
        (WebKit::ChromeClient::toolbarsVisible):
        (WebKit::ChromeClient::setStatusbarVisible):
        (WebKit::ChromeClient::statusbarVisible):
        (WebKit::ChromeClient::setScrollbarsVisible):
        (WebKit::ChromeClient::setMenubarVisible):
        (WebKit::ChromeClient::menubarVisible):
        (WebKit::ChromeClient::canTakeFocus):
        (WebKit::ChromeClient::repaint):
        (WebKit::ChromeClient::scroll):
        (WebKit::ChromeClient::platformWindow):

2008-11-28  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed and slightly modified by Holger Freyther.

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

        ChromeClient::createWindow and friends need to be implemented

        Code from Gustavo Noronha and Marco Barisione
        <marco.barisione@collabora.co.uk> in this change set.

        Implemented all the ChromeClient interfaces needed to have new
        window creation functioning and exposed to client code. We
        implemented a mirror GObject to the WindowFeatures object provided
        by WebCore.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::windowRect):
        (WebKit::ChromeClient::setWindowRect):
        (WebKit::ChromeClient::unfocus):
        (WebKit::ChromeClient::createWindow):
        (WebKit::ChromeClient::show):
        (WebKit::ChromeClient::setToolbarsVisible):
        (WebKit::ChromeClient::toolbarsVisible):
        (WebKit::ChromeClient::setStatusbarVisible):
        (WebKit::ChromeClient::statusbarVisible):
        (WebKit::ChromeClient::setScrollbarsVisible):
        (WebKit::ChromeClient::scrollbarsVisible):
        (WebKit::ChromeClient::setMenubarVisible):
        (WebKit::ChromeClient::menubarVisible):
        (WebKit::ChromeClient::setResizable):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::FrameLoaderClient::dispatchShow):
        (WebKit::FrameLoaderClient::dispatchCreatePage):
        * webkit/webkit.h:
        * webkit/webkitdefines.h:
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:
        * webkit/webkitwebwindowfeatures.cpp: Added.
        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_class_init):
        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_init):
        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_finalize):
        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_set_property):
        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_get_property):
        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new):
        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_new_from_core_features):
        (_WebKitWebWindowFeaturesPrivate::webkit_web_window_features_equal):
        * webkit/webkitwebwindowfeatures.h: Added.

2008-11-24  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        http://bugs.webkit.org/show_bug.cgi?id=15643

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::isSelectTrailingWhitespaceEnabled):
        * WebCoreSupport/EditorClientGtk.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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::updateGlobalHistory): Remove argument.
        * WebCoreSupport/FrameLoaderClientGtk.h: Ditto.

2008-11-24  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=17122
        [GTK] Bad font default settings

        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        Use default font size 12 instead of 10

2008-11-24  Zan Dobersek  <zandobersek@gmail.com>

        Reviewed by Holger Freyther.

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

        Implement a semi-private function for adding a directory to
        PluginDatabase's paths.

        * webkit/webkitprivate.h:
        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::webkit_web_settings_add_extra_plugin_directory):

2008-11-23  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Sam Weinig.

        Add gtk-doc configuration/source for the WebKit/Gtk+ Reference Manual

        These files will be used by gtk-doc to generate the documentation. They
        contain information how to group the symbols of our API, which objects
        to inspect during the generation of the manual and how to display the
        manual.

        * docs/webkitgtk-docs.sgml: Added.
        * docs/webkitgtk-overrides.txt: Added.
        * docs/webkitgtk-sections.txt: Added.
        * docs/webkitgtk.types: Added.

2008-11-23  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Sam Weinig.

        Make gtk-doc happy with the existing API documentation

        - Mark the *Private pointers in the struct private
        - Use Returns: where gtk-doc wants us to
        - Fix the parameters to make gtk-doc happy
        - Fix signal references

        * webkit/webkitnetworkrequest.h:
        * webkit/webkitwebbackforwardlist.cpp:
        * webkit/webkitwebbackforwardlist.h:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebhistoryitem.cpp:
        * webkit/webkitwebinspector.cpp:
        (_WebKitWebInspectorPrivate::webkit_web_inspector_class_init):
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-11-19  Darin Fisher  <darin@chromium.org>

        Bustage fix.

        https://bugs.webkit.org/show_bug.cgi?id=22373
        Ports busted by addition of ScriptValue.{h,cpp}

        * webkit/webkitwebview.cpp:

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.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):

2008-11-16  Christian Dywan  <christian@twoasts.de>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=22207
        [Gtk] Font sizes are not handled properly when updated at runtime

        * webkit/webkitwebview.cpp: Move the DPI/ conversion into a
        helper function and apply the logic in the notification callback.

2008-11-06  Alp Toker  <alp@nuanti.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=22047
        GTK: Add support for multiple file selection in the file upload control

        Implemented with GtkFileChooser.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::runOpenPanel):

2008-11-03  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Move more files into the runtime subdirectory of JavaScriptCore.

        * webkit/webkitprivate.cpp:

2008-11-03  Alp Toker  <alp@nuanti.com>

        Reviewed by Holger Freyther.

        Deprecate flawed webkit_web_frame_new() function. This would never
        have worked properly when used outside WebCore since Frame::create()
        can only be called without an owner element once in the lifetime of a
        Page and would result in assertions, leaks and an unusable WebView
        instance.

        Frame creation may be exposed in API some time later via the DOM
        binding but probably not in the WebKit GTK+ core API.

        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebframe.h:

2008-11-03  Alp Toker  <alp@nuanti.com>

        Reviewed by Holger Freyther.

        Redundant scrollbars appear in frames where they shouldn't be visible
        eg. embedded Google adverts.

        Call setCanHaveScrollbars() when necessary. The Mac and Win ports
        already have this but it was missing in FrameLoaderClientGtk.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):

2008-11-03  Alp Toker  <alp@nuanti.com>

        Rubber-stamped by Holger Freyther.

        Sync WebKit GTK+ default UA version string to 528.5+. (We're still
        doing this manually!)

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::composeUserAgent):

2008-10-31  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=22018
        enable-developer-extras doesn't toggle WebInspector

        * webkit/webkitwebview.cpp:
        Add missing 'if' in notification for 'enable-developer-extras'.

2008-10-30  Alp Toker  <alp@nuanti.com>

        Reviewed by Dave Hyatt.

        Fix GIF animations. WebCore will not update animated GIFs if
        the WebView is marked offscreen so we need to call
        frameView->setParentVisible() when necessary like the Mac and Win
        ports do. Regression was introduced around r37155 during the
        HostWindow refactor.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):

2008-10-30  Alp Toker  <alp@nuanti.com>

        Rubber-stamped by Holger Freyther.

        Fix typo in recently added web inspector signal. dettach -> detach.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::detachWindow):
        * webkit/webkitwebinspector.cpp:
        (_WebKitWebInspectorPrivate::webkit_web_inspector_class_init):

2008-10-30  Alp Toker  <alp@nuanti.com>

        Fix version comments for the web inspector added in r37982. Available
        since 1.0.3, not 1.0.2.

        * webkit/webkitwebinspector.cpp:
        (_WebKitWebInspectorPrivate::webkit_web_inspector_class_init):
        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        * webkit/webkitwebview.cpp:

2008-10-29  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed and slightly changed by Holger Freyther.

        Implemented a new WebKitWebInspector class to provide a GObject
        API for the Web Inspector. Also implemented InspectorClient.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::notifyWebViewDestroyed):
        (WebKit::InspectorClient::InspectorClient):
        (WebKit::InspectorClient::inspectorDestroyed):
        (WebKit::InspectorClient::webViewDestroyed):
        (WebKit::InspectorClient::createPage):
        (WebKit::InspectorClient::showWindow):
        (WebKit::InspectorClient::closeWindow):
        (WebKit::InspectorClient::attachWindow):
        (WebKit::InspectorClient::detachWindow):
        (WebKit::InspectorClient::inspectedURLChanged):
        * WebCoreSupport/InspectorClientGtk.h:
        * webkit/webkit.h:
        * webkit/webkit-marshal.list:
        * webkit/webkitdefines.h:
        * webkit/webkitprivate.h:
        * webkit/webkitwebinspector.cpp: Added.
        (_WebKitWebInspectorPrivate::webkit_inspect_web_view_request_handled):
        (_WebKitWebInspectorPrivate::webkit_web_inspector_class_init):
        (_WebKitWebInspectorPrivate::webkit_web_inspector_init):
        (_WebKitWebInspectorPrivate::webkit_web_inspector_finalize):
        (_WebKitWebInspectorPrivate::webkit_web_inspector_set_property):
        (_WebKitWebInspectorPrivate::webkit_web_inspector_get_property):
        (_WebKitWebInspectorPrivate::webkit_web_inspector_set_web_view):
        * webkit/webkitwebinspector.h: Added.
        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::):
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        (_WebKitWebSettingsPrivate::webkit_web_settings_set_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_get_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_copy):
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-10-27  Michael Tross  <michael@tross.org>

        Reviewed by Alp Toker. Landed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=21827
        [GTK] Fix memory leak in webkit_web_view_load_string

        * webkit/webkitwebview.cpp:

2008-10-24  Sam Weinig  <sam@webkit.org>

        Fix the Gtk build.

        * WebCoreSupport/ChromeClientGtk.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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::runOpenPanel):
        * WebCoreSupport/ChromeClientGtk.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/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::populateSetting): Not implemented.
        (WebKit::InspectorClient::storeSetting): Ditto.
        (WebKit::InspectorClient::removeSetting): Ditto.
        * WebCoreSupport/InspectorClientGtk.h:

2008-10-22  Alp Toker  <alp@nuanti.com>

        Build fix for older GTK+ versions where GTK_TYPE_TARGET_LIST isn't
        defined.

        * webkit/webkitwebview.cpp:

2008-10-22  Alp Toker  <alp@nuanti.com>

        Reviewed by Adam Roben.

        Avoid critical warnings on older GTK+ versions (2.8) by not checking
        for GTK+ setting properties when we know they don't exist.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::inputMethodsMenuItem):
        (WebKit::unicodeMenuItem):

2008-10-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove FrameLoaderClient::detachedFromParent4.  It is no longer used by any port.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.h:

2008-10-20  Alp Toker  <alp@nuanti.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=21303
        [GTK] Scrolling glitches

        Implement a buffering scheme to avoid full repaints when scrolling
        views or subframes significantly improving scrolling performance.

        Improve rendering performance by coalescing large numbers of small
        repaints.

        Also fixes long-running issues with scrollbar positioning and frame
        invalidation.

        Rendering in the GTK+ port should be more similar to other ports after
        these changes.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::repaint):
        (WebKit::ChromeClient::scroll):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::forceLayout):
        * webkit/webkitwebview.cpp:

2008-10-17  Luke Kenneth Casson Leighton  <lkcl@lkcl.net>

        Reviewed by Mark Rowe. Landed by Jan Alonzo.

        https://bugs.webkit.org/show_bug.cgi?id=20403
        [Gtk] Segfault after a table with an iframe is attempted to be added twice to DOM model with javascript

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::frameLoaderDestroyed):
        (WebKit::FrameLoaderClient::detachedFromParent4):

2008-10-06  David Hyatt  <hyatt@apple.com>

        Enable viewless Mac WebKit to paint some basic pages.

        Reviewed by Sam Weinig

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2008-10-03  David Hyatt  <hyatt@apple.com>

        Fix Gtk bustage from use of containingWindow() over on the WebKit side.  Replace with HostWindow use.

        * webkit/webkitwebview.cpp:

2008-10-03  David Hyatt  <hyatt@apple.com>

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

        Remove "containingWindow()/setContainingWindow()" from Widget.  HostWindow covers this now.

        Reviewed by Dan Bernstein & Darin Adler

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):

2008-10-03  Alp Toker  <alp@nuanti.com>

        Remove some left-over GTK+ includes. No change in functionality.

        * webkit/webkitwebhistoryitem.h:

2008-10-03  Alp Toker  <alp@nuanti.com>

        Build fix following r37234. Remove addToDirtyRegion from the header
        too.

        * WebCoreSupport/ChromeClientGtk.h:

2008-10-03  David Hyatt  <hyatt@apple.com>

         Remove addToDirtyRegion.

        Reviewed by Oliver Hunt

        * WebCoreSupport/ChromeClientGtk.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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::repaint):
        (WebKit::ChromeClient::scroll):
        * WebCoreSupport/ChromeClientGtk.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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::windowToScreen):
        (WebKit::ChromeClient::screenToWindow):
        * WebCoreSupport/ChromeClientGtk.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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::repaint):
        * WebCoreSupport/ChromeClientGtk.h:

2008-09-16  Alp Toker  <alp@nuanti.com>

        Suggested by Dave Hyatt.

        Build fix and cleanup. Rename ScrollBar to Scrollbar.

        * webkit/webkitwebview.cpp:

2008-09-13  Adrien Nader  <camaradetux@gmail.com>

        Gtk build fix, not reviewed.

        * webkit/webkitwebview.cpp:

2008-09-10  Alp Toker  <alp@nuanti.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=17267
        [GTK] Primary selection/clipboard support

        Implement primary selection support (copying only, no paste yet).

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::clipboard_get_contents_cb):
        (WebKit::clipboard_clear_contents_cb):
        (WebKit::EditorClient::respondToChangedSelection):

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.

        * webkit/webkitprivate.cpp:
        (webkit_init):

2008-09-05  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=18346
        [GTK] Remove build warnings

        Removed/commented code that is not (yet) used, and reordered
        member variables initialization for FrameLoaderClient, so that the
        compiler is happy and prints less warnings when building.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):

2008-09-03  Alp Toker  <alp@nuanti.com>

        Build fix following r36073. Include config.h where necessary.

        * WebCoreSupport/PasteboardHelperGtk.cpp:
        * webkit/webkitversion.cpp:

2008-09-01  Alp Toker  <alp@nuanti.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=19939
        [GTK] webkit_web_history_item_get_title() fails with assertion

        Make sure newly constructed WebHistoryItem objects wrap a WebCore
        history item when necessary. Avoid G_PARAM_CONSTRUCT since it destroys
        history data -- use WEBKIT_PARAM flags instead as they do the right
        thing. This restores history functionality.

        Also use CString to simplify UTF-8 string management.

        * webkit/webkitwebbackforwardlist.cpp:
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_forward_list_with_limit):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_back_list_with_limit):
        No need to initialize the vector with a size since it's cleared by the
        callee.
        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_finalize):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_class_init):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_core_item):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_data):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_alternate_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_set_alternate_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_uri):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_original_uri):

2008-08-27  Adrien Nader  <camaradetux@gmail.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20099
        [GTK] SHIFT+PAGE_UP/DOWN doesn't extend selection

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeyboardEvent):

2008-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/6134133> - Crash when loading large movie as a standalone document

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::pluginWillHandleLoadError): Stubbed for now
        * WebCoreSupport/FrameLoaderClientGtk.h:

2008-08-18  Alp Toker  <alp@nuanti.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=20350
        [GTK] Get DumpRenderTree working

        Add a private function to WebFrame to dump the render tree as required
        for the DumpRenderTree testing tool.

        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:

2008-08-12  Timothy Hatcher  <timothy@apple.com>

        Add a stub for InspectorClient::setAttachedWindowHeight.

        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::setAttachedWindowHeight):
        Call notImplemented().
        * WebCoreSupport/InspectorClientGtk.h:

2008-08-10  Alp Toker  <alp@nuanti.com>

        Remove leftover qmake/GTK+ build files.

        * webkit/headers.pri: Removed.

2008-08-02  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Eric Seidel.

        Remove webkit-marshal.list, which was made obsolete in #19742

        * webkit/webkit-marshal.list: Removed.

2008-08-01  Wouter Bolsterlee  <uws@xs4all.nl>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20035
        [GTK] Fix return value for webkit_web_view_go_to_back_forward_item()

        * webkit/webkitwebview.cpp:

2008-07-30  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Holger.

        http://bugs.webkit.org/show_bug.cgi?id=19742
        [GTK] Auto generate webkitmarshal.list

        Auto generate webkitmarshal.list from source files to reduce the
        number of conflicts when merging git branches or when applying
        patches.
        Also rename webkit-marshal.* to webkitmarshal.* for consistency.

        * webkit/webkitwebframe.cpp: Include webkitmarshal.h instead of
         webkit-marshal.h.
        * webkit/webkitwebview.cpp: Ditto.

2008-07-30  Gustavo Noronha Silva  <gns@gnome.org>

        Reviewed by Sam.

        https://bugs.webkit.org/show_bug.cgi?id=20205
        Typo in comment for bracer ending block

        * webkit/webkitprivate.cpp: Typo fix in comment for the brace
         that ends the WebKit namespace; WebCore -> WebKit

2008-07-26  Mark Rowe  <mrowe@apple.com>

        Build fix.  Changes to accommodate newly named/signatured loading methods in WebCore.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):

2008-07-17  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=19813
        [GTK] WebKit crashes on invalid settings notify callback

        * webkit/webkitwebview.cpp: Disconnect in webkit_web_view_finalize

2008-07-08  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Reviewed by Christian Dywan.

        Replace 'const' with G_CONST_RETURN macro to make it flexible to
        disable constness

        * webkit/webkitnetworkrequest.cpp:
        * webkit/webkitnetworkrequest.h:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebhistoryitem.cpp:
        * webkit/webkitwebhistoryitem.h:

2008-06-18  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=19171
        [GTK] GTypes for enumerations

        Generate GTypes for public enumerations so they can be used as
        properties.

        * GNUmakefile.am: Generate webkit-enum-types.cpp and
        webkit-enum-types.h.

2008-06-17  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp.

        [GTK] WebKitWebHistoryItem needs properties
        https://bugs.webkit.org/show_bug.cgi?id=19558

        Implement properties matching the existing accessors.

        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_class_init):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_set_property):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_property):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_set_alternate_title):

2008-06-15  Darin Adler  <darin@apple.com>

        - give Frame object functions shorter names: scriptProxy() -> script(),
          selectionController() -> selection(), animationController() -> animation()

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeyboardEvent):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::windowObjectCleared):
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebview.cpp:

2008-06-15  Darin Adler  <darin@apple.com>

        - undo bogus renaming done by the script

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * webkit/webkitnetworkrequest.h:
        * webkit/webkitwebbackforwardlist.h:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebhistoryitem.h:
        * webkit/webkitwebsettings.h:

2008-06-15  Darin Adler  <darin@apple.com>

        - new names for a few key JavaScriptCore files

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * webkit/webkitnetworkrequest.h:
        * webkit/webkitwebbackforwardlist.h:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebhistoryitem.h:
        * webkit/webkitwebsettings.h:

2008-06-15  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        [GTK] Property setters do not call g_object_notify()
        https://bugs.webkit.org/show_bug.cgi?id=18405

        * webkit/webkitwebview.cpp:

2008-06-15  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        Tiny documentation fix, s/capacity/limit

        * webkit/webkitwebbackforwardlist.cpp:

2008-06-14  Darin Adler  <darin@apple.com>

        Rubber stamped by Sam.

        - new names for kjs_binding.h and kjs_proxy.h

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * webkit/webkitwebframe.cpp:

2008-06-14  Darin Adler  <darin@apple.com>

        - fix build

        * webkit/webkitwebframe.cpp: Remove a bogus release() call.

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

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createDocumentLoader): Use create instead of new.
        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_new): Ditto.
        (webkit_web_frame_init_with_web_view): Ditto.

2008-06-13  Darin Adler  <darin@apple.com>

        - try to fix build

        * WebCoreSupport/FrameLoaderClientGtk.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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNewWindowAction):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2008-06-10  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker and Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=16676
        Apply GTK coding style to WebKit Gtk public headers

        * webkit/webkitnetworkrequest.h:
        * webkit/webkitwebbackforwardlist.h:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebhistoryitem.h:
        * webkit/webkitwebsettings.h:
        * webkit/webkitwebview.h:

2008-06-07  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Confirmed by Christian Dywan.

        Gtk build fix for r34432

        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_history_item_add):
        (_WebKitWebHistoryItemPrivate::webkit_history_item_remove):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_dispose):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_core_item):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_data):
        (WebKit::core):

2008-06-07  Darin Adler  <darin@apple.com>

        - try to fix build after HistoryItem changes

        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new): Use HistoryItem::create.
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_data): Ditto. I also
        believe this fixes a memory leak in the old version.

2008-06-07  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=17324
        Remove PLATFORM ifdefs from ContextMenu.cpp

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::ContextMenuClient::ContextMenuClient):
        (WebKit::ContextMenuClient::contextMenuDestroyed):
        (WebKit::inputMethodsMenuItem):
        (WebKit::):
        (WebKit::insertControlCharacter):
        (WebKit::unicodeMenuItem):
        (WebKit::ContextMenuClient::getCustomMenuFromDefaultItems):
        * WebCoreSupport/ContextMenuClientGtk.h:
        * webkit/webkitwebview.cpp:

2008-06-05  Alp Toker  <alp@nuanti.com>

        Add 'Since' documentation for API versioning functions.

        * webkit/webkitversion.cpp:

2008-06-05  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=14141
        Please add a version to the Gtk port

        * webkit/webkit.h:
        * webkit/webkitversion.cpp: Added.
        * webkit/webkitversion.h.in: Added.
        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        * webkit/webkitwebview.cpp:

2008-06-01  Alp Toker  <alp@nuanti.com>

        Suggested by Christian Dywan.

        Use float literals for zoom values and improve documentation wording.

        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        * webkit/webkitwebview.cpp:

2008-06-01  Alp Toker  <alp@nuanti.com>

        Reviewed by Oliver.

        Remove webkit_web_view_go_backward(),
        webkit_web_view_can_go_backward(). These have been obsoleted by
        the back() versions for quite a while.

        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-05-31  Alp Toker  <alp@nuanti.com>

        Fix inconsistent zoom docs and enum name landed in r34249. Issue
        noticed by Marco Barisione.

        * webkit/webkitwebview.cpp:

2008-05-30  Carlos Martín Nieto  <carlos@cmartin.tk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18383
        [GTK] The "hovering-over-link" signal arguments aren't documented.

        * webkit/webkitwebview.cpp:

2008-05-29  Marco Barisione  <marco@collabora.co.uk>

        Reviewed (and tweaked) by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18281
        [GTK] add functions to set/get the zoom level

        * webkit/webkitwebsettings.cpp:
        (_WebKitWebSettingsPrivate::):
        (_WebKitWebSettingsPrivate::webkit_web_settings_class_init):
        (_WebKitWebSettingsPrivate::webkit_web_settings_set_property):
        (_WebKitWebSettingsPrivate::webkit_web_settings_get_property):
        * webkit/webkitwebview.cpp: Add functions to get and set the zoom
        level.
        * webkit/webkitwebview.h: Ditto.
        * webkit/webkitprivate.h:

2008-05-28  Alp Toker  <alp@nuanti.com>

        Reviewed by Alexey Proskuryakov.

        http://bugs.webkit.org/show_bug.cgi?id=18704
        [gtk] cannot type letters with dead keys in textarea

        http://bugs.webkit.org/show_bug.cgi?id=14120
        [GDK] Support input methods

        Add support for input method composition.

        Remove some old hacks so we handle input method events more
        consistently.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::imContextCommitted):
        (WebKit::imContextPreeditChanged):
        (WebKit::EditorClient::setInputMethodState):
        (WebKit::EditorClient::respondToChangedSelection):
        (WebKit::EditorClient::handleInputMethodKeydown):
        (WebKit::EditorClient::EditorClient):
        (WebKit::EditorClient::~EditorClient):
        (WebKit::EditorClient::textFieldDidBeginEditing):
        (WebKit::EditorClient::textFieldDidEndEditing):
        (WebKit::EditorClient::textDidChangeInTextField):
        (WebKit::EditorClient::doTextFieldCommandFromEvent):
        * webkit/webkitwebview.cpp:

2008-05-25  Alp Toker  <alp@nuanti.com>

        Reviewed by Niko.

        Drop WebView focus when the widget is focused out.

        * webkit/webkitwebview.cpp:

2008-05-25  Sriram Neelakandan  <sriram.neelakandan@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18935
        [Gtk] Plugin Load crashes with NP_FULL mode

        Fix crash due to uninitialized variable.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):

2008-05-24  Alp Toker  <alp@nuanti.com>

        https://bugs.webkit.org/show_bug.cgi?id=18825
        webkitgtk fails to build from source: "Database Tracker" has not been declared

        GTK+ fix for building without database support.
        exceededDatabaseQuota() still needs to be present, just a no-op.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::exceededDatabaseQuota):

2008-05-23  Alp Toker  <alp@nuanti.com>

        GTK+ fixes for building without database support.

        * WebCoreSupport/ChromeClientGtk.cpp:

2008-05-19  Alp Toker  <alp@nuanti.com>

        Reviewed by Anders and Beth.

        http://bugs.webkit.org/show_bug.cgi?id=16495
        [GTK] Accessibility support with ATK/AT-SPI

        Initial ATK/AT-SPI accessibility support for the GTK+ port.

        * webkit/webkitwebview.cpp:

2008-05-06  Christian Dywan  <christian@twotoasts.de>

        Rubber stamped by Alp.

        Back out 17626. It wasn't ready for commit.

        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-05-01  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=14750
        Added support for NPAPI plugins on Gtk and Qt-x11 ports.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):
        (WebKit::FrameLoaderClient::committedLoad):
        (WebKit::FrameLoaderClient::createPlugin):
        (WebKit::FrameLoaderClient::redirectDataToPlugin):
        (WebKit::FrameLoaderClient::finishedLoading):
        (WebKit::FrameLoaderClient::setMainDocumentError):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2008-04-30  Sean Egan  <seanegan@gmail.com>

        Reviewed and modified by Holger.

        https://bugs.webkit.org/show_bug.cgi?id=17626
        Support setting background color and a 16-bit alpha channel.

        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-04-24  Dan Bernstein  <mitz@apple.com>

        - build fix

        * webkit/webkitwebview.cpp:

2008-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Change some String arguments to be const references instead.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::shouldInsertText):
        * WebCoreSupport/EditorClientGtk.h:

2008-04-23  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        Emit a warning about an unknown setting only if it is
        not a valid property. Otherwise applications can't
        subclass WebKitWebSettings to add new properties.

        * webkit/webkitwebview.cpp:

2008-04-20  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=18578
        Share the printing code between the Gtk and the Qt port

        Share the printing code between the Gtk and the Qt port
        and added printing to the Qt WebKit API.

        * webkit/webkitwebframe.cpp: Removed PrintContext in favour of
        page/Printcontext.cpp/h

2008-04-19  Alp Toker  <alp@nuanti.com>

        Reviewed by Maciej.

        Enable visited link tracking by default at startup.

        With this patch, the GTK+ port rendering of Acid3 now matches the
        reference page.

        * webkit/webkitprivate.cpp:
        (WebKit::core):
        (webkit_init):

2008-04-11  Mark Rowe  <mrowe@apple.com>

        Gtk build fix after r32231.

        * webkit/webkitwebview.cpp: Update to use contentRenderer.

2008-04-18  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=18218
        [Gtk] segfault when clicking on a disabled button

        Always use the main frame for mouse events (not the focused frame)
        since it knows best how to get the event through to the right target.

        This also fixes a null crasher.

        * webkit/webkitwebview.cpp:

2008-04-17  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Holger Freyther.

        Reduce hard-coded page-cache count to 3 based on research done for the
        Mac port on value / page.

        We will need to make this more dynamic or configurable at some point
        but for now it's best to keep closer to the behaviour before page
        caching was enabled.

        Issue spotted by Mark Rowe.

        * webkit/webkitprivate.cpp:
        (webkit_init):

2008-04-17  Daniele Metilli  <daniele.metilli@gmail.com>

        Reviewed by Eric.

        Fixed a typo in the copyright header.

        * webkit/webkitprivate.h:

2008-04-14  Holger Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=18411
        Enable Page caching and create FrameViews on the fly

        Create the FrameView on the fly and cache pages

        - Keep a copy of the GtkAdjustment to be able to reuse it for the
          FrameViews
        - Do not initially create a FrameView and update the WebKit code to
          cope with not having a view.
        - Cache seven pages by default.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):
        (WebKit::FrameLoaderClient::canCachePage):
        (WebKit::FrameLoaderClient::savePlatformDataToCachedPage):
        (WebKit::FrameLoaderClient::transitionToCommittedFromCachedPage):
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):
        * webkit/webkitprivate.cpp:
        (webkit_init):
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebview.cpp:

2008-04-10  Mario Bensi  <mbensi@pleyo.com>

        Reviewed by Alp Toker.

        https://bugs.webkit.org/show_bug.cgi?id=18400
        Database example doesn't work on Gtk port

        Fix quota in ChromeClient

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::exceededDatabaseQuota):

2008-04-08  Adam Roben  <aroben@apple.com>

        Move callOnMainThread to WTF

        Reviewed by Alexey Proskuryakov.

        * webkit/webkitprivate.cpp: Updated #include.
        (webkit_init): Changed to call KJS::initializeThreading.

2008-04-06  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        Fix webkit_web_view_get_transparent() return value.

        * webkit/webkitwebview.cpp:

2008-03-31  Jasper Bryant-Greene  <jasper@unix.geek.nz>

        Reviewed by Darin Adler.

        Resolves http://bugs.webkit.org/show_bug.cgi?id=18010
        "WebKitNetworkRequestPrivate is defined in two places unnecessarily"

        Removed unnecessary definition of WebKitNetworkRequestPrivate in
        webkitprivate.h

        * webkit/webkitprivate.h:

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Remove newly obsolete FrameLoaderClient methods

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.h:

2008-03-20  Alp Toker  <alp@atoker.com>

        GTK+ build fix. Back out r31183. This patch also introduced API style
        issues.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * webkit/headers.pri:
        * webkit/webkit-marshal.list:
        * webkit/webkitdefines.h:
        * webkit/webkitnavigationaction.cpp: Removed.
        * webkit/webkitnavigationaction.h: Removed.
        * webkit/webkitprivate.cpp:
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-03-20  Jasper Bryant-Greene  <jasper@unix.geek.nz>

        Reviewed and tweaked by Anders.

        Resolves http://bugs.webkit.org/show_bug.cgi?id=16092
        "[GTK] Middle-mouse click should allow opening a URL in a new tab"

        Created WebKitNavigationAction object exported through the API. The
        navigation-requested signal provides this object as context for the
        requested navigation, allowing the application to decide what to do
        with the navigation based on which mouse button was used, which
        modifier keys were held down, etc. This allows, for example, the
        application to open links in a new tab when either middle-click or
        control-click are used to initiate the navigation.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        * webkit/headers.pri:
        * webkit/webkit-marshal.list:
        * webkit/webkitdefines.h:
        * webkit/webkitnavigationaction.cpp: Added.
        (webkit_navigation_action_finalize):
        (webkit_navigation_action_class_init):
        (webkit_navigation_action_init):
        (webkit_navigation_action_get_button):
        (webkit_navigation_action_get_modifier_flags):
        (webkit_navigation_action_get_navigation_type):
        (webkit_navigation_action_get_original_url):
        * webkit/webkitnavigationaction.h: Added.
        * webkit/webkitprivate.cpp:
        (WebKit::kit):
        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-03-18  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed and landed by jhoneycutt.

        Update to check if the MIME type is supported by a plugin.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (FrameLoaderClient::objectContentType):

2008-03-18  Rodney Dawes  <dobey@wayofthemonkey.com>

        Reviewed by Jon Honeycutt.

        Update setContainingWindow() calls to pass a GtkWidget.

        * webkit/webkitwebframe.cpp:
        (webkit_web_frame_new):
        (webkit_web_frame_init_with_web_view):

2008-03-13  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix GTK+ build for SharedBuffer changes.

        * webkit/webkitwebview.cpp:
        (webkit_web_view_load_string):

2008-03-12  Tommi Komulainen  <tommi.komulainen@iki.fi>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17799
        WebView signals should use more specific types

        * webkit/webkitwebview.cpp: Use WEBKIT_TYPE_WEB_FRAME argument
        type in "script-alert", "script-confirm", "script-script-prompt"
        signals so that it gets more clearly documented rather than just
        plain GObject.

2008-03-10  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        Fix "missing braces" compiler warning.

        * webkit/webkitwebview.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

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * webkit/webkitwebframe.cpp:

2008-03-03  Sam Weinig  <sam@webkit.org>

        GTK+ build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::windowObjectCleared):

2008-03-03  Alp Toker  <alp@atoker.com>

        Fix the GTK+ build following breakage introduced in r30712.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::imContextCommitted):

2008-03-02  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Split the WebKit GTK+ build out of the WebCore build and change the
        shared object name to match the package name.

        * webkit.pc.in:

2008-02-27  Adam Roben  <aroben@apple.com>

        Attempt to fix the GTK+ build

        * webkit/webkitwebframe.cpp:

2008-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - remove separate client calls for "standard" and "reload' history

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::updateGlobalHistory):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2008-02-23  Alexey Proskuryakov  <ap@webkit.org>

        Build fix.

        * webkit/webkitprivate.cpp:
        (webkit_init): Renamed initializeThreading to initializeThreadingAndMainThread.

2008-02-18  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=17312
        [GTK] Webview Transparent Background

        Add support for WebView background transparency.

        * webkit/webkitprivate.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-02-18  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Implement webkit_web_view_get_focused_frame()

        Equivalent to selectedFrame in the Mac API.

        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-02-17  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Mark Rowe.

        Fix a crash introduced in changeset #29985 by moving the dereference to after
        the null check.

        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_core_item):

2008-02-15  Alp Toker  <alp@atoker.com>

        Fix the GTK+ build following breakage introduced in r30243.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::mouseDidMoveOverElement):
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::objectContentType):

2008-02-15  Darin Adler  <darin@apple.com>

        - another try at fixing the build

        * webkit/webkitwebview.cpp: Added some explicit conversions to KURL.

2008-02-14  Darin Adler  <darin@apple.com>

        * webkit/webkitwebframe.cpp: Removed DeprecatedString use to try to keep it building.
        * webkit/webkitwebview.cpp: Ditto.

2008-02-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp.

        * Make the handling of the coreFrame consistent. We construct the coreFrame
        at the beginning and it will live until the end. Change the g_return_(val_)if
        to ASSERTs as having a 0 coreFrame can never happen.

        * webkit/webkitwebframe.cpp:
        (PrintContext::webkit_web_frame_print):

2008-02-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp.

        * Make sure that the WebCore::Frame is living as long as the WebKitWebFrame
        wrapped around it. All current calls to WebCore::Frame from within the
        WebKitWebFrame are safe, even in the case where the WebCore::Frame is already
        detached from the WebCore::Page.
        * For the mainFrame the WebKitWebView is holding the initial reference and
        will unref on destruction.
        * For sub-frames the FramerLoaderClientGtk.cpp will do the unrefing when the
        frame gets detached from the parent.
        * Make sure FrameLoader::detachFromParent gets called by calling FrameLoader::detachChildren

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::detachedFromParent4):
        * webkit/webkitprivate.cpp:
        (WebKit::core):
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebview.cpp:

2008-02-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp.

        WebCore::Frame is RefCounted, do not manually delete it!

        * webkit/webkitwebframe.cpp:

2008-02-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp.

        * Plug a leak

        * webkit/webkitwebframe.cpp:

2008-02-14  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Alp.

        * Update the Copyright Information

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:

2008-02-13  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        Fix very small, upside down, inside out text on GTK+/DirectFB.

        Based on an initial patch by Sriram Neelakandan <sriram.neelakandan@gmail.com>

        Test the result of gdk_screen_get_resolution() and use a default
        fallback in case of failure.

        Also remove an unhelpful runtime warning.

        * webkit/webkitwebview.cpp:

2008-02-08  Pierre-Luc Beaudoin  <pierre-luc.beaudoin@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17009
        [Gtk] Webkit strips accents from some dead-key combinations

        KeyEvents have to go through the gtk input method.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::imContextCommitted):
        (WebKit::EditorClient::doTextFieldCommandFromEvent):

2008-02-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Fix warnings seen on the Gtk port by declaring variables and using constants of the correct types.

        * webkit/webkitwebbackforwardlist.cpp:
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_contains_item):
        * webkit/webkitwebhistoryitem.cpp:
        * webkit/webkitwebview.cpp:

2008-02-04  Christian Dywan  <christian@imendio.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17065
        [GTK] Use a consistent coding style

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::imContextCommitted):
        (WebKit::EditorClient::EditorClient):
        (WebKit::EditorClient::~EditorClient):
        (WebKit::EditorClient::textFieldDidEndEditing):
        * webkit/webkitdefines.h:
        * webkit/webkitnetworkrequest.cpp:
        (_WebKitNetworkRequestPrivate::webkit_network_request_finalize):
        (_WebKitNetworkRequestPrivate::webkit_network_request_class_init):
        (_WebKitNetworkRequestPrivate::webkit_network_request_init):
        (_WebKitNetworkRequestPrivate::webkit_network_request_new):
        (_WebKitNetworkRequestPrivate::webkit_network_request_set_uri):
        (_WebKitNetworkRequestPrivate::webkit_network_request_get_uri):
        * webkit/webkitnetworkrequest.h:
        * webkit/webkitprivate.cpp:
        (WebKit::getViewFromFrame):
        (WebKit::core):
        * webkit/webkitprivate.h:
        * webkit/webkitwebbackforwardlist.cpp:
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_new_with_web_view):
        * webkit/webkitwebbackforwardlist.h:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_dispose):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_finalize):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_core_item):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_data):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_alternate_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_set_alternate_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_uri):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_original_uri):
        (WebKit::core):
        * webkit/webkitwebhistoryitem.h:
        * webkit/webkitwebsettings.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-02-04  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Mark Rowe.

        Remove all trailing whitespace in the GTK+ port and related
        components.

        * WebCoreSupport/DragClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.h:
        * WebCoreSupport/InspectorClientGtk.h:
        * WebCoreSupport/PasteboardHelperGtk.h:
        * webkit/webkitprivate.h:
        * webkit/webkitwebbackforwardlist.cpp:
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_contains_item):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_forward_list_with_limit):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_back_item):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_forward_length):
        * webkit/webkitwebhistoryitem.cpp:
        (_WebKitWebHistoryItemPrivate::webkit_history_items):
        (_WebKitWebHistoryItemPrivate::webkit_history_item_add):
        (_WebKitWebHistoryItemPrivate::webkit_history_item_remove):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_dispose):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_data):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_alternate_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_set_alternate_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_original_uri):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_last_visited_time):
        (WebKit::kit):
        * webkit/webkitwebhistoryitem.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:

2008-02-03  Christian Dywan  <christian@imendio.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=17046
        [GTK] Context menu fixes and customisation suport

        * webkit/webkitwebview.cpp:

2008-01-31  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Fix the pkg-config file to follow GTK+ package naming and versioning
        conventions.

        Remove unneeded dependency listings.

        * WebKitGtk.pc.in: Removed.
        * webkit.pc.in: Copied from WebKit/gtk/WebKitGtk.pc.in.

2008-01-31  Alp Toker  <alp@atoker.com>

        Rubber-stamped by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=17006
        [GTK] Header path should be webkit/webkit.h

        Move the GTK+ API sources as needed and update the build systems.

        * WebView: Removed.
        * WebView/headers.pri: Removed.
        * WebView/webkit-marshal.list: Removed.
        * WebView/webkit.h: Removed.
        * WebView/webkitdefines.h: Removed.
        * WebView/webkitnetworkrequest.cpp: Removed.
        * WebView/webkitnetworkrequest.h: Removed.
        * WebView/webkitprivate.cpp: Removed.
        * WebView/webkitprivate.h: Removed.
        * WebView/webkitwebbackforwardlist.cpp: Removed.
        * WebView/webkitwebbackforwardlist.h: Removed.
        * WebView/webkitwebframe.cpp: Removed.
        * WebView/webkitwebframe.h: Removed.
        * WebView/webkitwebhistoryitem.cpp: Removed.
        * WebView/webkitwebhistoryitem.h: Removed.
        * WebView/webkitwebsettings.cpp: Removed.
        * WebView/webkitwebsettings.h: Removed.
        * WebView/webkitwebview.cpp: Removed.
        * WebView/webkitwebview.h: Removed.
        * webkit: Copied from WebKit/gtk/WebView.
        * webkit/webkit.h:
        * webkit/webkitnetworkrequest.h:
        * webkit/webkitprivate.h:
        * webkit/webkitwebbackforwardlist.h:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebhistoryitem.h:
        * webkit/webkitwebsettings.h:
        * webkit/webkitwebview.h:

2008-01-27  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=14811
        [gtk] [request] add a webkit_gtk_page_go_to_history_item function

        implement back/forward list and history item

        * WebView/headers.pri:
        * WebView/webkit.h:
        * WebView/webkitprivate.cpp:
        * WebView/webkitprivate.h:
        * WebView/webkitwebbackforwardlist.cpp: Added.
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_dispose):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_class_init):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_init):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_new_with_web_view):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_go_forward):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_go_back):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_contains_item):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_go_to_item):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_forward_list_with_limit):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_back_list_with_limit):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_back_item):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_current_item):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_forward_item):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_nth_item):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_back_length):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_forward_length):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_get_limit):
        (_WebKitWebBackForwardListPrivate::webkit_web_back_forward_list_set_limit):
        * WebView/webkitwebbackforwardlist.h: Added.
        * WebView/webkitwebhistoryitem.cpp: Added.
        (_WebKitWebHistoryItemPrivate::webkit_history_items):
        (_WebKitWebHistoryItemPrivate::webkit_history_item_add):
        (_WebKitWebHistoryItemPrivate::webkit_history_item_remove):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_dispose):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_finalize):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_class_init):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_init):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_core_item):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_new_with_data):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_alternate_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_set_alternate_title):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_uri):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_original_uri):
        (_WebKitWebHistoryItemPrivate::webkit_web_history_item_get_last_visited_time):
        (WebKit::core):
        (WebKit::kit):
        * WebView/webkitwebhistoryitem.h: Added.
        * WebView/webkitwebview.cpp:
        * WebView/webkitwebview.h:

2008-01-25  Ori Bernstein  <ori@eigenstate.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16795
        WebKitGtk crashes when there is no focused Frame

        Add a null check. focusedFrame() isn't used directly anywhere else so
        this is the only case that needs to be fixed.

        * WebView/webkitwebview.cpp:

2008-01-22  Christian Dywan  <christian@imendio.com>

        Reviewed by Alp Toker.

        [GTK] API: WebKitWebSettings is not usable
        http://bugs.webkit.org/show_bug.cgi?id=16219

        Implement WebKitWebSettings.

        * WebView/headers.pri:
        * WebView/webkit.h:
        * WebView/webkitprivate.cpp:
        * WebView/webkitprivate.h:
        * WebView/webkitsettings.cpp: Removed.
        * WebView/webkitsettings.h: Removed.
        * WebView/webkitwebsettings.cpp: Added.
        * WebView/webkitwebsettings.h: Added.
        * WebView/webkitwebview.cpp:
        * WebView/webkitwebview.h:

2008-01-21  Alp Toker  <alp@atoker.com>

        GTK+ build fix for breakage introduced in r29698.

        * WebCoreSupport/ChromeClientGtk.h:

2008-01-21  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - updated for changes to database functions

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::exceededDatabaseQuota):
        * WebCoreSupport/ChromeClientGtk.h:
        * WebView/webkitprivate.cpp:
        (webkit_init):

2008-01-20  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Attach the widget's style to its window and set the background to the
        base background to avoid black flicker when repainting. This is
        similar to what GtkTextView does.

        * WebView/webkitwebview.cpp:

2008-01-19  Christian Dywan  <christian@imendio.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16882
        [GTK] ChromeClientGtk is incompete

        Implement these functions.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::windowRect):
        (WebKit::ChromeClient::pageRect):
        (WebKit::ChromeClient::scaleFactor):
        (WebKit::ChromeClient::focus):
        (WebKit::ChromeClient::unfocus):
        (WebKit::ChromeClient::canTakeFocus):
        (WebKit::ChromeClient::takeFocus):
        (WebKit::ChromeClient::canRunBeforeUnloadConfirmPanel):

2008-01-18  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16910
        [GTK] REGRESSION: keyboard cursor doesn't blink

        http://bugs.webkit.org/show_bug.cgi?id=16863
        [GTK] REGRESSION: tab focusing doesn't work

        * WebView/webkitwebview.cpp:
        (webkit_web_view_focus_in_event): Added. Set the active frame.
        (webkit_web_view_class_init):

2008-01-16  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16218
        [GTK] API: Should this entry point be called go_back rather than go_backward?

        Obsolete 'backward' terminology in API in favour of 'back'. Introduce
        step-based back/forward functions.

        Document more functions.

        * WebView/webkitdefines.h:
        * WebView/webkitwebview.cpp:
        * WebView/webkitwebview.h:

2008-01-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.

        - remove SecurityOriginData and fold its functionality into SecurityOrigin

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebKit::ChromeClient::requestQuotaIncreaseForDatabaseOperation):
        * WebCoreSupport/ChromeClientGtk.h:

2008-01-09  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16802
        [GTK] Missing gtk properties

        Add missing properties to WebKitViewFrame and WebKitWebView.

        * WebView/webkitprivate.h: add some useful defines for param specs
        * WebView/webkitwebframe.cpp:
        (webkit_web_frame_get_property): added
        (webkit_web_frame_class_init): add name, title and uri read-only properties
        * WebView/webkitwebview.cpp:
        (webkit_web_view_get_property): add editable property read
        (webkit_web_view_set_property): added for editable property write
        (webkit_web_view_class_init): add read-write editable property

2008-01-03  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16654
        [GTK] Signal "navigation-requested" does not react correctly on
        return TRUE from callbacks

        * WebView/webkitwebview.cpp: use our own accumulator for signals
        returning WebKitNavigationResponse. The emission will be stopped
        when any callback returns anything but
        WEBKIT_NAVIGATION_RESPONSE_ACCEPT.

2008-01-02  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber stamped by Darin Adler.

        Coding Style fix. Do not use an else because we use a return in the
        if branch.

        * WebView/webkitwebview.cpp:

2008-01-02  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16115
        [GTK] ContextMenu and ContextMenuItem lacks an implementation

        Add context menu support.

        Based on a patch by Holger Freyther.

        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::ContextMenuClient::getCustomMenuFromDefaultItems):
        * WebView/webkitprivate.h:
        * WebView/webkitwebview.cpp:

2007-12-29  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16669
        autotools update and fixes

        pkgconfig file and icon database inclusion fix

        * WebKitGtk.pc.in: Remove ICU_FLAGS from Cflags
        * WebView/webkitprivate.cpp: Guard ICONDATABASE inclusions

2007-12-28  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16642
        [GTK] webkit_web_view_has_selection returns the opposite result

        Invert the return value.

        * WebView/webkitwebview.cpp:

2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16390
        Use autotools or GNU make as the build system for the GTK port

        * WebKitGtk.pc.in: Added.

2007-12-24  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/attachment.cgi?id=18099
        There are no NULL checks for strings in public api

        Add missing NULL checks for string parameters.

        Provide sensible defaults when NULL is passed for the optional
        parameters in webkit_web_view_load_string(). UTF-8 is the default
        encoding used by GLib and text/html is a reasonable default content
        type.

        * WebView/webkitnetworkrequest.cpp:
        * WebView/webkitwebview.cpp:

2007-12-22  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        Use webView, web_view, etc for variable names instead of page, which
        was left over from the old API.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::imContextCommitted):
        (WebKit::EditorClient::EditorClient):
        (WebKit::EditorClient::~EditorClient):
        (WebKit::EditorClient::textFieldDidBeginEditing):
        (WebKit::EditorClient::textFieldDidEndEditing):
        * WebCoreSupport/EditorClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::postProgressStartedNotification):
        (WebKit::FrameLoaderClient::postProgressEstimateChangedNotification):
        (WebKit::FrameLoaderClient::postProgressFinishedNotification):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::FrameLoaderClient::windowObjectCleared):
        (WebKit::FrameLoaderClient::dispatchDidReceiveIcon):
        (WebKit::FrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::FrameLoaderClient::dispatchDidCommitLoad):

2007-12-22  Alp Toker  <alp@atoker.com>

        GTK+ build fix

        GTK_TARGET_OTHER_APP is not available in older GTK+ versions. Pass
        empty target flags for now.

        Check GTK+, not GLib versions, since they are different.

        * WebView/webkitwebview.cpp:

2007-12-22  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16311
        [Gtk] Copy rich text to clipboard as text/plain and text/html.

        Add copy and paste targets for WebView and implement
        WebCore::PasteboardHelper.

        * WebCoreSupport/PasteboardHelperGtk.cpp: Added.
        (WebKit::PasteboardHelperGtk::getClipboard):
        (WebKit::PasteboardHelperGtk::getCopyTargetList):
        (WebKit::PasteboardHelperGtk::getPasteTargetList):
        * WebCoreSupport/PasteboardHelperGtk.h: Added.
        * WebView/webkitprivate.cpp:
        (webkit_init): set the PasteboardHelperGtk as WebCore::Pasteboard helper
        * WebView/webkitprivate.h:
        (_WebKitWebViewPrivate::copy_target_list): added
        (_WebKitWebViewPrivate::paste_target_list): added
        * WebView/webkitwebview.cpp:
        (webkit_web_view_get_property): added
        (webkit_web_view_finalize):
        (webkit_web_view_class_init): create properties for COPY_TARGET and PASTE_TARGET and create the copy and paste target lists
        (webkit_web_view_get_copy_target_list): added
        (webkit_web_view_get_paste_target_list): added
        * WebView/webkitwebview.h:
        (webkit_web_view_get_copy_target_list): added
        (webkit_web_view_get_paste_target_list): added

2007-12-22  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        Follow up to http://bugs.webkit.org/show_bug.cgi?id=16144

        * WebView/webkitwebview.cpp:
        Fix signal id arguments for g_signal_emit in
        clipboard functions.

2007-12-21  Alp Toker  <alp@atoker.com>

        Documentation typo fix: s/wether/whether

        * WebView/webkitwebview.cpp:

2007-12-21  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16144
        [GTK] Clipboard/ selection handling functions

        * WebView/webkitprivate.h:
        * WebView/webkitwebview.cpp:
        * WebView/webkitwebview.h:

2007-12-19  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16222
        [GTK] Implement inline search and highlighting of matching strings.

        * WebView/webkitwebview.cpp:
        * WebView/webkitwebview.h:

2007-12-19  Alp Toker  <alp@atoker.com>

        Reviewed by Holger Freyther.

        Delete when Destroy functions are called to avoid leaks

        This matches the Mac port.

        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * WebCoreSupport/InspectorClientGtk.cpp:

2007-12-14  Juan A. Suarez Romero  <jasuarez@igalia.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16042
        [GTK] Eliminate webkit_init()

        Move webkit initialization to WebView class init.

        * WebView/headers.pri:
        * WebView/webkit.h:
        * WebView/webkitglobal.cpp: Removed.
        * WebView/webkitglobal.h: Removed.
        * WebView/webkitprivate.cpp:
        (WebKit::webkit_init):
        * WebView/webkitprivate.h:
        * WebView/webkitwebframe.cpp:
        * WebView/webkitwebview.cpp:

2007-12-17  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=13542
        gdklauncher doesnt change URL in adress GTKEntry.

        Let DOMDocument observers do their work before emitting title-changed.
        The load-committed signal has been added for both the view and the frame.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDidReceiveTitle): emit title-changed
        (WebKit::FrameLoaderClient::setTitle): set private title
        (WebKit::FrameLoaderClient::dispatchDidCommitLoad): update the frame uri and emit load-committed
        * WebView/webkit-marshal.list:
        * WebView/webkitprivate.h:
        (_WebKitWebFramePrivate): rename location to uri
        * WebView/webkitwebframe.cpp:
        (webkit_web_frame_get_location): renamed to *_get_uri
        (webkit_web_frame_get_uri):
        (webkit_web_frame_real_title_changed): removed (see FrameLoaderClient::setTitle)
        (webkit_web_frame_class_init): pass the frame and the title in title-changed, not the uri
        (webkit_web_frame_finalize):
        * WebView/webkitwebframe.h:
        (_WebKitWebFrameClass): removed title_changed
        * WebView/webkitwebview.cpp:
        (webkit_web_view_class_init): pass only the title in title-changed

2007-12-14  Alp Toker  <alp@atoker.com>

        Fix inconsistent indentation in the license header. Maciej was right!

        * WebCoreSupport/FrameLoaderClientGtk.cpp:

2007-12-14  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=16432
        [GTK] Update license headers

        Consent has been given by the authors of these files to change license
        to the LGPL as outlined in the bug report.

        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * WebCoreSupport/DragClientGtk.cpp:
        * WebCoreSupport/EditorClientGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::makeRepresentation):
        (WebKit::FrameLoaderClient::forceLayout):
        (WebKit::FrameLoaderClient::forceLayoutForNonHTML):
        (WebKit::FrameLoaderClient::setCopiesOnScroll):
        (WebKit::FrameLoaderClient::detachedFromParent1):
        (WebKit::FrameLoaderClient::detachedFromParent2):
        (WebKit::FrameLoaderClient::detachedFromParent3):
        (WebKit::FrameLoaderClient::detachedFromParent4):
        (WebKit::FrameLoaderClient::loadedFromCachedPage):
        (WebKit::FrameLoaderClient::dispatchDidHandleOnloadEvents):
        (WebKit::FrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::FrameLoaderClient::dispatchDidCancelClientRedirect):
        (WebKit::FrameLoaderClient::dispatchWillPerformClientRedirect):
        (WebKit::FrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebKit::FrameLoaderClient::dispatchWillClose):
        (WebKit::FrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::FrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::FrameLoaderClient::dispatchDidFirstLayout):
        (WebKit::FrameLoaderClient::dispatchShow):
        (WebKit::FrameLoaderClient::cancelPolicyCheck):
        (WebKit::FrameLoaderClient::dispatchDidLoadMainResource):
        (WebKit::FrameLoaderClient::revertToProvisionalState):
        (WebKit::FrameLoaderClient::clearUnarchivingState):
        (WebKit::FrameLoaderClient::willChangeTitle):
        (WebKit::FrameLoaderClient::didChangeTitle):
        (WebKit::FrameLoaderClient::finalSetupForReplace):
        (WebKit::FrameLoaderClient::setDefersLoading):
        (WebKit::FrameLoaderClient::isArchiveLoadPending):
        (WebKit::FrameLoaderClient::cancelPendingArchiveLoad):
        (WebKit::FrameLoaderClient::clearArchivedResources):
        (WebKit::FrameLoaderClient::canHandleRequest):
        (WebKit::FrameLoaderClient::canShowMIMEType):
        (WebKit::FrameLoaderClient::representationExistsForURLScheme):
        (WebKit::FrameLoaderClient::generatedMIMETypeForURLScheme):
        (WebKit::FrameLoaderClient::dispatchDidReceiveContentLength):
        (WebKit::FrameLoaderClient::dispatchDidFinishLoading):
        (WebKit::FrameLoaderClient::dispatchDidFailLoading):
        (WebKit::FrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebKit::FrameLoaderClient::download):
        (WebKit::FrameLoaderClient::cancelledError):
        (WebKit::FrameLoaderClient::blockedError):
        (WebKit::FrameLoaderClient::cannotShowURLError):
        (WebKit::FrameLoaderClient::interruptForPolicyChangeError):
        (WebKit::FrameLoaderClient::cannotShowMIMETypeError):
        (WebKit::FrameLoaderClient::fileDoesNotExistError):
        (WebKit::FrameLoaderClient::shouldFallBack):
        (WebKit::FrameLoaderClient::willUseArchive):
        (WebKit::FrameLoaderClient::canCachePage):
        (WebKit::FrameLoaderClient::dispatchCreatePage):
        (WebKit::FrameLoaderClient::dispatchUnableToImplementPolicy):
        (WebKit::FrameLoaderClient::setMainDocumentError):
        (WebKit::FrameLoaderClient::startDownload):
        (WebKit::FrameLoaderClient::updateGlobalHistoryForStandardLoad):
        (WebKit::FrameLoaderClient::updateGlobalHistoryForReload):
        (WebKit::FrameLoaderClient::savePlatformDataToCachedPage):
        (WebKit::FrameLoaderClient::transitionToCommittedFromCachedPage):
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):
        * WebCoreSupport/InspectorClientGtk.cpp:
        * WebView/webkitwebview.cpp:

2007-12-14  Darin Adler  <darin@apple.com>

        Reviewed by Alexey.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeyboardEvent): Changed to use Editor::command
        instead of Editor::execCommand.
        * WebView/webkitwebview.cpp: Ditto.

2007-12-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        As part of doing some CachedPage and client cleanup, keep GTK building

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::savePlatformDataToCachedPage):
        (WebKit::FrameLoaderClient::transitionToCommittedFromCachedPage):
        (WebKit::FrameLoaderClient::transitionToCommittedForNewPage):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2007-12-12  Alp Toker  <alp@atoker.com>

        Reviewed by Holger Freyther.

        http://bugs.webkit.org/show_bug.cgi?id=15576
        [GTK] Printing support

        Add printing support.

        The API will be kept internal for the time being, but printing can now
        be triggered by Web pages or the JSC API using JavaScript.

        The print spooler and pagination code is fairly abstract and could be
        shared by other ports including Win and Qt once complete. It doesn't
        have header/footer support yet.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::print):
        * WebView/webkitprivate.h:
        * WebView/webkitwebframe.cpp:
        (PrintContext::begin_print):
        (PrintContext::draw_page):
        (PrintContext::end_print):
        (PrintContext::webkit_web_frame_print):

2007-12-12  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didChangeTitle):

2007-12-12  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):

2007-12-11  George Wright  <george.wright@collabora.co.uk>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=14120
        [GDK] Support input methods

        This patch adds infrastructure for input method support.

        It also adds Hildon features for the Maemo mobile platform sufficient
        to support the virtual keyboard.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::imContextCommitted):
        (WebKit::EditorClient::EditorClient):
        (WebKit::EditorClient::~EditorClient):
        (WebKit::EditorClient::textFieldDidBeginEditing):
        (WebKit::EditorClient::textFieldDidEndEditing):
        * WebCoreSupport/EditorClientGtk.h:
        * WebView/webkitprivate.h:
        * WebView/webkitwebview.cpp:

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/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeyboardEvent):
        (WebKit::EditorClient::handleInputMethodKeydown):
        * WebCoreSupport/EditorClientGtk.h:
        Updated for cross-platform changes as much as it was possible without a gtk build environment.

2007-12-08  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16346
        [GTK] Some webview parts must use the focused frame.

        Also update some old code.

        * WebView/webkitprivate.cpp:
        (getFrameFromView): removed

        * WebView/webkitprivate.h:
        (getFrameFromView): removed

        * WebView/webkitwebview.cpp:
        (webkit_web_view_expose_event):
        (webkit_web_view_key_press_event): use focused frame
        (webkit_web_view_key_release_event): use focused frame
        (webkit_web_view_button_press_event):
        (webkit_web_view_button_release_event):
        (webkit_web_view_motion_event):
        (webkit_web_view_scroll_event):
        (webkit_web_view_size_allocate):
        (webkit_web_view_set_scroll_adjustments):
        (webkit_web_view_execute_script):
        (webkit_web_view_stop_loading):
        (webkit_web_view_load_string):
        (webkit_web_view_reload):
        (webkit_web_view_open):
        (webkit_web_view_can_go_forward):
        (webkit_web_view_can_go_backward):
        (webkit_web_view_go_forward):
        (webkit_web_view_go_backward):

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeypress): fix for page up and page down keys for editable contents

2007-12-07  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16333
        [GTK] Key bindings must work with focused frames.

        There are still more cases where getFrameFromView() is mis-used that
        need to be fixed, but this is a good start.

        * WebView/webkitwebview.cpp:
        (webkit_web_view_real_select_all):
        (webkit_web_view_real_cut_clipboard):
        (webkit_web_view_real_copy_clipboard):
        (webkit_web_view_real_paste_clipboard):

2007-12-06  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16329
        [GTK] Two small cleanups

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::createWindow):
        (WebKit::ChromeClient::addMessageToConsole):
        (WebKit::ChromeClient::runJavaScriptAlert):
        (WebKit::ChromeClient::runJavaScriptConfirm):
        (WebKit::ChromeClient::runJavaScriptPrompt):
        (WebKit::ChromeClient::setStatusbarText):
        (WebKit::ChromeClient::mouseDidMoveOverElement):
        (WebKit::ChromeClient::setToolTip):
        * WebCoreSupport/ChromeClientGtk.h:
        * WebView/webkitprivate.cpp:
        (WebKit::kit):
        s/m_webPage/m_webView/
        * WebView/webkitwebview.cpp:
        Chain up to the parent class to activate bindings instead
        of doing it explicitely.

2007-12-06  Holger Hans Peter Freyther <holger.freyther@trolltech.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=16173
        Licensing change

        Change license from BSD to LGPL.

        * WebCoreSupport/ChromeClientGtk.h:
        * WebView/webkitdefines.h:
        * WebView/webkitglobal.cpp:
        * WebView/webkitglobal.h:
        * WebView/webkitnetworkrequest.cpp:
        * WebView/webkitnetworkrequest.h:
        * WebView/webkitprivate.cpp:
        * WebView/webkitprivate.h:
        * WebView/webkitsettings.cpp:
        * WebView/webkitsettings.h:
        * WebView/webkitwebframe.cpp:
        * WebView/webkitwebframe.h:
        * WebView/webkitwebview.h:

2007-12-05  Michael Natterer  <mitch@imendio.com>

        Reviewed by Alp Toker.

        * WebView/webkitwebview.cpp: split key and button event handlers
        into separate press and release functions.

2007-12-05  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        Handle events for Home and End keys.

        * WebView/webkitwebview.cpp:
        (webkit_web_view_key_event):
        * WebCoreSupport/EditorClientGtk.cpp:
        (EditorClient::handleKeypress):

2007-12-05  Michael Natterer  <mitch@imendio.com>

        Reviewed by Alp Toker.

        * WebView/webkitwebview.cpp
        * WebCoreSupport/ChromeClientGtk.cpp
        * WebCoreSupport/FrameLoaderClientGtk.cpp: canonicalize signal names.

2007-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        * WebCoreSupport/FrameLoaderClientGtk.cpp: Removed obsolete privateBrowsingEnabled.
        * WebCoreSupport/FrameLoaderClientGtk.h: Ditto.

2007-12-04  Michael Natterer  <mitch@imendio.com>

        Reviewed by Alp Toker.

        * WebView/webkitwebframe.cpp: don't redeclare the marshaller
        prototype but simply include "webkit-marshal.h" now that its build
        is fixed.

2007-12-04  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        Fix a regression in key press propagation in r28386.

        Fix indentation (was off by two spaces).

        * WebView/webkitwebview.cpp:

2007-12-04  Luca Bruno  <lethalman88@gmail.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15911
        [GTK] Use GtkBindingSet to make key bindings user-configurable

        This patch doesn't cover the full range of bindings, only the ones
        that seem obviously correct and have clear public API.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeypress): do not handle clipboard operations and select-all
        * WebView/webkitwebview.cpp: add cut, copy, paste and select-all signals and allow binding sets (issue #15911 and #16144)
        * WebView/webkitwebview.h:

2007-12-04  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15561
        GTK port needs DumpRenderTree implementation

        Start work on the GTK+ DRT.

        Add a couple of proposed new API entry points. They are currently for
        internal use only by DRT and not in the public headers.

        * WebView/webkitprivate.h:
        * WebView/webkitwebframe.cpp:

2007-12-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        - fix <rdar://problem/5346452> Resize event doesn't fire on body element inside a frame

        * WebView/webkitwebview.cpp: Remove the call to sendResizeEvent() since
        FrameView sends it now.

2007-12-03  Alp Toker  <alp@atoker.com>

        globalObject() GTK+ build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::windowObjectCleared):

2007-12-03  Geoffrey Garen  <ggaren@apple.com>

        GTK Build fix: get globalExec from the right place.

        * WebView/webkitwebframe.cpp:

2007-12-01  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        Wrap type definitions in webkitdefines.h with G_BEGIN_DECLS, which
        takes care of extern "C".

        Introduce a webkit.h convenience header.

        Remove another left-over from the old API.

        * WebView/headers.pri:
        * WebView/webkit.h: Added.
        * WebView/webkitdefines.h:

2007-12-01  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15687
        [Gtk] Allow API clients to interact with JavaScript in web pages

        Include the necessary JavaScriptCore headers directly in the public
        API headers.

        This is the last of a series of changes needed to allow GTK+
        applications to access the JS API.

        Until http://bugs.webkit.org/show_bug.cgi?id=16029 is resolved,
        developers will still have to include the individual JS API headers
        individually if they want to use it in their applications.

        Patch also removes some old legacy use of GDK that was in
        WebKitWebFrame. No ABI change.

        * WebView/webkitdefines.h:
        * WebView/webkitwebframe.h:
        * WebView/webkitwebview.h:

2007-11-30  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Fix for GTK+ Debug build breakage introduced in r28273.

        * WebView/webkitprivate.cpp:
        (WebKit::kit):

2007-11-30  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=15691
        [GTK] Public API does not follow GTK+ conventions

        Refactor the WebKit/GTK+ public API. Changes:
          WebKitPage -> WebKitWebView
          WebKitFrame -> WebKitWebFrame

        Public API source and header names have been updated to mirror the API
        changes.

        The API is now kept in WebKit/gtk/WebView to match other ports in the
        same class such as Mac and Win.

        API/ABI-breaking change.

        * Api: Removed.
        * Api/headers.pri: Removed.
        * Api/webkitgtk-marshal.list: Removed.
        * Api/webkitgtkdefines.h: Removed.
        * Api/webkitgtkframe.cpp: Removed.
        * Api/webkitgtkframe.h: Removed.
        * Api/webkitgtkglobal.cpp: Removed.
        * Api/webkitgtkglobal.h: Removed.
        * Api/webkitgtknetworkrequest.cpp: Removed.
        * Api/webkitgtknetworkrequest.h: Removed.
        * Api/webkitgtkpage.cpp: Removed.
        * Api/webkitgtkpage.h: Removed.
        * Api/webkitgtkprivate.cpp: Removed.
        * Api/webkitgtkprivate.h: Removed.
        * Api/webkitgtksettings.cpp: Removed.
        * Api/webkitgtksettings.h: Removed.
        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::ChromeClient):
        (WebKit::ChromeClient::createWindow):
        * WebCoreSupport/ChromeClientGtk.h:
        (WebKit::ChromeClient::webPage):
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::isEditable):
        (WebKit::EditorClient::EditorClient):
        * WebCoreSupport/EditorClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):
        (WebKit::FrameLoaderClient::postProgressStartedNotification):
        (WebKit::FrameLoaderClient::postProgressEstimateChangedNotification):
        (WebKit::FrameLoaderClient::postProgressFinishedNotification):
        (WebKit::FrameLoaderClient::dispatchDecidePolicyForNavigationAction):
        (WebKit::FrameLoaderClient::createFrame):
        (WebKit::FrameLoaderClient::windowObjectCleared):
        (WebKit::FrameLoaderClient::dispatchDidReceiveIcon):
        (WebKit::FrameLoaderClient::setTitle):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        (WebKit::FrameLoaderClient::webFrame):
        * WebView: Added.
        * WebView/headers.pri: Added.
        * WebView/webkit-marshal.list: Added.
        * WebView/webkitdefines.h: Added.
        * WebView/webkitglobal.cpp: Added.
        * WebView/webkitglobal.h: Added.
        * WebView/webkitnetworkrequest.cpp: Added.
        * WebView/webkitnetworkrequest.h: Added.
        * WebView/webkitprivate.cpp: Added.
        (WebKit::apply):
        (WebKit::create):
        (WebKit::getFrameFromView):
        (WebKit::getViewFromFrame):
        (WebKit::core):
        (WebKit::kit):
        * WebView/webkitprivate.h: Added.
        * WebView/webkitsettings.cpp: Added.
        * WebView/webkitsettings.h: Added.
        * WebView/webkitwebframe.cpp: Added.
        * WebView/webkitwebframe.h: Added.
        * WebView/webkitwebview.cpp: Added.
        * WebView/webkitwebview.h: Added.

2007-11-28  Alp Toker  <alp@atoker.com>

        Reviewed by Timothy Hatcher.

        http://bugs.webkit.org/show_bug.cgi?id=16174
        [GTK] Use "URI" not "URL" in public API

        Replace use of the term "URL" with "URI" in public headers,
        documentation and some internal code to match GLib/GTK+ convention.

        This is now mentioned in the API guidelines:
          http://trac.webkit.org/projects/webkit/wiki/HackingGtk

        API/ABI-breaking change.

        * Api/webkitgtkframe.cpp:
        * Api/webkitgtknetworkrequest.cpp:
        * Api/webkitgtknetworkrequest.h:
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:
        * Api/webkitgtkprivate.h:
        * Api/webkitgtksettings.h:

2007-11-29  Brady Eidson  <beidson@apple.com>

        Better build fix for Gtk

        * WebCoreSupport/ChromeClientGtk.h:

2007-11-29  Brady Eidson  <beidson@apple.com>

        Keep it building with new client method

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::requestQuotaIncreaseForNewDatabase):
        (WebKit::ChromeClient::requestQuotaIncreaseForDatabaseOperation):
        * WebCoreSupport/ChromeClientGtk.h:

2007-11-26  Alp Toker  <alp@atoker.com>

        Reviewed by Adam Roben.

        http://bugs.webkit.org/show_bug.cgi?id=16149
        Implement the window-object-cleared signal

        This implementation provides the JSGlobalContextRef and JSObjectRef
        directly rather than using an intermediate JS wrapper object, similar
        to the approach taken by the Win port.

        * Api/webkitgtk-marshal.list:
        * Api/webkitgtkframe.h:
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::windowObjectCleared):

2007-11-24  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=15691
        [GTK] Public API does not follow GTK+ conventions

        Public API enhancements:

        Implement webkit_page_get_editable() and webkit_page_set_editable().

        Implement webkit_frame_get_name().

        Remove definitions for functions that are unusable or not implemented.
        This has caused much confusion for application developers.

        Improve documentation.

        Correct/constify some return types.

        Add parameter checks.

        Make the default fixed font "Courier New" to match the other Web
        font names.

        * Api/webkitgtkframe.cpp:
        * Api/webkitgtkframe.h:
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:
        * Api/webkitgtkprivate.h:
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::isEditable):

2007-11-24  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16125
        [GTK] Up key doesn't work properly when content is editable

        Add a missing 'break' to avoid falling through to the next case when
        handling VK_UP keystrokes. This was noticed when working on editing
        support in the GTK+ port.

        I've checked the other cases for similar typos and they seem fine.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeypress):

2007-11-24  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15745
        [GTK] Arrow keys do not Scroll

        * Api/webkitgtkpage.cpp:

        Support Up/Down/Right/Left keys to scroll. Slight hack, see FIXME for
        details.

2007-11-24  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15891
        [GTK] Javascript console and dialogs are not implemented

        Fix call to gtk_message_dialog_new() which expects a format string.

        * Api/webkitgtkpage.cpp:

2007-11-24  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15793
        [GTK] Webkit doesn't show title attribute tooltip when hovering over an image

        Implement tooltip support using the new Tooltip API.

        Support for older versions of GTK+ is still lacking.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::setToolTip):

2007-11-22  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Implement and document several WebKitFrame functions, some of which
        are necessary to support DRT.

        Correct NULL handling and improve run-time checks.

        * Api/webkitgtkframe.cpp:
        * Api/webkitgtkframe.h:
        * Api/webkitgtkprivate.cpp:

2007-11-22  Alp Toker  <alp@atoker.com>

        Whitespace fixes only.

        * Api/webkitgtkframe.cpp:
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:
        * Api/webkitgtkprivate.h:
        * WebCoreSupport/ChromeClientGtk.cpp:
        * WebCoreSupport/ContextMenuClientGtk.cpp:
        * WebCoreSupport/ContextMenuClientGtk.h:
        * WebCoreSupport/DragClientGtk.h:
        * WebCoreSupport/EditorClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::dispatchWillSendRequest):
        (WebKit::FrameLoaderClient::assignIdentifierToInitialRequest):
        (WebKit::FrameLoaderClient::postProgressEstimateChangedNotification):
        (WebKit::FrameLoaderClient::createFrame):
        (WebKit::FrameLoaderClient::createJavaAppletWidget):
        (WebKit::FrameLoaderClient::registerForIconNotification):
        (WebKit::FrameLoaderClient::setMainFrameDocumentReady):
        (WebKit::FrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::FrameLoaderClient::frameLoadCompleted):
        (WebKit::FrameLoaderClient::saveViewStateToItem):
        (WebKit::FrameLoaderClient::restoreViewState):
        (WebKit::FrameLoaderClient::shouldGoToHistoryItem):
        (WebKit::FrameLoaderClient::setTitle):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2007-11-22  Michael Natterer  <mitch@imendio.com>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=15984
        Implement "navigation-requested" signal for WebKit Gtk

        * Api/webkitgtknetworkrequest.h: fix parent class member.

        * Api/webkitgtknetworkrequest.cpp
        * Api/webkitgtkprivate.h: basic implementation featuring an
        "url" member and API.

        * Api/webkitgtkdefines.h: added network request typedefs.

        * Api/webkitgtkpage.h: fix enum name:
        s/WEBKIT_NAVIGATION_REQUEST_RESPONSE/WebKitNavigationRequestResponse/
        and sanitized enum values.

        * Api/webkitgtkpage.cpp: made "navigation-requested" a signal.

        * Api/webkitgtk-marshal.list: added INT:OBJECT,OBJECT

        * WebCoreSupport/FrameLoaderClientGtk.cpp: emit the new signal in
        dispatchDecidePolicyForNavigationAction().

2007-11-18  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=15891
        [GTK] Javascript console and dialogs are not implemented

        Correct script-prompt to return NULL when cancelled.

        Small changes to avoid compiler warnings.

        * Api/webkitgtkpage.cpp:

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/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::localizedStringsURL): Empty stub.
        * WebCoreSupport/InspectorClientGtk.h: Add localizedStringsURL.

2007-11-13  Mark Rowe  <mrowe@apple.com>

        Gtk build fix. Replace incorrect use of the LOG macro with g_print.

        * Api/webkitgtkpage.cpp:

2007-11-13  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=15891
        [GTK] Javascript console and dialogs are not implemented

        Implement signals for script dialogs and console messages.

        * Api/webkitgtk-marshal.list:
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:
        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::addMessageToConsole):
        (WebKit::ChromeClient::runJavaScriptAlert):
        (WebKit::ChromeClient::runJavaScriptConfirm):
        (WebKit::ChromeClient::runJavaScriptPrompt):

2007-11-11  Alp Toker  <alp@atoker.com>

        Reviewed by Anders.

        Initialize m_userAgent.

        Fix typos in GDK_WINDOWING conditionals.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):
        (WebKit::agentPlatform):

2007-11-11  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Mention Safari in the UserAgent string to improve site compatibility.

        Also bump the hard-coded AppleWebKit version number.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::composeUserAgent):

2007-11-09  Xan Lopez  <xan@gnome.org>

        Reviewed by Alp.

        Fix http://bugs.webkit.org/show_bug.cgi?id=15926
        [GTK] WebKitPage map handler is redundant.

        * Api/webkitgtkpage.cpp:
        The map handler for WebKitPage is redundant, GtkContainer does
        the same (and more correctly).

2007-11-08  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=15653
        [GTK] Text editor does not handle common keystrokes

        Handle more keystrokes in EditorClientGtk. Note that this is a
        temporary measure pending a proper solution using GtkBindingSet (see
        http://bugs.webkit.org/show_bug.cgi?id=15911).

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeypress):

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/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::windowObjectCleared):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2007-11-06  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix http://bugs.webkit.org/attachment.cgi?id=17043&action=view
        Bug 15766: [GTK] WebKit sometimes spews binary data as text/plain into iframes

        FrameLoaderClient::objectContentType needs to check with the MIMETypeRegistry
        to determine whether the given MIME type is displayable as an image or non-image.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (FrameLoaderClient::objectContentType): Change logic to match that in
        the Windows and Mac ports.

2007-11-05  Christian Dywan  <christian@twotoasts.de>

        Reviewed by Maciej.

        http://bugs.webkit.org/show_bug.cgi?id=15409
        FrameLoaderClientGtk hardcodes data, including platform to Linux i686

        Compute a proper user agent string.

        Patch includes fixes by Alp.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::agentPlatform):
        (WebKit::agentOS):
        (WebKit::composeUserAgent):
        (WebKit::FrameLoaderClient::userAgent):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2007-11-05  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Alp Toker.

        Remove unused m_firstData member from FrameLoaderClientGtk.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        * WebCoreSupport/FrameLoaderClientGtk.h:

2007-11-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp Toker.

        Fix http://bugs.webkit.org/show_bug.cgi?id=15842
        Bug 15842: [Gtk] about:blank doesn't work

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::finishedLoading): Set the encoding on the frame loader to
        get work done that is normally done when the first bit of data is received, even in the
        case of a document with no data (like about:blank).

2007-11-03  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Restore correct double and triple click behaviour

        We ended up ignoring GDK_2BUTTON_PRESS and GDK_3BUTTON_PRESS after
        recent refactoring.

        * Api/webkitgtkpage.cpp:

2007-11-03  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        Frame scrolling and invalidation fixes

        Make upward scroll events have a positive delta to match other ports.

        Fix the invalidation rect offset for frames so that scrolling works properly.

        Avoid allocating negative sizes to widgets to avoid GTK+ warnings.

        Allow tabbing to all widgets and links.

        Fix event returns, improving the focus situation and correcting scroll wheel
        behavior.

        * Api/webkitgtkpage.cpp:
        * WebCoreSupport/ChromeClientGtk.cpp:

2007-10-29  Alp Toker  <alp@atoker.com>

        Reviewed by Maciej.

        Do not allow control to reach end of non-void functions

        * Api/webkitgtksettings.cpp:

2007-10-28  Lars Lindner  <lars.lindner@gmail.com>

        Reviewed by Alp.

        http://bugs.webkit.org/show_bug.cgi?id=15466
        [gtk] widget does not take focus on mouse click

        Grab widget focus in mouse press callback.

        * Api/webkitgtkpage.cpp:

2007-10-25  Alp Toker  <alp@atoker.com>

        Reviewed by Brady.

        http://bugs.webkit.org/show_bug.cgi?id=15686
        GtkLauncher aborts on launch due to uninitialized threading subsystem

        Re-enable database support in the GTK+ port, with a fix.

        Initialize GLib threading as early as possible.

        * Api/webkitgtkglobal.cpp:

2007-10-25  Alp Toker  <alp@atoker.com>

        Unreviewed fix to make the GTK+ port run.

        http://bugs.webkit.org/show_bug.cgi?id=15686
        GtkLauncher aborts on launch due to uninitialized threading subsystem

        http://bugs.webkit.org/show_bug.cgi?id=15688
        [GTK] Make it possible to disable database support

        Make database path initialization conditional on database support
        being enabled.

        * Api/webkitgtkglobal.cpp:

2007-10-24  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.  Track WebCore changes in r27004.

        * Api/webkitgtkglobal.cpp:

2007-10-22  Alp Toker  <alp@atoker.com>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=15611
        [GTK] Text selection behaviour different in Debug and Release builds

        http://bugs.webkit.org/show_bug.cgi?id=15578
        [GTK] Text editor caret does not blink

        Never allow control to reach the end of non-void functions.

        Return more sensible values, or in some cases, nulls.

        * Api/webkitgtksettings.cpp:
        * Api/webkitgtksettings.h:
        * WebCoreSupport/DragClientGtk.cpp:
        (WebKit::DragClient::actionMaskForDrag):
        (WebKit::DragClient::dragSourceActionMaskForPoint):
        (WebKit::DragClient::createDragImageForLink):

2007-10-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Alp.

        Gtk changes needed to enable HTML 5 client-side database storage.

        * Api/webkitgtkglobal.cpp: Set a default database path based on the user data directory.
        This should become configurable by client applications in the future.

2007-10-20  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric.

        Don't allow control characters to be inserted into editable regions.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::handleKeypress):

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/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::runDatabaseSizeLimitPrompt):
        * WebCoreSupport/ChromeClientGtk.h:

2007-10-14  Jan Michael Alonzo  <jmalonzo@unpluggable.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=15299
        Fix "hovering_over_link" signal not emitted when consecutive links
        are hovered.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::mouseDidMoveOverElement):
        * WebCoreSupport/ChromeClientGtk.h:
        - Remove m_didSendLinkSignal as it is superseded by m_hoveredLinkURL

2007-10-10  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff Garen.

        changes to keep the build from breaking

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createFrame):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2007-10-03  Alp Toker  <alp@atoker.com>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=14726
        [gtk] API design. Mapping the WebView delegates to signals.

        Change the API namespace of the Gtk+ port from 'WebKitGtk' to 'WebKit'.

        * Api/webkitgtkdefines.h:
        * Api/webkitgtkframe.cpp:
        * Api/webkitgtkframe.h:
        * Api/webkitgtkglobal.cpp:
        * Api/webkitgtkglobal.h:
        * Api/webkitgtknetworkrequest.h:
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:
        * Api/webkitgtkprivate.cpp:
        (WebKit::apply):
        (WebKit::create):
        (WebKit::getFrameFromPage):
        (WebKit::getPageFromFrame):
        (WebKit::core):
        (WebKit::kit):
        * Api/webkitgtkprivate.h:
        * Api/webkitgtksettings.cpp:
        * Api/webkitgtksettings.h:
        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::ChromeClient):
        (WebKit::ChromeClient::createWindow):
        (WebKit::ChromeClient::addMessageToConsole):
        (WebKit::ChromeClient::runJavaScriptAlert):
        (WebKit::ChromeClient::runJavaScriptConfirm):
        (WebKit::ChromeClient::runJavaScriptPrompt):
        * WebCoreSupport/ChromeClientGtk.h:
        (WebKit::ChromeClient::webPage):
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::EditorClient):
        * WebCoreSupport/EditorClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):
        (WebKit::FrameLoaderClient::postProgressStartedNotification):
        (WebKit::FrameLoaderClient::postProgressEstimateChangedNotification):
        (WebKit::FrameLoaderClient::postProgressFinishedNotification):
        (WebKit::FrameLoaderClient::createFrame):
        (WebKit::FrameLoaderClient::dispatchDidReceiveIcon):
        (WebKit::FrameLoaderClient::setTitle):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        (WebKit::FrameLoaderClient::webFrame):

2007-10-02  Cosimo Cecchi  <cosimoc@svn.gnome.org>

        Reviewed by Mark.

        http://bugs.webkit.org/show_bug.cgi?id=15299
        Fix "hovering_over_link" signal being fired every time mouse moves.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::ChromeClient):
        (WebKit::ChromeClient::mouseDidMoveOverElement):
        * WebCoreSupport/ChromeClientGtk.h:

2007-09-21  Sean Egan  <seanegan@gmail.com>

        Reviewed by Alp.

        Add an "execute_script" method to programmatically call Javascript
        http://bugs.webkit.org/show_bug.cgi?id=15255

        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:

2007-09-29  Lars Lindner  <lars.lindner@gmail.com>

        Reviewed by Adam.

        ChromeClientGtk.cpp does not implement mouseDidMoveOverElement()
        http://bugs.webkit.org/show_bug.cgi?id=15299

        Implementing "hovering_over_link" signal.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::mouseDidMoveOverElement):

2007-09-26  Mark Rowe  <mrowe@apple.com>

        Gtk build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:  Check for empty URL instead of invalid URL.

2007-09-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        WebKitGtkPage and WebKitGtkFrame have a dependency on each other. To
        allow client code to include both headers the typedef's for
        WebKitGtkFrame, WebKitGtkPage, WebKitGtkFrameData and WebKitGtkNetworkRequest
        are moved into webkitgtkdefines.h and included by both webkitgtkpage.h and
        webkitgtkframe.h

        * Api/webkitgtkdefines.h:
        * Api/webkitgtkframe.h:
        * Api/webkitgtkpage.h:

2007-09-17  Cyril Brulebois  <cyril.brulebois@enst-bretagne.fr>

        Reviewed by Mark, some Coding Style changes by Holger.

        This is from http://bugs.webkit.org/show_bug.cgi?id=14812.

        Add title and location to WebKitGtkFramePrivate, add
        webkit_gtk_frame_get_location to the WebKitGtkFrame API as well
        as a title_changed callback, implement
        webkit_gtk_frame_get_title and webkit_gtk_frame_get_location.

        Initial patch by Diego Escalante Urrelo.

        * Api/webkitgtkframe.cpp:
        * Api/webkitgtkframe.h:
        * Api/webkitgtkprivate.h:

2007-09-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Use the new WebCore::String::fromUTF8 function to convert
        from the Gtk+ representation of a string to WebCore::String.

        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::runJavaScriptPrompt):

2007-09-10  Nigel Tao  <nigeltao@gnome.org>

        Reviewed by Mark Rowe.

        Fix a typo where webkit_gtk_page_can_copy was declared twice,
        rather than webkit_gtk_page_can_paste.

        * Api/webkitgtkpage.h:

2007-09-08  Brady Eidson  <beidson@apple.com>

        Better build fix

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::registerForIconNotification):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2007-09-08  Brady Eidson  <beidson@apple.com>

        Build fix

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::registerForIconNotification):
        * WebCoreSupport/FrameLoaderClientGtk.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 GTK build working with an empty stub.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::didPerformFirstNavigation):
        * WebCoreSupport/FrameLoaderClientGtk.h:

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/EditorClientGtk.cpp:
        (WebKit::EditorClient::setInputMethodState):
        * WebCoreSupport/EditorClientGtk.h:

2007-08-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix. Add const to the first parameter of createPlugin

        * WebCoreSupport/FrameLoaderClientGtk.cpp:

2007-08-17  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::createPlugin):
        * WebCoreSupport/FrameLoaderClientGtk.h:

2007-08-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        To not hit the needsLayout() assert of Frame::paint for subframes we need to
        make sure they are layed out. Use the newly created FrameView::layoutIfNeededRecursive
        method to do this.

        * Api/webkitgtkpage.cpp:

2007-08-11  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Fix text selection by setting a DragClient when creating the Page. Now
        that we have a DragClient we can free the Page when WebKitGtkPage gets
        destructed.

        * Api/webkitgtkpage.cpp:
        * WebCoreSupport/DragClientGtk.cpp: Added.
        (WebKit::DragClient::willPerformDragDestinationAction):
        (WebKit::DragClient::willPerformDragSourceAction):
        (WebKit::DragClient::actionMaskForDrag):
        (WebKit::DragClient::dragSourceActionMaskForPoint):
        (WebKit::DragClient::startDrag):
        (WebKit::DragClient::createDragImageForLink):
        * WebCoreSupport/DragClientGtk.h: Added.

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Anders.

        Make WebKitGtkPage a GtkContainer to avoid a size_allocate
        race of GtkScrollBar and GtkLayout.

        * Api/webkitgtk-marshal.list:
        * Api/webkitgtkframe.cpp:
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:
        * Api/webkitgtkprivate.h:

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Niko.

        Minor changes to the WebKit::EditorClient to allow removing
        of text from TextFields. Remove the selectWordBeforeMenuEvent method
        which is not used and not within WebCore::EditorClient.

        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::shouldDeleteRange):
        (WebKit::EditorClient::shouldBeginEditing):
        (WebKit::EditorClient::shouldEndEditing):
        (WebKit::EditorClient::shouldApplyStyle):
        (WebKit::EditorClient::shouldInsertNode):
        * WebCoreSupport/EditorClientGtk.h:

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Rename the namespace from WebKitGtk to WebKit. Move the various *Client
        classes into the WebKit namespace. Change the class names to not contain Gtk.
        The file names have to contain the Gtk suffix to not clash with files in WebCore (e.g.
        bridge/EditorClient.h).


        * Api/webkitgtkframe.cpp:
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkprivate.cpp:
        * Api/webkitgtkprivate.h:
        * ChangeLog:
        * WebCoreSupport/ChromeClientGtk.cpp:
        (WebKit::ChromeClient::ChromeClient):
        (WebKit::ChromeClient::chromeDestroyed):
        (WebKit::ChromeClient::windowRect):
        (WebKit::ChromeClient::setWindowRect):
        (WebKit::ChromeClient::pageRect):
        (WebKit::ChromeClient::scaleFactor):
        (WebKit::ChromeClient::focus):
        (WebKit::ChromeClient::unfocus):
        (WebKit::ChromeClient::createWindow):
        (WebKit::ChromeClient::createModalDialog):
        (WebKit::ChromeClient::show):
        (WebKit::ChromeClient::canRunModal):
        (WebKit::ChromeClient::runModal):
        (WebKit::ChromeClient::setToolbarsVisible):
        (WebKit::ChromeClient::toolbarsVisible):
        (WebKit::ChromeClient::setStatusbarVisible):
        (WebKit::ChromeClient::statusbarVisible):
        (WebKit::ChromeClient::setScrollbarsVisible):
        (WebKit::ChromeClient::scrollbarsVisible):
        (WebKit::ChromeClient::setMenubarVisible):
        (WebKit::ChromeClient::menubarVisible):
        (WebKit::ChromeClient::setResizable):
        (WebKit::ChromeClient::closeWindowSoon):
        (WebKit::ChromeClient::canTakeFocus):
        (WebKit::ChromeClient::takeFocus):
        (WebKit::ChromeClient::canRunBeforeUnloadConfirmPanel):
        (WebKit::ChromeClient::runBeforeUnloadConfirmPanel):
        (WebKit::ChromeClient::runJavaScriptAlert):
        (WebKit::ChromeClient::runJavaScriptConfirm):
        (WebKit::ChromeClient::setStatusbarText):
        (WebKit::ChromeClient::shouldInterruptJavaScript):
        (WebKit::ChromeClient::tabsToLinks):
        (WebKit::ChromeClient::windowResizerRect):
        (WebKit::ChromeClient::addToDirtyRegion):
        (WebKit::ChromeClient::scrollBackingStore):
        (WebKit::ChromeClient::updateBackingStore):
        (WebKit::ChromeClient::mouseDidMoveOverElement):
        (WebKit::ChromeClient::setToolTip):
        * WebCoreSupport/ChromeClientGtk.h:
        * WebCoreSupport/ContextMenuClientGtk.cpp:
        (WebKit::ContextMenuClient::contextMenuDestroyed):
        (WebKit::ContextMenuClient::getCustomMenuFromDefaultItems):
        (WebKit::ContextMenuClient::contextMenuItemSelected):
        (WebKit::ContextMenuClient::downloadURL):
        (WebKit::ContextMenuClient::copyImageToClipboard):
        (WebKit::ContextMenuClient::searchWithGoogle):
        (WebKit::ContextMenuClient::lookUpInDictionary):
        (WebKit::ContextMenuClient::speak):
        * WebCoreSupport/ContextMenuClientGtk.h:
        * WebCoreSupport/EditorClientGtk.cpp:
        (WebKit::EditorClient::shouldDeleteRange):
        (WebKit::EditorClient::shouldShowDeleteInterface):
        (WebKit::EditorClient::isContinuousSpellCheckingEnabled):
        (WebKit::EditorClient::isGrammarCheckingEnabled):
        (WebKit::EditorClient::spellCheckerDocumentTag):
        (WebKit::EditorClient::shouldBeginEditing):
        (WebKit::EditorClient::shouldEndEditing):
        (WebKit::EditorClient::shouldInsertText):
        (WebKit::EditorClient::shouldChangeSelectedRange):
        (WebKit::EditorClient::shouldApplyStyle):
        (WebKit::EditorClient::shouldMoveRangeAfterDelete):
        (WebKit::EditorClient::didBeginEditing):
        (WebKit::EditorClient::respondToChangedContents):
        (WebKit::EditorClient::respondToChangedSelection):
        (WebKit::EditorClient::didEndEditing):
        (WebKit::EditorClient::didWriteSelectionToPasteboard):
        (WebKit::EditorClient::didSetSelectionTypesForPasteboard):
        (WebKit::EditorClient::selectWordBeforeMenuEvent):
        (WebKit::EditorClient::isEditable):
        (WebKit::EditorClient::registerCommandForUndo):
        (WebKit::EditorClient::registerCommandForRedo):
        (WebKit::EditorClient::clearUndoRedoOperations):
        (WebKit::EditorClient::canUndo):
        (WebKit::EditorClient::canRedo):
        (WebKit::EditorClient::undo):
        (WebKit::EditorClient::redo):
        (WebKit::EditorClient::shouldInsertNode):
        (WebKit::EditorClient::pageDestroyed):
        (WebKit::EditorClient::smartInsertDeleteEnabled):
        (WebKit::EditorClient::toggleContinuousSpellChecking):
        (WebKit::EditorClient::toggleGrammarChecking):
        (WebKit::EditorClient::handleInputMethodKeypress):
        (WebKit::EditorClient::EditorClient):
        (WebKit::EditorClient::textFieldDidBeginEditing):
        (WebKit::EditorClient::textFieldDidEndEditing):
        (WebKit::EditorClient::textDidChangeInTextField):
        (WebKit::EditorClient::doTextFieldCommandFromEvent):
        (WebKit::EditorClient::textWillBeDeletedInTextField):
        (WebKit::EditorClient::textDidChangeInTextArea):
        (WebKit::EditorClient::ignoreWordInSpellDocument):
        (WebKit::EditorClient::learnWord):
        (WebKit::EditorClient::checkSpellingOfString):
        (WebKit::EditorClient::checkGrammarOfString):
        (WebKit::EditorClient::updateSpellingUIWithGrammarString):
        (WebKit::EditorClient::updateSpellingUIWithMisspelledWord):
        (WebKit::EditorClient::showSpellingUI):
        (WebKit::EditorClient::spellingUIIsShowing):
        * WebCoreSupport/EditorClientGtk.h:
        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::FrameLoaderClient::FrameLoaderClient):
        (WebKit::FrameLoaderClient::userAgent):
        (WebKit::FrameLoaderClient::createDocumentLoader):
        (WebKit::FrameLoaderClient::committedLoad):
        (WebKit::FrameLoaderClient::dispatchDidReceiveAuthenticationChallenge):
        (WebKit::FrameLoaderClient::dispatchDidCancelAuthenticationChallenge):
        (WebKit::FrameLoaderClient::dispatchWillSendRequest):
        (WebKit::FrameLoaderClient::assignIdentifierToInitialRequest):
        (WebKit::FrameLoaderClient::postProgressStartedNotification):
        (WebKit::FrameLoaderClient::postProgressFinishedNotification):
        (WebKit::FrameLoaderClient::frameLoaderDestroyed):
        (WebKit::FrameLoaderClient::dispatchDidReceiveResponse):
        (WebKit::FrameLoaderClient::createPlugin):
        (WebKit::FrameLoaderClient::redirectDataToPlugin):
        (WebKit::FrameLoaderClient::createJavaAppletWidget):
        (WebKit::FrameLoaderClient::overrideMediaType):
        (WebKit::FrameLoaderClient::windowObjectCleared):
        (WebKit::FrameLoaderClient::setMainFrameDocumentReady):
        (WebKit::FrameLoaderClient::hasWebView):
        (WebKit::FrameLoaderClient::hasFrameView):
        (WebKit::FrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::FrameLoaderClient::frameLoadCompleted):
        (WebKit::FrameLoaderClient::saveViewStateToItem):
        (WebKit::FrameLoaderClient::restoreViewState):
        (WebKit::FrameLoaderClient::privateBrowsingEnabled):
        (WebKit::FrameLoaderClient::makeDocumentView):
        (WebKit::FrameLoaderClient::makeRepresentation):
        (WebKit::FrameLoaderClient::forceLayout):
        (WebKit::FrameLoaderClient::forceLayoutForNonHTML):
        (WebKit::FrameLoaderClient::setCopiesOnScroll):
        (WebKit::FrameLoaderClient::detachedFromParent1):
        (WebKit::FrameLoaderClient::detachedFromParent2):
        (WebKit::FrameLoaderClient::detachedFromParent3):
        (WebKit::FrameLoaderClient::detachedFromParent4):
        (WebKit::FrameLoaderClient::loadedFromCachedPage):
        (WebKit::FrameLoaderClient::dispatchDidHandleOnloadEvents):
        (WebKit::FrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebKit::FrameLoaderClient::dispatchDidCancelClientRedirect):
        (WebKit::FrameLoaderClient::dispatchWillPerformClientRedirect):
        (WebKit::FrameLoaderClient::dispatchDidChangeLocationWithinPage):
        (WebKit::FrameLoaderClient::dispatchWillClose):
        (WebKit::FrameLoaderClient::dispatchDidReceiveIcon):
        (WebKit::FrameLoaderClient::dispatchDidStartProvisionalLoad):
        (WebKit::FrameLoaderClient::dispatchDidReceiveTitle):
        (WebKit::FrameLoaderClient::dispatchDidCommitLoad):
        (WebKit::FrameLoaderClient::dispatchDidFinishDocumentLoad):
        (WebKit::FrameLoaderClient::dispatchDidFirstLayout):
        (WebKit::FrameLoaderClient::dispatchShow):
        (WebKit::FrameLoaderClient::cancelPolicyCheck):
        (WebKit::FrameLoaderClient::dispatchDidLoadMainResource):
        (WebKit::FrameLoaderClient::revertToProvisionalState):
        (WebKit::FrameLoaderClient::clearUnarchivingState):
        (WebKit::FrameLoaderClient::willChangeTitle):
        (WebKit::FrameLoaderClient::didChangeTitle):
        (WebKit::FrameLoaderClient::finishedLoading):
        (WebKit::FrameLoaderClient::finalSetupForReplace):
        (WebKit::FrameLoaderClient::setDefersLoading):
        (WebKit::FrameLoaderClient::isArchiveLoadPending):
        (WebKit::FrameLoaderClient::cancelPendingArchiveLoad):
        (WebKit::FrameLoaderClient::clearArchivedResources):
        (WebKit::FrameLoaderClient::canHandleRequest):
        (WebKit::FrameLoaderClient::canShowMIMEType):
        (WebKit::FrameLoaderClient::representationExistsForURLScheme):
        (WebKit::FrameLoaderClient::generatedMIMETypeForURLScheme):
        (WebKit::FrameLoaderClient::provisionalLoadStarted):
        (WebKit::FrameLoaderClient::didFinishLoad):
        (WebKit::FrameLoaderClient::setDocumentViewFromCachedPage):
        (WebKit::FrameLoaderClient::dispatchDidReceiveContentLength):
        (WebKit::FrameLoaderClient::dispatchDidFinishLoading):
        (WebKit::FrameLoaderClient::dispatchDidFailLoading):
        (WebKit::FrameLoaderClient::dispatchDidLoadResourceFromMemoryCache):
        (WebKit::FrameLoaderClient::dispatchDidFailProvisionalLoad):
        (WebKit::FrameLoaderClient::dispatchDidFailLoad):
        (WebKit::FrameLoaderClient::download):
        (WebKit::FrameLoaderClient::cancelledError):
        (WebKit::FrameLoaderClient::blockedError):
        (WebKit::FrameLoaderClient::cannotShowURLError):
        (WebKit::FrameLoaderClient::interruptForPolicyChangeError):
        (WebKit::FrameLoaderClient::cannotShowMIMETypeError):
        (WebKit::FrameLoaderClient::fileDoesNotExistError):
        (WebKit::FrameLoaderClient::shouldFallBack):
        (WebKit::FrameLoaderClient::willUseArchive):
        (WebKit::FrameLoaderClient::saveDocumentViewToCachedPage):
        (WebKit::FrameLoaderClient::canCachePage):
        (WebKit::FrameLoaderClient::dispatchCreatePage):
        (WebKit::FrameLoaderClient::dispatchUnableToImplementPolicy):
        * WebCoreSupport/FrameLoaderClientGtk.h:
        * WebCoreSupport/InspectorClientGtk.cpp:
        (WebKit::InspectorClient::inspectorDestroyed):
        (WebKit::InspectorClient::createPage):
        (WebKit::InspectorClient::showWindow):
        (WebKit::InspectorClient::closeWindow):
        (WebKit::InspectorClient::attachWindow):
        (WebKit::InspectorClient::detachWindow):
        (WebKit::InspectorClient::highlight):
        (WebKit::InspectorClient::hideHighlight):
        * WebCoreSupport/InspectorClientGtk.h:

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        As of http://bugs.webkit.org/show_bug.cgi?id=14727 move the
        various *ClientGdk.{cpp,h} files from WebCore to WebKit/gtk/WebCoreSupport and
        rename it from Gdk to Gtk.

        * Api/webkitgtkdefines.h:
        * Api/webkitgtkframe.cpp:
        * Api/webkitgtkframe.h:
        * Api/webkitgtkglobal.cpp:
        * Api/webkitgtkglobal.h:
        * Api/webkitgtknetworkrequest.cpp:
        * Api/webkitgtknetworkrequest.h:
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:
        * Api/webkitgtkprivate.cpp:
        * Api/webkitgtkprivate.h:
        * Api/webkitgtksettings.cpp:
        * Api/webkitgtksettings.h:
        * WebCoreSupport/ChromeClientGtk.cpp: Renamed from WebKit/gtk/WebCoreSupport/ChromeClientGdk.cpp.
        (WebKitGtk::ChromeClientGtk::ChromeClientGtk):
        (WebKitGtk::ChromeClientGtk::chromeDestroyed):
        (WebKitGtk::ChromeClientGtk::windowRect):
        (WebKitGtk::ChromeClientGtk::setWindowRect):
        (WebKitGtk::ChromeClientGtk::pageRect):
        (WebKitGtk::ChromeClientGtk::scaleFactor):
        (WebKitGtk::ChromeClientGtk::focus):
        (WebKitGtk::ChromeClientGtk::unfocus):
        (WebKitGtk::ChromeClientGtk::createWindow):
        (WebKitGtk::ChromeClientGtk::createModalDialog):
        (WebKitGtk::ChromeClientGtk::show):
        (WebKitGtk::ChromeClientGtk::canRunModal):
        (WebKitGtk::ChromeClientGtk::runModal):
        (WebKitGtk::ChromeClientGtk::setToolbarsVisible):
        (WebKitGtk::ChromeClientGtk::toolbarsVisible):
        (WebKitGtk::ChromeClientGtk::setStatusbarVisible):
        (WebKitGtk::ChromeClientGtk::statusbarVisible):
        (WebKitGtk::ChromeClientGtk::setScrollbarsVisible):
        (WebKitGtk::ChromeClientGtk::scrollbarsVisible):
        (WebKitGtk::ChromeClientGtk::setMenubarVisible):
        (WebKitGtk::ChromeClientGtk::menubarVisible):
        (WebKitGtk::ChromeClientGtk::setResizable):
        (WebKitGtk::ChromeClientGtk::closeWindowSoon):
        (WebKitGtk::ChromeClientGtk::canTakeFocus):
        (WebKitGtk::ChromeClientGtk::takeFocus):
        (WebKitGtk::ChromeClientGtk::canRunBeforeUnloadConfirmPanel):
        (WebKitGtk::ChromeClientGtk::runBeforeUnloadConfirmPanel):
        (WebKitGtk::ChromeClientGtk::addMessageToConsole):
        (WebKitGtk::ChromeClientGtk::runJavaScriptAlert):
        (WebKitGtk::ChromeClientGtk::runJavaScriptConfirm):
        (WebKitGtk::ChromeClientGtk::runJavaScriptPrompt):
        (WebKitGtk::ChromeClientGtk::setStatusbarText):
        (WebKitGtk::ChromeClientGtk::shouldInterruptJavaScript):
        (WebKitGtk::ChromeClientGtk::tabsToLinks):
        (WebKitGtk::ChromeClientGtk::windowResizerRect):
        (WebKitGtk::ChromeClientGtk::addToDirtyRegion):
        (WebKitGtk::ChromeClientGtk::scrollBackingStore):
        (WebKitGtk::ChromeClientGtk::updateBackingStore):
        (WebKitGtk::ChromeClientGtk::mouseDidMoveOverElement):
        (WebKitGtk::ChromeClientGtk::setToolTip):
        * WebCoreSupport/ChromeClientGtk.h: Renamed from WebKit/gtk/WebCoreSupport/ChromeClientGdk.h.
        (WebKitGtk::ChromeClientGtk::webPage):
        * WebCoreSupport/ContextMenuClientGtk.cpp: Renamed from WebCore/page/gdk/ContextMenuClientGdk.cpp.
        (WebCore::ContextMenuClientGtk::contextMenuDestroyed):
        (WebCore::ContextMenuClientGtk::getCustomMenuFromDefaultItems):
        (WebCore::ContextMenuClientGtk::contextMenuItemSelected):
        (WebCore::ContextMenuClientGtk::downloadURL):
        (WebCore::ContextMenuClientGtk::copyImageToClipboard):
        (WebCore::ContextMenuClientGtk::searchWithGoogle):
        (WebCore::ContextMenuClientGtk::lookUpInDictionary):
        (WebCore::ContextMenuClientGtk::speak):
        (WebCore::ContextMenuClientGtk::stopSpeaking):
        * WebCoreSupport/ContextMenuClientGtk.h: Renamed from WebCore/page/gdk/ContextMenuClientGdk.h.
        * WebCoreSupport/EditorClientGtk.cpp: Renamed from WebCore/platform/gdk/EditorClientGdk.cpp.
        (WebCore::EditorClientGtk::shouldDeleteRange):
        (WebCore::EditorClientGtk::shouldShowDeleteInterface):
        (WebCore::EditorClientGtk::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientGtk::isGrammarCheckingEnabled):
        (WebCore::EditorClientGtk::spellCheckerDocumentTag):
        (WebCore::EditorClientGtk::shouldBeginEditing):
        (WebCore::EditorClientGtk::shouldEndEditing):
        (WebCore::EditorClientGtk::shouldInsertText):
        (WebCore::EditorClientGtk::shouldChangeSelectedRange):
        (WebCore::EditorClientGtk::shouldApplyStyle):
        (WebCore::EditorClientGtk::shouldMoveRangeAfterDelete):
        (WebCore::EditorClientGtk::didBeginEditing):
        (WebCore::EditorClientGtk::respondToChangedContents):
        (WebCore::EditorClientGtk::respondToChangedSelection):
        (WebCore::EditorClientGtk::didEndEditing):
        (WebCore::EditorClientGtk::didWriteSelectionToPasteboard):
        (WebCore::EditorClientGtk::didSetSelectionTypesForPasteboard):
        (WebCore::EditorClientGtk::selectWordBeforeMenuEvent):
        (WebCore::EditorClientGtk::isEditable):
        (WebCore::EditorClientGtk::registerCommandForUndo):
        (WebCore::EditorClientGtk::registerCommandForRedo):
        (WebCore::EditorClientGtk::clearUndoRedoOperations):
        (WebCore::EditorClientGtk::canUndo):
        (WebCore::EditorClientGtk::canRedo):
        (WebCore::EditorClientGtk::undo):
        (WebCore::EditorClientGtk::redo):
        (WebCore::EditorClientGtk::shouldInsertNode):
        (WebCore::EditorClientGtk::pageDestroyed):
        (WebCore::EditorClientGtk::smartInsertDeleteEnabled):
        (WebCore::EditorClientGtk::toggleContinuousSpellChecking):
        (WebCore::EditorClientGtk::toggleGrammarChecking):
        (WebCore::EditorClientGtk::handleKeypress):
        (WebCore::EditorClientGtk::handleInputMethodKeypress):
        (WebCore::EditorClientGtk::EditorClientGtk):
        (WebCore::EditorClientGtk::textFieldDidBeginEditing):
        (WebCore::EditorClientGtk::textFieldDidEndEditing):
        (WebCore::EditorClientGtk::textDidChangeInTextField):
        (WebCore::EditorClientGtk::doTextFieldCommandFromEvent):
        (WebCore::EditorClientGtk::textWillBeDeletedInTextField):
        (WebCore::EditorClientGtk::textDidChangeInTextArea):
        (WebCore::EditorClientGtk::ignoreWordInSpellDocument):
        (WebCore::EditorClientGtk::learnWord):
        (WebCore::EditorClientGtk::checkSpellingOfString):
        (WebCore::EditorClientGtk::checkGrammarOfString):
        (WebCore::EditorClientGtk::updateSpellingUIWithGrammarString):
        (WebCore::EditorClientGtk::updateSpellingUIWithMisspelledWord):
        (WebCore::EditorClientGtk::showSpellingUI):
        (WebCore::EditorClientGtk::spellingUIIsShowing):
        (WebCore::EditorClientGtk::getGuessesForWord):
        * WebCoreSupport/EditorClientGtk.h: Renamed from WebCore/platform/gdk/EditorClientGdk.h.
        * WebCoreSupport/FrameLoaderClientGtk.cpp: Renamed from WebCore/loader/gdk/FrameLoaderClientGdk.cpp.
        (WebCore::FrameLoaderClientGtk::FrameLoaderClientGtk):
        (WebCore::FrameLoaderClientGtk::userAgent):
        (WebCore::FrameLoaderClientGtk::createDocumentLoader):
        (WebCore::FrameLoaderClientGtk::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientGtk::committedLoad):
        (WebCore::FrameLoaderClientGtk::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientGtk::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientGtk::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientGtk::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientGtk::postProgressStartedNotification):
        (WebCore::FrameLoaderClientGtk::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientGtk::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientGtk::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientGtk::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientGtk::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientGtk::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientGtk::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientGtk::createPlugin):
        (WebCore::FrameLoaderClientGtk::createFrame):
        (WebCore::FrameLoaderClientGtk::redirectDataToPlugin):
        (WebCore::FrameLoaderClientGtk::createJavaAppletWidget):
        (WebCore::FrameLoaderClientGtk::objectContentType):
        (WebCore::FrameLoaderClientGtk::overrideMediaType):
        (WebCore::FrameLoaderClientGtk::windowObjectCleared):
        (WebCore::FrameLoaderClientGtk::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientGtk::hasWebView):
        (WebCore::FrameLoaderClientGtk::hasFrameView):
        (WebCore::FrameLoaderClientGtk::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientGtk::frameLoadCompleted):
        (WebCore::FrameLoaderClientGtk::saveViewStateToItem):
        (WebCore::FrameLoaderClientGtk::restoreViewState):
        (WebCore::FrameLoaderClientGtk::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientGtk::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientGtk::makeDocumentView):
        (WebCore::FrameLoaderClientGtk::makeRepresentation):
        (WebCore::FrameLoaderClientGtk::forceLayout):
        (WebCore::FrameLoaderClientGtk::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientGtk::setCopiesOnScroll):
        (WebCore::FrameLoaderClientGtk::detachedFromParent1):
        (WebCore::FrameLoaderClientGtk::detachedFromParent2):
        (WebCore::FrameLoaderClientGtk::detachedFromParent3):
        (WebCore::FrameLoaderClientGtk::detachedFromParent4):
        (WebCore::FrameLoaderClientGtk::loadedFromCachedPage):
        (WebCore::FrameLoaderClientGtk::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientGtk::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientGtk::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientGtk::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientGtk::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientGtk::dispatchWillClose):
        (WebCore::FrameLoaderClientGtk::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientGtk::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientGtk::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientGtk::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientGtk::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientGtk::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientGtk::dispatchShow):
        (WebCore::FrameLoaderClientGtk::cancelPolicyCheck):
        (WebCore::FrameLoaderClientGtk::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientGtk::revertToProvisionalState):
        (WebCore::FrameLoaderClientGtk::clearUnarchivingState):
        (WebCore::FrameLoaderClientGtk::willChangeTitle):
        (WebCore::FrameLoaderClientGtk::didChangeTitle):
        (WebCore::FrameLoaderClientGtk::finishedLoading):
        (WebCore::FrameLoaderClientGtk::finalSetupForReplace):
        (WebCore::FrameLoaderClientGtk::setDefersLoading):
        (WebCore::FrameLoaderClientGtk::isArchiveLoadPending):
        (WebCore::FrameLoaderClientGtk::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientGtk::clearArchivedResources):
        (WebCore::FrameLoaderClientGtk::canHandleRequest):
        (WebCore::FrameLoaderClientGtk::canShowMIMEType):
        (WebCore::FrameLoaderClientGtk::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientGtk::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientGtk::provisionalLoadStarted):
        (WebCore::FrameLoaderClientGtk::didFinishLoad):
        (WebCore::FrameLoaderClientGtk::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientGtk::setTitle):
        (WebCore::FrameLoaderClientGtk::setDocumentViewFromCachedPage):
        (WebCore::FrameLoaderClientGtk::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientGtk::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientGtk::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientGtk::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientGtk::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientGtk::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientGtk::download):
        (WebCore::FrameLoaderClientGtk::cancelledError):
        (WebCore::FrameLoaderClientGtk::blockedError):
        (WebCore::FrameLoaderClientGtk::cannotShowURLError):
        (WebCore::FrameLoaderClientGtk::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientGtk::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientGtk::fileDoesNotExistError):
        (WebCore::FrameLoaderClientGtk::shouldFallBack):
        (WebCore::FrameLoaderClientGtk::willUseArchive):
        (WebCore::FrameLoaderClientGtk::saveDocumentViewToCachedPage):
        (WebCore::FrameLoaderClientGtk::canCachePage):
        (WebCore::FrameLoaderClientGtk::dispatchCreatePage):
        (WebCore::FrameLoaderClientGtk::dispatchUnableToImplementPolicy):
        * WebCoreSupport/FrameLoaderClientGtk.h: Renamed from WebCore/loader/gdk/FrameLoaderClientGdk.h.
        (WebCore::FrameLoaderClientGtk::~FrameLoaderClientGtk):
        (WebCore::FrameLoaderClientGtk::webFrame):
        * WebCoreSupport/InspectorClientGtk.cpp: Renamed from WebCore/page/gdk/InspectorClientGdk.cpp.
        (WebCore::InspectorClientGtk::inspectorDestroyed):
        (WebCore::InspectorClientGtk::createPage):
        (WebCore::InspectorClientGtk::showWindow):
        (WebCore::InspectorClientGtk::closeWindow):
        (WebCore::InspectorClientGtk::attachWindow):
        (WebCore::InspectorClientGtk::detachWindow):
        (WebCore::InspectorClientGtk::highlight):
        (WebCore::InspectorClientGtk::hideHighlight):
        (WebCore::InspectorClientGtk::inspectedURLChanged):
        * WebCoreSupport/InspectorClientGtk.h: Renamed from WebCore/page/gdk/InspectorClientGdk.h.

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix.

        * Api/webkitgtkframe.cpp:

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Remove the create_frame virtual method of WebKitGtkPage. This method was inspired
        by the Qt port but to be useful for reimplementations WebKitGtkFrameData would need
        to export/expose WebCore types. WebView doesn't offer such a method so I decided to
        remove it.
        Add a internal constructor to WebKitGtkFrame to be used for constructing Sub-Frames. This
        is currently used by FrameLoaderClientGdk::createFrame.

        * Api/webkitgtkframe.cpp:
        * Api/webkitgtkframedata.cpp: Removed.
        * Api/webkitgtkframedata.h: Removed.
        * Api/webkitgtkpage.cpp:
        * Api/webkitgtkpage.h:
        * Api/webkitgtkprivate.h:

2007-08-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Follow the changes of ScrollView in WebCore and call setContainingWindow, set the
        GtkAdjustment of the GtkLayout and reimplement the set_scroll_adjustments method and pass
        the GtkAdjustments to ScrollView.
        This makes having one GdkWindow for the complete FrameTree possible.


        * gtk/Api/webkitgtkframe.cpp:
        * gtk/Api/webkitgtkpage.cpp:

2007-08-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Niko.

        We only need to set the Settings of the Page once so do it in
        WebKitGtkPage instead of WebKitGtkFrame.

        * gtk/Api/webkitgtkframe.cpp:
        * gtk/Api/webkitgtkpage.cpp:

2007-08-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Niko.

        Instead of reimplementing the general event method, reimplement
        the specific mouse, expose, keyboard event methods.

        Call the finalize implementation of the base class from WebKitGtkPage
        and WebKitGtkFrame.

        * gtk/Api/webkitgtkframe.cpp:
        * gtk/Api/webkitgtkpage.cpp:

2007-08-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Niko.

        Remove the custom painting in favor of the Widget::paint
        implementation.

        * gtk/Api/webkitgtkpage.cpp:

2007-08-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Moved code from class FrameGdk into WebKitGtkFrame. Update the
        webkitgrkprivate.h header file to not include FrameGdk.h.

        * gtk/Api/webkitgtkframe.cpp:
        * gtk/Api/webkitgtkprivate.h:

2007-08-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Change variable names to follow the Coding-Style. Replace occurences
        of a_b with aB and place the '*' correctly.

        * gtk/Api/webkitgtkframe.cpp:
        * gtk/Api/webkitgtkpage.cpp:
        * gtk/Api/webkitgtkprivate.h:

2007-08-08  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Reimplement GtkWidget::event and handle the keyboard and mouse
        events inside WebKitGtkPage.

        * gtk/Api/webkitgtkpage.cpp:
        (FrameGdkExposeData::frame_gdk_expose_child):
        (FrameGdkExposeData::webkit_gtk_page_rendering_area_handle_gdk_event):
        (FrameGdkExposeData::webkit_gtk_page_register_rendering_area_events):
        (FrameGdkExposeData::webkit_gtk_page_class_init):

2007-08-07  Xan Lopez  <xan@gnome.org>

        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=14815
        [gtk] API implementation: reload

        * gtk/Api/webkitgtkpage.cpp: Implement the webkit_gtk_page_reload()
        function.

2007-07-30  Diego Escalante Urrelo  <diegoe@gnome.org>

        Reviewed by Adam.

        http://bugs.webkit.org/show_bug.cgi?id=14806
        Implement can_go_backward and can_go_forward in webkitgtkpage.cpp

        * gtk/Api/webkitgtkpage.cpp: Implement webkit_gtk_page_can_go_backward() and
        webkit_gtk_page_can_go_forward() functions.

2007-07-30  Diego Escalante Urrelo  <diegoe@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=14810
        Bad n_params on load_finished's g_signal_new in webkitgtkpage.cpp

        This is the proper fix for #14810.

        * gtk/Api/webkitgtkframe.cpp:
        * gtk/Api/webkitgtkpage.cpp: Fix the marshaller type of the "load_finished" signal and
        correct the class_offset parameters.

2007-07-29  Diego Escalante Urrelo  <diegoe@gnome.org>

        Reviewed by Alp Toker.

        http://bugs.webkit.org/show_bug.cgi?id=14810
        Bad n_params on load_finished's g_signal_new in webkitgtkpage.cpp

        * gtk/Api/webkitgtkpage.cpp: Use a correct n_params value and the corresponding types for
        them in the "load_finished" signal.

2007-07-22  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Adam.

        Add the first API and partial implementation of the WebKit/Gtk port as
        of http://bugs.webkit.org/show_bug.cgi?id=14678.

        The delegates of WebView will be modeled as signals. Delegates like the
        WebPolicyDelegate will be implemented as signals with default handlers.

        Start moving files to WebKit/gtk/WebCoreSupport.

        * gtk: Added.
        * gtk/Api: Added.
        * gtk/Api/headers.pri: Added.
        * gtk/Api/webkitgtk-marshal.list: Added.
        * gtk/Api/webkitgtkdefines.h: Added.
        * gtk/Api/webkitgtkframe.cpp: Added.
        * gtk/Api/webkitgtkframe.h: Added.
        * gtk/Api/webkitgtkframedata.cpp: Added.
        * gtk/Api/webkitgtkframedata.h: Added.
        * gtk/Api/webkitgtkglobal.cpp: Added.
        * gtk/Api/webkitgtkglobal.h: Added.
        * gtk/Api/webkitgtknetworkrequest.cpp: Added.
        * gtk/Api/webkitgtknetworkrequest.h: Added.
        * gtk/Api/webkitgtkpage.cpp: Added.
        * gtk/Api/webkitgtkpage.h: Added.
        * gtk/Api/webkitgtkprivate.cpp: Added.
        * gtk/Api/webkitgtkprivate.h: Added.
        * gtk/Api/webkitgtksettings.cpp: Added.
        * gtk/Api/webkitgtksettings.h: Added.
        * gtk/WebCoreSupport: Added.
        * gtk/WebCoreSupport/ChromeClientGdk.cpp: Added.
        (WebCore::ChromeClientGdk::ChromeClientGdk):
        (WebCore::ChromeClientGdk::chromeDestroyed):
        (WebCore::ChromeClientGdk::windowRect):
        (WebCore::ChromeClientGdk::setWindowRect):
        (WebCore::ChromeClientGdk::pageRect):
        (WebCore::ChromeClientGdk::scaleFactor):
        (WebCore::ChromeClientGdk::focus):
        (WebCore::ChromeClientGdk::unfocus):
        (WebCore::ChromeClientGdk::createWindow):
        (WebCore::ChromeClientGdk::createModalDialog):
        (WebCore::ChromeClientGdk::show):
        (WebCore::ChromeClientGdk::canRunModal):
        (WebCore::ChromeClientGdk::runModal):
        (WebCore::ChromeClientGdk::setToolbarsVisible):
        (WebCore::ChromeClientGdk::toolbarsVisible):
        (WebCore::ChromeClientGdk::setStatusbarVisible):
        (WebCore::ChromeClientGdk::statusbarVisible):
        (WebCore::ChromeClientGdk::setScrollbarsVisible):
        (WebCore::ChromeClientGdk::scrollbarsVisible):
        (WebCore::ChromeClientGdk::setMenubarVisible):
        (WebCore::ChromeClientGdk::menubarVisible):
        (WebCore::ChromeClientGdk::setResizable):
        (WebCore::ChromeClientGdk::closeWindowSoon):
        (WebCore::ChromeClientGdk::canTakeFocus):
        (WebCore::ChromeClientGdk::takeFocus):
        (WebCore::ChromeClientGdk::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientGdk::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientGdk::addMessageToConsole):
        (WebCore::ChromeClientGdk::runJavaScriptAlert):
        (WebCore::ChromeClientGdk::runJavaScriptConfirm):
        (WebCore::ChromeClientGdk::runJavaScriptPrompt):
        (WebCore::ChromeClientGdk::setStatusbarText):
        (WebCore::ChromeClientGdk::shouldInterruptJavaScript):
        (WebCore::ChromeClientGdk::tabsToLinks):
        (WebCore::ChromeClientGdk::windowResizerRect):
        (WebCore::ChromeClientGdk::addToDirtyRegion):
        (WebCore::ChromeClientGdk::scrollBackingStore):
        (WebCore::ChromeClientGdk::updateBackingStore):
        (WebCore::ChromeClientGdk::mouseDidMoveOverElement):
        (WebCore::ChromeClientGdk::setToolTip):
        (WebCore::ChromeClientGdk::print):
        * gtk/WebCoreSupport/ChromeClientGdk.h: Added.

