| Index: webkit/tools/test_shell/test_shell_gtk.cc
|
| diff --git a/webkit/tools/test_shell/test_shell_gtk.cc b/webkit/tools/test_shell/test_shell_gtk.cc
|
| index fd572fdcae2ac7bf3285fc8510482a0b419b13a2..1bdf144cb45268f5b195291a83da5cb995655ed9 100644
|
| --- a/webkit/tools/test_shell/test_shell_gtk.cc
|
| +++ b/webkit/tools/test_shell/test_shell_gtk.cc
|
| @@ -153,9 +153,10 @@ void TestShell::PlatformCleanUp() {
|
| m_webViewHost.release();
|
| }
|
|
|
| -// GTK callbacks ------------------------------------------------------
|
| namespace {
|
|
|
| +// GTK callbacks ------------------------------------------------------
|
| +
|
| // Callback for when the main window is destroyed.
|
| gboolean MainWindowDestroyed(GtkWindow* window, TestShell* shell) {
|
|
|
| @@ -203,6 +204,54 @@ void URLEntryActivate(GtkEntry* entry, TestShell* shell) {
|
| shell->LoadURL(UTF8ToWide(url).c_str());
|
| }
|
|
|
| +// Callback for Debug > Dump body text... menu item.
|
| +gboolean DumpBodyTextActivated(GtkWidget* widget, TestShell* shell) {
|
| + shell->DumpDocumentText();
|
| + return FALSE; // Don't stop this message.
|
| +}
|
| +
|
| +// Callback for Debug > Dump render tree... menu item.
|
| +gboolean DumpRenderTreeActivated(GtkWidget* widget, TestShell* shell) {
|
| + shell->DumpRenderTree();
|
| + return FALSE; // Don't stop this message.
|
| +}
|
| +
|
| +// Callback for Debug > Show web inspector... menu item.
|
| +gboolean ShowWebInspectorActivated(GtkWidget* widget, TestShell* shell) {
|
| + shell->webView()->InspectElement(0, 0);
|
| + return FALSE; // Don't stop this message.
|
| +}
|
| +
|
| +// GTK utility functions ----------------------------------------------
|
| +
|
| +GtkWidget* AddMenuEntry(GtkWidget* menu_widget, const char* text,
|
| + GCallback callback, TestShell* shell) {
|
| + GtkWidget* entry = gtk_menu_item_new_with_label(text);
|
| + g_signal_connect(G_OBJECT(entry), "activate", callback, shell);
|
| + gtk_menu_shell_append(GTK_MENU_SHELL(menu_widget), entry);
|
| + return entry;
|
| +}
|
| +
|
| +GtkWidget* CreateMenu(GtkWidget* menu_bar, const char* text) {
|
| + GtkWidget* menu_widget = gtk_menu_new();
|
| + GtkWidget* menu_header = gtk_menu_item_new_with_label(text);
|
| + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_header), menu_widget);
|
| + gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), menu_header);
|
| + return menu_widget;
|
| +}
|
| +
|
| +GtkWidget* CreateMenuBar(TestShell* shell) {
|
| + GtkWidget* menu_bar = gtk_menu_bar_new();
|
| + GtkWidget* debug_menu = CreateMenu(menu_bar, "Debug");
|
| + AddMenuEntry(debug_menu, "Dump body text...",
|
| + G_CALLBACK(DumpBodyTextActivated), shell);
|
| + AddMenuEntry(debug_menu, "Dump render tree...",
|
| + G_CALLBACK(DumpRenderTreeActivated), shell);
|
| + AddMenuEntry(debug_menu, "Show web inspector...",
|
| + G_CALLBACK(ShowWebInspectorActivated), shell);
|
| + return menu_bar;
|
| +}
|
| +
|
| }
|
|
|
| bool TestShell::Initialize(const std::wstring& startingURL) {
|
| @@ -217,6 +266,8 @@ bool TestShell::Initialize(const std::wstring& startingURL) {
|
|
|
| GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
|
|
|
| + gtk_box_pack_start(GTK_BOX(vbox), CreateMenuBar(this), FALSE, FALSE, 0);
|
| +
|
| GtkWidget* toolbar = gtk_toolbar_new();
|
| // Turn off the labels on the toolbar buttons.
|
| gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
|
| @@ -518,61 +569,30 @@ void TestShell::LoadURLForFrame(const wchar_t* url,
|
| -1, gurl, std::wstring(), frame_string));
|
| }
|
|
|
| -static void WriteTextToFile(const std::wstring& data,
|
| - const FilePath& filepath)
|
| -{
|
| - // This function does the same thing as the Windows version except that it
|
| - // takes a FilePath. We should be using WriteFile in base/file_util.h, but
|
| - // the patch to add the FilePath version of that file hasn't landed yet, so
|
| - // this is another TODO(agl) for the merging.
|
| - const int fd = open(filepath.value().c_str(), O_TRUNC | O_WRONLY | O_CREAT, 0600);
|
| - if (fd < 0)
|
| - return;
|
| - const std::string data_utf8 = WideToUTF8(data);
|
| - ssize_t n;
|
| - do {
|
| - n = write(fd, data_utf8.data(), data.size());
|
| - } while (n == -1 && errno == EINTR);
|
| - close(fd);
|
| -}
|
| -
|
| -
|
| -// TODO(agl):
|
| -// This version of PromptForSaveFile uses FilePath, which is what the real
|
| -// version should be using. However, I don't want to step on tony's toes (as he
|
| -// is also editing this file), so this is a hack until we merge the files again.
|
| -// (There is also a PromptForSaveFile member in TestShell which returns a wstring)
|
| -static bool PromptForSaveFile(const char* prompt_title,
|
| - FilePath* result)
|
| -{
|
| - char filenamebuffer[512];
|
| - printf("Enter filename for \"%s\"\n", prompt_title);
|
| - if (!fgets(filenamebuffer, sizeof(filenamebuffer), stdin))
|
| - return false; // EOF on stdin
|
| - *result = FilePath(filenamebuffer);
|
| +// TODO(agl): PromptForSaveFile should use FilePath
|
| +bool TestShell::PromptForSaveFile(const wchar_t* prompt_title,
|
| + std::wstring* result) {
|
| + GtkWidget* dialog;
|
| + dialog = gtk_file_chooser_dialog_new(WideToUTF8(prompt_title).c_str(),
|
| + GTK_WINDOW(m_mainWnd),
|
| + GTK_FILE_CHOOSER_ACTION_SAVE,
|
| + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
| + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
|
| + NULL); // Terminate (button, id) pairs.
|
| + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog),
|
| + TRUE);
|
| + int dialog_result = gtk_dialog_run(GTK_DIALOG(dialog));
|
| + if (dialog_result != GTK_RESPONSE_ACCEPT) {
|
| + gtk_widget_destroy(dialog);
|
| + return false;
|
| + }
|
| + char* path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
|
| + gtk_widget_destroy(dialog);
|
| + *result = UTF8ToWide(path);
|
| + g_free(path);
|
| return true;
|
| }
|
|
|
| -void TestShell::DumpDocumentText()
|
| -{
|
| - FilePath file_path;
|
| - if (!::PromptForSaveFile("Dump document text", &file_path))
|
| - return;
|
| -
|
| - WriteTextToFile(webkit_glue::DumpDocumentText(webView()->GetMainFrame()),
|
| - file_path);
|
| -}
|
| -
|
| -void TestShell::DumpRenderTree()
|
| -{
|
| - FilePath file_path;
|
| - if (!::PromptForSaveFile("Dump render tree", &file_path))
|
| - return;
|
| -
|
| - WriteTextToFile(webkit_glue::DumpRenderer(webView()->GetMainFrame()),
|
| - file_path);
|
| -}
|
| -
|
| // static
|
| std::string TestShell::RewriteLocalUrl(const std::string& url) {
|
| // Convert file:///tmp/LayoutTests urls to the actual location on disk.
|
|
|