1 /* 2 * Copyright (C) 2007 Alp Toker <alp (at) atoker.com> 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Library General Public 6 * License as published by the Free Software Foundation; either 7 * version 2 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Library General Public License for more details. 13 * 14 * You should have received a copy of the GNU Library General Public License 15 * along with this library; see the file COPYING.LIB. If not, write to 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17 * Boston, MA 02110-1301, USA. 18 */ 19 20 #include "config.h" 21 #include "WorkQueueItem.h" 22 23 #include "DumpRenderTree.h" 24 25 #include <GOwnPtr.h> 26 #include <JavaScriptCore/JSStringRef.h> 27 #include <webkit/webkit.h> 28 #include <string.h> 29 30 // Returns a newly allocated UTF-8 character buffer which must be freed with g_free() 31 gchar* JSStringCopyUTF8CString(JSStringRef jsString) 32 { 33 size_t dataSize = JSStringGetMaximumUTF8CStringSize(jsString); 34 gchar* utf8 = (gchar*)g_malloc(dataSize); 35 JSStringGetUTF8CString(jsString, utf8, dataSize); 36 37 return utf8; 38 } 39 40 bool LoadItem::invoke() const 41 { 42 gchar* targetString = JSStringCopyUTF8CString(m_target.get()); 43 44 WebKitWebFrame* targetFrame; 45 if (!strlen(targetString)) 46 targetFrame = mainFrame; 47 else 48 targetFrame = webkit_web_frame_find_frame(mainFrame, targetString); 49 g_free(targetString); 50 51 gchar* urlString = JSStringCopyUTF8CString(m_url.get()); 52 WebKitNetworkRequest* request = webkit_network_request_new(urlString); 53 g_free(urlString); 54 webkit_web_frame_load_request(targetFrame, request); 55 g_object_unref(request); 56 57 return true; 58 } 59 60 bool LoadHTMLStringItem::invoke() const 61 { 62 GOwnPtr<gchar> content(JSStringCopyUTF8CString(m_content.get())); 63 GOwnPtr<gchar> baseURL(JSStringCopyUTF8CString(m_baseURL.get())); 64 65 if (m_unreachableURL) { 66 GOwnPtr<gchar> unreachableURL(JSStringCopyUTF8CString(m_unreachableURL.get())); 67 webkit_web_frame_load_alternate_string(mainFrame, content.get(), baseURL.get(), unreachableURL.get()); 68 return true; 69 } 70 webkit_web_frame_load_string(mainFrame, content.get(), 0, 0, baseURL.get()); 71 return true; 72 } 73 74 bool ReloadItem::invoke() const 75 { 76 webkit_web_frame_reload(mainFrame); 77 return true; 78 } 79 80 bool ScriptItem::invoke() const 81 { 82 WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame); 83 gchar* scriptString = JSStringCopyUTF8CString(m_script.get()); 84 webkit_web_view_execute_script(webView, scriptString); 85 g_free(scriptString); 86 return true; 87 } 88 89 bool BackForwardItem::invoke() const 90 { 91 WebKitWebView* webView = webkit_web_frame_get_web_view(mainFrame); 92 if (m_howFar == 1) 93 webkit_web_view_go_forward(webView); 94 else if (m_howFar == -1) 95 webkit_web_view_go_back(webView); 96 else { 97 WebKitWebBackForwardList* webBackForwardList = webkit_web_view_get_back_forward_list(webView); 98 WebKitWebHistoryItem* item = webkit_web_back_forward_list_get_nth_item(webBackForwardList, m_howFar); 99 webkit_web_view_go_to_back_forward_item(webView, item); 100 } 101 return true; 102 } 103