Changeset 98245 in webkit


Ignore:
Timestamp:
Oct 24, 2011 8:24:08 AM (13 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] Initial implementation of back forward list for WebKit2 GTK+ API
https://bugs.webkit.org/show_bug.cgi?id=69343

Reviewed by Martin Robinson.

  • GNUmakefile.am: Add new files to compilation.
  • UIProcess/API/gtk/WebKitBackForwardList.cpp: Added.

(webkitBackForwardListFinalize):
(webkit_back_forward_list_init):
(webkit_back_forward_list_class_init):
(webkitBackForwardListGetOrCreateItem): Helper function that
creates a new WebKitBackForwardListItem for the given
WebBackForwardListItem or returns it from the cache if it's
already cached.
(webkitBackForwardListCreateList): Helper function to convert a
WKArray of WebBackForwardListItems into a GList of
WebKitBackForwardListItems.
(webkitBackForwardListCreate): Create a new WebKitBackForwardList.
(webkitBackForwardListChanged): Emits changed signal when the back
forward list changes.
(webkit_back_forward_list_get_current_item):
(webkit_back_forward_list_get_back_item):
(webkit_back_forward_list_get_forward_item):
(webkit_back_forward_list_get_nth_item):
(webkit_back_forward_list_get_length):
(webkit_back_forward_list_get_back_list):
(webkit_back_forward_list_get_back_list_with_limit):
(webkit_back_forward_list_get_forward_list):
(webkit_back_forward_list_get_forward_list_with_limit):

  • UIProcess/API/gtk/WebKitBackForwardList.h: Added.
  • UIProcess/API/gtk/WebKitBackForwardListItem.cpp: Added.

(webkitBackForwardListItemFinalize):
(webkit_back_forward_list_item_init):
(webkit_back_forward_list_item_class_init):
(historyItemsMap): Global cache for WebKitBackForwardListItems.
(webkitBackForwardListItemFinalized):
(webkitBackForwardListItemGetOrCreate): Helper function that
creates a new WebKitBackForwardListItem for the given
WebBackForwardListItem or returns it from the global cache if it's
already cached.
(webkit_back_forward_list_item_get_uri):
(webkit_back_forward_list_item_get_title):
(webkit_back_forward_list_item_get_original_uri):

  • UIProcess/API/gtk/WebKitBackForwardListItem.h: Added.
  • UIProcess/API/gtk/WebKitBackForwardListPrivate.h: Added.
  • UIProcess/API/gtk/WebKitWebLoaderClient.cpp:

(didChangeBackForwardList): Call webkitBackForwardListChanged() to
notify that the list has changed.
(webkitWebLoaderClientAttachLoaderClientToPage): Add
implementation for didChangeBackForwardList.

  • UIProcess/API/gtk/WebKitWebView.cpp:

(webkitWebViewConstructed):
(webkit_web_view_get_back_forward_list): Return the back forward
list of the view.

  • UIProcess/API/gtk/WebKitWebView.h:
  • UIProcess/API/gtk/tests/GNUmakefile.am: Add new test.
  • UIProcess/API/gtk/tests/TestBackForwardList.cpp: Added.

(serverCallback):
(testBackForwardListNavigation):
(testBackForwardListLimitAndCache):
(beforeAll):
(afterAll):

  • UIProcess/API/gtk/tests/TestMain.h:

(Test::~Test): Check there are no objects leaked.
(Test::objectFinalized): Callback called when a GObject is
deleted, used to remove the watched object the list.
(Test::assertObjectIsDeletedWhenTestFinishes): Add an object to
the list of watched objects and add a weak pointer to remove it
from the list when the object is finalized. If there aren't
objects leaked, the list should be empty when the test finishes.

  • UIProcess/API/gtk/tests/WebViewTest.cpp:

(WebViewTest::WebViewTest): Watch the web view to make sure it's
not leaked.

  • UIProcess/API/gtk/tests/WebViewTest.h: Make WebViewTest inherit

from Test class.

  • UIProcess/API/gtk/webkit2.h: Include WebKitBackForwardList.h and

WebKitBackForwardListItem.h.

  • UIProcess/API/gtk/webkit2marshal.list:
Location:
trunk/Source/WebKit2
Files:
6 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r98241 r98245  
     12011-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] Initial implementation of back forward list for WebKit2 GTK+ API
     4        https://bugs.webkit.org/show_bug.cgi?id=69343
     5
     6        Reviewed by Martin Robinson.
     7
     8        * GNUmakefile.am: Add new files to compilation.
     9        * UIProcess/API/gtk/WebKitBackForwardList.cpp: Added.
     10        (webkitBackForwardListFinalize):
     11        (webkit_back_forward_list_init):
     12        (webkit_back_forward_list_class_init):
     13        (webkitBackForwardListGetOrCreateItem): Helper function that
     14        creates a new WebKitBackForwardListItem for the given
     15        WebBackForwardListItem or returns it from the cache if it's
     16        already cached.
     17        (webkitBackForwardListCreateList): Helper function to convert a
     18        WKArray of WebBackForwardListItems into a GList of
     19        WebKitBackForwardListItems.
     20        (webkitBackForwardListCreate): Create a new WebKitBackForwardList.
     21        (webkitBackForwardListChanged): Emits changed signal when the back
     22        forward list changes.
     23        (webkit_back_forward_list_get_current_item):
     24        (webkit_back_forward_list_get_back_item):
     25        (webkit_back_forward_list_get_forward_item):
     26        (webkit_back_forward_list_get_nth_item):
     27        (webkit_back_forward_list_get_length):
     28        (webkit_back_forward_list_get_back_list):
     29        (webkit_back_forward_list_get_back_list_with_limit):
     30        (webkit_back_forward_list_get_forward_list):
     31        (webkit_back_forward_list_get_forward_list_with_limit):
     32        * UIProcess/API/gtk/WebKitBackForwardList.h: Added.
     33        * UIProcess/API/gtk/WebKitBackForwardListItem.cpp: Added.
     34        (webkitBackForwardListItemFinalize):
     35        (webkit_back_forward_list_item_init):
     36        (webkit_back_forward_list_item_class_init):
     37        (historyItemsMap): Global cache for WebKitBackForwardListItems.
     38        (webkitBackForwardListItemFinalized):
     39        (webkitBackForwardListItemGetOrCreate): Helper function that
     40        creates a new WebKitBackForwardListItem for the given
     41        WebBackForwardListItem or returns it from the global cache if it's
     42        already cached.
     43        (webkit_back_forward_list_item_get_uri):
     44        (webkit_back_forward_list_item_get_title):
     45        (webkit_back_forward_list_item_get_original_uri):
     46        * UIProcess/API/gtk/WebKitBackForwardListItem.h: Added.
     47        * UIProcess/API/gtk/WebKitBackForwardListPrivate.h: Added.
     48        * UIProcess/API/gtk/WebKitWebLoaderClient.cpp:
     49        (didChangeBackForwardList): Call webkitBackForwardListChanged() to
     50        notify that the list has changed.
     51        (webkitWebLoaderClientAttachLoaderClientToPage): Add
     52        implementation for didChangeBackForwardList.
     53        * UIProcess/API/gtk/WebKitWebView.cpp:
     54        (webkitWebViewConstructed):
     55        (webkit_web_view_get_back_forward_list): Return the back forward
     56        list of the view.
     57        * UIProcess/API/gtk/WebKitWebView.h:
     58        * UIProcess/API/gtk/tests/GNUmakefile.am: Add new test.
     59        * UIProcess/API/gtk/tests/TestBackForwardList.cpp: Added.
     60        (serverCallback):
     61        (testBackForwardListNavigation):
     62        (testBackForwardListLimitAndCache):
     63        (beforeAll):
     64        (afterAll):
     65        * UIProcess/API/gtk/tests/TestMain.h:
     66        (Test::~Test): Check there are no objects leaked.
     67        (Test::objectFinalized): Callback called when a GObject is
     68        deleted, used to remove the watched object the list.
     69        (Test::assertObjectIsDeletedWhenTestFinishes): Add an object to
     70        the list of watched objects and add a weak pointer to remove it
     71        from the list when the object is finalized. If there aren't
     72        objects leaked, the list should be empty when the test finishes.
     73        * UIProcess/API/gtk/tests/WebViewTest.cpp:
     74        (WebViewTest::WebViewTest): Watch the web view to make sure it's
     75        not leaked.
     76        * UIProcess/API/gtk/tests/WebViewTest.h: Make WebViewTest inherit
     77        from Test class.
     78        * UIProcess/API/gtk/webkit2.h: Include WebKitBackForwardList.h and
     79        WebKitBackForwardListItem.h.
     80        * UIProcess/API/gtk/webkit2marshal.list:
     81
    1822011-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>
    283
  • trunk/Source/WebKit2/GNUmakefile.am

    r97960 r98245  
    7272libwebkit2gtkincludedir = $(libwebkitgtkincludedir)/webkit2
    7373webkit2gtk_headers = \
     74        $(WebKit2)/UIProcess/API/gtk/WebKitBackForwardList.h \
     75        $(WebKit2)/UIProcess/API/gtk/WebKitBackForwardListItem.h \
    7476        $(WebKit2)/UIProcess/API/gtk/WebKitDefines.h \
    7577        $(WebKit2)/UIProcess/API/gtk/WebKitError.h \
     
    475477        Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h \
    476478        Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp \
     479        Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.h \
     480        Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardList.cpp \
     481        Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.h \
     482        Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp \
     483        Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListPrivate.h \
    477484        Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h \
    478485        Source/WebKit2/UIProcess/API/gtk/WebKitError.h \
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebLoaderClient.cpp

    r97960 r98245  
    2121#include "WebKitWebLoaderClient.h"
    2222
     23#include "WebKitBackForwardListPrivate.h"
    2324#include "WebKitError.h"
    2425#include "WebKitMarshal.h"
     
    124125    WebKitWebView* webView = WEBKIT_WEB_VIEW(toImpl(page)->viewWidget());
    125126    webkitWebViewSetEstimatedLoadProgress(webView, WKPageGetEstimatedProgress(page));
     127}
     128
     129static void didChangeBackForwardList(WKPageRef page, WKBackForwardListItemRef addedItem, WKArrayRef removedItems, const void* clientInfo)
     130{
     131    WebKitWebView* webView = WEBKIT_WEB_VIEW(toImpl(page)->viewWidget());
     132    webkitBackForwardListChanged(webkit_web_view_get_back_forward_list(webView), addedItem, removedItems);
    126133}
    127134
     
    153160        0, // didBecomeResponsive
    154161        0, // processDidCrash
    155         0, // didChangeBackForwardList
     162        didChangeBackForwardList,
    156163        0, // shouldGoToBackForwardListItem
    157164        0 // didFailToInitializePlugin
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp

    r98241 r98245  
    2121#include "WebKitWebView.h"
    2222
     23#include "WebKitBackForwardListPrivate.h"
    2324#include "WebKitWebContextPrivate.h"
    2425#include "WebKitWebLoaderClient.h"
     
    5152
    5253    GRefPtr<WebKitWebLoaderClient> loaderClient;
     54    GRefPtr<WebKitBackForwardList> backForwardList;
    5355};
    5456
     
    7678    static GRefPtr<WebKitWebLoaderClient> defaultLoaderClient = adoptGRef(WEBKIT_WEB_LOADER_CLIENT(g_object_new(WEBKIT_TYPE_WEB_LOADER_CLIENT, NULL)));
    7779    webkitWebViewSetLoaderClient(webView, defaultLoaderClient.get(), toAPI(page));
     80
     81    priv->backForwardList = adoptGRef(webkitBackForwardListCreate(WKPageGetBackForwardList(toAPI(page))));
    7882}
    7983
     
    463467    return webView->priv->estimatedLoadProgress;
    464468}
     469
     470/**
     471 * webkit_web_view_get_back_forward_list:
     472 * @web_view: a #WebKitWebView
     473 *
     474 * Obtains the #WebKitBackForwardList associated with the given #WebKitWebView. The
     475 * #WebKitBackForwardList is owned by the #WebKitWebView.
     476 *
     477 * Returns: (transfer none): the #WebKitBackForwardList
     478 */
     479WebKitBackForwardList* webkit_web_view_get_back_forward_list(WebKitWebView* webView)
     480{
     481    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), 0);
     482
     483    return webView->priv->backForwardList.get();
     484}
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h

    r98089 r98245  
    2828#define WebKitWebView_h
    2929
     30#include <webkit2/WebKitBackForwardList.h>
    3031#include <webkit2/WebKitDefines.h>
    3132#include <webkit2/WebKitWebContext.h>
     
    112113webkit_web_view_go_forward                  (WebKitWebView         *web_view);
    113114
     115WEBKIT_API WebKitBackForwardList *
     116webkit_web_view_get_back_forward_list       (WebKitWebView         *web_view);
     117
    114118WEBKIT_API gboolean
    115119webkit_web_view_can_go_forward              (WebKitWebView         *web_view);
  • trunk/Source/WebKit2/UIProcess/API/gtk/tests/GNUmakefile.am

    r97458 r98245  
    33        Programs/WebKit2APITests/TestWebKitWebView \
    44        Programs/WebKit2APITests/TestWebKitWebLoaderClient \
    5         Programs/WebKit2APITests/TestWebKitSettings
     5        Programs/WebKit2APITests/TestWebKitSettings \
     6        Programs/WebKit2APITests/TestBackForwardList
    67
    78noinst_PROGRAMS += $(TEST_PROGS)
     
    6970Programs_WebKit2APITests_TestWebKitSettings_LDADD = $(webkit2_tests_ldadd)
    7071Programs_WebKit2APITests_TestWebKitSettings_LDFLAGS = $(webkit2_tests_ldflags)
     72
     73Programs_WebKit2APITests_TestBackForwardList_SOURCES = \
     74        Source/WebKit2/UIProcess/API/gtk/tests/TestBackForwardList.cpp
     75Programs_WebKit2APITests_TestBackForwardList_CPPFLAGS = $(webkit2_tests_cppflags)
     76Programs_WebKit2APITests_TestBackForwardList_LDADD = $(webkit2_tests_ldadd)
     77Programs_WebKit2APITests_TestBackForwardList_LDFLAGS = $(webkit2_tests_ldflags)
     78
  • trunk/Source/WebKit2/UIProcess/API/gtk/tests/TestMain.h

    r97226 r98245  
    2121#define TestMain_h
    2222
    23 #include <glib.h>
     23#include <glib-object.h>
    2424#include <JavaScriptCore/GOwnPtr.h>
     25#include <JavaScriptCore/HashSet.h>
    2526
    2627#define MAKE_GLIB_TEST_FIXTURE(ClassName) \
     
    4344public:
    4445    MAKE_GLIB_TEST_FIXTURE(Test);
     46
     47    ~Test()
     48    {
     49        g_assert(m_watchedObjects.isEmpty());
     50    }
     51
     52    static void objectFinalized(Test* test, GObject* finalizedObject)
     53    {
     54        test->m_watchedObjects.remove(finalizedObject);
     55    }
     56
     57    void assertObjectIsDeletedWhenTestFinishes(GObject* object)
     58    {
     59        m_watchedObjects.add(object);
     60        g_object_weak_ref(object, reinterpret_cast<GWeakNotify>(objectFinalized), this);
     61    }
     62
     63    HashSet<GObject*> m_watchedObjects;
    4564};
    4665
  • trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.cpp

    r97226 r98245  
    2525    , m_mainLoop(g_main_loop_new(0, TRUE))
    2626{
     27    assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webView));
    2728}
    2829
  • trunk/Source/WebKit2/UIProcess/API/gtk/tests/WebViewTest.h

    r97226 r98245  
    2424#include <webkit2/webkit2.h>
    2525
    26 class WebViewTest {
     26class WebViewTest: public Test {
    2727public:
    2828    MAKE_GLIB_TEST_FIXTURE(WebViewTest);
  • trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h

    r97438 r98245  
    2424#define __WEBKIT2_H_INSIDE__
    2525
     26#include <webkit2/WebKitBackForwardList.h>
     27#include <webkit2/WebKitBackForwardListItem.h>
    2628#include <webkit2/WebKitDefines.h>
    2729#include <webkit2/WebKitEnumTypes.h>
  • trunk/Source/WebKit2/UIProcess/API/gtk/webkit2marshal.list

    r97920 r98245  
    22BOOLEAN:OBJECT
    33BOOLEAN:VOID
     4VOID:OBJECT,POINTER
    45
Note: See TracChangeset for help on using the changeset viewer.