X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3baf235f60c2e924fee2cd2de03e544343c15529..74a8f67d96591cec101def2a7d47c64072aff7fd:/src/gtk/webview_webkit.cpp?ds=sidebyside diff --git a/src/gtk/webview_webkit.cpp b/src/gtk/webview_webkit.cpp index e88a5bfe8c..91973b1d5f 100644 --- a/src/gtk/webview_webkit.cpp +++ b/src/gtk/webview_webkit.cpp @@ -17,6 +17,7 @@ #include "wx/gtk/control.h" #include "wx/gtk/private.h" #include "wx/filesys.h" +#include "wx/base64.h" #include "webkit/webkit.h" // ---------------------------------------------------------------------------- @@ -43,22 +44,22 @@ wxgtk_webview_webkit_load_status(GtkWidget* widget, if (status == WEBKIT_LOAD_FINISHED) { webKitCtrl->m_busy = false; - wxWebNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_LOADED, - webKitCtrl->GetId(), - url, target, false); + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_LOADED, + webKitCtrl->GetId(), + url, target); if (webKitCtrl && webKitCtrl->GetEventHandler()) - webKitCtrl->GetEventHandler()->ProcessEvent(thisEvent); + webKitCtrl->GetEventHandler()->ProcessEvent(event); } else if (status == WEBKIT_LOAD_COMMITTED) { webKitCtrl->m_busy = true; - wxWebNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_NAVIGATED, - webKitCtrl->GetId(), - url, target, false); + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATED, + webKitCtrl->GetId(), + url, target); if (webKitCtrl && webKitCtrl->GetEventHandler()) - webKitCtrl->GetEventHandler()->ProcessEvent(thisEvent); + webKitCtrl->GetEventHandler()->ProcessEvent(event); } } @@ -85,16 +86,15 @@ wxgtk_webview_webkit_navigation(WebKitWebView *, const gchar* uri = webkit_network_request_get_uri(request); wxString target = webkit_web_frame_get_name (frame); - wxWebNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_NAVIGATING, - webKitCtrl->GetId(), - wxString( uri, wxConvUTF8 ), - target, - true); + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NAVIGATING, + webKitCtrl->GetId(), + wxString( uri, wxConvUTF8 ), + target); if (webKitCtrl && webKitCtrl->GetEventHandler()) - webKitCtrl->GetEventHandler()->ProcessEvent(thisEvent); + webKitCtrl->GetEventHandler()->ProcessEvent(event); - if (thisEvent.IsVetoed()) + if (!event.IsAllowed()) { webKitCtrl->m_busy = false; webkit_web_policy_decision_ignore(policy_decision); @@ -103,10 +103,10 @@ wxgtk_webview_webkit_navigation(WebKitWebView *, else { wxString wxuri = uri; - wxSharedPtr handler; - wxVector > hanlders = webKitCtrl->GetHandlers(); + wxSharedPtr handler; + wxVector > hanlders = webKitCtrl->GetHandlers(); //We are not vetoed so see if we match one of the additional handlers - for(wxVector >::iterator it = hanlders.begin(); + for(wxVector >::iterator it = hanlders.begin(); it != hanlders.end(); ++it) { if(wxuri.substr(0, (*it)->GetName().length()) == (*it)->GetName()) @@ -140,7 +140,7 @@ wxgtk_webview_webkit_error(WebKitWebView*, wxWebViewWebKit* webKitWindow) { webKitWindow->m_busy = false; - wxWebNavigationError type = wxWEB_NAV_ERR_OTHER; + wxWebViewNavigationError type = wxWEB_NAV_ERR_OTHER; GError* error = (GError*)web_error; wxString description(error->message, wxConvUTF8); @@ -259,17 +259,15 @@ wxgtk_webview_webkit_error(WebKitWebView*, } */ - wxWebNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_ERROR, - webKitWindow->GetId(), - uri, - wxEmptyString, - false); - thisEvent.SetString(description); - thisEvent.SetInt(type); + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_ERROR, + webKitWindow->GetId(), + uri, ""); + event.SetString(description); + event.SetInt(type); if (webKitWindow && webKitWindow->GetEventHandler()) { - webKitWindow->GetEventHandler()->ProcessEvent(thisEvent); + webKitWindow->GetEventHandler()->ProcessEvent(event); } return FALSE; @@ -286,14 +284,13 @@ wxgtk_webview_webkit_new_window(WebKitWebView*, const gchar* uri = webkit_network_request_get_uri(request); wxString target = webkit_web_frame_get_name (frame); - wxWebNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, - webKitCtrl->GetId(), - wxString( uri, wxConvUTF8 ), - target, - true); + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_NEWWINDOW, + webKitCtrl->GetId(), + wxString( uri, wxConvUTF8 ), + target); if (webKitCtrl && webKitCtrl->GetEventHandler()) - webKitCtrl->GetEventHandler()->ProcessEvent(thisEvent); + webKitCtrl->GetEventHandler()->ProcessEvent(event); //We always want the user to handle this themselves webkit_web_policy_decision_ignore(policy_decision); @@ -306,15 +303,14 @@ wxgtk_webview_webkit_title_changed(WebKitWebView*, gchar *title, wxWebViewWebKit *webKitCtrl) { - wxWebNavigationEvent thisEvent(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, - webKitCtrl->GetId(), - webKitCtrl->GetCurrentURL(), - "", - true); - thisEvent.SetString(wxString(title, wxConvUTF8)); + wxWebViewEvent event(wxEVT_COMMAND_WEB_VIEW_TITLE_CHANGED, + webKitCtrl->GetId(), + webKitCtrl->GetCurrentURL(), + ""); + event.SetString(wxString(title, wxConvUTF8)); if (webKitCtrl && webKitCtrl->GetEventHandler()) - webKitCtrl->GetEventHandler()->ProcessEvent(thisEvent); + webKitCtrl->GetEventHandler()->ProcessEvent(event); } @@ -328,11 +324,11 @@ wxgtk_webview_webkit_resource_req(WebKitWebView *, { wxString uri = webkit_network_request_get_uri(request); - wxSharedPtr handler; - wxVector > hanlders = webKitCtrl->GetHandlers(); + wxSharedPtr handler; + wxVector > hanlders = webKitCtrl->GetHandlers(); //We are not vetoed so see if we match one of the additional handlers - for(wxVector >::iterator it = hanlders.begin(); + for(wxVector >::iterator it = hanlders.begin(); it != hanlders.end(); ++it) { if(uri.substr(0, (*it)->GetName().length()) == (*it)->GetName()) @@ -352,19 +348,16 @@ wxgtk_webview_webkit_resource_req(WebKitWebView *, wxFSFile* file = handler->GetFile(uri); if(file) { - //We redirect to a temp file for now, small things could be loaded - //using the data scheme + //We load the data into a data url to save it being written out again size_t size = file->GetStream()->GetLength(); char *buffer = new char[size]; - wxFile tempfile; - wxString path = wxFileName::CreateTempFileName("wxwebview_", &tempfile); - //We can then stream from the archive to the temp file file->GetStream()->Read(buffer, size); - tempfile.Write(buffer, size); - tempfile.Close(); + wxString data = wxBase64Encode(buffer, size); delete[] buffer; + wxString mime = file->GetMimeType(); + wxString path = "data:" + mime + ";base64," + data; //Then we can redirect the call - webkit_network_request_set_uri(request, "file://" + path); + webkit_network_request_set_uri(request, path); } } @@ -480,7 +473,7 @@ void wxWebViewWebKit::SetWebkitZoom(float level) webkit_web_view_set_zoom_level (WEBKIT_WEB_VIEW(web_view), level); } -float wxWebViewWebKit::GetWebkitZoom() +float wxWebViewWebKit::GetWebkitZoom() const { return webkit_web_view_get_zoom_level (WEBKIT_WEB_VIEW(web_view)); } @@ -502,7 +495,7 @@ void wxWebViewWebKit::Reload(wxWebViewReloadFlags flags) } } -void wxWebViewWebKit::LoadUrl(const wxString& url) +void wxWebViewWebKit::LoadURL(const wxString& url) { webkit_web_view_load_uri(WEBKIT_WEB_VIEW(web_view), wxGTK_CONV(url)); } @@ -519,13 +512,13 @@ void wxWebViewWebKit::GoForward() } -bool wxWebViewWebKit::CanGoBack() +bool wxWebViewWebKit::CanGoBack() const { return webkit_web_view_can_go_back (WEBKIT_WEB_VIEW(web_view)); } -bool wxWebViewWebKit::CanGoForward() +bool wxWebViewWebKit::CanGoForward() const { return webkit_web_view_can_go_forward (WEBKIT_WEB_VIEW(web_view)); } @@ -551,9 +544,9 @@ void wxWebViewWebKit::EnableHistory(bool enable) } } -wxVector > wxWebViewWebKit::GetBackwardHistory() +wxVector > wxWebViewWebKit::GetBackwardHistory() { - wxVector > backhist; + wxVector > backhist; WebKitWebBackForwardList* history; history = webkit_web_view_get_back_forward_list(WEBKIT_WEB_VIEW(web_view)); GList* list = webkit_web_back_forward_list_get_back_list_with_limit(history, @@ -562,19 +555,19 @@ wxVector > wxWebViewWebKit::GetBackwardHistory() for(int i = g_list_length(list) - 1; i >= 0 ; i--) { WebKitWebHistoryItem* gtkitem = (WebKitWebHistoryItem*)g_list_nth_data(list, i); - wxWebHistoryItem* wxitem = new wxWebHistoryItem( + wxWebViewHistoryItem* wxitem = new wxWebViewHistoryItem( webkit_web_history_item_get_uri(gtkitem), webkit_web_history_item_get_title(gtkitem)); wxitem->m_histItem = gtkitem; - wxSharedPtr item(wxitem); + wxSharedPtr item(wxitem); backhist.push_back(item); } return backhist; } -wxVector > wxWebViewWebKit::GetForwardHistory() +wxVector > wxWebViewWebKit::GetForwardHistory() { - wxVector > forwardhist; + wxVector > forwardhist; WebKitWebBackForwardList* history; history = webkit_web_view_get_back_forward_list(WEBKIT_WEB_VIEW(web_view)); GList* list = webkit_web_back_forward_list_get_forward_list_with_limit(history, @@ -582,39 +575,39 @@ wxVector > wxWebViewWebKit::GetForwardHistory() for(guint i = 0; i < g_list_length(list); i++) { WebKitWebHistoryItem* gtkitem = (WebKitWebHistoryItem*)g_list_nth_data(list, i); - wxWebHistoryItem* wxitem = new wxWebHistoryItem( + wxWebViewHistoryItem* wxitem = new wxWebViewHistoryItem( webkit_web_history_item_get_uri(gtkitem), webkit_web_history_item_get_title(gtkitem)); wxitem->m_histItem = gtkitem; - wxSharedPtr item(wxitem); + wxSharedPtr item(wxitem); forwardhist.push_back(item); } return forwardhist; } -void wxWebViewWebKit::LoadHistoryItem(wxSharedPtr item) +void wxWebViewWebKit::LoadHistoryItem(wxSharedPtr item) { WebKitWebHistoryItem* gtkitem = item->m_histItem; if(gtkitem) { WebKitWebBackForwardList* history; history = webkit_web_view_get_back_forward_list(WEBKIT_WEB_VIEW(web_view)); - webkit_web_back_forward_list_go_to_item(WEBKIT_WEB_BACK_FORWARD_LIST(history), + webkit_web_view_go_to_back_forward_item(WEBKIT_WEB_VIEW(web_view), WEBKIT_WEB_HISTORY_ITEM(gtkitem)); } } -bool wxWebViewWebKit::CanCut() +bool wxWebViewWebKit::CanCut() const { return webkit_web_view_can_cut_clipboard(WEBKIT_WEB_VIEW(web_view)); } -bool wxWebViewWebKit::CanCopy() +bool wxWebViewWebKit::CanCopy() const { return webkit_web_view_can_copy_clipboard(WEBKIT_WEB_VIEW(web_view)); } -bool wxWebViewWebKit::CanPaste() +bool wxWebViewWebKit::CanPaste() const { return webkit_web_view_can_paste_clipboard(WEBKIT_WEB_VIEW(web_view)); } @@ -634,12 +627,12 @@ void wxWebViewWebKit::Paste() webkit_web_view_paste_clipboard(WEBKIT_WEB_VIEW(web_view)); } -bool wxWebViewWebKit::CanUndo() +bool wxWebViewWebKit::CanUndo() const { return webkit_web_view_can_undo(WEBKIT_WEB_VIEW(web_view)); } -bool wxWebViewWebKit::CanRedo() +bool wxWebViewWebKit::CanRedo() const { return webkit_web_view_can_redo(WEBKIT_WEB_VIEW(web_view)); } @@ -654,7 +647,7 @@ void wxWebViewWebKit::Redo() webkit_web_view_redo(WEBKIT_WEB_VIEW(web_view)); } -wxString wxWebViewWebKit::GetCurrentURL() +wxString wxWebViewWebKit::GetCurrentURL() const { // FIXME: check which encoding the web kit control uses instead of // assuming UTF8 (here and elsewhere too) @@ -663,14 +656,14 @@ wxString wxWebViewWebKit::GetCurrentURL() } -wxString wxWebViewWebKit::GetCurrentTitle() +wxString wxWebViewWebKit::GetCurrentTitle() const { return wxString::FromUTF8(webkit_web_view_get_title( WEBKIT_WEB_VIEW(web_view))); } -wxString wxWebViewWebKit::GetPageSource() +wxString wxWebViewWebKit::GetPageSource() const { WebKitWebFrame* frame = webkit_web_view_get_main_frame( WEBKIT_WEB_VIEW(web_view)); @@ -683,7 +676,7 @@ wxString wxWebViewWebKit::GetPageSource() } -wxWebViewZoom wxWebViewWebKit::GetZoom() +wxWebViewZoom wxWebViewWebKit::GetZoom() const { float zoom = GetWebkitZoom(); @@ -791,7 +784,7 @@ void wxWebViewWebKit::Print() } -bool wxWebViewWebKit::IsBusy() +bool wxWebViewWebKit::IsBusy() const { return m_busy; @@ -822,7 +815,7 @@ void wxWebViewWebKit::SetEditable(bool enable) webkit_web_view_set_editable(WEBKIT_WEB_VIEW(web_view), enable); } -bool wxWebViewWebKit::IsEditable() +bool wxWebViewWebKit::IsEditable() const { return webkit_web_view_get_editable(WEBKIT_WEB_VIEW(web_view)); } @@ -832,7 +825,7 @@ void wxWebViewWebKit::DeleteSelection() webkit_web_view_delete_selection(WEBKIT_WEB_VIEW(web_view)); } -bool wxWebViewWebKit::HasSelection() +bool wxWebViewWebKit::HasSelection() const { return webkit_web_view_has_selection(WEBKIT_WEB_VIEW(web_view)); } @@ -842,7 +835,7 @@ void wxWebViewWebKit::SelectAll() webkit_web_view_select_all(WEBKIT_WEB_VIEW(web_view)); } -wxString wxWebViewWebKit::GetSelectedText() +wxString wxWebViewWebKit::GetSelectedText() const { WebKitDOMDocument* doc; WebKitDOMDOMWindow* win; @@ -858,7 +851,7 @@ wxString wxWebViewWebKit::GetSelectedText() wxConvUTF8); } -wxString wxWebViewWebKit::GetSelectedSource() +wxString wxWebViewWebKit::GetSelectedSource() const { WebKitDOMDocument* doc; WebKitDOMDOMWindow* win; @@ -896,7 +889,7 @@ void wxWebViewWebKit::ClearSelection() } -wxString wxWebViewWebKit::GetPageText() +wxString wxWebViewWebKit::GetPageText() const { WebKitDOMDocument* doc; WebKitDOMHTMLElement* body; @@ -913,7 +906,7 @@ void wxWebViewWebKit::RunScript(const wxString& javascript) javascript.mb_str(wxConvUTF8)); } -void wxWebViewWebKit::RegisterHandler(wxSharedPtr handler) +void wxWebViewWebKit::RegisterHandler(wxSharedPtr handler) { m_handlerList.push_back(handler); }