Changeset 64496 in webkit
- Timestamp:
- Aug 2, 2010 2:55:02 PM (14 years ago)
- Location:
- trunk/WebKit/gtk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebKit/gtk/ChangeLog
r64475 r64496 1 2010-08-02 Martin Robinson <mrobinson@igalia.com> 2 3 Reviewed by Xan Lopez. 4 5 [GTK] Create a frame-created signal 6 https://bugs.webkit.org/show_bug.cgi?id=43284 7 8 Add a frame-created signal, which will allow developers to track 9 the beginning of a frame lifecycle and attach signal handlers to 10 all new frames. 11 12 * WebCoreSupport/FrameLoaderClientGtk.cpp: 13 (WebKit::FrameLoaderClient::createFrame): Emit the frame-created signal. 14 * tests/testwebframe.c: Add a test which verifies that the correct number of 15 frame-created signals is fired when a page with iframes loads. 16 (createFrameSignalTestFrameCreatedCallback): Added. 17 (createFrameSignalTestTimeout): Added. 18 (test_webkit_web_frame_created_signal): Added. 19 (main): Add a reference to the new test. 20 * webkit/webkitprivate.h: De-normalize webkit_web_frame_init_with_web_view into 21 the one place that it is used, so that the frame-created signal may be fired there. 22 * webkit/webkitwebframe.cpp: Remove webkit_web_frame_init_with_web_view. 23 * webkit/webkitwebview.cpp: 24 (webkit_web_view_class_init): Add the frame-created signal declaration. 25 1 26 2010-08-02 Mario Sanchez Prada <msanchez@igalia.com> 2 27 -
trunk/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp
r62002 r64496 6 6 * Copyright (C) 2009, 2010 Gustavo Noronha Silva <gns@gnome.org> 7 7 * Copyright (C) Research In Motion Limited 2009. All rights reserved. 8 * Copyright (C) 2010 Igalia S.L. 8 9 * 9 10 * This library is free software; you can redistribute it and/or … … 473 474 const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight) 474 475 { 475 Frame* coreFrame = core(m_frame); 476 477 ASSERT(core(getViewFromFrame(m_frame)) == coreFrame->page()); 478 479 RefPtr<Frame> childFrame = webkit_web_frame_init_with_web_view(getViewFromFrame(m_frame), ownerElement); 480 481 coreFrame->tree()->appendChild(childFrame); 482 476 ASSERT(m_frame); 477 Frame* parentFrame = core(m_frame); 478 WebKitWebView* webView = getViewFromFrame(m_frame); 479 WebCore::Page* page = core(webView); 480 ASSERT(page == parentFrame->page()); 481 482 WebKitWebFrame* kitFrame = WEBKIT_WEB_FRAME(g_object_new(WEBKIT_TYPE_WEB_FRAME, NULL)); 483 WebKitWebFramePrivate* framePrivate = kitFrame->priv; 484 framePrivate->webView = webView; 485 486 RefPtr<Frame> childFrame = Frame::create(page, ownerElement, new FrameLoaderClient(kitFrame)); 487 framePrivate->coreFrame = childFrame.get(); 488 489 parentFrame->tree()->appendChild(childFrame); 483 490 childFrame->tree()->setName(name); 484 491 childFrame->init(); … … 494 501 return 0; 495 502 503 g_signal_emit_by_name(webView, "frame-created", kitFrame); 496 504 return childFrame.release(); 497 505 } -
trunk/WebKit/gtk/tests/testwebframe.c
r51825 r64496 28 28 #if GLIB_CHECK_VERSION(2, 16, 0) && GTK_CHECK_VERSION(2, 14, 0) 29 29 30 static int numberOfFramesCreated = 0; 31 32 static void createFrameSignalTestFrameCreatedCallback(WebKitWebView* webView, WebKitWebFrame* frame, gpointer data) 33 { 34 numberOfFramesCreated++; 35 } 36 37 static gboolean createFrameSignalTestTimeout(gpointer data) 38 { 39 g_assert_cmpint(numberOfFramesCreated, ==, 2); 40 g_main_loop_quit((GMainLoop*) data); 41 return FALSE; 42 } 43 44 static void test_webkit_web_frame_created_signal(void) 45 { 46 GtkWidget* webView; 47 GtkWidget* window; 48 GMainLoop* loop = g_main_loop_new(NULL, TRUE); 49 50 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 51 52 webView = webkit_web_view_new(); 53 g_signal_connect(webView, "frame-created", G_CALLBACK(createFrameSignalTestFrameCreatedCallback), loop); 54 55 // We want to ensure that exactly two create-frame signals are 56 // fired and no more, so we set a timeout here. There does not appear 57 // to be a simple way via the API to figure out when all frames have 58 // loaded. 59 g_timeout_add(500, createFrameSignalTestTimeout, loop); 60 61 gtk_container_add(GTK_CONTAINER(window), webView); 62 gtk_widget_show(window); 63 gtk_widget_show(webView); 64 65 webkit_web_view_load_string(WEBKIT_WEB_VIEW(webView), 66 "<html><body>Frames!" 67 "<iframe></iframe>" 68 "<iframe></iframe>" 69 "</body></html>", 70 "text/html", "utf-8", "file://"); 71 g_main_loop_run(loop); 72 } 73 30 74 static void test_webkit_web_frame_create_destroy(void) 31 75 { … … 171 215 g_test_bug_base("https://bugs.webkit.org/"); 172 216 g_test_add_func("/webkit/webview/create_destroy", test_webkit_web_frame_create_destroy); 217 g_test_add_func("/webkit/webview/frame-created_signal", test_webkit_web_frame_created_signal); 173 218 g_test_add_func("/webkit/webframe/lifetime", test_webkit_web_frame_lifetime); 174 219 g_test_add_func("/webkit/webview/printing", test_webkit_web_frame_printing); -
trunk/WebKit/gtk/webkit/webkitprivate.h
r63058 r64496 197 197 }; 198 198 199 PassRefPtr<WebCore::Frame>200 webkit_web_frame_init_with_web_view(WebKitWebView*, WebCore::HTMLFrameOwnerElement*);201 202 199 void 203 200 webkit_web_frame_core_frame_gone(WebKitWebFrame*); -
trunk/WebKit/gtk/webkit/webkitwebframe.cpp
r57986 r64496 409 409 } 410 410 411 PassRefPtr<Frame> webkit_web_frame_init_with_web_view(WebKitWebView* webView, HTMLFrameOwnerElement* element)412 {413 WebKitWebFrame* frame = WEBKIT_WEB_FRAME(g_object_new(WEBKIT_TYPE_WEB_FRAME, NULL));414 WebKitWebFramePrivate* priv = frame->priv;415 WebKitWebViewPrivate* viewPriv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);416 417 priv->webView = webView;418 WebKit::FrameLoaderClient* client = new WebKit::FrameLoaderClient(frame);419 420 RefPtr<Frame> coreFrame = Frame::create(viewPriv->corePage, element, client);421 priv->coreFrame = coreFrame.get();422 423 return coreFrame.release();424 }425 426 411 /** 427 412 * webkit_web_frame_get_title: -
trunk/WebKit/gtk/webkit/webkitwebview.cpp
r64208 r64496 173 173 GEOLOCATION_POLICY_DECISION_CANCELLED, 174 174 ONLOAD_EVENT, 175 FRAME_CREATED, 175 176 LAST_SIGNAL 176 177 }; … … 2448 2449 WEBKIT_TYPE_WEB_FRAME); 2449 2450 2451 /* 2452 * WebKitWebView::frame-created 2453 * @web_view: the object which received the signal 2454 * @web_frame: the #WebKitWebFrame which was just created. 2455 * 2456 * Emitted when a WebKitWebView has created a new frame. This signal will 2457 * be emitted for all sub-frames created during page load. It will not be 2458 * emitted for the main frame, which originates in the WebKitWebView constructor 2459 * and may be accessed at any time using webkit_web_view_get_main_frame. 2460 * 2461 * Since: 1.3.4 2462 */ 2463 webkit_web_view_signals[FRAME_CREATED] = g_signal_new("frame-created", 2464 G_TYPE_FROM_CLASS(webViewClass), 2465 (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION), 2466 0, 2467 NULL, NULL, 2468 g_cclosure_marshal_VOID__OBJECT, 2469 G_TYPE_NONE, 1, 2470 WEBKIT_TYPE_WEB_FRAME); 2450 2471 2451 2472 /*
Note: See TracChangeset
for help on using the changeset viewer.