Changeset 195286 in webkit
- Timestamp:
- Jan 19, 2016 5:15:59 AM (8 years ago)
- Location:
- trunk/Tools
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r195285 r195286 1 2016-01-19 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GTK] Add support to load/save session in MiniBrowser 4 https://bugs.webkit.org/show_bug.cgi?id=153201 5 6 Reviewed by Michael Catanzaro. 7 8 It makes it easier to test the new WebView session API. 9 10 * MiniBrowser/gtk/BrowserWindow.c: 11 (browserWindowFinalize): Free the session file path. 12 (browserWindowSaveSession): Save the current WebView session if 13 there's a session file path. 14 (browserWindowDeleteEvent): Call browserWindowSaveSession(). 15 (browser_window_load_session): Try to load the session from the 16 given file path, otherwise fall back to homepage and keep the 17 session file to save the session on window close. 18 * MiniBrowser/gtk/BrowserWindow.h: 19 * MiniBrowser/gtk/main.c: 20 (createBrowserWindow): Pass the given session file path when 21 shouldLoadSession is TRUE. 22 (main): Only allow to restore/save session when MiniBrowser is 23 launched without URL arguments. 24 1 25 2016-01-19 Carlos Garcia Campos <cgarcia@igalia.com> 2 26 -
trunk/Tools/MiniBrowser/gtk/BrowserWindow.c
r193826 r195286 72 72 guint fullScreenMessageLabelId; 73 73 guint resetEntryProgressTimeoutId; 74 gchar *sessionFile; 74 75 }; 75 76 … … 780 781 g_source_remove(window->resetEntryProgressTimeoutId); 781 782 783 g_free(window->sessionFile); 784 782 785 G_OBJECT_CLASS(browser_window_parent_class)->finalize(gObject); 783 786 … … 1152 1155 } 1153 1156 1157 static void browserWindowSaveSession(BrowserWindow *window) 1158 { 1159 if (!window->sessionFile) 1160 return; 1161 1162 WebKitWebViewSessionState *state = webkit_web_view_get_session_state(window->webView); 1163 GBytes *bytes = webkit_web_view_session_state_serialize(state); 1164 webkit_web_view_session_state_unref(state); 1165 g_file_set_contents(window->sessionFile, g_bytes_get_data(bytes, NULL), g_bytes_get_size(bytes), NULL); 1166 g_bytes_unref(bytes); 1167 } 1168 1154 1169 static gboolean browserWindowDeleteEvent(GtkWidget *widget, GdkEventAny* event) 1155 1170 { 1156 1171 BrowserWindow *window = BROWSER_WINDOW(widget); 1172 browserWindowSaveSession(window); 1157 1173 webkit_web_view_try_close(window->webView); 1158 1174 return TRUE; … … 1218 1234 } 1219 1235 1236 void browser_window_load_session(BrowserWindow *window, const char *sessionFile) 1237 { 1238 g_return_if_fail(BROWSER_IS_WINDOW(window)); 1239 g_return_if_fail(sessionFile); 1240 1241 window->sessionFile = g_strdup(sessionFile); 1242 gchar *data = NULL; 1243 gsize dataLength; 1244 if (g_file_get_contents(sessionFile, &data, &dataLength, NULL)) { 1245 GBytes *bytes = g_bytes_new_take(data, dataLength); 1246 WebKitWebViewSessionState *state = webkit_web_view_session_state_new(bytes); 1247 g_bytes_unref(bytes); 1248 1249 if (state) { 1250 webkit_web_view_restore_session_state(window->webView, state); 1251 webkit_web_view_session_state_unref(state); 1252 } 1253 } 1254 1255 WebKitBackForwardList *bfList = webkit_web_view_get_back_forward_list(window->webView); 1256 WebKitBackForwardListItem *item = webkit_back_forward_list_get_current_item(bfList); 1257 if (item) 1258 webkit_web_view_go_to_back_forward_list_item(window->webView, item); 1259 else 1260 webkit_web_view_load_uri(window->webView, BROWSER_DEFAULT_URL); 1261 1262 } 1263 1220 1264 void browser_window_set_background_color(BrowserWindow *window, GdkRGBA *rgba) 1221 1265 { -
trunk/Tools/MiniBrowser/gtk/BrowserWindow.h
r178699 r195286 48 48 WebKitWebView* browser_window_get_view(BrowserWindow*); 49 49 void browser_window_load_uri(BrowserWindow *, const char *uri); 50 void browser_window_load_session(BrowserWindow *, const char *sessionFile); 50 51 void browser_window_set_background_color(BrowserWindow*, GdkRGBA*); 51 52 -
trunk/Tools/MiniBrowser/gtk/main.c
r185312 r195286 40 40 static GdkRGBA *backgroundColor; 41 41 static gboolean editorMode; 42 static const char *sessionFile; 42 43 43 44 typedef enum { … … 59 60 } 60 61 61 static void createBrowserWindow(const gchar *uri, WebKitSettings *webkitSettings )62 static void createBrowserWindow(const gchar *uri, WebKitSettings *webkitSettings, gboolean shouldLoadSession) 62 63 { 63 64 GtkWidget *webView = webkit_web_view_new(); … … 72 73 73 74 if (!editorMode) { 74 gchar *url = argumentToURL(uri); 75 browser_window_load_uri(BROWSER_WINDOW(mainWindow), url); 76 g_free(url); 75 if (shouldLoadSession && sessionFile) 76 browser_window_load_session(BROWSER_WINDOW(mainWindow), sessionFile); 77 else { 78 gchar *url = argumentToURL(uri); 79 browser_window_load_uri(BROWSER_WINDOW(mainWindow), url); 80 g_free(url); 81 } 77 82 } 78 83 … … 97 102 { "bg-color", 0, 0, G_OPTION_ARG_CALLBACK, parseBackgroundColor, "Background color", NULL }, 98 103 { "editor-mode", 'e', 0, G_OPTION_ARG_NONE, &editorMode, "Run in editor mode", NULL }, 104 { "session-file", 's', 0, G_OPTION_ARG_FILENAME, &sessionFile, "Session file", "FILE" }, 99 105 { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &uriArguments, 0, "[URL…]" }, 100 106 { 0, 0, 0, 0, 0, 0, 0 } … … 300 306 301 307 for (i = 0; uriArguments[i]; i++) 302 createBrowserWindow(uriArguments[i], webkitSettings );308 createBrowserWindow(uriArguments[i], webkitSettings, FALSE); 303 309 } else 304 createBrowserWindow(BROWSER_DEFAULT_URL, webkitSettings );310 createBrowserWindow(BROWSER_DEFAULT_URL, webkitSettings, TRUE); 305 311 306 312 g_clear_object(&webkitSettings);
Note: See TracChangeset
for help on using the changeset viewer.