[GTK][WebInspector] Support for saving data
https://bugs.webkit.org/show_bug.cgi?id=202894
Reviewed by Carlos Garcia Campos.
Implement the WebInspectorProxy::platformSave() method. This
allows users to save the inspector performance measurements, for
instance.
* UIProcess/gtk/WebInspectorProxyGtk.cpp:
(WebKit::WebInspectorProxy::platformSave):
* WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp:
(WebKit::WebInspectorUI::canSave):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@251069 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 8d6b0ae..75aaac4 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,19 @@
+2019-10-14 Philippe Normand <pnormand@igalia.com>
+
+ [GTK][WebInspector] Support for saving data
+ https://bugs.webkit.org/show_bug.cgi?id=202894
+
+ Reviewed by Carlos Garcia Campos.
+
+ Implement the WebInspectorProxy::platformSave() method. This
+ allows users to save the inspector performance measurements, for
+ instance.
+
+ * UIProcess/gtk/WebInspectorProxyGtk.cpp:
+ (WebKit::WebInspectorProxy::platformSave):
+ * WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp:
+ (WebKit::WebInspectorUI::canSave):
+
2019-10-14 youenn fablet <youenn@apple.com>
Reuse existing web processes for running service workers
diff --git a/Source/WebKit/UIProcess/gtk/WebInspectorProxyGtk.cpp b/Source/WebKit/UIProcess/gtk/WebInspectorProxyGtk.cpp
index 8527198..4229804 100644
--- a/Source/WebKit/UIProcess/gtk/WebInspectorProxyGtk.cpp
+++ b/Source/WebKit/UIProcess/gtk/WebInspectorProxyGtk.cpp
@@ -36,6 +36,7 @@
#include "WKMutableArray.h"
#include "WebFramePolicyListenerProxy.h"
#include "WebInspectorProxyClient.h"
+#include "WebInspectorUIMessages.h"
#include "WebKitInspectorWindow.h"
#include "WebKitWebViewBasePrivate.h"
#include "WebPageGroup.h"
@@ -45,6 +46,7 @@
#include <WebCore/GtkUtilities.h>
#include <WebCore/NotImplemented.h>
#include <wtf/FileSystem.h>
+#include <wtf/text/Base64.h>
#include <wtf/text/CString.h>
#include <wtf/text/WTFString.h>
@@ -458,9 +460,44 @@
notImplemented();
}
-void WebInspectorProxy::platformSave(const String&, const String&, bool, bool)
+void WebInspectorProxy::platformSave(const String& filename, const String& content, bool base64Encoded, bool forceSaveDialog)
{
- notImplemented();
+ UNUSED_PARAM(forceSaveDialog);
+
+ GtkWidget* parent = gtk_widget_get_toplevel(m_inspectorView);
+ if (!WebCore::widgetIsOnscreenToplevelWindow(parent))
+ return;
+
+ GRefPtr<GtkFileChooserNative> dialog = adoptGRef(gtk_file_chooser_native_new("Save File",
+ GTK_WINDOW(parent), GTK_FILE_CHOOSER_ACTION_SAVE, "Save", "Cancel"));
+
+ GtkFileChooser* chooser = GTK_FILE_CHOOSER(dialog.get());
+ gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE);
+ gtk_file_chooser_set_current_name(chooser, filename.utf8().data());
+
+ if (gtk_native_dialog_run(GTK_NATIVE_DIALOG(dialog.get())) != GTK_RESPONSE_ACCEPT)
+ return;
+
+ gssize dataLength = 0;
+ const char* data;
+
+ if (base64Encoded) {
+ Vector<char> out;
+ if (!base64Decode(content, out, Base64ValidatePadding))
+ return;
+
+ out.shrinkToFit();
+ data = out.data();
+ dataLength = out.size();
+ } else {
+ data = content.utf8().data();
+ dataLength = content.utf8().length();
+ }
+
+ GRefPtr<GFile> file = adoptGRef(gtk_file_chooser_get_file(chooser));
+ GUniquePtr<char> path(g_file_get_path(file.get()));
+ if (g_file_set_contents(path.get(), data, dataLength, nullptr))
+ m_inspectorPage->process().send(Messages::WebInspectorUI::DidSave(path.get()), m_inspectorPage->webPageID());
}
void WebInspectorProxy::platformAppend(const String&, const String&)
diff --git a/Source/WebKit/WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp b/Source/WebKit/WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp
index dbb2a91..9d25a1a 100644
--- a/Source/WebKit/WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp
+++ b/Source/WebKit/WebProcess/WebPage/gtk/WebInspectorUIGtk.cpp
@@ -36,7 +36,7 @@
bool WebInspectorUI::canSave()
{
- return false;
+ return true;
}
String WebInspectorUI::localizedStringsURL()