Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/browser/sugar-browser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'browser/sugar-browser.cpp')
-rw-r--r--browser/sugar-browser.cpp100
1 files changed, 96 insertions, 4 deletions
diff --git a/browser/sugar-browser.cpp b/browser/sugar-browser.cpp
index df5769b..f3a3d87 100644
--- a/browser/sugar-browser.cpp
+++ b/browser/sugar-browser.cpp
@@ -28,6 +28,7 @@
#include "GeckoDragDropHooks.h"
#include "GeckoDocumentObject.h"
#include "GeckoBrowserPersist.h"
+#include "GeckoDirectoryProvider.h"
#endif
#include <gdk/gdkx.h>
@@ -65,6 +66,8 @@
#include <nsICommandManager.h>
#include <nsIClipboardDragDropHooks.h>
+#include "sessionstore/nsISessionStore.h"
+
#define SUGAR_PATH "SUGAR_PATH"
enum {
@@ -156,6 +159,25 @@ sugar_browser_startup(const char *profile_path, const char *profile_name)
old_handler = XSetErrorHandler(error_handler);
+ #if 0
+ GeckoDirectoryProvider *dirProvider =
+ new GeckoDirectoryProvider(g_getenv(SUGAR_PATH));
+ if (!dirProvider) {
+ g_warning ("failed to create GeckoDirectoryProvider");
+ return FALSE;
+ }
+
+ NS_ADDREF (dirProvider);
+
+ nsCOMPtr<nsIDirectoryServiceProvider> dp (do_QueryInterface (dirProvider));
+ NS_RELEASE (dirProvider);
+ dirProvider = nsnull;
+
+ if (!dp) return FALSE;
+
+ gtk_moz_embed_set_directory_service_provider(dp);
+ #endif
+
gtk_moz_embed_push_startup();
nsCOMPtr<nsIPrefService> prefService;
@@ -354,10 +376,10 @@ sugar_browser_realize(GtkWidget *widget)
GTK_WIDGET_CLASS(parent_class)->realize(widget);
#ifdef HAVE_NS_WEB_BROWSER
- GtkMozEmbed *embed = GTK_MOZ_EMBED(widget);
- nsCOMPtr<nsIWebBrowser> webBrowser;
- gtk_moz_embed_get_nsIWebBrowser(embed, getter_AddRefs(webBrowser));
- NS_ENSURE_TRUE(webBrowser, );
+ GtkMozEmbed *embed = GTK_MOZ_EMBED(widget);
+ nsCOMPtr<nsIWebBrowser> webBrowser;
+ gtk_moz_embed_get_nsIWebBrowser(embed, getter_AddRefs(webBrowser));
+ NS_ENSURE_TRUE(webBrowser, );
nsCOMPtr<nsICommandManager> commandManager = do_GetInterface(webBrowser);
if (commandManager) {
@@ -732,6 +754,76 @@ sugar_browser_save_document(SugarBrowser *browser,
#endif
}
+char *
+sugar_browser_get_session(SugarBrowser *browser)
+{
+#if 0
+ nsCOMPtr<nsIWebBrowser> webBrowser;
+ gtk_moz_embed_get_nsIWebBrowser(GTK_MOZ_EMBED(browser),
+ getter_AddRefs(webBrowser));
+ if (!webBrowser) {
+ g_warning ("failed to get nsIWebBrowser");
+ return NULL;
+ }
+
+ nsCOMPtr<nsISessionStore> sessionStore;
+ sessionStore = do_GetService("@mozilla.org/browser/sessionstore;1");
+ if (!sessionStore) {
+ g_warning ("failed to get nsISessionStore");
+ return NULL;
+ }
+
+ nsString session;
+ nsresult rv = sessionStore->GetBrowserState(webBrowser, session);
+ if (NS_FAILED(rv)) {
+ g_warning ("failed to get browser state");
+ return NULL;
+ }
+
+ nsCString sessionUTF8;
+ NS_UTF16ToCString (session, NS_CSTRING_ENCODING_UTF8, sessionUTF8);
+
+ return g_strdup(sessionUTF8.get());
+#else
+ return NULL;
+#endif
+}
+
+gboolean
+sugar_browser_set_session(SugarBrowser *browser,
+ const char *session)
+{
+#if 0
+ nsCOMPtr<nsIWebBrowser> webBrowser;
+ gtk_moz_embed_get_nsIWebBrowser(GTK_MOZ_EMBED(browser),
+ getter_AddRefs(webBrowser));
+ if (!webBrowser) {
+ g_warning ("failed to get nsIWebBrowser");
+ return FALSE;
+ }
+
+ nsCOMPtr<nsISessionStore> sessionStore;
+ sessionStore = do_GetService("@mozilla.org/browser/sessionstore;1");
+ if (!sessionStore) {
+ g_warning ("failed to get nsISessionStore");
+ return FALSE;
+ }
+
+ nsCString sessionUTF8(session);
+ nsString sessionUTF16;
+ NS_CStringToUTF16(sessionUTF8, NS_CSTRING_ENCODING_UTF8, sessionUTF16);
+ nsresult rv = sessionStore->SetBrowserState(webBrowser, sessionUTF16);
+ if (NS_FAILED(rv)) {
+ g_warning ("failed to set browser state");
+ return FALSE;
+ }
+
+ return TRUE;
+#else
+ return FALSE;
+#endif
+}
+
GType
sugar_browser_event_get_type(void)
{