On Sun, Jul 06, 2008 at 01:03:54PM +0200, Mike Hommey wrote: > On Sun, Jul 06, 2008 at 12:42:01PM +0200, Andreas Barth wrote: > > Hi, > > > > * Mike Hommey ([EMAIL PROTECTED]) [080706 10:41]: > > > On Fri, Jun 20, 2008 at 11:28:05AM +0200, Alexander Sack <[EMAIL > > > PROTECTED]> wrote: > > > > On Fri, Jun 20, 2008 at 01:07:09AM +0200, Mike Hommey wrote: > > > > > On Fri, Jun 20, 2008 at 12:43:04AM +0200, Mike Hommey wrote: > > > > > > On Fri, Jun 20, 2008 at 12:38:52AM +0200, Mike Hommey wrote: > > > > > > > On Wed, Jun 18, 2008 at 12:48:42AM +0200, Josselin Mouette wrote: > > > > > > > > Le mercredi 18 juin 2008 à 00:18 +0200, Mazen NEIFER a écrit : > > > > > > > > > Browse > > > > > > > > > http://aljazeera.net/NR/exeres/8BAC4176-2B16-450F-B8DA-7127702A17AF.htm > > > > > > > > > and try to increase font size and it will crash. > > > > > > > > > > > > > > > > This is indeed reproducible. Interestingly enough, a very > > > > > > > > similar bug > > > > > > > > happens in devhelp when trying to increase the font size. > > > > > > > > > > > > > > > > I???m attaching a full backtrace with debugging symbols. > > > > > > > > > > > > > > Interestingly, while I can reproduce with epiphany, I can't with > > > > > > > iceweasel. Some values of the zoom factor may be triggering this > > > > > > > issue... > > > > > > > > > > > > FWIW, iceweasel is setting zoom factor to 1.1, 1.2, 1.3, ... > > > > > > > > > > I tried some less intriguing values for zoom factors in epiphany, and > > > > > it > > > > > didn't change anything. It still crashes. > > > > > > > > > > > > > We had this "zoom" crash here _before_ respinning epiphany-browser on > > > > top of the final xulrunner .... Are you sure its a fresh build? > > > > > > I build it myself yesterday. Though not against final xulrunner, but rc2, > > > which is the same. > > > > Any news on this bug? Does it still happen? How bad is it, should it > > block testing migration? > > It still happens reliably for me with the given url, though it doesn't > happen with other urls. So I would say it is not /that/ bad.
Now, I got to the point where I don't know where the bug is anymore... I roughly duplicated epiphany code for zoom handling in the gtkembed test in xulrunner (in case it would make a difference whether the zoom API is called from javascript or C) and... it doesn't crash... Attached, you'll find a patch for this test. If you want to try for yourself, apply it to current xulrunner source, run debian/rules build, then make -C embedding/browser/gtk/tests, and finally, dist/bin/run-mozilla.sh embedding/browser/gtk/tests/TestGtkEmbed Then go to the aljazeera.net url, and click on zoom (you can click several times, but not too many times, there is no failsafe) Mike
diff --git a/embedding/browser/gtk/tests/Makefile.in b/embedding/browser/gtk/tests/Makefile.in index 9eb984a..984e4b0 100644 --- a/embedding/browser/gtk/tests/Makefile.in +++ b/embedding/browser/gtk/tests/Makefile.in @@ -46,6 +46,7 @@ include $(DEPTH)/config/autoconf.mk MODULE = gtkembedmoz REQUIRES = xpcom \ dom \ + docshell \ $(NULL) CPPSRCS = \ diff --git a/embedding/browser/gtk/tests/TestGtkEmbed.cpp b/embedding/browser/gtk/tests/TestGtkEmbed.cpp index 3c7223d..8170aaf 100644 --- a/embedding/browser/gtk/tests/TestGtkEmbed.cpp +++ b/embedding/browser/gtk/tests/TestGtkEmbed.cpp @@ -51,6 +51,11 @@ #include "nsServiceManagerUtils.h" #include "nsIObserverService.h" +#include "nsIInterfaceRequestorUtils.h" +#include "nsIDocShell.h" +#include "nsIContentViewer.h" +#include "nsIMarkupDocumentViewer.h" + #include "nsStringAPI.h" #include "gtkmozembed_glue.cpp" @@ -71,6 +76,7 @@ typedef struct _TestGtkBrowser { GtkWidget *stopButton; GtkWidget *forwardButton; GtkWidget *reloadButton; + GtkWidget *zoomButton; GtkWidget *urlEntry; GtkWidget *mozEmbed; GtkWidget *progressAreaHBox; @@ -107,6 +113,8 @@ static void forward_clicked_cb (GtkButton *button, TestGtkBrowser *browser); static void reload_clicked_cb (GtkButton *button, TestGtkBrowser *browser); +static void zoom_clicked_cb (GtkButton *button, + TestGtkBrowser *browser); static void url_activate_cb (GtkEditable *widget, TestGtkBrowser *browser); static void menu_open_new_cb (GtkMenuItem *menuitem, @@ -221,6 +229,12 @@ main(int argc, char **argv) return 1; } + rv = GTKEmbedGlueStartupInternal(); + if (NS_FAILED(rv)) { + fprintf(stderr, "Couldn't find GTKMozEmbed symbols."); + return 1; + } + char *lastSlash = strrchr(xpcomPath, '/'); if (lastSlash) *lastSlash = '\0'; @@ -416,6 +430,16 @@ new_gtk_browser(guint32 chromeMask) 0, // XXX replace with icon GTK_SIGNAL_FUNC(reload_clicked_cb), browser); + + // new zoom button + browser->zoomButton = + gtk_toolbar_append_item(GTK_TOOLBAR(browser->toolbar), + "Zoom", + "Zoom", + "Zoom", + 0, // XXX replace with icon + GTK_SIGNAL_FUNC(zoom_clicked_cb), + browser); // create the url text entry browser->urlEntry = gtk_entry_new(); // add it to the hbox @@ -463,6 +487,7 @@ new_gtk_browser(guint32 chromeMask) gtk_widget_set_sensitive(browser->stopButton, FALSE); gtk_widget_set_sensitive(browser->forwardButton, FALSE); gtk_widget_set_sensitive(browser->reloadButton, FALSE); + gtk_widget_set_sensitive(browser->zoomButton, FALSE); // catch the destruction of the toplevel window gtk_signal_connect(GTK_OBJECT(browser->topLevelWindow), "delete_event", @@ -634,6 +659,27 @@ reload_clicked_cb (GtkButton *button, TestGtkBrowser *browser) GTK_MOZ_EMBED_FLAG_RELOADNORMAL); } +static const float zoom_levels[] = +{ +1.0, 1.1892071149, 1.4142135623, 1.6817928304, 2.0, 2.8284271247, 4.0 +}; + +static const float *current_zoom_level = zoom_levels; + +void +zoom_clicked_cb (GtkButton *button, TestGtkBrowser *browser) +{ + g_print("zoom_clicked_cb\n"); + nsCOMPtr<nsIWebBrowser> webBrowser; + gtk_moz_embed_get_nsIWebBrowser(GTK_MOZ_EMBED(browser->mozEmbed), + getter_AddRefs(webBrowser)); + nsCOMPtr<nsIDocShell> docShell(do_GetInterface(webBrowser)); + nsCOMPtr<nsIContentViewer> contentViewer; + docShell->GetContentViewer(getter_AddRefs(contentViewer)); + nsCOMPtr<nsIMarkupDocumentViewer> mdv = do_QueryInterface(contentViewer); + mdv->SetTextZoom(*(++current_zoom_level)); +} + void stream_clicked_cb (GtkButton *button, TestGtkBrowser *browser) { @@ -815,6 +861,7 @@ load_finished_cb (GtkMozEmbed *embed, TestGtkBrowser *browser) g_print("load_finished_cb\n"); gtk_widget_set_sensitive(browser->stopButton, FALSE); gtk_widget_set_sensitive(browser->reloadButton, TRUE); + gtk_widget_set_sensitive(browser->zoomButton, TRUE); browser->loadPercent = 0; browser->bytesLoaded = 0; browser->maxBytesLoaded = 0;