aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarlos Garcia Campos <cgarcia@igalia.com>2013-03-20 02:02:12 +0800
committerCarlos Garcia Campos <carlosgc@gnome.org>2013-03-20 22:50:07 +0800
commitf65b0e0ef8322139d230c0b5ba60e569ee1f390c (patch)
tree9a3a884801a0449aa02b31dfa91b700681a98626
parent8ffda1baa20998c9a1b8be29a3900f5941fb2601 (diff)
downloadgsoc2013-epiphany-f65b0e0ef8322139d230c0b5ba60e569ee1f390c.tar
gsoc2013-epiphany-f65b0e0ef8322139d230c0b5ba60e569ee1f390c.tar.gz
gsoc2013-epiphany-f65b0e0ef8322139d230c0b5ba60e569ee1f390c.tar.bz2
gsoc2013-epiphany-f65b0e0ef8322139d230c0b5ba60e569ee1f390c.tar.lz
gsoc2013-epiphany-f65b0e0ef8322139d230c0b5ba60e569ee1f390c.tar.xz
gsoc2013-epiphany-f65b0e0ef8322139d230c0b5ba60e569ee1f390c.tar.zst
gsoc2013-epiphany-f65b0e0ef8322139d230c0b5ba60e569ee1f390c.zip
Move code to initialize preferences from ephy-main to ephy-shell
As well as the code the prepare the environment for the wen process and web context initialization. This allows to only run that initializations only for the primary instance. It fixes a crash in web process when the ui process finishes too early and makes secondary instances to run faster, since they don't spawn a web process anymore. https://bugzilla.gnome.org/show_bug.cgi?id=696020
-rw-r--r--src/Makefile.am2
-rw-r--r--src/ephy-main.c28
-rw-r--r--src/ephy-shell.c46
3 files changed, 47 insertions, 29 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index a2c2aed97..0b38aa816 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -86,6 +86,7 @@ libephymain_la_CPPFLAGS = \
-DLOADER_DIR=\""$(pkglibdir)/$(EPIPHANY_MAJOR)/loaders"\" \
-DDATADIR=\""$(pkgdatadir)"\" \
-DGNOMELOCALEDIR=\"$(datadir)/locale\" \
+ -DEPHY_WEB_EXTENSIONS_DIR=\""$(libdir)/epiphany/$(EPIPHANY_MAJOR)/web-extensions"\" \
$(AM_CPPFLAGS)
if WITH_WEBKIT2
@@ -138,7 +139,6 @@ epiphany_CPPFLAGS = \
-I$(top_srcdir)/src/bookmarks \
-DDATADIR=\""$(datadir)"\" \
-DGNOMELOCALEDIR=\"$(datadir)/locale\" \
- -DEPHY_WEB_EXTENSIONS_DIR=\""$(libdir)/epiphany/$(EPIPHANY_MAJOR)/web-extensions"\" \
$(INCINTL) \
$(AM_CPPFLAGS)
diff --git a/src/ephy-main.c b/src/ephy-main.c
index a78991790..80d076bad 100644
--- a/src/ephy-main.c
+++ b/src/ephy-main.c
@@ -23,7 +23,6 @@
#include "config.h"
#include "ephy-debug.h"
-#include "ephy-embed-prefs.h"
#include "ephy-file-helpers.h"
#include "ephy-initial-state.h"
#include "ephy-private.h"
@@ -229,10 +228,6 @@ main (int argc,
EphyShell *ephy_shell;
int status;
EphyFileHelpersFlags flags;
-#ifdef HAVE_WEBKIT2
- char *pid_str;
- char *disk_cache_dir;
-#endif
#ifdef ENABLE_NLS
/* Initialize the i18n stuff */
@@ -462,28 +457,6 @@ main (int argc,
gtk_window_set_default_icon_name ("web-browser");
}
-#ifdef HAVE_WEBKIT2
- pid_str = g_strdup_printf ("%u", getpid ());
- g_setenv ("EPHY_WEB_EXTENSION_ID", pid_str, TRUE);
- g_setenv ("EPHY_DOT_DIR", ephy_dot_dir (), TRUE);
- if (private_instance || incognito_mode)
- g_setenv ("EPHY_PRIVATE_PROFILE", "1", TRUE);
- g_free (pid_str);
-
- /* Set the web extensions dir ASAP before the process is launched */
- webkit_web_context_set_web_extensions_directory (webkit_web_context_get_default (),
- EPHY_WEB_EXTENSIONS_DIR);
-
- /* Disk Cache */
- disk_cache_dir = g_build_filename (EPHY_EMBED_SHELL_MODE_HAS_PRIVATE_PROFILE (mode) ?
- ephy_dot_dir () : g_get_user_cache_dir (),
- g_get_prgname (), NULL);
- webkit_web_context_set_disk_cache_directory (webkit_web_context_get_default (),
- disk_cache_dir);
- g_free (disk_cache_dir);
-#endif
-
- ephy_embed_prefs_init ();
_ephy_shell_create_instance (mode);
startup_flags = get_startup_flags ();
@@ -505,7 +478,6 @@ main (int argc,
notify_uninit ();
ephy_initial_state_save ();
- ephy_embed_prefs_shutdown ();
ephy_settings_shutdown ();
ephy_file_helpers_shutdown ();
xmlCleanupParser ();
diff --git a/src/ephy-shell.c b/src/ephy-shell.c
index 3d8fc523f..252a4cbaf 100644
--- a/src/ephy-shell.c
+++ b/src/ephy-shell.c
@@ -30,6 +30,7 @@
#include "ephy-bookmarks-import.h"
#include "ephy-debug.h"
#include "ephy-embed-container.h"
+#include "ephy-embed-prefs.h"
#include "ephy-embed-single.h"
#include "ephy-embed-utils.h"
#include "ephy-file-helpers.h"
@@ -226,16 +227,52 @@ static GActionEntry app_normal_mode_entries[] = {
{ "reopen-closed-tab", reopen_closed_tab, NULL, NULL, NULL },
};
+#ifdef HAVE_WEBKIT2
+static void
+ephy_shell_setup_environment (EphyShell *shell)
+{
+ EphyEmbedShellMode mode = ephy_embed_shell_get_mode (EPHY_EMBED_SHELL (shell));
+ char *pid_str;
+
+ pid_str = g_strdup_printf ("%u", getpid ());
+ g_setenv ("EPHY_WEB_EXTENSION_ID", pid_str, TRUE);
+ g_setenv ("EPHY_DOT_DIR", ephy_dot_dir (), TRUE);
+ if (EPHY_EMBED_SHELL_MODE_HAS_PRIVATE_PROFILE (mode))
+ g_setenv ("EPHY_PRIVATE_PROFILE", "1", TRUE);
+ g_free (pid_str);
+}
+#endif
+
static void
ephy_shell_startup (GApplication* application)
{
EphyEmbedShellMode mode;
+#ifdef HAVE_WEBKIT2
+ char *disk_cache_dir;
+#endif
G_APPLICATION_CLASS (ephy_shell_parent_class)->startup (application);
/* We're not remoting; start our services */
mode = ephy_embed_shell_get_mode (EPHY_EMBED_SHELL (application));
+#ifdef HAVE_WEBKIT2
+ ephy_shell_setup_environment (EPHY_SHELL (application));
+ /* Set the web extensions dir ASAP before the process is launched */
+ webkit_web_context_set_web_extensions_directory (webkit_web_context_get_default (),
+ EPHY_WEB_EXTENSIONS_DIR);
+
+ /* Disk Cache */
+ disk_cache_dir = g_build_filename (EPHY_EMBED_SHELL_MODE_HAS_PRIVATE_PROFILE (mode) ?
+ ephy_dot_dir () : g_get_user_cache_dir (),
+ g_get_prgname (), NULL);
+ webkit_web_context_set_disk_cache_directory (webkit_web_context_get_default (),
+ disk_cache_dir);
+ g_free (disk_cache_dir);
+#endif
+
+ ephy_embed_prefs_init ();
+
if (mode != EPHY_EMBED_SHELL_MODE_APPLICATION) {
GtkBuilder *builder;
@@ -266,6 +303,14 @@ ephy_shell_startup (GApplication* application)
}
static void
+ephy_shell_shutdown (GApplication* application)
+{
+ G_APPLICATION_CLASS (ephy_shell_parent_class)->shutdown (application);
+
+ ephy_embed_prefs_shutdown ();
+}
+
+static void
session_load_cb (GObject *object,
GAsyncResult *result,
gpointer user_data)
@@ -500,6 +545,7 @@ ephy_shell_class_init (EphyShellClass *klass)
object_class->constructed = ephy_shell_constructed;
application_class->startup = ephy_shell_startup;
+ application_class->shutdown = ephy_shell_shutdown;
application_class->activate = ephy_shell_activate;
application_class->before_emit = ephy_shell_before_emit;
application_class->add_platform_data = ephy_shell_add_platform_data;