aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorXan Lopez <xan@igalia.com>2012-06-14 03:47:07 +0800
committerXan Lopez <xan@igalia.com>2012-06-14 13:40:12 +0800
commit600192397f1a70f56f8c592353e40fe213aa3157 (patch)
tree15ef61e5263ba3b5e878f3fa79dbb08a71c50fa4 /src
parent6c219a58f4126138eb7ff31614b5101272fc6a30 (diff)
downloadgsoc2013-epiphany-600192397f1a70f56f8c592353e40fe213aa3157.tar
gsoc2013-epiphany-600192397f1a70f56f8c592353e40fe213aa3157.tar.gz
gsoc2013-epiphany-600192397f1a70f56f8c592353e40fe213aa3157.tar.bz2
gsoc2013-epiphany-600192397f1a70f56f8c592353e40fe213aa3157.tar.lz
gsoc2013-epiphany-600192397f1a70f56f8c592353e40fe213aa3157.tar.xz
gsoc2013-epiphany-600192397f1a70f56f8c592353e40fe213aa3157.tar.zst
gsoc2013-epiphany-600192397f1a70f56f8c592353e40fe213aa3157.zip
ephy-session: add a method to load a session from a string
And re-write the ephy_session_load method on top of it. We'll use this in our unit tests.
Diffstat (limited to 'src')
-rw-r--r--src/ephy-session.c92
-rw-r--r--src/ephy-session.h5
2 files changed, 77 insertions, 20 deletions
diff --git a/src/ephy-session.c b/src/ephy-session.c
index 7a4ebbce0..642ba686d 100644
--- a/src/ephy-session.c
+++ b/src/ephy-session.c
@@ -1052,37 +1052,41 @@ restore_geometry (GtkWindow *window,
}
/**
- * ephy_session_load:
- * @session: a #EphySession
- * @filename: the path of the source file
- * @user_time: a user_time, or 0
- *
- * Load a session from disk, restoring the windows and their state
- *
- * Return value: TRUE if at least a window has been opened
+ * ephy_session_load_from_string:
+ * @session: an #EphySession
+ * @session_data: a string with the session data to load
+ * @length: the length of @session_data, or -1 to assume %NULL terminated
+ * @user_time: a user time, or 0
+ *
+ * Loads the session described in @session_data, restoring windows and
+ * their state.
+ *
+ * Returns: TRUE if at least a window has been opened
**/
gboolean
-ephy_session_load (EphySession *session,
- const char *filename,
- guint32 user_time)
+ephy_session_load_from_string (EphySession *session,
+ const char *session_data,
+ gssize length,
+ guint32 user_time)
{
- EphySessionPrivate *priv = session->priv;
+ EphySessionPrivate *priv;
xmlDocPtr doc;
xmlNodePtr child;
EphyWindow *window;
GtkWidget *widget = NULL;
- GFile *save_to_file;
- char *save_to_path;
gboolean first_window_created = FALSE;
+
+ g_return_val_if_fail (EPHY_IS_SESSION (session), FALSE);
+ g_return_val_if_fail (session_data, FALSE);
- LOG ("ephy_sesion_load %s", filename);
+ priv = session->priv;
- save_to_file = get_session_file (filename);
- save_to_path = g_file_get_path (save_to_file);
- g_object_unref (save_to_file);
+ /* If length is -1 assume the data is a NULL-terminated, UTF-8
+ * encoded string. */
+ if (length == -1)
+ length = g_utf8_strlen (session_data, -1);
- doc = xmlParseFile (save_to_path);
- g_free (save_to_path);
+ doc = xmlParseMemory (session_data, (int)length);
if (doc == NULL)
{
@@ -1190,6 +1194,54 @@ ephy_session_load (EphySession *session,
}
/**
+ * ephy_session_load:
+ * @session: a #EphySession
+ * @filename: the path of the source file
+ * @user_time: a user_time, or 0
+ *
+ * Load a session from disk, restoring the windows and their state
+ *
+ * Return value: TRUE if at least a window has been opened
+ **/
+gboolean
+ephy_session_load (EphySession *session,
+ const char *filename,
+ guint32 user_time)
+{
+ GFile *save_to_file;
+ char *save_to_path;
+ gboolean ret_value;
+ char *contents;
+ gsize length;
+ GError *error = NULL;
+
+ g_return_val_if_fail (EPHY_IS_SESSION (session), FALSE);
+ g_return_val_if_fail (filename, FALSE);
+
+ LOG ("ephy_sesion_load %s", filename);
+
+ save_to_file = get_session_file (filename);
+ save_to_path = g_file_get_path (save_to_file);
+ g_object_unref (save_to_file);
+
+ if (!g_file_get_contents (save_to_path, &contents, &length, &error))
+ {
+ LOG ("Could not load session, error reading session file: %s", error->message);
+ g_error_free (error);
+ g_free (save_to_path);
+
+ return FALSE;
+ }
+
+ ret_value = ephy_session_load_from_string (session, contents, length, user_time);
+
+ g_free (contents);
+ g_free (save_to_path);
+
+ return ret_value;
+}
+
+/**
* ephy_session_get_windows:
* @session: the #EphySession
*
diff --git a/src/ephy-session.h b/src/ephy-session.h
index 3bf1ffd9a..59741a272 100644
--- a/src/ephy-session.h
+++ b/src/ephy-session.h
@@ -79,6 +79,11 @@ gboolean ephy_session_load (EphySession *session,
const char *filename,
guint32 user_time);
+gboolean ephy_session_load_from_string (EphySession *session,
+ const char *session_data,
+ gssize length,
+ guint32 user_time);
+
void ephy_session_close (EphySession *session);
GList *ephy_session_get_windows (EphySession *session);