/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set sw=2 ts=2 sts=2 et: */ /* * Copyright © 2013 Igalia S.L. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #include "config.h" #include "ephy-test-utils.h" #include "ephy-embed-shell.h" #include static guint web_view_ready_counter = 0; guint ephy_test_utils_get_web_view_ready_counter (void) { return web_view_ready_counter; } void ephy_test_utils_check_ephy_web_view_address (EphyWebView *view, const gchar *address) { g_assert_cmpstr (ephy_web_view_get_address (view), ==, address); } void ephy_test_utils_check_ephy_embed_address (EphyEmbed *embed, const gchar *address) { ephy_test_utils_check_ephy_web_view_address (ephy_embed_get_web_view (embed), address); } static void load_changed_cb (WebKitWebView *web_view, #ifdef HAVE_WEBKIT2 WebKitLoadEvent status, #else GParamSpec *pspec, #endif GMainLoop *loop) { #ifndef HAVE_WEBKIT2 WebKitLoadStatus status = webkit_web_view_get_load_status (web_view); #endif if (status == WEBKIT_LOAD_COMMITTED) { web_view_ready_counter--; g_signal_handlers_disconnect_by_func (web_view, load_changed_cb, loop); if (web_view_ready_counter == 0) g_main_loop_quit (loop); } } static void wait_until_load_is_committed (WebKitWebView *web_view, GMainLoop *loop) { #ifdef HAVE_WEBKIT2 g_signal_connect (web_view, "load-changed", G_CALLBACK (load_changed_cb), loop); #else g_signal_connect (web_view, "notify::load-status", G_CALLBACK (load_changed_cb), loop); #endif } static void web_view_created_cb (EphyEmbedShell *shell, EphyWebView *view, GMainLoop *loop) { web_view_ready_counter++; wait_until_load_is_committed (WEBKIT_WEB_VIEW (view), loop); } GMainLoop* ephy_test_utils_setup_ensure_web_views_are_loaded (void) { GMainLoop *loop; web_view_ready_counter = 0; loop = g_main_loop_new (NULL, FALSE); g_signal_connect (ephy_embed_shell_get_default (), "web-view-created", G_CALLBACK (web_view_created_cb), loop); return loop; } void ephy_test_utils_ensure_web_views_are_loaded (GMainLoop *loop) { if (web_view_ready_counter != 0) g_main_loop_run (loop); g_signal_handlers_disconnect_by_func (ephy_embed_shell_get_default (), G_CALLBACK (web_view_created_cb), loop); g_assert_cmpint (web_view_ready_counter, ==, 0); g_main_loop_unref (loop); } GMainLoop* ephy_test_utils_setup_wait_until_load_is_committed (EphyWebView *view) { GMainLoop *loop; web_view_ready_counter = 1; loop = g_main_loop_new (NULL, FALSE); wait_until_load_is_committed (WEBKIT_WEB_VIEW (view), loop); return loop; } void ephy_test_utils_wait_until_load_is_committed (GMainLoop *loop) { if (web_view_ready_counter != 0) g_main_loop_run (loop); g_assert_cmpint (web_view_ready_counter, ==, 0); g_main_loop_unref (loop); }