[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#924974: marked as done (unblock (pre-approval) or RM: epiphany-browser/3.32.1.2-2)



Your message dated Sun, 05 May 2019 11:40:15 +0000
with message-id <E1hNFV9-0007Uh-Tp@respighi.debian.org>
and subject line unblock epiphany-browser
has caused the Debian Bug report #924974,
regarding unblock (pre-approval) or RM: epiphany-browser/3.32.1.2-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
924974: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=924974
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock
X-Debbugs-Cc: debian-gtk-gnome@lists.debian.org

The GNOME team would like to get epiphany-browser 3.32.0 into testing,
replacing the current 3.31.91 (3.32 release candidate 1). This will
maximize the period in which we can track upstream 3.32.x bugfix releases
for buster, which seems likely to be important for a web browser.
This also fixes RC bug #922730 (failure to run on 32-bit machines).

The diffstat looks larger than it really is - it's mostly l10n, which
I've filtered out from the debdiff.

3.32.0-1 is in unstable, but FTBFS everywhere (I pushed an untested
version intending to discuss whether it was for buster or experimental,
and Jeremy tested it on Ubuntu rather than Debian before uploading to
unstable). However, the FTBFS is fixed in git, and I confirm that a
build from current git works correctly.

As mentioned on #916347, the intention is to provide security updates
for webkit2gtk in Debian 10 on a similar basis to what's been done
in Ubuntu 16.04 LTS and 18.04 LTS. WebKitGTK upstream intend to keep
new releases buildable for the security lifetime of Debian stable
(until bullseye is released, then one more year), although it might
grow a dependency on a newer compiler after bullseye is released
(but by then we might already need that newer compiler for Firefox).
See <https://trac.webkit.org/wiki/WebKitGTK/DependenciesPolicy>.

If any of that is unacceptable, then we should probably remove
epiphany-browser from testing instead.

unblock epiphany-browser/3.32.0-2

Thanks,
    smcv
diffstat for epiphany-browser-3.31.91 epiphany-browser-3.32.0

 NEWS                                                          |   35 
 data/org.gnome.Epiphany.appdata.xml.in                        |    4 
 data/org.gnome.epiphany.gschema.xml                           |   11 
 debian/changelog                                              |   19 
 debian/patches/00_epiphany-browser.patch                      |    2 
 debian/patches/Disable-webapps-test.patch                     |    4 
 debian/patches/disable-safe-browsing-test.patch               |   32 
 debian/patches/dont-make-compulsory.patch                     |   16 
 debian/patches/revert-libdazzle-version-bump.patch            |   27 
 debian/patches/series                                         |    3 
 debian/patches/use-the-static-build-option-for-libhandy.patch |   24 
 debian/rules                                                  |    3 
 embed/ephy-embed-shell.c                                      |   30 
 embed/web-extension/ephy-web-extension.c                      |   17 
 embed/web-extension/resources/js/ephy.js                      |   12 
 lib/ephy-prefs.h                                              |    8 
 lib/widgets/ephy-location-entry.c                             |    2 
 meson.build                                                   |   21 
 meson_options.txt                                             |   10 
 po/POTFILES.skip                                              |    3 
 po/cs.po                                                      | 1417 +--
 po/da.po                                                      |  409 -
 po/de.po                                                      | 1649 ++--
 po/el.po                                                      | 1520 ++--
 po/es.po                                                      |  422 -
 po/eu.po                                                      | 3783 +++-------
 po/fi.po                                                      |   25 
 po/fr.po                                                      | 1680 ++--
 po/fur.po                                                     |   30 
 po/gl.po                                                      |   33 
 po/hu.po                                                      |  401 -
 po/id.po                                                      |  415 -
 po/it.po                                                      | 1539 ++--
 po/ko.po                                                      | 1704 ++--
 po/lt.po                                                      |  426 -
 po/lv.po                                                      | 2102 +++--
 po/nl.po                                                      | 1765 ++--
 po/pl.po                                                      |  382 -
 po/pt_BR.po                                                   |  455 -
 po/ro.po                                                      | 1640 ++--
 po/ru.po                                                      | 1633 ++--
 po/sr.po                                                      | 1641 ++--
 po/sv.po                                                      | 2034 ++---
 po/tr.po                                                      |  414 -
 src/ephy-action-bar-end.c                                     |   62 
 src/ephy-history-dialog.c                                     |   34 
 src/ephy-mouse-gesture-controller.c                           |   32 
 src/ephy-page-row.c                                           |   17 
 src/ephy-session.c                                            |    2 
 src/ephy-window.c                                             |   12 
 src/prefs-dialog.c                                            |   16 
 src/resources/gtk/encoding-dialog.ui                          |    4 
 src/resources/gtk/history-dialog.ui                           |   77 
 src/resources/gtk/notebook-context-menu.ui                    |    6 
 src/resources/gtk/page-row.ui                                 |  133 
 src/window-commands.c                                         |    8 
 subprojects/libhandy/data/packaging/rpm/libhandy.spec         |    2 
 subprojects/libhandy/debian/changelog                         |   65 
 subprojects/libhandy/debian/libhandy-0.0-0.symbols            |    2 
 subprojects/libhandy/debian/tests/build-test.c                |    2 
 subprojects/libhandy/debian/tests/control                     |    4 
 subprojects/libhandy/debian/tests/python-gi-test              |   13 
 subprojects/libhandy/doc/meson.build                          |    1 
 subprojects/libhandy/examples/meson.build                     |    3 
 subprojects/libhandy/examples/sm.puri.Handy.Demo.json         |    2 
 subprojects/libhandy/glade/libhandy.xml                       |    8 
 subprojects/libhandy/meson.build                              |    2 
 subprojects/libhandy/src/handy.gresources.xml                 |    6 
 subprojects/libhandy/src/hdy-action-row.c                     |   10 
 subprojects/libhandy/src/hdy-arrows.c                         |    3 
 subprojects/libhandy/src/hdy-column.c                         |    3 
 subprojects/libhandy/src/hdy-combo-row-list.css               |    6 
 subprojects/libhandy/src/hdy-combo-row.c                      |   12 
 subprojects/libhandy/src/hdy-dialer-button.c                  |    5 
 subprojects/libhandy/src/hdy-dialer-cycle-button.c            |    3 
 subprojects/libhandy/src/hdy-dialer.c                         |    5 
 subprojects/libhandy/src/hdy-dialog.c                         |    3 
 subprojects/libhandy/src/hdy-expander-row-arrow.css           |   17 
 subprojects/libhandy/src/hdy-expander-row.c                   |  101 
 subprojects/libhandy/src/hdy-expander-row.h                   |    4 
 subprojects/libhandy/src/hdy-fold.c                           |    1 
 subprojects/libhandy/src/hdy-header-group.c                   |    3 
 subprojects/libhandy/src/hdy-leaflet.c                        |   89 
 subprojects/libhandy/src/hdy-list-box.c                       |    3 
 subprojects/libhandy/src/hdy-main.c                           |    3 
 subprojects/libhandy/src/hdy-search-bar.c                     |    5 
 subprojects/libhandy/src/hdy-style-private.h                  |   22 
 subprojects/libhandy/src/hdy-title-bar.c                      |    3 
 subprojects/libhandy/src/hdy-value-object.c                   |    3 
 subprojects/libhandy/src/meson.build                          |    2 
 subprojects/libhandy/tests/test-expander-row.c                |   28 
 tests/meson.build                                             |   24 
 92 files changed, 14678 insertions(+), 13995 deletions(-)

diff -Nru epiphany-browser-3.31.91/data/org.gnome.Epiphany.appdata.xml.in epiphany-browser-3.32.0/data/org.gnome.Epiphany.appdata.xml.in
--- epiphany-browser-3.31.91/data/org.gnome.Epiphany.appdata.xml.in	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/data/org.gnome.Epiphany.appdata.xml.in	2019-03-11 15:45:53.000000000 +0000
@@ -33,9 +33,9 @@
   </kudos>
   <project_group>GNOME</project_group>
   <compulsory_for_desktop>GNOME</compulsory_for_desktop>
-  <project_license>GPL-2.0+</project_license>
+  <project_license>GPL-3.0+</project_license>
   <developer_name>The GNOME Project</developer_name>
-  <url type="bugtracker">https://bugzilla.gnome.org/enter_bug.cgi?product=epiphany</url>
+  <url type="bugtracker">https://gitlab.gnome.org/GNOME/epiphany/issues</url>
   <url type="donation">http://www.gnome.org/friends/</url>
   <url type="help">https://help.gnome.org/users/epiphany/stable/</url>
   <url type="translate">https://wiki.gnome.org/TranslationProject</url>
diff -Nru epiphany-browser-3.31.91/data/org.gnome.epiphany.gschema.xml epiphany-browser-3.32.0/data/org.gnome.epiphany.gschema.xml
--- epiphany-browser-3.31.91/data/org.gnome.epiphany.gschema.xml	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/data/org.gnome.epiphany.gschema.xml	2019-03-11 15:45:53.000000000 +0000
@@ -55,6 +55,17 @@
                         <summary>Whether to delay loading of tabs that are not immediately visible on session restore</summary>
                         <description>When this option is set to true, tabs will not start loading until the user switches to them, upon session restore.</description>
                 </key>
+                <key name="process-model" enum="org.gnome.Epiphany.EphyPrefsProcessModel">
+                        <default>'one-secondary-process-per-web-view'</default>
+                        <summary>Process model</summary>
+                        <description>This option allows to set the process model used. Use “shared-secondary-process” to use a single web process shared by all the tabs and “one-secondary-process-per-web-view” to use a different web process for each tab.</description>
+                </key>
+                <key type="u" name="max-processes">
+                        <default>0</default>
+                        <summary>Maximum number of web processes created at the same time when using “one-secondary-process-per-web-view” model</summary>
+                        <description>This option sets a limit to the number of web processes that will be used at the same time for the “one-secondary-process-per-web-view” model. The default value is “0” and means no limit.</description>
+
+                </key>
                 <key type="as" name="adblock-filters">
                         <default>['https://easylist.to/easylist/easylist.txt', 'https://easylist.to/easylist/easyprivacy.txt']</default>
                         <summary>List of adblock filters</summary>
diff -Nru epiphany-browser-3.31.91/debian/changelog epiphany-browser-3.32.0/debian/changelog
--- epiphany-browser-3.31.91/debian/changelog	2019-02-19 01:44:09.000000000 +0000
+++ epiphany-browser-3.32.0/debian/changelog	2019-03-19 09:48:00.000000000 +0000
@@ -1,3 +1,22 @@
+epiphany-browser (3.32.0-2) UNRELEASED; urgency=medium
+
+  [ Jeremy Bicha ]
+  * Add revert-libdazzle-version-bump.patch:
+    - Fix build since Buster/sid doesn't have libdazzle 3.32
+
+ -- Simon McVittie <smcv@debian.org>  Tue, 19 Mar 2019 09:48:00 +0000
+
+epiphany-browser (3.32.0-1) unstable; urgency=medium
+
+  [ Simon McVittie ]
+  * New upstream release
+    - Fix for running on 32-bit architectures (Closes: #922730)
+  * Refresh patches
+  * Disable tests that require network via a build option, not a patch
+  * Drop use-the-static-build-option-for-libhandy.patch: Applied
+
+ -- Jeremy Bicha <jbicha@debian.org>  Fri, 15 Mar 2019 05:25:23 -0400
+
 epiphany-browser (3.31.91-2) unstable; urgency=medium
 
   * debian/copyright: some corrections
diff -Nru epiphany-browser-3.31.91/debian/patches/00_epiphany-browser.patch epiphany-browser-3.32.0/debian/patches/00_epiphany-browser.patch
--- epiphany-browser-3.31.91/debian/patches/00_epiphany-browser.patch	2019-02-19 01:44:09.000000000 +0000
+++ epiphany-browser-3.32.0/debian/patches/00_epiphany-browser.patch	2019-03-19 09:48:00.000000000 +0000
@@ -7,7 +7,7 @@
  1 file changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/meson.build b/meson.build
-index 7d0566c..60aab7b 100644
+index 327e9b5..eb7ba17 100644
 --- a/meson.build
 +++ b/meson.build
 @@ -21,9 +21,9 @@ libdir = join_paths(prefix, get_option('libdir'))
diff -Nru epiphany-browser-3.31.91/debian/patches/disable-safe-browsing-test.patch epiphany-browser-3.32.0/debian/patches/disable-safe-browsing-test.patch
--- epiphany-browser-3.31.91/debian/patches/disable-safe-browsing-test.patch	2019-02-19 01:44:09.000000000 +0000
+++ epiphany-browser-3.32.0/debian/patches/disable-safe-browsing-test.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,32 +0,0 @@
-From: Jeremy Bicha <jbicha@debian.org>
-Date: Mon, 18 Feb 2019 20:36:49 -0500
-Subject: disable safe browsing test
-
-This test requires Internet access
-
-https://gitlab.gnome.org/GNOME/epiphany/issues/684
----
- tests/meson.build | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/tests/meson.build b/tests/meson.build
-index 2c71c8c..71fcd32 100644
---- a/tests/meson.build
-+++ b/tests/meson.build
-@@ -68,11 +68,11 @@ if get_option('unit_tests')
-     'ephy-gsb-service-test.c',
-     dependencies: ephymain_dep
-   )
--  test('GSB service test',
--       gsb_service_test,
--       env: envs,
--       timeout: 90 # slow!
--  )
-+  #test('GSB service test',
-+  #     gsb_service_test,
-+  #     env: envs,
-+  #     timeout: 90 # slow!
-+  #)
- 
-   history_test = executable('test-ephy-history',
-     'ephy-history-test.c',
diff -Nru epiphany-browser-3.31.91/debian/patches/Disable-webapps-test.patch epiphany-browser-3.32.0/debian/patches/Disable-webapps-test.patch
--- epiphany-browser-3.31.91/debian/patches/Disable-webapps-test.patch	2019-02-19 01:44:09.000000000 +0000
+++ epiphany-browser-3.32.0/debian/patches/Disable-webapps-test.patch	2019-03-19 09:48:00.000000000 +0000
@@ -7,10 +7,10 @@
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/tests/meson.build b/tests/meson.build
-index 6294f4e..2c71c8c 100644
+index b199a2c..b6f7f8e 100644
 --- a/tests/meson.build
 +++ b/tests/meson.build
-@@ -164,10 +164,10 @@ if get_option('unit_tests')
+@@ -154,10 +154,10 @@ if get_option('unit_tests').enabled()
      'ephy-web-app-utils-test.c',
      dependencies: ephymain_dep
    )
diff -Nru epiphany-browser-3.31.91/debian/patches/dont-make-compulsory.patch epiphany-browser-3.32.0/debian/patches/dont-make-compulsory.patch
--- epiphany-browser-3.31.91/debian/patches/dont-make-compulsory.patch	2019-02-19 01:44:09.000000000 +0000
+++ epiphany-browser-3.32.0/debian/patches/dont-make-compulsory.patch	2019-03-19 09:48:00.000000000 +0000
@@ -1,16 +1,20 @@
 From: Jeremy Bicha <jbicha@debian.org>
 Date: Sun, 18 Feb 2018 15:24:30 -0500
-Subject: Since Epiphany is not our default browser,
+Subject: appdata: Don't mark as compulsory for GNOME
 
-allow users to uninstall it using the GNOME Software app
+Upstream mark it as a system application that cannot be removed, because
+it's GNOME's default web browser, but our default in Debian is Firefox.
 
-https://gitlab.gnome.org/GNOME/epiphany/merge_requests/31
+Allow users to uninstall this app if they wish.
+
+Applied-upstream: no
+Forwarded: https://gitlab.gnome.org/GNOME/epiphany/merge_requests/31
 ---
  data/org.gnome.Epiphany.appdata.xml.in | 1 -
  1 file changed, 1 deletion(-)
 
 diff --git a/data/org.gnome.Epiphany.appdata.xml.in b/data/org.gnome.Epiphany.appdata.xml.in
-index 220d9bd..f8bf74b 100644
+index b8c373e..7372d96 100644
 --- a/data/org.gnome.Epiphany.appdata.xml.in
 +++ b/data/org.gnome.Epiphany.appdata.xml.in
 @@ -32,7 +32,6 @@
@@ -18,6 +22,6 @@
    </kudos>
    <project_group>GNOME</project_group>
 -  <compulsory_for_desktop>GNOME</compulsory_for_desktop>
-   <project_license>GPL-2.0+</project_license>
+   <project_license>GPL-3.0+</project_license>
    <developer_name>The GNOME Project</developer_name>
-   <url type="bugtracker">https://bugzilla.gnome.org/enter_bug.cgi?product=epiphany</url>
+   <url type="bugtracker">https://gitlab.gnome.org/GNOME/epiphany/issues</url>
diff -Nru epiphany-browser-3.31.91/debian/patches/revert-libdazzle-version-bump.patch epiphany-browser-3.32.0/debian/patches/revert-libdazzle-version-bump.patch
--- epiphany-browser-3.31.91/debian/patches/revert-libdazzle-version-bump.patch	1970-01-01 01:00:00.000000000 +0100
+++ epiphany-browser-3.32.0/debian/patches/revert-libdazzle-version-bump.patch	2019-03-19 09:48:00.000000000 +0000
@@ -0,0 +1,27 @@
+From: Jeremy Bicha <jbicha@debian.org>
+Date: Fri, 15 Mar 2019 07:02:07 -0400
+Subject: revert libdazzle version bump
+
+ae98f8c8445fce unnecessarily bumped the libdazzle version.
+
+Lower the libdazzle requirement 3.30 since that's what
+we have in Debian 10 "Buster".
+
+https://gitlab.gnome.org/GNOME/epiphany/issues/699
+---
+ meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index eb7ba17..631ae57 100644
+--- a/meson.build
++++ b/meson.build
+@@ -95,7 +95,7 @@ hogweed_dep = dependency('hogweed', version: nettle_requirement)
+ icu_uc_dep = dependency('icu-uc', version: '>= 4.6')
+ iso_codes_dep = dependency('iso-codes', version: '>= 0.35')
+ json_glib_dep = dependency('json-glib-1.0', version: '>= 1.2.4')
+-libdazzle_dep = dependency('libdazzle-1.0', version: '>= 3.31.90')
++libdazzle_dep = dependency('libdazzle-1.0', version: '>= 3.30')
+ libhandy_dep = dependency('libhandy-0.0', version: '>= 0.0.9', required: false)
+ libnotify_dep = dependency('libnotify', version: '>= 0.5.1')
+ libsecret_dep = dependency('libsecret-1', version: '>= 0.14')
diff -Nru epiphany-browser-3.31.91/debian/patches/series epiphany-browser-3.32.0/debian/patches/series
--- epiphany-browser-3.31.91/debian/patches/series	2019-02-19 01:44:09.000000000 +0000
+++ epiphany-browser-3.32.0/debian/patches/series	2019-03-19 09:48:00.000000000 +0000
@@ -2,5 +2,4 @@
 07_bookmarks.patch
 dont-make-compulsory.patch
 Disable-webapps-test.patch
-use-the-static-build-option-for-libhandy.patch
-disable-safe-browsing-test.patch
+revert-libdazzle-version-bump.patch
diff -Nru epiphany-browser-3.31.91/debian/patches/use-the-static-build-option-for-libhandy.patch epiphany-browser-3.32.0/debian/patches/use-the-static-build-option-for-libhandy.patch
--- epiphany-browser-3.31.91/debian/patches/use-the-static-build-option-for-libhandy.patch	2019-02-19 01:44:09.000000000 +0000
+++ epiphany-browser-3.32.0/debian/patches/use-the-static-build-option-for-libhandy.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,24 +0,0 @@
-From: Jeremy Bicha <jbicha@ubuntu.com>
-Date: Mon, 18 Feb 2019 19:49:11 -0500
-Subject: build: use static build option for libhandy subproject
-
-This keeps libhandy from trying to install its
-development files
-
-https://gitlab.gnome.org/GNOME/epiphany/merge_requests/191
----
- meson.build | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/meson.build b/meson.build
-index 60aab7b..aa4e464 100644
---- a/meson.build
-+++ b/meson.build
-@@ -125,6 +125,7 @@ if not libhandy_dep.found()
-                                                           'glade_catalog=disabled',
-                                                           'introspection=disabled',
-                                                           'package_subdir=epiphany',
-+                                                          'static=true',
-                                                           'tests=false',
-                                                           'vapi=false']).get_variable('libhandy_dep')
- endif
diff -Nru epiphany-browser-3.31.91/debian/rules epiphany-browser-3.32.0/debian/rules
--- epiphany-browser-3.31.91/debian/rules	2019-02-19 01:44:09.000000000 +0000
+++ epiphany-browser-3.32.0/debian/rules	2019-03-19 09:48:00.000000000 +0000
@@ -8,7 +8,8 @@
 
 override_dh_auto_configure:
 	dh_auto_configure -- \
-		--libexecdir=/usr/lib
+		--libexecdir=/usr/lib \
+		-Dnetwork_tests=disabled
 
 override_dh_install-arch:
 	dh_install -a
diff -Nru epiphany-browser-3.31.91/embed/ephy-embed-shell.c epiphany-browser-3.32.0/embed/ephy-embed-shell.c
--- epiphany-browser-3.31.91/embed/ephy-embed-shell.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/embed/ephy-embed-shell.c	2019-03-11 15:45:53.000000000 +0000
@@ -1068,6 +1068,33 @@
 }
 
 static void
+ephy_embed_shell_setup_process_model (EphyEmbedShell *shell)
+{
+  EphyEmbedShellPrivate *priv = ephy_embed_shell_get_instance_private (shell);
+  EphyPrefsProcessModel process_model;
+  guint max_processes;
+
+  if (ephy_embed_shell_get_mode (shell) == EPHY_EMBED_SHELL_MODE_APPLICATION)
+    process_model = EPHY_PREFS_PROCESS_MODEL_SHARED_SECONDARY_PROCESS;
+  else
+    process_model = g_settings_get_enum (EPHY_SETTINGS_MAIN, EPHY_PREFS_PROCESS_MODEL);
+
+  switch (process_model) {
+    case EPHY_PREFS_PROCESS_MODEL_SHARED_SECONDARY_PROCESS:
+      max_processes = 1;
+      break;
+    case EPHY_PREFS_PROCESS_MODEL_ONE_SECONDARY_PROCESS_PER_WEB_VIEW:
+      max_processes = g_settings_get_uint (EPHY_SETTINGS_MAIN, EPHY_PREFS_MAX_PROCESSES);
+      break;
+    default:
+      g_assert_not_reached ();
+  }
+
+  webkit_web_context_set_process_model (priv->web_context, WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES);
+  webkit_web_context_set_web_process_count_limit (priv->web_context, max_processes);
+}
+
+static void
 ephy_embed_shell_create_web_context (EphyEmbedShell *shell)
 {
   EphyEmbedShellPrivate *priv = ephy_embed_shell_get_instance_private (shell);
@@ -1209,8 +1236,7 @@
                     G_CALLBACK (web_extension_password_manager_request_save_received_cb),
                     shell);
 
-  webkit_web_context_set_process_model (priv->web_context, WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES);
-
+  ephy_embed_shell_setup_process_model (shell);
   g_signal_connect_object (priv->web_context, "initialize-web-extensions",
                            G_CALLBACK (initialize_web_extensions),
                            shell, 0);
diff -Nru epiphany-browser-3.31.91/embed/web-extension/ephy-web-extension.c epiphany-browser-3.32.0/embed/web-extension/ephy-web-extension.c
--- epiphany-browser-3.31.91/embed/web-extension/ephy-web-extension.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/embed/web-extension/ephy-web-extension.c	2019-03-11 15:45:53.000000000 +0000
@@ -654,15 +654,14 @@
 js_exception_handler (JSCContext   *context,
                       JSCException *exception)
 {
-  JSCValue *js_console;
-  JSCValue *js_result;
+  g_autoptr(JSCValue) js_console = NULL;
+  g_autoptr(JSCValue) js_result = NULL;
+  g_autofree char *report = NULL;
 
   js_console = jsc_context_get_value (context, "console");
   js_result = jsc_value_object_invoke_method (js_console, "error", JSC_TYPE_EXCEPTION, exception, G_TYPE_NONE);
-  g_object_unref (js_result);
-  g_object_unref (js_console);
-
-  g_warning ("JavaScriptException: %s", jsc_exception_get_message (exception));
+  report = jsc_exception_report (exception);
+  g_warning ("%s", report);
 
   jsc_context_throw_exception (context, exception);
 }
@@ -741,12 +740,10 @@
                                                  js_ephy);
 
   if (!extension->is_private_profile) {
-    guint64 page_id = webkit_web_page_get_id (page);
-    g_assert (page_id < G_MAXINT32);
-
     g_autoptr(JSCValue) js_password_manager_ctor = jsc_value_object_get_property (js_ephy, "PasswordManager");
     g_autoptr(JSCValue) js_password_manager = jsc_value_constructor_call (js_password_manager_ctor,
-                                                                          G_TYPE_INT, page_id, G_TYPE_NONE);
+                                                                          G_TYPE_UINT64, webkit_web_page_get_id (page),
+                                                                          G_TYPE_NONE);
     jsc_value_object_set_property (js_ephy, "passwordManager", js_password_manager);
 
     js_function = jsc_value_new_function (js_context,
diff -Nru epiphany-browser-3.31.91/embed/web-extension/resources/js/ephy.js epiphany-browser-3.32.0/embed/web-extension/resources/js/ephy.js
--- epiphany-browser-3.31.91/embed/web-extension/resources/js/ephy.js	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/embed/web-extension/resources/js/ephy.js	2019-03-11 15:45:53.000000000 +0000
@@ -465,8 +465,8 @@
             this._formAuth.url.origin,
             this._formAuth.targetURL.origin,
             this._formAuth.usernameNode && this._formAuth.usernameNode.value ? this._formAuth.usernameNode.value : null,
-            this._formAuth.usernameNode ? this._formAuth.usernameNode.name : null,
-            this._formAuth.passwordNode.name ? this._formAuth.passwordNode.name : null).then(function (authInfo) {
+            this._formAuth.usernameNode ? (this._formAuth.usernameNode.name ? this._formAuth.usernameNode.name : this._formAuth.usernameNode.id) : null,
+            this._formAuth.passwordNode.name ? this._formAuth.passwordNode.name : this._formAuth.passwordNode.id).then(function (authInfo) {
                 if (!authInfo) {
                     Ephy.log('No result');
                     return;
@@ -500,17 +500,17 @@
             return;
         }
 
-        if (!this._formAuth.passwordNode.value || !this._formAuth.passwordNode.name)
+        if (!this._formAuth.passwordNode.value || (!this._formAuth.passwordNode.name && !this._formAuth.passwordNode.id))
             return;
 
         let password = this._formAuth.passwordNode.value;
-        let passwordField = this._formAuth.passwordNode.name;
+        let passwordField = this._formAuth.passwordNode.name ? this._formAuth.passwordNode.name : this._formAuth.passwordNode.id;
 
         let username = null;
         let usernameField = null;
-        if (this._formAuth.usernameNode && this._formAuth.usernameNode.value && this._formAuth.usernameNode.name) {
+        if (this._formAuth.usernameNode && this._formAuth.usernameNode.value && (this._formAuth.usernameNode.name || this._formAuth.usernameNode.id)) {
             username = this._formAuth.usernameNode.value;
-            usernameField = this._formAuth.usernameNode.name;
+            usernameField = this._formAuth.usernameNode.name ? this._formAuth.usernameNode.name : this._formAuth.usernameNode.id;
         }
 
         this._formAuth.url = new URL(String(window.location));
diff -Nru epiphany-browser-3.31.91/lib/ephy-prefs.h epiphany-browser-3.32.0/lib/ephy-prefs.h
--- epiphany-browser-3.31.91/lib/ephy-prefs.h	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/lib/ephy-prefs.h	2019-03-11 15:45:53.000000000 +0000
@@ -71,6 +71,12 @@
   EPHY_PREFS_WEB_HARDWARE_ACCELERATION_POLICY_NEVER
 } EphyPrefsWebHardwareAccelerationPolicy;
 
+typedef enum
+{
+  EPHY_PREFS_PROCESS_MODEL_SHARED_SECONDARY_PROCESS,
+  EPHY_PREFS_PROCESS_MODEL_ONE_SECONDARY_PROCESS_PER_WEB_VIEW
+} EphyPrefsProcessModel;
+
 #define EPHY_PREFS_UI_SCHEMA                     "org.gnome.Epiphany.ui"
 #define EPHY_PREFS_UI_EXPAND_TABS_BAR            "expand-tabs-bar"
 #define EPHY_PREFS_UI_TABS_BAR_POSITION          "tabs-bar-position"
@@ -165,6 +171,8 @@
 #define EPHY_PREFS_INTERNAL_VIEW_SOURCE               "internal-view-source"
 #define EPHY_PREFS_RESTORE_SESSION_POLICY             "restore-session-policy"
 #define EPHY_PREFS_RESTORE_SESSION_DELAYING_LOADS     "restore-session-delaying-loads"
+#define EPHY_PREFS_PROCESS_MODEL                      "process-model"
+#define EPHY_PREFS_MAX_PROCESSES                      "max-processes"
 #define EPHY_PREFS_ADBLOCK_FILTERS                    "adblock-filters"
 #define EPHY_PREFS_SEARCH_ENGINES                     "search-engines"
 #define EPHY_PREFS_DEFAULT_SEARCH_ENGINE              "default-search-engine"
diff -Nru epiphany-browser-3.31.91/lib/widgets/ephy-location-entry.c epiphany-browser-3.32.0/lib/widgets/ephy-location-entry.c
--- epiphany-browser-3.31.91/lib/widgets/ephy-location-entry.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/lib/widgets/ephy-location-entry.c	2019-03-11 15:45:53.000000000 +0000
@@ -303,9 +303,7 @@
 
   G_OBJECT_CLASS (ephy_location_entry_parent_class)->constructed (object);
 
-#if GTK_CHECK_VERSION(3, 22, 20)
   gtk_entry_set_input_hints (GTK_ENTRY (entry->url_entry), GTK_INPUT_HINT_NO_EMOJI);
-#endif
 }
 
 static void
diff -Nru epiphany-browser-3.31.91/meson.build epiphany-browser-3.32.0/meson.build
--- epiphany-browser-3.31.91/meson.build	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/meson.build	2019-03-11 15:45:53.000000000 +0000
@@ -1,6 +1,6 @@
 project('epiphany', 'c',
   license: 'GPL3+',
-  version: '3.31.91',
+  version: '3.32.0',
   meson_version: '>= 0.42.0',
   default_options: ['c_std=gnu11']
 )
@@ -76,11 +76,8 @@
   )
 endif
 
-# Dependencies policy: except for WebKitGTK+, all dependency versions must be
-# available in Ubuntu 18.04. Please check before bumping the required version
-# of any dependency.
 glib_requirement = '>= 2.56.0'
-gtk_requirement = '>= 3.22.13'
+gtk_requirement = '>= 3.24.0'
 nettle_requirement = '>= 3.4'
 webkitgtk_requirement = '>= 2.21.92'
 
@@ -98,8 +95,8 @@
 icu_uc_dep = dependency('icu-uc', version: '>= 4.6')
 iso_codes_dep = dependency('iso-codes', version: '>= 0.35')
 json_glib_dep = dependency('json-glib-1.0', version: '>= 1.2.4')
-libdazzle_dep = dependency('libdazzle-1.0', version: '>= 3.29.4', required: false)
-libhandy_dep = dependency('libhandy-0.0', version: '>= 0.0.8', required: false)
+libdazzle_dep = dependency('libdazzle-1.0', version: '>= 3.31.90')
+libhandy_dep = dependency('libhandy-0.0', version: '>= 0.0.9', required: false)
 libnotify_dep = dependency('libnotify', version: '>= 0.5.1')
 libsecret_dep = dependency('libsecret-1', version: '>= 0.14')
 libsoup_dep = dependency('libsoup-2.4', version: '>= 2.48.0')
@@ -109,15 +106,6 @@
 webkit2gtk_dep = dependency('webkit2gtk-4.0', version: webkitgtk_requirement)
 webkit2gtk_web_extension_dep = dependency('webkit2gtk-web-extension-4.0', version: webkitgtk_requirement)
 
-# Ubuntu 18.04 has libdazzle 3.28, the max we can require from the system, but
-# we need 3.30, so bundle it if the system copy is too old.
-if not libdazzle_dep.found()
-  libdazzle_dep = subproject('libdazzle', default_options: ['package_subdir=epiphany',
-                                                            'enable_tools=false',
-                                                            'with_introspection=false',
-                                                            'with_vapi=false']).get_variable('libdazzle_dep')
-endif
-
 # Ubuntu 18.04 doesn't have libhandy at all, and we need 0.0.5, so bundle it if
 # the system copy is missing or too old.
 if not libhandy_dep.found()
@@ -125,6 +113,7 @@
                                                           'glade_catalog=disabled',
                                                           'introspection=disabled',
                                                           'package_subdir=epiphany',
+                                                          'static=true',
                                                           'tests=false',
                                                           'vapi=false']).get_variable('libhandy_dep')
 endif
diff -Nru epiphany-browser-3.31.91/meson_options.txt epiphany-browser-3.32.0/meson_options.txt
--- epiphany-browser-3.31.91/meson_options.txt	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/meson_options.txt	2019-03-11 15:45:53.000000000 +0000
@@ -4,6 +4,12 @@
   description: 'Enable developer mode'
 )
 
+option('network_tests',
+  type: 'feature',
+  value: 'disabled',
+  description: 'Enable tests that require network access, if unit_tests are enabled'
+)
+
 option('tech_preview',
   type: 'boolean',
   value: false,
@@ -11,7 +17,7 @@
 )
 
 option('unit_tests',
-  type: 'boolean',
-  value: true,
+  type: 'feature',
+  value: 'enabled',
   description: 'Enable unit tests'
 )
diff -Nru epiphany-browser-3.31.91/NEWS epiphany-browser-3.32.0/NEWS
--- epiphany-browser-3.31.91/NEWS	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/NEWS	2019-03-11 15:45:53.000000000 +0000
@@ -1,3 +1,38 @@
+3.32.0 - March 11, 2019
+=======================
+
+Major changes since 3.30:
+
+- Redesigned address bar dropdown with new dazzling
+- Redesigned open tabs menu, now displays tab favicons and allows closing tabs
+- Greatly improved adaptive mode support for small displays
+- Three-finger swipe touchpad gesture now available for back/forward navigation
+- Automation mode, for running WebDriver tests (useful for website developers)
+
+Changes since 3.31.92:
+
+- Fix preferences dialog crash
+- Fix password manager crash on 32-bit systems
+- Bump to libhandy 0.0.9 (Adrien Plazas)
+
+3.31.92 - March 4, 2019
+=======================
+
+- Add animation when download completes (#629)
+- New tab popover should close tabs on middle-click (#643)
+- Fix context menu in history dialog (#651)
+- Add separators to tab bar context menu (#652)
+- Fix crash in mouse gesture controller (#679)
+- Disable safe browsing test by default (#684)
+- Improve reliability of password form detection
+- Fix encoding dialog (Arnaud B.)
+- Restore unsafe process model and process count settings for 3.32 branch only
+- Change -Dunit_tests meson option to feature rather than bool type
+- Require system libdazzle and recent GTK 3.24
+- Build libhandy as static lib (Jeremy Bicha)
+- Bundle newer libhandy to fix i18n (Adrien Plazas)
+- Fix licence in appstream metadata to GPLv3+
+
 3.31.91 - February 18, 2019
 ===========================
 
diff -Nru epiphany-browser-3.31.91/src/ephy-action-bar-end.c epiphany-browser-3.32.0/src/ephy-action-bar-end.c
--- epiphany-browser-3.31.91/src/ephy-action-bar-end.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/ephy-action-bar-end.c	2019-03-11 15:45:53.000000000 +0000
@@ -44,6 +44,8 @@
 
 G_DEFINE_TYPE (EphyActionBarEnd, ephy_action_bar_end, GTK_TYPE_BOX)
 
+static void begin_complete_theatrics (EphyActionBarEnd *self);
+
 static void
 remove_downloads_button_attention_style (EphyActionBarEnd *self)
 {
@@ -123,11 +125,71 @@
   }
 }
 
+static gboolean
+begin_complete_theatrics_from_main (gpointer user_data)
+{
+  EphyActionBarEnd *self = user_data;
+  GtkAllocation rect;
+
+  gtk_widget_get_allocation (GTK_WIDGET (self->downloads_button), &rect);
+  if (rect.x != -1 && rect.y != -1)
+    begin_complete_theatrics (self);
+
+  return G_SOURCE_REMOVE;
+}
+
+static void
+begin_complete_theatrics (EphyActionBarEnd *self)
+{
+  g_autoptr(GIcon) icon = NULL;
+  DzlBoxTheatric *theatric;
+  GtkAllocation rect;
+
+  gtk_widget_get_allocation (GTK_WIDGET (self->downloads_button), &rect);
+
+  if (rect.x == -1 && rect.y == -1) {
+    /* Delay this until our widget has been mapped/realized/displayed */
+    g_idle_add_full (G_PRIORITY_LOW,
+                     begin_complete_theatrics_from_main,
+                     g_object_ref (self), g_object_unref);
+    return;
+  }
+
+  rect.x = 0;
+  rect.y = 0;
+
+  icon = g_themed_icon_new ("folder-download-symbolic");
+
+  theatric = g_object_new (DZL_TYPE_BOX_THEATRIC,
+                           "alpha", 1.0,
+                           "height", rect.height,
+                           "icon", icon,
+                           "target", self,
+                           "width", rect.width,
+                           "x", rect.x,
+                           "y", rect.y,
+                           NULL);
+
+  dzl_object_animate_full (theatric,
+                           DZL_ANIMATION_EASE_OUT_CUBIC,
+                           750,
+                           gtk_widget_get_frame_clock (GTK_WIDGET (self)),
+                           g_object_unref,
+                           theatric,
+                           "x", rect.x - 60,
+                           "width", rect.width + 120,
+                           "y", rect.y,
+                           "height", rect.height + 120,
+                           "alpha", 0.0,
+                           NULL);
+}
+
 static void
 download_completed_cb (EphyDownloadsManager *manager,
                        EphyDownload         *download,
                        EphyActionBarEnd     *action_bar_end)
 {
+  begin_complete_theatrics (action_bar_end);
 }
 
 static void
diff -Nru epiphany-browser-3.31.91/src/ephy-history-dialog.c epiphany-browser-3.32.0/src/ephy-history-dialog.c
--- epiphany-browser-3.31.91/src/ephy-history-dialog.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/ephy-history-dialog.c	2019-03-11 15:45:53.000000000 +0000
@@ -50,7 +50,7 @@
 
   GtkWidget *listbox;
   GtkWidget *forget_all_button;
-  GtkWidget *popover_menu;
+  GtkWidget *popup_menu;
 
   GActionGroup *action_group;
 
@@ -565,27 +565,31 @@
                                GdkEventButton    *event,
                                EphyHistoryDialog *self)
 {
-  if (event->button == 3) {
-    GList *rows = gtk_list_box_get_selected_rows ( GTK_LIST_BOX (self->listbox));
+  if (event->button == GDK_BUTTON_SECONDARY) {
+    GtkListBoxRow *row = gtk_list_box_get_row_at_y (GTK_LIST_BOX (self->listbox), event->y);
+    GList *rows = NULL;
+    guint state = event->state & gtk_accelerator_get_default_mod_mask ();
     int n;
 
-    n = g_list_length (rows);
+    if (!row)
+      return GDK_EVENT_PROPAGATE;
 
-    if (n <= 0) {
-      g_list_free (rows);
+    if (state != GDK_CONTROL_MASK)
+      gtk_list_box_unselect_all (GTK_LIST_BOX (self->listbox));
 
-      return FALSE;
-    }
+    gtk_list_box_select_row (GTK_LIST_BOX (self->listbox), row);
+    rows = gtk_list_box_get_selected_rows (GTK_LIST_BOX (self->listbox));
+    n = g_list_length (rows);
+    g_list_free (rows);
 
-    update_popup_menu_actions (self->action_group, (n == 1));
+    update_popup_menu_actions (self->action_group, n == 1);
 
-    gtk_popover_set_relative_to (GTK_POPOVER (self->popover_menu), GTK_WIDGET (rows->data));
-    gtk_popover_popup (GTK_POPOVER (self->popover_menu));
+    gtk_menu_popup_at_pointer (GTK_MENU (self->popup_menu), (GdkEvent *)event);
 
-    return TRUE;
+    return GDK_EVENT_STOP;
   }
 
-  return FALSE;
+  return GDK_EVENT_PROPAGATE;
 }
 
 
@@ -740,7 +744,7 @@
                                                "/org/gnome/epiphany/gtk/history-dialog.ui");
   gtk_widget_class_bind_template_child (widget_class, EphyHistoryDialog, listbox);
   gtk_widget_class_bind_template_child (widget_class, EphyHistoryDialog, forget_all_button);
-  gtk_widget_class_bind_template_child (widget_class, EphyHistoryDialog, popover_menu);
+  gtk_widget_class_bind_template_child (widget_class, EphyHistoryDialog, popup_menu);
 
   gtk_widget_class_bind_template_callback (widget_class, on_listbox_row_activated);
   gtk_widget_class_bind_template_callback (widget_class, on_listbox_row_selected);
@@ -799,6 +803,8 @@
   gtk_list_box_set_header_func (GTK_LIST_BOX (self->listbox), box_header_func, NULL, NULL);
   ephy_gui_ensure_window_group (GTK_WINDOW (self));
 
+  gtk_menu_attach_to_widget (GTK_MENU (self->popup_menu), GTK_WIDGET (self), NULL);
+
   self->action_group = create_action_group (self);
   gtk_widget_insert_action_group (GTK_WIDGET (self), "history", self->action_group);
 
diff -Nru epiphany-browser-3.31.91/src/ephy-mouse-gesture-controller.c epiphany-browser-3.32.0/src/ephy-mouse-gesture-controller.c
--- epiphany-browser-3.31.91/src/ephy-mouse-gesture-controller.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/ephy-mouse-gesture-controller.c	2019-03-11 15:45:53.000000000 +0000
@@ -243,12 +243,15 @@
 void
 ephy_mouse_gesture_controller_unset_web_view (EphyMouseGestureController *self)
 {
-  g_signal_handlers_disconnect_by_func (self->web_view,
-                                        G_CALLBACK (ephy_mouse_gesture_controller_button_press_cb),
-                                        self);
-  g_signal_handlers_disconnect_by_func (self->web_view,
-                                        G_CALLBACK (ephy_mouse_gesture_controller_button_release_cb),
-                                        self);
+  if (self->web_view) {
+    g_signal_handlers_disconnect_by_func (self->web_view,
+                                          G_CALLBACK (ephy_mouse_gesture_controller_button_press_cb),
+                                          self);
+    g_signal_handlers_disconnect_by_func (self->web_view,
+                                          G_CALLBACK (ephy_mouse_gesture_controller_button_release_cb),
+                                          self);
+    g_clear_object (&self->web_view);
+  }
 }
 
 static void
@@ -256,13 +259,8 @@
 {
   EphyMouseGestureController *self = EPHY_MOUSE_GESTURE_CONTROLLER (object);
 
-  if (self->controller != NULL && self->window != NULL)
-    g_signal_handlers_disconnect_by_func (self->controller,
-                                          G_CALLBACK (ephy_mouse_gesture_controller_motion_cb),
-                                          self);
-  ephy_mouse_gesture_controller_unset_web_view (self);
-
   g_clear_object (&self->controller);
+  ephy_mouse_gesture_controller_unset_web_view (self);
 
   G_OBJECT_CLASS (ephy_mouse_gesture_controller_parent_class)->dispose (object);
 }
@@ -274,10 +272,8 @@
 
   ephy_mouse_gesture_controller_reset (self);
 
-#if GTK_CHECK_VERSION (3, 24, 0)
   self->controller = gtk_event_controller_motion_new (GTK_WIDGET (self->window));
   g_signal_connect (self->controller, "motion", G_CALLBACK (ephy_mouse_gesture_controller_motion_cb), self);
-#endif
 }
 
 static void
@@ -314,8 +310,10 @@
 ephy_mouse_gesture_controller_set_web_view (EphyMouseGestureController *self,
                                             WebKitWebView              *web_view)
 {
-  g_signal_connect (web_view, "button-press-event", G_CALLBACK (ephy_mouse_gesture_controller_button_press_cb), self);
-  g_signal_connect (web_view, "button-release-event", G_CALLBACK (ephy_mouse_gesture_controller_button_release_cb), self);
+  ephy_mouse_gesture_controller_unset_web_view (self);
+
+  g_signal_connect_object (web_view, "button-press-event", G_CALLBACK (ephy_mouse_gesture_controller_button_press_cb), self, 0);
+  g_signal_connect_object (web_view, "button-release-event", G_CALLBACK (ephy_mouse_gesture_controller_button_release_cb), self, 0);
 
-  self->web_view = web_view;
+  self->web_view = g_object_ref (web_view);
 }
diff -Nru epiphany-browser-3.31.91/src/ephy-page-row.c epiphany-browser-3.32.0/src/ephy-page-row.c
--- epiphany-browser-3.31.91/src/ephy-page-row.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/ephy-page-row.c	2019-03-11 15:45:53.000000000 +0000
@@ -82,6 +82,22 @@
   g_signal_emit (self, signals[CLOSED], 0);
 }
 
+static gboolean
+button_release_event (GtkWidget   *widget,
+                      GdkEvent    *event,
+                      EphyPageRow *self)
+{
+  GdkEventButton *button_event = (GdkEventButton *)event;
+
+  if (button_event->button == GDK_BUTTON_MIDDLE) {
+    g_signal_emit (self, signals[CLOSED], 0);
+
+    return GDK_EVENT_STOP;
+  }
+
+  return GDK_EVENT_PROPAGATE;
+}
+
 static void
 ephy_page_row_class_init (EphyPageRowClass *klass)
 {
@@ -102,6 +118,7 @@
   gtk_widget_class_bind_template_child (widget_class, EphyPageRow, spinner);
   gtk_widget_class_bind_template_child (widget_class, EphyPageRow, title);
   gtk_widget_class_bind_template_callback (widget_class, close_clicked_cb);
+  gtk_widget_class_bind_template_callback (widget_class, button_release_event);
 }
 
 static void
diff -Nru epiphany-browser-3.31.91/src/ephy-session.c epiphany-browser-3.32.0/src/ephy-session.c
--- epiphany-browser-3.31.91/src/ephy-session.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/ephy-session.c	2019-03-11 15:45:53.000000000 +0000
@@ -273,7 +273,7 @@
   }
 
   gtk_widget_grab_focus (GTK_WIDGET (new_tab));
-  gtk_window_present (GTK_WINDOW (window));
+  gtk_window_present_with_time (GTK_WINDOW (window), gtk_get_current_event_time ());
 
   closed_tab_free (tab);
 
diff -Nru epiphany-browser-3.31.91/src/ephy-window.c epiphany-browser-3.32.0/src/ephy-window.c
--- epiphany-browser-3.31.91/src/ephy-window.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/ephy-window.c	2019-03-11 15:45:53.000000000 +0000
@@ -171,10 +171,12 @@
   guint is_fullscreen : 1;
   guint closing : 1;
   guint is_popup : 1;
-  guint present_on_insert : 1;
   guint updating_address : 1;
   guint force_close : 1;
   guint checking_modified_forms : 1;
+  guint present_on_insert : 1;
+
+  guint32 present_on_insert_user_time;
 };
 
 enum {
@@ -844,6 +846,7 @@
   { "duplicate", window_cmd_tabs_duplicate },
   { "detach", window_cmd_tabs_detach },
   { "close", window_cmd_tabs_close },
+  { "close-tab", window_cmd_tabs_close },
   { "close-left", window_cmd_tabs_close_left },
   { "close-right", window_cmd_tabs_close_right },
   { "move-left", window_cmd_tabs_move_left },
@@ -2585,7 +2588,11 @@
 static gboolean
 present_on_idle_cb (GtkWindow *window)
 {
-  gtk_window_present (window);
+  EphyWindow *ephy_window = EPHY_WINDOW (window);
+
+  gtk_window_present_with_time (window, ephy_window->present_on_insert_user_time);
+  ephy_window->present_on_insert_user_time = 0;
+
   return FALSE;
 }
 
@@ -2867,6 +2874,7 @@
   new_window = ephy_window_new ();
 
   new_window->present_on_insert = TRUE;
+  new_window->present_on_insert_user_time = gtk_get_current_event_time ();
 
   return ephy_window_get_notebook (new_window);
 }
diff -Nru epiphany-browser-3.31.91/src/prefs-dialog.c epiphany-browser-3.32.0/src/prefs-dialog.c
--- epiphany-browser-3.31.91/src/prefs-dialog.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/prefs-dialog.c	2019-03-11 15:45:53.000000000 +0000
@@ -677,7 +677,7 @@
   synced_tabs_dialog = synced_tabs_dialog_new (manager);
   gtk_window_set_transient_for (GTK_WINDOW (synced_tabs_dialog), GTK_WINDOW (dialog));
   gtk_window_set_modal (GTK_WINDOW (synced_tabs_dialog), TRUE);
-  gtk_window_present (GTK_WINDOW (synced_tabs_dialog));
+  gtk_window_present_with_time (GTK_WINDOW (synced_tabs_dialog), gtk_get_current_event_time ());
 }
 
 static void
@@ -885,7 +885,7 @@
   urls_dialog = ephy_webapp_additional_urls_dialog_new ();
   gtk_window_set_transient_for (GTK_WINDOW (urls_dialog), GTK_WINDOW (dialog));
   gtk_window_set_modal (GTK_WINDOW (urls_dialog), TRUE);
-  gtk_window_present (GTK_WINDOW (urls_dialog));
+  gtk_window_present_with_time (GTK_WINDOW (urls_dialog), gtk_get_current_event_time ());
 }
 
 static void
@@ -898,7 +898,7 @@
 
   gtk_window_set_transient_for (GTK_WINDOW (cookies_dialog), GTK_WINDOW (dialog));
   gtk_window_set_modal (GTK_WINDOW (cookies_dialog), TRUE);
-  gtk_window_present (GTK_WINDOW (cookies_dialog));
+  gtk_window_present_with_time (GTK_WINDOW (cookies_dialog), gtk_get_current_event_time ());
 }
 
 static void
@@ -913,7 +913,7 @@
 
   gtk_window_set_transient_for (GTK_WINDOW (passwords_dialog), GTK_WINDOW (dialog));
   gtk_window_set_modal (GTK_WINDOW (passwords_dialog), TRUE);
-  gtk_window_present (GTK_WINDOW (passwords_dialog));
+  gtk_window_present_with_time (GTK_WINDOW (passwords_dialog), gtk_get_current_event_time ());
 }
 
 static void
@@ -926,7 +926,7 @@
 
   gtk_window_set_transient_for (search_engine_dialog, GTK_WINDOW (dialog));
   gtk_window_set_modal (search_engine_dialog, TRUE);
-  gtk_window_present (search_engine_dialog);
+  gtk_window_present_with_time (search_engine_dialog, gtk_get_current_event_time ());
 }
 
 static gboolean
@@ -1410,7 +1410,7 @@
       (gpointer *)add_lang_dialog);
   }
 
-  gtk_window_present (GTK_WINDOW (pd->add_lang_dialog));
+  gtk_window_present_with_time (GTK_WINDOW (pd->add_lang_dialog), gtk_get_current_event_time ());
 }
 
 static void
@@ -1600,6 +1600,8 @@
       g_autofree char *normalized_locale = normalize_locale (code);
       if (normalized_locale != NULL) {
         g_autofree char *language_name = language_for_locale (normalized_locale);
+        if (language_name == NULL)
+          language_name = g_strdup (normalized_locale);
         language_editor_add (dialog, normalized_locale, language_name);
       }
     }
@@ -1708,7 +1710,7 @@
                                NULL);
   gtk_window_set_transient_for (GTK_WINDOW (clear_dialog), GTK_WINDOW (dialog));
   gtk_window_set_modal (GTK_WINDOW (clear_dialog), TRUE);
-  gtk_window_present (GTK_WINDOW (clear_dialog));
+  gtk_window_present_with_time (GTK_WINDOW (clear_dialog), gtk_get_current_event_time ());
 }
 
 static gboolean
diff -Nru epiphany-browser-3.31.91/src/resources/gtk/encoding-dialog.ui epiphany-browser-3.32.0/src/resources/gtk/encoding-dialog.ui
--- epiphany-browser-3.31.91/src/resources/gtk/encoding-dialog.ui	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/resources/gtk/encoding-dialog.ui	2019-03-11 15:45:53.000000000 +0000
@@ -86,6 +86,7 @@
                 <child>
                   <object class="GtkGrid" id="recent_grid">
                     <property name="visible">True</property>
+                    <property name="vexpand">True</property>
                     <property name="can_focus">False</property>
                     <property name="orientation">vertical</property>
                     <property name="row_spacing">8</property>
@@ -108,9 +109,9 @@
                     <child>
                       <object class="GtkFrame">
                         <property name="visible">True</property>
+                        <property name="vexpand">True</property>
                         <property name="can_focus">False</property>
                         <property name="hexpand">True</property>
-                        <property name="border_width">6</property>
                         <property name="label_xalign">0</property>
                         <property name="shadow_type">in</property>
                         <child>
@@ -220,6 +221,7 @@
                       <object class="GtkListBox" id="list_box">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
+                        <signal name="row-activated" handler="row_activated_cb"/>
                       </object>
                     </child>
                   </object>
diff -Nru epiphany-browser-3.31.91/src/resources/gtk/history-dialog.ui epiphany-browser-3.32.0/src/resources/gtk/history-dialog.ui
--- epiphany-browser-3.31.91/src/resources/gtk/history-dialog.ui	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/resources/gtk/history-dialog.ui	2019-03-11 15:45:53.000000000 +0000
@@ -117,62 +117,35 @@
       </object>
     </child>
   </template>
-  <object class="GtkPopoverMenu" id="popover_menu">
+  <object class="GtkMenu" id="popup_menu">
+    <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="border_width">6</property>
     <child>
-      <object class="GtkBox">
+      <object class="GtkMenuItem">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="orientation">vertical</property>
-        <property name="spacing">6</property>
-        <child>
-          <object class="GtkModelButton">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="action_name">history.open-selection</property>
-            <property name="text" translatable="yes">_Open</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkModelButton">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="action_name">history.copy-url</property>
-            <property name="text" translatable="yes">_Copy Location</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkModelButton">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="action_name">history.forget</property>
-            <property name="text" translatable="yes">_Delete</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
+        <property name="can_focus">True</property>
+        <property name="action_name">history.open-selection</property>
+        <property name="label" translatable="yes">_Open</property>
+        <property name="use_underline">True</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkMenuItem">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="action_name">history.copy-url</property>
+        <property name="label" translatable="yes">_Copy Location</property>
+        <property name="use_underline">True</property>
+      </object>
+    </child>
+    <child>
+      <object class="GtkMenuItem">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="action_name">history.forget</property>
+        <property name="label" translatable="yes">_Delete</property>
+        <property name="use_underline">True</property>
       </object>
-      <packing>
-        <property name="submenu">main</property>
-        <property name="position">1</property>
-      </packing>
     </child>
   </object>
 </interface>
diff -Nru epiphany-browser-3.31.91/src/resources/gtk/notebook-context-menu.ui epiphany-browser-3.32.0/src/resources/gtk/notebook-context-menu.ui
--- epiphany-browser-3.31.91/src/resources/gtk/notebook-context-menu.ui	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/resources/gtk/notebook-context-menu.ui	2019-03-11 15:45:53.000000000 +0000
@@ -15,10 +15,14 @@
         <attribute name="label" translatable="yes">_Duplicate</attribute>
         <attribute name="action">tab.duplicate</attribute>
       </item>
+    </section>
+    <section>
       <item>
         <attribute name="label" translatable="yes">Reo_pen Closed Tab</attribute>
         <attribute name="action">tab.reopen</attribute>
       </item>
+    </section>
+    <section>
       <item>
         <attribute name="label" translatable="yes">Close Tabs to the _Left</attribute>
         <attribute name="action">tab.close-left</attribute>
@@ -33,7 +37,7 @@
       </item>
       <item>
         <attribute name="label" translatable="yes">_Close</attribute>
-        <attribute name="action">tab.close</attribute>
+        <attribute name="action">tab.close-tab</attribute>
       </item>
     </section>
   </menu>
diff -Nru epiphany-browser-3.31.91/src/resources/gtk/page-row.ui epiphany-browser-3.32.0/src/resources/gtk/page-row.ui
--- epiphany-browser-3.31.91/src/resources/gtk/page-row.ui	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/resources/gtk/page-row.ui	2019-03-11 15:45:53.000000000 +0000
@@ -1,70 +1,109 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
 <interface>
-  <!-- interface-requires gtk+ 3.16 -->
+  <requires lib="gtk+" version="3.16"/>
   <template class="EphyPageRow" parent="GtkListBoxRow">
+    <property name="can_focus">True</property>
     <child>
-      <object class="GtkBox" id="box">
+      <object class="GtkEventBox">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <signal name="button-release-event" handler="button_release_event" swapped="no"/>
         <child>
-          <object class="GtkStack" id="icon_stack">
+          <object class="GtkBox" id="box">
             <property name="visible">True</property>
-            <property name="margin_start">4</property>
-            <property name="margin_end">4</property>
+            <property name="can_focus">False</property>
             <child>
-              <object class="GtkImage" id="icon">
-                <property name="icon_size">1</property>
+              <object class="GtkStack" id="icon_stack">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="margin_start">4</property>
+                <property name="margin_end">4</property>
+                <child>
+                  <object class="GtkImage" id="icon">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="icon_size">1</property>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkSpinner" id="spinner">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
               </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
             </child>
             <child>
-              <object class="GtkSpinner" id="spinner">
+              <object class="GtkLabel" id="title">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="valign">center</property>
+                <property name="margin_start">4</property>
+                <property name="hexpand">True</property>
+                <property name="ellipsize">end</property>
+                <property name="single_line_mode">True</property>
+                <property name="xalign">0</property>
               </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
             </child>
-          </object>
-        </child>
-        <child>
-          <object class="GtkLabel" id="title">
-            <property name="ellipsize">end</property>
-            <property name="halign">start</property>
-            <property name="hexpand">True</property>
-            <property name="single_line_mode">True</property>
-            <property name="valign">center</property>
-            <property name="visible">True</property>
-            <property name="xalign">0</property>
-            <property name="margin_start">4</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkImage" id="speaker_icon">
-            <property name="icon_name">audio-volume-high-symbolic</property>
-            <property name="icon_size">1</property>
-            <property name="visible">True</property>
-            <property name="margin_start">8</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkButton" id="close_button">
-            <property name="can_focus">True</property>
-            <property name="focus_on_click">False</property>
-            <property name="halign">end</property>
-            <property name="relief">none</property>
-            <property name="tooltip-text" translatable="yes">Close page</property>
-            <property name="valign">center</property>
-            <property name="visible">True</property>
-            <signal name="clicked" handler="close_clicked_cb" swapped="yes"/>
-            <style>
-              <class name="flat"/>
-              <class name="image-button"/>
-              <class name="page-row-close-button"/>
-            </style>
             <child>
-              <object class="GtkImage">
+              <object class="GtkImage" id="speaker_icon">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="icon_name">window-close-symbolic</property>
+                <property name="margin_start">8</property>
+                <property name="icon_name">audio-volume-high-symbolic</property>
                 <property name="icon_size">1</property>
               </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="close_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="focus_on_click">False</property>
+                <property name="receives_default">False</property>
+                <property name="tooltip_text" translatable="yes">Close page</property>
+                <property name="halign">end</property>
+                <property name="valign">center</property>
+                <property name="relief">none</property>
+                <signal name="clicked" handler="close_clicked_cb" swapped="yes"/>
+                <child>
+                  <object class="GtkImage">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="icon_name">window-close-symbolic</property>
+                    <property name="icon_size">1</property>
+                  </object>
+                </child>
+                <style>
+                  <class name="flat"/>
+                  <class name="image-button"/>
+                  <class name="page-row-close-button"/>
+                </style>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">3</property>
+              </packing>
             </child>
           </object>
         </child>
diff -Nru epiphany-browser-3.31.91/src/window-commands.c epiphany-browser-3.32.0/src/window-commands.c
--- epiphany-browser-3.31.91/src/window-commands.c	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/src/window-commands.c	2019-03-11 15:45:53.000000000 +0000
@@ -499,7 +499,7 @@
   if (GTK_WINDOW (user_data) != gtk_window_get_transient_for (GTK_WINDOW (dialog)))
     gtk_window_set_transient_for (GTK_WINDOW (dialog),
                                   GTK_WINDOW (user_data));
-  gtk_window_present (GTK_WINDOW (dialog));
+  gtk_window_present_with_time (GTK_WINDOW (dialog), gtk_get_current_event_time ());
 }
 
 void
@@ -515,7 +515,7 @@
     gtk_window_set_transient_for (dialog,
                                   GTK_WINDOW (user_data));
 
-  gtk_window_present (dialog);
+  gtk_window_present_with_time (dialog, gtk_get_current_event_time ());
 }
 
 void
@@ -542,7 +542,7 @@
   if (gtk_window_get_transient_for (GTK_WINDOW (shortcuts_window)) != GTK_WINDOW (user_data))
     gtk_window_set_transient_for (GTK_WINDOW (shortcuts_window), GTK_WINDOW (user_data));
 
-  gtk_window_present (GTK_WINDOW (shortcuts_window));
+  gtk_window_present_with_time (GTK_WINDOW (shortcuts_window), gtk_get_current_event_time ());
 }
 
 void
@@ -2374,7 +2374,7 @@
   ephy_embed_container_add_child (EPHY_EMBED_CONTAINER (new_window), embed, 0, FALSE);
   g_object_unref (embed);
 
-  gtk_window_present (GTK_WINDOW (new_window));
+  gtk_window_present_with_time (GTK_WINDOW (new_window), gtk_get_current_event_time ());
 }
 
 void
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/data/packaging/rpm/libhandy.spec epiphany-browser-3.32.0/subprojects/libhandy/data/packaging/rpm/libhandy.spec
--- epiphany-browser-3.31.91/subprojects/libhandy/data/packaging/rpm/libhandy.spec	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/data/packaging/rpm/libhandy.spec	2019-03-11 15:45:55.000000000 +0000
@@ -1,7 +1,7 @@
 %global _vpath_srcdir %{name}
 
 Name:    libhandy
-Version: 0.0.8
+Version: 0.0.9
 Release: 1%{?dist}
 Summary: A library full of GTK+ widgets for mobile phones
 
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/debian/changelog epiphany-browser-3.32.0/subprojects/libhandy/debian/changelog
--- epiphany-browser-3.31.91/subprojects/libhandy/debian/changelog	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/debian/changelog	2019-03-11 15:45:55.000000000 +0000
@@ -1,3 +1,68 @@
+libhandy (0.0.9) experimental; urgency=medium
+
+  [ Benjamin Berg ]
+  * glade: Mark ActionRow properties as translatable/icon.
+    Without this, it is impossible to set the translatable flag in glade,
+    making it hard to create proper UI definitions.
+
+  [ Bastien Nocera ]
+  * Use correct i18n include.
+    From the Internationalization section of the GLib API docs:
+    In order to use these macros in an application, you must include
+    <glib/gi18n.h>. For use in a library, you must include <glib/gi18n-lib.h>
+    after defining the GETTEXT_PACKAGE macro suitably for your library
+  * Fix broken translations in all libhandy applications.
+    Translations in all the applications using libhandy would be broken
+    after a call to hdy_init() as it changed the default gettext translation
+    domain.
+    See https://gitlab.gnome.org/GNOME/gnome-control-center/issues/393
+
+  [ Adrien Plazas ]
+  * examples: Update the Flatpak command.
+    The command should changed with the demo application name.
+  * leaflet: Improve the slide child transition description.
+    This makes the slide child transition description match the one of the
+    slide mode transition one.
+  * action-row: Upcast self to check the activated row.
+    Upcast the HdyActionRow rather than downcasting the activated row to
+    compare their pointers. This prevents error messages when a sibbling row
+    that isn't a HdyActionRow is activated. Also use a simple cast rather
+    than a safe cast as it is there only to please the compiler and is
+    useless for a pointer comparison and it's faster.
+  * Drop 'dialer' from the UI resources path.
+    This makes the UI file paths more correct and simpler.
+  * leaflet: Add hdy_leaflet_stop_child_transition()
+    This makes the code clearer by encapsulating child mode transition
+    cancellation into its own function.
+  * leaflet: Factorize bin window move and resize.
+    This ensures we move or resize it consistently.
+  * leaflet: Move the bin window on child transition cancellation.
+    This avoids the children to be drawn out of place when a mode transition
+    is triggered while a child transition was ongoing.
+    Fixes https://source.puri.sm/Librem5/libhandy/issues/93
+  * Add HDY_STYLE_PROVIDER_PRIORITY.
+    Add and use HDY_STYLE_PROVIDER_PRIORITY to help ensuring custom styling
+    is applied consistently and correctly accross all the library.
+  * expander-row: Move the custom style to a resource.
+    This makes the code cleaner, easier to read, and simnpler to modify.
+  * combo-row: Move the custom style to a resource.
+    This makes the code cleaner, easier to read, and simnpler to modify.
+  * expander-row: Add the expanded property.
+    This can be used to reveal external widgets depending on the state of
+    the row.
+
+  [ Guido Günther ]
+  * debian: Test GObject introspection.
+    This makes sure we have the typelib file installed correctly.
+  * debian/tests: Drop API version from include.
+    This makes sure we respect pkg-config's findings.
+  * examples: Add API version to demo name.
+    This makes different versions co-installable.
+  * build: Don't hardcode API version
+  * Release libhandy 0.0.9
+
+ -- Guido Günther <agx@sigxcpu.org>  Thu, 07 Mar 2019 12:37:34 +0100
+
 libhandy (0.0.8) experimental; urgency=medium
 
   [ Adrien Plazas ]
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/debian/libhandy-0.0-0.symbols epiphany-browser-3.32.0/subprojects/libhandy/debian/libhandy-0.0-0.symbols
--- epiphany-browser-3.31.91/subprojects/libhandy/debian/libhandy-0.0-0.symbols	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/debian/libhandy-0.0-0.symbols	2019-03-11 15:45:55.000000000 +0000
@@ -69,10 +69,12 @@
  hdy_enum_value_object_new@LIBHANDY_0_0_0 0.0.6
  hdy_enum_value_row_name@LIBHANDY_0_0_0 0.0.6
  hdy_expander_row_get_enable_expansion@LIBHANDY_0_0_0 0.0.6
+ hdy_expander_row_get_expanded@LIBHANDY_0_0_0 0.0.9
  hdy_expander_row_get_show_enable_switch@LIBHANDY_0_0_0 0.0.6
  hdy_expander_row_get_type@LIBHANDY_0_0_0 0.0.6
  hdy_expander_row_new@LIBHANDY_0_0_0 0.0.6
  hdy_expander_row_set_enable_expansion@LIBHANDY_0_0_0 0.0.6
+ hdy_expander_row_set_expanded@LIBHANDY_0_0_0 0.0.9
  hdy_expander_row_set_show_enable_switch@LIBHANDY_0_0_0 0.0.6
  hdy_fold_get_type@LIBHANDY_0_0_0 0.0~git20180429
  hdy_header_group_add_header_bar@LIBHANDY_0_0_0 0.0.3
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/debian/tests/build-test.c epiphany-browser-3.32.0/subprojects/libhandy/debian/tests/build-test.c
--- epiphany-browser-3.31.91/subprojects/libhandy/debian/tests/build-test.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/debian/tests/build-test.c	2019-03-11 15:45:55.000000000 +0000
@@ -1,6 +1,6 @@
 #include <gtk/gtk.h>
 #define HANDY_USE_UNSTABLE_API
-#include <libhandy-0.0/handy.h>
+#include <handy.h>
 
 int
 main (int    argc,
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/debian/tests/control epiphany-browser-3.32.0/subprojects/libhandy/debian/tests/control
--- epiphany-browser-3.31.91/subprojects/libhandy/debian/tests/control	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/debian/tests/control	2019-03-11 15:45:55.000000000 +0000
@@ -2,3 +2,7 @@
 Depends: libhandy-0.0-dev, build-essential, pkg-config
 Restrictions: allow-stderr
 
+Tests: python-gi-test
+Depends: gir1.2-handy-0.0, python3-gi, python3
+Restrictions: allow-stderr
+
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/debian/tests/python-gi-test epiphany-browser-3.32.0/subprojects/libhandy/debian/tests/python-gi-test
--- epiphany-browser-3.31.91/subprojects/libhandy/debian/tests/python-gi-test	1970-01-01 01:00:00.000000000 +0100
+++ epiphany-browser-3.32.0/subprojects/libhandy/debian/tests/python-gi-test	2019-03-11 15:45:55.000000000 +0000
@@ -0,0 +1,13 @@
+#!/usr/bin/python3
+#
+# Make sure gobject introspection works
+
+import gi
+
+from gi.repository import GLib
+gi.require_version('Handy', '0.0')
+from gi.repository import Handy
+
+s = GLib.String().append("asdü")
+
+assert Handy.string_utf8_len(s) == 4
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/doc/meson.build epiphany-browser-3.32.0/subprojects/libhandy/doc/meson.build
--- epiphany-browser-3.31.91/subprojects/libhandy/doc/meson.build	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/doc/meson.build	2019-03-11 15:45:55.000000000 +0000
@@ -6,6 +6,7 @@
     'config.h',
     'gtkprogresstrackerprivate.h',
     'hdy-main-private.h',
+    'hdy-style-private.h',
 ]
 
 images = [
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/examples/meson.build epiphany-browser-3.32.0/subprojects/libhandy/examples/meson.build
--- epiphany-browser-3.31.91/subprojects/libhandy/examples/meson.build	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/examples/meson.build	2019-03-11 15:45:55.000000000 +0000
@@ -14,7 +14,8 @@
   libhandy_generated_headers,
 ]
 
-handy_demo = executable('handy-demo', handy_demo_sources,
+handy_demo = executable('handy-@0@-demo'.format(apiversion),
+  handy_demo_sources,
   dependencies: libhandy_dep,
   gui_app: true,
   install: installable,
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/examples/sm.puri.Handy.Demo.json epiphany-browser-3.32.0/subprojects/libhandy/examples/sm.puri.Handy.Demo.json
--- epiphany-browser-3.31.91/subprojects/libhandy/examples/sm.puri.Handy.Demo.json	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/examples/sm.puri.Handy.Demo.json	2019-03-11 15:45:55.000000000 +0000
@@ -3,7 +3,7 @@
   "runtime": "org.gnome.Platform",
   "runtime-version": "master",
   "sdk": "org.gnome.Sdk",
-  "command": "handy-demo",
+  "command": "handy-0.0-demo",
   "finish-args": [
     "--env=DCONF_USER_CONFIG_DIR=.config/dconf",
     "--share=ipc", "--socket=x11",
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/glade/libhandy.xml epiphany-browser-3.32.0/subprojects/libhandy/glade/libhandy.xml
--- epiphany-browser-3.31.91/subprojects/libhandy/glade/libhandy.xml	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/glade/libhandy.xml	2019-03-11 15:45:55.000000000 +0000
@@ -1,7 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <glade-catalog name="libhandy" library="glade-handy" depends="gtk+" book="libhandy">
   <glade-widget-classes>
-    <glade-widget-class name="HdyActionRow" generic-name="actionrow" title="Action Row" since="0.0.6"/>
+    <glade-widget-class name="HdyActionRow" generic-name="actionrow" title="Action Row" since="0.0.6">
+      <properties>
+        <property id="icon-name" themed-icon="True" />
+        <property id="title" translatable="True" />
+        <property id="subtitle" translatable="True" />
+      </properties>
+    </glade-widget-class>
     <glade-widget-class name="HdyArrows" generic-name="arrows" title="Arrows"/>
     <glade-widget-class name="HdyColumn" generic-name="column" title="Column"/>
     <glade-widget-class name="HdyComboRow" generic-name="comborow" title="Combo Row" since="0.0.6"/>
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/meson.build epiphany-browser-3.32.0/subprojects/libhandy/meson.build
--- epiphany-browser-3.31.91/subprojects/libhandy/meson.build	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/meson.build	2019-03-11 15:45:55.000000000 +0000
@@ -1,5 +1,5 @@
 project('libhandy', 'c',
-          version: '0.0.8',
+          version: '0.0.9',
           license: 'LGPL-2.1+',
     meson_version: '>= 0.47.0',
   default_options: [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=gnu11' ],
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/handy.gresources.xml epiphany-browser-3.32.0/subprojects/libhandy/src/handy.gresources.xml
--- epiphany-browser-3.31.91/subprojects/libhandy/src/handy.gresources.xml	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/handy.gresources.xml	2019-03-11 15:45:55.000000000 +0000
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <gresources>
-  <gresource prefix="/sm/puri/handy/dialer/ui">
+  <gresource prefix="/sm/puri/handy/ui">
     <file preprocess="xml-stripblanks">hdy-action-row.ui</file>
     <file preprocess="xml-stripblanks">hdy-combo-row.ui</file>
     <file preprocess="xml-stripblanks">hdy-dialer.ui</file>
@@ -8,4 +8,8 @@
     <file preprocess="xml-stripblanks">hdy-expander-row.ui</file>
     <file preprocess="xml-stripblanks">hdy-search-bar.ui</file>
   </gresource>
+  <gresource prefix="/sm/puri/handy/style">
+    <file>hdy-combo-row-list.css</file>
+    <file>hdy-expander-row-arrow.css</file>
+  </gresource>
 </gresources>
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-action-row.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-action-row.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-action-row.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-action-row.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,9 +4,10 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
+#include "config.h"
 #include "hdy-action-row.h"
 
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
 
 /**
  * SECTION:hdy-action-row
@@ -71,10 +72,11 @@
 static GParamSpec *props[LAST_PROP];
 
 static void
-row_activated_cb (HdyActionRow        *self,
+row_activated_cb (HdyActionRow  *self,
                   GtkListBoxRow *row)
 {
-  if (self == HDY_ACTION_ROW (row))
+  /* No need to use GTK_LIST_BOX_ROW() for a pointer comparison. */
+  if ((GtkListBoxRow *) self == row)
     hdy_action_row_activate (self);
 }
 
@@ -379,7 +381,7 @@
   g_object_class_install_properties (object_class, LAST_PROP, props);
 
   gtk_widget_class_set_template_from_resource (widget_class,
-                                               "/sm/puri/handy/dialer/ui/hdy-action-row.ui");
+                                               "/sm/puri/handy/ui/hdy-action-row.ui");
   gtk_widget_class_bind_template_child_private (widget_class, HdyActionRow, box);
   gtk_widget_class_bind_template_child_private (widget_class, HdyActionRow, header);
   gtk_widget_class_bind_template_child_private (widget_class, HdyActionRow, image);
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-arrows.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-arrows.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-arrows.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-arrows.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,7 +4,8 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
-#include <glib/gi18n.h>
+#include "config.h"
+#include <glib/gi18n-lib.h>
 
 #include "hdy-arrows.h"
 #include "hdy-enums.h"
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-column.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-column.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-column.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-column.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,9 +4,10 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
+#include "config.h"
 #include "hdy-column.h"
 
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
 #include <math.h>
 
 /**
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-combo-row.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-combo-row.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-combo-row.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-combo-row.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,10 +4,12 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
+#include "config.h"
 #include "hdy-combo-row.h"
 
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
 #include "hdy-list-box.h"
+#include "hdy-style-private.h"
 
 /**
  * SECTION:hdy-combo-row
@@ -322,7 +324,7 @@
   g_object_class_install_properties (object_class, LAST_PROP, props);
 
   gtk_widget_class_set_template_from_resource (widget_class,
-                                               "/sm/puri/handy/dialer/ui/hdy-combo-row.ui");
+                                               "/sm/puri/handy/ui/hdy-combo-row.ui");
   gtk_widget_class_bind_template_child_private (widget_class, HdyComboRow, current);
   gtk_widget_class_bind_template_child_private (widget_class, HdyComboRow, image);
   gtk_widget_class_bind_template_child_private (widget_class, HdyComboRow, list);
@@ -335,12 +337,10 @@
   HdyComboRowPrivate *priv = hdy_combo_row_get_instance_private (self);
   g_autoptr (GtkCssProvider) provider = gtk_css_provider_new ();
 
-  /* This makes the list's background transparent. */
-  gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider),
-                                   "list { border-style: none; background-color: transparent; }", -1, NULL);
+  gtk_css_provider_load_from_resource (provider, "/sm/puri/handy/style/hdy-combo-row-list.css");
   gtk_style_context_add_provider (gtk_widget_get_style_context (GTK_WIDGET (priv->list)),
                                   GTK_STYLE_PROVIDER (provider),
-                                  GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+                                  HDY_STYLE_PROVIDER_PRIORITY);
 }
 
 static void
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-combo-row-list.css epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-combo-row-list.css
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-combo-row-list.css	1970-01-01 01:00:00.000000000 +0100
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-combo-row-list.css	2019-03-11 15:45:55.000000000 +0000
@@ -0,0 +1,6 @@
+/* Make the list's background transparent. */
+
+list {
+  border-style: none;
+  background-color: transparent;
+}
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-dialer-button.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-dialer-button.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-dialer-button.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-dialer-button.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,7 +4,8 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
-#include <glib/gi18n.h>
+#include "config.h"
+#include <glib/gi18n-lib.h>
 
 #include "hdy-dialer-button.h"
 
@@ -219,7 +220,7 @@
   g_object_class_install_properties (object_class, PROP_LAST_PROP, props);
 
   gtk_widget_class_set_template_from_resource (widget_class,
-                                               "/sm/puri/handy/dialer/ui/hdy-dialer-button.ui");
+                                               "/sm/puri/handy/ui/hdy-dialer-button.ui");
   gtk_widget_class_bind_template_child_private (widget_class, HdyDialerButton, label);
   gtk_widget_class_bind_template_child_private (widget_class, HdyDialerButton, secondary_label);
 }
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-dialer.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-dialer.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-dialer.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-dialer.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,7 +4,8 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
-#include <glib/gi18n.h>
+#include "config.h"
+#include <glib/gi18n-lib.h>
 
 #include "hdy-dialer.h"
 #include "hdy-dialer-button.h"
@@ -503,7 +504,7 @@
                   G_TYPE_CHAR);
 
   gtk_widget_class_set_template_from_resource (widget_class,
-                                               "/sm/puri/handy/dialer/ui/hdy-dialer.ui");
+                                               "/sm/puri/handy/ui/hdy-dialer.ui");
   for (int i=0; i < 10; i++) {
     g_autofree gchar *name = g_strdup_printf("btn_%d", i);
     g_return_if_fail (name);
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-dialer-cycle-button.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-dialer-cycle-button.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-dialer-cycle-button.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-dialer-cycle-button.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,7 +4,8 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
-#include <glib/gi18n.h>
+#include "config.h"
+#include <glib/gi18n-lib.h>
 
 #include "hdy-dialer-cycle-button.h"
 
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-dialog.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-dialog.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-dialog.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-dialog.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,7 +4,8 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
-#include <glib/gi18n.h>
+#include "config.h"
+#include <glib/gi18n-lib.h>
 
 #include "hdy-dialog.h"
 
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-expander-row-arrow.css epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-expander-row-arrow.css
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-expander-row-arrow.css	1970-01-01 01:00:00.000000000 +0100
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-expander-row-arrow.css	2019-03-11 15:45:55.000000000 +0000
@@ -0,0 +1,17 @@
+/* Animate the arrow's rotation */
+
+row button:checked:dir(ltr) image,
+row button:checked:dir(rtl) image {
+  transition: 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -gtk-icon-transform: rotate(0turn);
+}
+
+row button:not(checked):dir(ltr) image {
+  transition: 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -gtk-icon-transform: rotate(-0.25turn);
+}
+
+row button:not(checked):dir(rtl) image {
+  transition: 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
+  -gtk-icon-transform: rotate(0.25turn);
+}
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-expander-row.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-expander-row.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-expander-row.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-expander-row.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,9 +4,11 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
+#include "config.h"
 #include "hdy-expander-row.h"
 
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
+#include "hdy-style-private.h"
 
 /**
  * SECTION:hdy-expander-row
@@ -29,6 +31,7 @@
   GtkRevealer *revealer;
   GtkSeparator *separator;
 
+  gboolean expanded;
   gboolean enable_expansion;
   gboolean show_enable_switch;
 } HdyExpanderRowPrivate;
@@ -37,13 +40,12 @@
 
 enum {
   PROP_0,
+  PROP_EXPANDED,
   PROP_ENABLE_EXPANSION,
   PROP_SHOW_ENABLE_SWITCH,
   LAST_PROP,
 };
 
-#define ANIMATION_TRANSITION "transition: 200ms cubic-bezier(0.25, 0.46, 0.45, 0.94);\n"
-
 static GParamSpec *props[LAST_PROP];
 
 static void
@@ -51,37 +53,25 @@
 {
   HdyExpanderRowPrivate *priv = hdy_expander_row_get_instance_private (self);
   g_autoptr (GtkCssProvider) provider = gtk_css_provider_new ();
-  static const gchar *style =
-    "row button:checked:dir(ltr) image,\n"
-    "row button:checked:dir(rtl) image {\n"
-    ANIMATION_TRANSITION
-    "  -gtk-icon-transform: rotate(0turn);\n"
-    "}\n"
-    "row button:not(checked):dir(ltr) image {\n"
-    ANIMATION_TRANSITION
-    "  -gtk-icon-transform: rotate(-0.25turn);\n"
-    "}\n"
-    "row button:not(checked):dir(rtl) image {\n"
-    ANIMATION_TRANSITION
-    "  -gtk-icon-transform: rotate(0.25turn);\n"
-    "}";
 
-  /* This animated the arrow's roation. */
-  gtk_css_provider_load_from_data (GTK_CSS_PROVIDER (provider), style, -1, NULL);
+  gtk_css_provider_load_from_resource (provider, "/sm/puri/handy/style/hdy-expander-row-arrow.css");
   gtk_style_context_add_provider (gtk_widget_get_style_context (GTK_WIDGET (priv->image)),
                                   GTK_STYLE_PROVIDER (provider),
-                                  GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+                                  HDY_STYLE_PROVIDER_PRIORITY);
 }
 
 static void
 hdy_expander_row_get_property (GObject    *object,
-                                      guint       prop_id,
-                                      GValue     *value,
-                                      GParamSpec *pspec)
+                               guint       prop_id,
+                               GValue     *value,
+                               GParamSpec *pspec)
 {
   HdyExpanderRow *self = HDY_EXPANDER_ROW (object);
 
   switch (prop_id) {
+  case PROP_EXPANDED:
+    g_value_set_boolean (value, hdy_expander_row_get_expanded (self));
+    break;
   case PROP_ENABLE_EXPANSION:
     g_value_set_boolean (value, hdy_expander_row_get_enable_expansion (self));
     break;
@@ -95,13 +85,16 @@
 
 static void
 hdy_expander_row_set_property (GObject      *object,
-                                      guint         prop_id,
-                                      const GValue *value,
-                                      GParamSpec   *pspec)
+                               guint         prop_id,
+                               const GValue *value,
+                               GParamSpec   *pspec)
 {
   HdyExpanderRow *self = HDY_EXPANDER_ROW (object);
 
   switch (prop_id) {
+  case PROP_EXPANDED:
+    hdy_expander_row_set_expanded (self, g_value_get_boolean (value));
+    break;
   case PROP_ENABLE_EXPANSION:
     hdy_expander_row_set_enable_expansion (self, g_value_get_boolean (value));
     break;
@@ -191,7 +184,7 @@
   HdyExpanderRow *self = HDY_EXPANDER_ROW (row);
   HdyExpanderRowPrivate *priv = hdy_expander_row_get_instance_private (self);
 
-  gtk_revealer_set_reveal_child (priv->revealer, priv->enable_expansion);
+  hdy_expander_row_set_expanded (self, priv->enable_expansion);
 
   HDY_ACTION_ROW_CLASS (hdy_expander_row_parent_class)->activate (row);
 }
@@ -215,6 +208,18 @@
   row_class->activate = hdy_expander_row_activate;
 
   /**
+   * HdyExpanderRow:expanded:
+   *
+   * %TRUE if the row is expanded.
+   */
+  props[PROP_EXPANDED] =
+    g_param_spec_boolean ("expanded",
+                          _("Expanded"),
+                          _("Whether the row is expanded"),
+                          FALSE,
+                          G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY);
+
+  /**
    * HdyExpanderRow:enable-expansion:
    *
    * %TRUE if the expansion is enabled.
@@ -241,7 +246,7 @@
   g_object_class_install_properties (object_class, LAST_PROP, props);
 
   gtk_widget_class_set_template_from_resource (widget_class,
-                                               "/sm/puri/handy/dialer/ui/hdy-expander-row.ui");
+                                               "/sm/puri/handy/ui/hdy-expander-row.ui");
   gtk_widget_class_bind_template_child_private (widget_class, HdyExpanderRow, box);
   gtk_widget_class_bind_template_child_private (widget_class, HdyExpanderRow, button);
   gtk_widget_class_bind_template_child_private (widget_class, HdyExpanderRow, image);
@@ -258,8 +263,8 @@
   gtk_widget_init_template (GTK_WIDGET (self));
 
   arrow_init (self);
-
-  priv->enable_expansion = TRUE;
+  hdy_expander_row_set_enable_expansion (self, TRUE);
+  hdy_expander_row_set_expanded (self, FALSE);
 
   g_object_bind_property (self, "show-enable-switch", priv->separator, "visible", G_BINDING_SYNC_CREATE);
   g_object_bind_property (self, "show-enable-switch", priv->enable_switch, "visible", G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
@@ -283,6 +288,40 @@
   return g_object_new (HDY_TYPE_EXPANDER_ROW, NULL);
 }
 
+gboolean
+hdy_expander_row_get_expanded (HdyExpanderRow *self)
+{
+  HdyExpanderRowPrivate *priv;
+
+  g_return_val_if_fail (HDY_IS_EXPANDER_ROW (self), FALSE);
+
+  priv = hdy_expander_row_get_instance_private (self);
+
+  return priv->expanded;
+}
+
+void
+hdy_expander_row_set_expanded (HdyExpanderRow *self,
+                               gboolean        expanded)
+{
+  HdyExpanderRowPrivate *priv;
+
+  g_return_if_fail (HDY_IS_EXPANDER_ROW (self));
+
+  priv = hdy_expander_row_get_instance_private (self);
+
+  expanded = !!expanded && priv->enable_expansion;
+
+  if (priv->expanded == expanded)
+    return;
+
+  priv->expanded = expanded;
+
+  gtk_revealer_set_reveal_child (priv->revealer, expanded);
+
+  g_object_notify_by_pspec (G_OBJECT (self), props[PROP_EXPANDED]);
+}
+
 /**
  * hdy_expander_row_get_enable_expansion:
  * @self: a #HdyExpanderRow
@@ -329,7 +368,7 @@
 
   priv->enable_expansion = !!enable_expansion;
 
-  gtk_revealer_set_reveal_child (priv->revealer, priv->enable_expansion);
+  hdy_expander_row_set_expanded (self, priv->enable_expansion);
 
   g_object_notify_by_pspec (G_OBJECT (self), props[PROP_ENABLE_EXPANSION]);
 }
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-expander-row.h epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-expander-row.h
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-expander-row.h	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-expander-row.h	2019-03-11 15:45:55.000000000 +0000
@@ -30,6 +30,10 @@
 
 HdyExpanderRow *hdy_expander_row_new (void);
 
+gboolean hdy_expander_row_get_expanded (HdyExpanderRow *self);
+void     hdy_expander_row_set_expanded (HdyExpanderRow *self,
+                                        gboolean        expanded);
+
 gboolean hdy_expander_row_get_enable_expansion (HdyExpanderRow *self);
 void     hdy_expander_row_set_enable_expansion (HdyExpanderRow *self,
                                                 gboolean        enable_expansion);
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-fold.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-fold.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-fold.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-fold.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,6 +4,7 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
+#include "config.h"
 #include "hdy-fold.h"
 
 /**
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-header-group.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-header-group.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-header-group.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-header-group.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,7 +4,8 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
-#include <glib/gi18n.h>
+#include "config.h"
+#include <glib/gi18n-lib.h>
 
 #include "hdy-header-group.h"
 
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-leaflet.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-leaflet.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-leaflet.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-leaflet.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,7 +4,8 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
-#include <glib/gi18n.h>
+#include "config.h"
+#include <glib/gi18n-lib.h>
 
 #include "gtkprogresstrackerprivate.h"
 #include "hdy-leaflet.h"
@@ -44,7 +45,7 @@
  * HdyLeafletChildTransitionType:
  * @HDY_LEAFLET_CHILD_TRANSITION_TYPE_NONE: No transition
  * @HDY_LEAFLET_CHILD_TRANSITION_TYPE_CROSSFADE: A cross-fade
- * @HDY_LEAFLET_CHILD_TRANSITION_TYPE_SLIDE: Slide from left, right, up or down according to orientation, text direction and order
+ * @HDY_LEAFLET_CHILD_TRANSITION_TYPE_SLIDE: Slide from left, right, up or down according to the orientation, text direction and the children order
  * @HDY_LEAFLET_CHILD_TRANSITION_TYPE_OVER: Cover the old page or uncover the new page, sliding from or towards the end according to orientation, text direction and children order
  * @HDY_LEAFLET_CHILD_TRANSITION_TYPE_UNDER: Uncover the new page or cover the old page, sliding from or towards the start according to orientation, text direction and children order
  *
@@ -119,6 +120,8 @@
 
   GtkOrientation orientation;
 
+  gboolean move_bin_window_request;
+
   struct {
     HdyLeafletModeTransitionType type;
     guint duration;
@@ -327,6 +330,39 @@
 }
 
 static void
+move_resize_bin_window (HdyLeaflet    *self,
+                        GtkAllocation *allocation,
+                        gboolean       resize)
+{
+  HdyLeafletPrivate *priv = hdy_leaflet_get_instance_private (self);
+  GtkAllocation alloc;
+  gboolean move;
+
+  if (priv->bin_window == NULL)
+    return;
+
+  if (allocation == NULL) {
+    gtk_widget_get_allocation (GTK_WIDGET (self), &alloc);
+    allocation = &alloc;
+  }
+
+  move = priv->move_bin_window_request || is_window_moving_child_transition (self);
+
+  if (move && resize)
+    gdk_window_move_resize (priv->bin_window,
+                            get_bin_window_x (self, allocation), get_bin_window_y (self, allocation),
+                            allocation->width, allocation->height);
+  else if (move)
+    gdk_window_move (priv->bin_window,
+                     get_bin_window_x (self, allocation), get_bin_window_y (self, allocation));
+  else if (resize)
+    gdk_window_resize (priv->bin_window,
+                       allocation->width, allocation->height);
+
+  priv->move_bin_window_request = FALSE;
+}
+
+static void
 hdy_leaflet_child_progress_updated (HdyLeaflet *self)
 {
   HdyLeafletPrivate *priv = hdy_leaflet_get_instance_private (self);
@@ -337,12 +373,7 @@
       !priv->homogeneous[HDY_FOLD_FOLDED][GTK_ORIENTATION_HORIZONTAL])
     gtk_widget_queue_resize (GTK_WIDGET (self));
 
-  if (priv->bin_window != NULL && is_window_moving_child_transition (self)) {
-    GtkAllocation allocation;
-    gtk_widget_get_allocation (GTK_WIDGET (self), &allocation);
-    gdk_window_move (priv->bin_window,
-                     get_bin_window_x (self, &allocation), get_bin_window_y (self, &allocation));
-  }
+  move_resize_bin_window (self, NULL, FALSE);
 
   if (gtk_progress_tracker_get_state (&priv->child_transition.tracker) == GTK_PROGRESS_STATE_AFTER) {
     if (priv->child_transition.last_visible_surface != NULL) {
@@ -413,6 +444,27 @@
 }
 
 static void
+hdy_leaflet_stop_child_transition (HdyLeaflet *self)
+{
+  HdyLeafletPrivate *priv = hdy_leaflet_get_instance_private (self);
+
+  hdy_leaflet_unschedule_child_ticks (self);
+  priv->child_transition.active_type = HDY_LEAFLET_CHILD_TRANSITION_TYPE_NONE;
+  gtk_progress_tracker_finish (&priv->child_transition.tracker);
+  if (priv->child_transition.last_visible_surface != NULL) {
+    cairo_surface_destroy (priv->child_transition.last_visible_surface);
+    priv->child_transition.last_visible_surface = NULL;
+  }
+  if (priv->last_visible_child != NULL) {
+    gtk_widget_set_child_visible (priv->last_visible_child->widget, FALSE);
+    priv->last_visible_child = NULL;
+  }
+
+  /* Move the bin window back in place as a child transition might have moved it. */
+  priv->move_bin_window_request = TRUE;
+}
+
+static void
 hdy_leaflet_start_child_transition (HdyLeaflet                    *self,
                                     HdyLeafletChildTransitionType  transition_type,
                                     guint                          transition_duration,
@@ -679,18 +731,7 @@
   /* FIXME PROP_REVEAL_CHILD needs to be implemented. */
   /* g_object_notify_by_pspec (G_OBJECT (revealer), props[PROP_REVEAL_CHILD]); */
 
-  /* Stop the ongoing child transition, */
-  hdy_leaflet_unschedule_child_ticks (self);
-  priv->child_transition.active_type = HDY_LEAFLET_CHILD_TRANSITION_TYPE_NONE;
-  gtk_progress_tracker_finish (&priv->child_transition.tracker);
-  if (priv->child_transition.last_visible_surface != NULL) {
-    cairo_surface_destroy (priv->child_transition.last_visible_surface);
-    priv->child_transition.last_visible_surface = NULL;
-  }
-  if (priv->last_visible_child != NULL) {
-    gtk_widget_set_child_visible (priv->last_visible_child->widget, FALSE);
-    priv->last_visible_child = NULL;
-  }
+  hdy_leaflet_stop_child_transition (self);
 
   transition = priv->mode_transition.type;
   if (gtk_widget_get_mapped (widget) &&
@@ -1790,13 +1831,7 @@
     gdk_window_move_resize (priv->view_window,
                             allocation->x, allocation->y,
                             allocation->width, allocation->height);
-    if (priv->bin_window != NULL && is_window_moving_child_transition (self))
-      gdk_window_move_resize (priv->bin_window,
-                              get_bin_window_x (self, allocation), get_bin_window_y (self, allocation),
-                              allocation->width, allocation->height);
-    else
-      gdk_window_resize (priv->bin_window,
-                         allocation->width, allocation->height);
+    move_resize_bin_window (self, allocation, TRUE);
   }
 
   /* Prepare children information. */
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-list-box.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-list-box.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-list-box.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-list-box.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,9 +4,10 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
+#include "config.h"
 #include "hdy-list-box.h"
 
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
 
 /**
  * SECTION:hdy-list-box
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-main.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-main.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-main.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-main.c	2019-03-11 15:45:55.000000000 +0000
@@ -6,7 +6,7 @@
 #include "config.h"
 #include "hdy-main-private.h"
 #include <gio/gio.h>
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
 
 static gint hdy_initialized = FALSE;
 
@@ -42,7 +42,6 @@
   if (hdy_initialized)
     return TRUE;
 
-  textdomain (GETTEXT_PACKAGE);
   bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
   bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
   g_resources_register (hdy_get_resource ());
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-search-bar.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-search-bar.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-search-bar.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-search-bar.c	2019-03-11 15:45:55.000000000 +0000
@@ -41,7 +41,8 @@
  * the fork.
  */
 
-#include <glib/gi18n.h>
+#include "config.h"
+#include <glib/gi18n-lib.h>
 
 #include "hdy-search-bar.h"
 
@@ -469,7 +470,7 @@
   g_object_class_install_properties (object_class, LAST_PROPERTY, props);
 
   gtk_widget_class_set_template_from_resource (widget_class,
-                                               "/sm/puri/handy/dialer/ui/hdy-search-bar.ui");
+                                               "/sm/puri/handy/ui/hdy-search-bar.ui");
   gtk_widget_class_bind_template_child_private (widget_class, HdySearchBar, tool_box);
   gtk_widget_class_bind_template_child_private (widget_class, HdySearchBar, revealer);
   gtk_widget_class_bind_template_child_private (widget_class, HdySearchBar, close_button);
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-style-private.h epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-style-private.h
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-style-private.h	1970-01-01 01:00:00.000000000 +0100
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-style-private.h	2019-03-11 15:45:55.000000000 +0000
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2019 Purism SPC
+ *
+ * SPDX-License-Identifier: LGPL-2.1+
+ */
+
+#pragma once
+
+#if !defined(_HANDY_INSIDE) && !defined(HANDY_COMPILATION)
+#error "Only <handy.h> can be included directly."
+#endif
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+/* The style provider priority to use for libhandy widgets custom styling. It is
+ * higher than settings but lower than applications, so application developers
+ * can nonetheless apply custom styling on top of it. */
+#define HDY_STYLE_PROVIDER_PRIORITY (GTK_STYLE_PROVIDER_PRIORITY_SETTINGS + 1)
+
+G_END_DECLS
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-title-bar.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-title-bar.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-title-bar.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-title-bar.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,9 +4,10 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
+#include "config.h"
 #include "hdy-title-bar.h"
 
-#include <glib/gi18n.h>
+#include <glib/gi18n-lib.h>
 
 /**
  * SECTION:hdy-title-bar
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-value-object.c epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-value-object.c
--- epiphany-browser-3.31.91/subprojects/libhandy/src/hdy-value-object.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/hdy-value-object.c	2019-03-11 15:45:55.000000000 +0000
@@ -4,7 +4,8 @@
  * SPDX-License-Identifier: LGPL-2.1+
  */
 
-#include <glib/gi18n.h>
+#include "config.h"
+#include <glib/gi18n-lib.h>
 #include <gobject/gvaluecollector.h>
 #include "hdy-value-object.h"
 
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/src/meson.build epiphany-browser-3.32.0/subprojects/libhandy/src/meson.build
--- epiphany-browser-3.31.91/subprojects/libhandy/src/meson.build	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/src/meson.build	2019-03-11 15:45:55.000000000 +0000
@@ -196,7 +196,7 @@
                  sources: libhandy_generated_headers + libhandy_public_headers + libhandy_public_sources,
                nsversion: apiversion,
                namespace: 'Handy',
-               export_packages: 'libhandy-0.0',
+               export_packages: 'libhandy-@0@'.format(apiversion),
            symbol_prefix: 'hdy',
        identifier_prefix: 'Hdy',
                link_with: libhandy,
diff -Nru epiphany-browser-3.31.91/subprojects/libhandy/tests/test-expander-row.c epiphany-browser-3.32.0/subprojects/libhandy/tests/test-expander-row.c
--- epiphany-browser-3.31.91/subprojects/libhandy/tests/test-expander-row.c	2019-02-18 23:48:04.000000000 +0000
+++ epiphany-browser-3.32.0/subprojects/libhandy/tests/test-expander-row.c	2019-03-11 15:45:55.000000000 +0000
@@ -9,6 +9,24 @@
 
 
 static void
+test_hdy_expander_row_expanded (void)
+{
+  g_autoptr (HdyExpanderRow) row = NULL;
+
+  row = g_object_ref_sink (HDY_EXPANDER_ROW (hdy_expander_row_new ()));
+  g_assert_nonnull (row);
+
+  g_assert_false (hdy_expander_row_get_expanded (row));
+
+  hdy_expander_row_set_expanded (row, TRUE);
+  g_assert_true (hdy_expander_row_get_expanded (row));
+
+  hdy_expander_row_set_expanded (row, FALSE);
+  g_assert_false (hdy_expander_row_get_expanded (row));
+}
+
+
+static void
 test_hdy_expander_row_enable_expansion (void)
 {
   g_autoptr (HdyExpanderRow) row = NULL;
@@ -17,12 +35,21 @@
   g_assert_nonnull (row);
 
   g_assert_true (hdy_expander_row_get_enable_expansion (row));
+  g_assert_false (hdy_expander_row_get_expanded (row));
+
+  hdy_expander_row_set_expanded (row, TRUE);
+  g_assert_true (hdy_expander_row_get_expanded (row));
 
   hdy_expander_row_set_enable_expansion (row, FALSE);
   g_assert_false (hdy_expander_row_get_enable_expansion (row));
+  g_assert_false (hdy_expander_row_get_expanded (row));
+
+  hdy_expander_row_set_expanded (row, TRUE);
+  g_assert_false (hdy_expander_row_get_expanded (row));
 
   hdy_expander_row_set_enable_expansion (row, TRUE);
   g_assert_true (hdy_expander_row_get_enable_expansion (row));
+  g_assert_true (hdy_expander_row_get_expanded (row));
 }
 
 
@@ -51,6 +78,7 @@
   gtk_test_init (&argc, &argv, NULL);
   hdy_init (&argc, &argv);
 
+  g_test_add_func("/Handy/ExpanderRow/expanded", test_hdy_expander_row_expanded);
   g_test_add_func("/Handy/ExpanderRow/enable_expansion", test_hdy_expander_row_enable_expansion);
   g_test_add_func("/Handy/ExpanderRow/show_enable_switch", test_hdy_expander_row_show_enable_switch);
 
diff -Nru epiphany-browser-3.31.91/tests/meson.build epiphany-browser-3.32.0/tests/meson.build
--- epiphany-browser-3.31.91/tests/meson.build	2019-02-18 23:48:01.000000000 +0000
+++ epiphany-browser-3.32.0/tests/meson.build	2019-03-11 15:45:53.000000000 +0000
@@ -5,7 +5,7 @@
   'GSETTINGS_BACKEND=memory',
 ]
 
-if get_option('unit_tests')
+if get_option('unit_tests').enabled()
   # FIXME: The tests that need ephy-test-utils are all disabled....
   #
   # libephytestutils = static_library('ephytestutils',
@@ -64,16 +64,6 @@
        env: envs
   )
 
-  gsb_service_test = executable('test-ephy-gsb-service',
-    'ephy-gsb-service-test.c',
-    dependencies: ephymain_dep
-  )
-  test('GSB service test',
-       gsb_service_test,
-       env: envs,
-       timeout: 90 # slow!
-  )
-
   history_test = executable('test-ephy-history',
     'ephy-history-test.c',
     dependencies: ephymain_dep
@@ -178,4 +168,16 @@
   #      web_view_test,
   #      env: envs
   # )
+
+  if get_option('network_tests').enabled()
+    gsb_service_test = executable('test-ephy-gsb-service',
+      'ephy-gsb-service-test.c',
+      dependencies: ephymain_dep
+    )
+    test('GSB service test',
+         gsb_service_test,
+         env: envs,
+         timeout: 90 # slow!
+    )
+  endif
 endif

--- End Message ---
--- Begin Message ---
Unblocked epiphany-browser.

--- End Message ---

Reply to: