37.0b7
authorWolfgang Rosenauer <wr@rosenauer.org>
Sun, 22 Mar 2015 14:02:18 +0100
changeset 843 0d861c33ec70
parent 842 b199b6c7d84a (diff)
parent 840 e160750ffe91 (current diff)
child 844 86fa73db98e5
child 845 a704b2a17e39
37.0b7 and merge from firefox36
MozillaFirefox/MozillaFirefox.changes
MozillaFirefox/MozillaFirefox.spec
MozillaFirefox/create-tar.sh
--- a/MozillaFirefox/MozillaFirefox.changes	Sun Mar 22 13:58:24 2015 +0100
+++ b/MozillaFirefox/MozillaFirefox.changes	Sun Mar 22 14:02:18 2015 +0100
@@ -1,4 +1,12 @@
 -------------------------------------------------------------------
+Sun Mar 22 13:00:28 UTC 2015 - wr@rosenauer.org
+
+- update to Firefox 37.0b7
+- removed obsolete patch
+  * mozilla-bmo1088588.patch
+- requires NSPR 4.10.8
+
+-------------------------------------------------------------------
 Sat Mar 21 09:03:12 UTC 2015 - wr@rosenauer.org
 
 - update to Firefox 36.0.4 (bnc#923534)
--- a/MozillaFirefox/MozillaFirefox.spec	Sun Mar 22 13:58:24 2015 +0100
+++ b/MozillaFirefox/MozillaFirefox.spec	Sun Mar 22 14:02:18 2015 +0100
@@ -19,9 +19,9 @@
 
 # changed with every update
 %define major 36
-%define mainver %major.0.4
-%define update_channel release
-%define releasedate 2015032000
+%define mainver %major.99
+%define update_channel beta
+%define releasedate 2015032100
 
 # general build definitions
 %if "%{update_channel}" != "aurora"
@@ -76,7 +76,7 @@
 BuildRequires:  libnotify-devel
 BuildRequires:  libproxy-devel
 BuildRequires:  makeinfo
-BuildRequires:  mozilla-nspr-devel >= 4.10.7
+BuildRequires:  mozilla-nspr-devel >= 4.10.8
 BuildRequires:  mozilla-nss-devel >= 3.17.4
 BuildRequires:  nss-shared-helper-devel
 BuildRequires:  python-devel
@@ -143,9 +143,8 @@
 Patch9:         mozilla-repo.patch
 Patch10:        mozilla-icu-strncat.patch
 Patch11:        mozilla-arm-disable-edsp.patch
-Patch12:        mozilla-bmo1088588.patch
-Patch13:        mozilla-openaes-decl.patch
-Patch14:        mozilla-skia-bmo1136958.patch
+Patch12:        mozilla-openaes-decl.patch
+Patch13:        mozilla-skia-bmo1136958.patch
 # Firefox/browser
 Patch101:       firefox-kde.patch
 Patch102:       firefox-no-default-ualocale.patch
@@ -199,7 +198,7 @@
 %package translations-other
 Summary:        Extra translations for %{appname}
 Group:          System/Localization
-Provides:       locale(%{name}:ach;af;ak;as;ast;be;bg;bn_BD;bn_IN;br;bs;csb;cy;en_ZA;eo;es_MX;et;eu;fa;ff;fy_NL;ga_IE;gd;gl;gu_IN;he;hi_IN;hr;hy_AM;id;is;kk;km;kn;ku;lg;lij;lt;lv;mai;mk;ml;mr;nn_NO;nso;or;pa_IN;rm;ro;si;sk;sl;son;sq;sr;ta;ta_LK;te;th;tr;uk;vi;zu)
+Provides:       locale(%{name}:ach;af;ak;as;ast;be;bg;bn_BD;bn_IN;br;bs;csb;cy;en_ZA;eo;es_MX;et;eu;fa;ff;fy_NL;ga_IE;gd;gl;gu_IN;he;hi_IN;hr;hy_AM;id;is;kk;km;kn;ku;lg;lij;lt;lv;mai;mk;ml;mr;nn_NO;nso;or;pa_IN;rm;ro;si;sk;sl;son;sq;sr;ta;ta_LK;te;th;tr;uk;uz;vi;zu)
 Requires:       %{name} = %{version}
 Obsoletes:      %{name}-translations < %{version}-%{release}
 
@@ -259,7 +258,6 @@
 %patch11 -p1
 %patch12 -p1
 %patch13 -p1
-%patch14 -p1
 # Firefox
 %patch101 -p1
 %patch102 -p1
--- a/MozillaFirefox/create-tar.sh	Sun Mar 22 13:58:24 2015 +0100
+++ b/MozillaFirefox/create-tar.sh	Sun Mar 22 14:02:18 2015 +0100
@@ -1,9 +1,9 @@
 #!/bin/bash
 
-CHANNEL="release"
+CHANNEL="beta"
 BRANCH="releases/mozilla-$CHANNEL"
-RELEASE_TAG="FIREFOX_36_0_4_RELEASE"
-VERSION="36.0.4"
+RELEASE_TAG="FIREFOX_37_0b7_RELEASE"
+VERSION="36.99"
 
 # mozilla
 if [ -d mozilla ]; then
--- a/MozillaFirefox/mozilla-bmo1088588.patch	Sun Mar 22 13:58:24 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-../mozilla-bmo1088588.patch
\ No newline at end of file
--- a/firefox-kde.patch	Sun Mar 22 13:58:24 2015 +0100
+++ b/firefox-kde.patch	Sun Mar 22 14:02:18 2015 +0100
@@ -1,11 +1,11 @@
 # HG changeset patch
-# Parent  ae5fa7b97ee57df54434bebc6dbda400b7525340
+# Parent  409c60c5454efb61ebecf0edc8822a0e92f563f3
 
 diff --git a/browser/base/content/browser-kde.xul b/browser/base/content/browser-kde.xul
 new file mode 100644
 --- /dev/null
 +++ b/browser/base/content/browser-kde.xul
-@@ -0,0 +1,1272 @@
+@@ -0,0 +1,1288 @@
 +#filter substitution
 +<?xml version="1.0"?>
 +# -*- Mode: HTML -*-
@@ -295,17 +295,22 @@
 +    <panel id="social-share-panel"
 +           class="social-panel"
 +           type="arrow"
-+           orient="horizontal"
++           orient="vertical"
 +           onpopupshowing="SocialShare.onShowing()"
 +           onpopuphidden="SocialShare.onHidden()"
 +           hidden="true">
-+      <vbox class="social-share-toolbar">
-+        <arrowscrollbox id="social-share-provider-buttons" orient="vertical" flex="1">
++      <hbox class="social-share-toolbar">
++        <toolbarbutton id="manage-share-providers" class="toolbarbutton share-provider-button"
++                       tooltiptext="&social.addons.label;"
++                       oncommand="BrowserOpenAddonsMgr('addons://list/service');
++                                  this.parentNode.parentNode.hidePopup();"/>
++        <arrowscrollbox id="social-share-provider-buttons" orient="horizontal" flex="1" pack="end">
 +          <toolbarbutton id="add-share-provider" class="toolbarbutton share-provider-button" type="radio"
 +                         group="share-providers" tooltiptext="&findShareServices.label;"
 +                         oncommand="SocialShare.showDirectory()"/>
 +        </arrowscrollbox>
-+      </vbox>
++      </hbox>
++      <hbox id="share-container" flex="1"/>
 +    </panel>
 +
 +    <panel id="social-notification-panel"
@@ -580,6 +585,17 @@
 +
 +    <tooltip id="dynamic-shortcut-tooltip"
 +             onpopupshowing="UpdateDynamicShortcutTooltipText(this);"/>
++
++    <menupopup id="emeNotificationsPopup">
++      <menuitem id="emeNotificationsNotNow"
++                label="Not now"
++                acceskey="N"
++                oncommand="gEMEHandler.onNotNow(this);"/>
++      <menuitem id="emeNotificationsDontAskAgain"
++                label="Don't ask me again"
++                acceskey="D"
++                oncommand="gEMEHandler.onDontAskAgain(this);"/>
++    </menupopup>
 +  </popupset>
 +
 +#ifdef CAN_DRAW_IN_TITLEBAR
@@ -642,7 +658,6 @@
 +    </toolbar>
 +
 +    <toolbar id="TabsToolbar"
-+             class="toolbar-primary"
 +             fullscreentoolbar="true"
 +             customizable="true"
 +             mode="icons"
@@ -728,7 +743,7 @@
 +           to the default placements of buttons in CustomizableUI.jsm, so the
 +           customization code doesn't get confused.
 +      -->
-+    <toolbar id="nav-bar" class="toolbar-primary chromeclass-toolbar"
++    <toolbar id="nav-bar"
 +             aria-label="&navbarCmd.label;"
 +             fullscreentoolbar="true" mode="icons" customizable="true"
 +             iconsize="small"
@@ -801,6 +816,7 @@
 +                <image id="servicesInstall-notification-icon" class="notification-anchor-icon" role="button"/>
 +                <image id="translate-notification-icon" class="notification-anchor-icon" role="button"/>
 +                <image id="translated-notification-icon" class="notification-anchor-icon" role="button"/>
++                <image id="eme-notification-icon" class="notification-anchor-icon" role="button"/>
 +              </box>
 +              <!-- Use onclick instead of normal popup= syntax since the popup
 +                   code fires onmousedown, and hence eats our favicon drag events.
@@ -1300,7 +1316,7 @@
          <button id="editBookmarkPanelDeleteButton"
                  class="editBookmarkPanelBottomButton"
                  label="&editBookmark.cancel.label;"
-@@ -1198,17 +1198,17 @@
+@@ -1214,17 +1214,17 @@
  
    <hbox id="full-screen-warning-container" hidden="true" fadeout="true">
      <hbox style="width: 100%;" pack="center"> <!-- Inner hbox needed due to bug 579776. -->
@@ -1333,10 +1349,10 @@
  *       content/browser/browser.xul                   (content/browser.xul)
 +*       content/browser/browser-kde.xul               (content/browser-kde.xul)
 +%       override chrome://browser/content/browser.xul chrome://browser/content/browser-kde.xul desktop=kde
+ *       content/browser/browser-eme.properties        (content/browser-eme.properties)
  *       content/browser/browser-tabPreviews.xml       (content/browser-tabPreviews.xml)
  *       content/browser/chatWindow.xul                (content/chatWindow.xul)
          content/browser/content.js                    (content/content.js)
-         content/browser/content-UITour.js             (content/content-UITour.js)
          content/browser/defaultthemes/1.footer.jpg    (content/defaultthemes/1.footer.jpg)
          content/browser/defaultthemes/1.header.jpg    (content/defaultthemes/1.header.jpg)
          content/browser/defaultthemes/1.icon.jpg      (content/defaultthemes/1.icon.jpg)
@@ -1427,7 +1443,7 @@
      // when the user will select the default.  We refresh here periodically
      // in case the default changes.  On other Windows OS's defaults can also
      // be set while the prefs are open.
-@@ -572,16 +578,27 @@ var gMainPane = {
+@@ -549,16 +555,27 @@ var gMainPane = {
     */
    setDefaultBrowser: function()
    {
@@ -1895,7 +1911,7 @@
 diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
 --- a/browser/installer/package-manifest.in
 +++ b/browser/installer/package-manifest.in
-@@ -689,19 +689,21 @@
+@@ -688,19 +688,21 @@
  @RESPATH@/defaults/autoconfig/prefcalls.js
  @RESPATH@/browser/defaults/profile/prefs.js
  
--- a/firefox-multilocale-chrome.patch	Sun Mar 22 13:58:24 2015 +0100
+++ b/firefox-multilocale-chrome.patch	Sun Mar 22 14:02:18 2015 +0100
@@ -1,12 +1,13 @@
 # HG changeset patch
 # Parent 16846914f968944f991c8b12fdc38ce8fc099d73
 # User Wolfgang Rosenauer <wr@rosenauer.org>
+# Parent  c0a406c7a6cc5edc8fb34549428866ff39ad878f
 Add searchplugins to chrome packaging for proper localization
 
 diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
 --- a/browser/app/profile/firefox.js
 +++ b/browser/app/profile/firefox.js
-@@ -389,16 +389,20 @@ pref("browser.helperApps.deleteTempFileO
+@@ -378,16 +378,20 @@ pref("browser.helperApps.deleteTempFileO
  #endif
  
  // search engines URL
@@ -19,18 +20,18 @@
 +pref("browser.search.loadFromJars", true);
 +pref("browser.search.jarURIs", "chrome://browser/locale/searchplugins/");
 +
- // disable logging for the search service by default
- pref("browser.search.log", false);
- 
  // Ordering of Search Engines in the Engine list. 
  pref("browser.search.order.1",                "chrome://browser-region/locale/region.properties");
  pref("browser.search.order.2",                "chrome://browser-region/locale/region.properties");
  pref("browser.search.order.3",                "chrome://browser-region/locale/region.properties");
  
+ // Market-specific search defaults (US market only)
+ pref("browser.search.geoSpecificDefaults", true);
+ pref("browser.search.defaultenginename.US",      "data:text/plain,browser.search.defaultenginename.US=Yahoo");
 diff --git a/browser/locales/Makefile.in b/browser/locales/Makefile.in
 --- a/browser/locales/Makefile.in
 +++ b/browser/locales/Makefile.in
-@@ -66,24 +66,27 @@ STUB_HOOK = $(NSINSTALL) -D '$(_ABS_DIST
+@@ -66,27 +66,30 @@ STUB_HOOK = $(NSINSTALL) -D '$(_ABS_DIST
      cp ../installer/windows/l10ngen/stub.exe '$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_STUB_BASENAME).exe'; \
      chmod 0755 '$(_ABS_DIST)/$(PKG_INST_PATH)$(PKG_STUB_BASENAME).exe'; \
      $(NULL)
@@ -41,17 +42,20 @@
  else
 -SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt)) ddg
 +SEARCHPLUGINS_NAMES = $(shell cat \
-+  $(firstword $(wildcard $(LOCALE_SRCDIR)/searchplugins/list.txt) \
-+  @srcdir@/en-US/searchplugins/list.txt ) ) ddg
++    $(firstword $(wildcard $(LOCALE_SRCDIR)/searchplugins/list.txt) \
++    @srcdir@/en-US/searchplugins/list.txt ) ) ddg
  endif
  SEARCHPLUGINS_PATH := $(FINAL_TARGET)/searchplugins
  # metro build call a searchplugins target for search engine plugins
  .PHONY: searchplugins
  SEARCHPLUGINS_TARGET := libs searchplugins
--SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_NAMES)),$(or $(wildcard $(call MERGE_FILE,searchplugins/$(plugin))),$(info Missing searchplugin: $(plugin))))
+-SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_NAMES)),$(or $(wildcard $(call EN_US_OR_L10N_FILE,searchplugins/$(plugin))),$(info Missing searchplugin: $(plugin))))
++#SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_NAMES)),$(or $(wildcard $(call EN_US_OR_L10N_FILE,searchplugins/$(plugin))),$(info Missing searchplugin: $(plugin))))
++SEARCHPLUGINS := $(addsuffix .xml,$(SEARCHPLUGINS_NAMES))
+ # Some locale-specific search plugins may have preprocessor directives, but the
+ # default en-US ones do not.
+ SEARCHPLUGINS_FLAGS := --silence-missing-directive-warnings
 -PP_TARGETS += SEARCHPLUGINS
-+#SEARCHPLUGINS := $(foreach plugin,$(addsuffix .xml,$(SEARCHPLUGINS_NAMES)),$(or $(wildcard $(call MERGE_FILE,searchplugins/$(plugin))),$(info Missing searchplugin: $(plugin))))
-+SEARCHPLUGINS := $(addsuffix .xml,$(SEARCHPLUGINS_NAMES))
 +#PP_TARGETS += SEARCHPLUGINS
  
  # Required for l10n.mk - defines a list of app sub dirs that should
@@ -61,7 +65,7 @@
  DIST_SUBDIRS = browser metro
  else
  DIST_SUBDIRS = $(DIST_SUBDIR)
-@@ -117,16 +120,39 @@ NO_JA_JP_MAC_AB_CD := $(if $(filter ja-J
+@@ -120,16 +123,39 @@ NO_JA_JP_MAC_AB_CD := $(if $(filter ja-J
  libs:: $(FINAL_TARGET)/defaults/profile/bookmarks.html ;
  
  libs:: $(addprefix generic/profile/,$(PROFILE_FILES))
@@ -104,7 +108,7 @@
 diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn
 --- a/browser/locales/jar.mn
 +++ b/browser/locales/jar.mn
-@@ -141,14 +141,15 @@
+@@ -146,14 +146,15 @@
      locale/browser/syncQuota.properties         (%chrome/browser/syncQuota.properties)
  #endif
  % locale browser-region @AB_CD@ %locale/browser-region/
--- a/mozilla-bmo1088588.patch	Sun Mar 22 13:58:24 2015 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-# HG changeset patch
-# User Dirk Mueller <dmueller@suse.com>
-# Date 1414618964 0
-#      Wed Oct 29 21:42:44 2014 +0000
-# Node ID 8e3825b2d12a9f295b6ff9a972340b9d84fce068
-# Parent  262e4847ad6cca40d7375e40a0d6ebe8b372e3d3
-Bug 1088588 - fix ifdef in X11TextureSourceOGL.cpp, r?nical
-
-diff --git a/gfx/layers/opengl/X11TextureSourceOGL.cpp b/gfx/layers/opengl/X11TextureSourceOGL.cpp
---- a/gfx/layers/opengl/X11TextureSourceOGL.cpp
-+++ b/gfx/layers/opengl/X11TextureSourceOGL.cpp
-@@ -94,14 +94,14 @@ X11TextureSourceOGL::ContentTypeToSurfac
-   switch (aType) {
-     case gfxContentType::COLOR:
-       return SurfaceFormat::R8G8B8X8;
-     case gfxContentType::COLOR_ALPHA:
-       return SurfaceFormat::R8G8B8A8;
-     default:
-       return SurfaceFormat::UNKNOWN;
-   }
- }
- 
-+}
-+}
-+
- #endif
--
--}
--}
--- a/mozilla-kde.patch	Sun Mar 22 13:58:24 2015 +0100
+++ b/mozilla-kde.patch	Sun Mar 22 14:02:18 2015 +0100
@@ -1,5 +1,5 @@
 # HG changeset patch
-# Parent  aba9432d1fd32a118ba24e92c6b6e99ddb0b9bdc
+# Parent  2b183c17f6e4693372442af1a8ee0be364f8cba0
 Description: Add KDE integration to Firefox (toolkit parts)
 Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
 Author: Lubos Lunak <lunak@suse.com>
@@ -46,7 +46,7 @@
  #include "prefread.h"
  #include "prefapi_private_data.h"
  
-@@ -1172,16 +1173,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char 
+@@ -1165,16 +1166,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char 
  
  static nsresult pref_LoadPrefsInDirList(const char *listId)
  {
@@ -81,7 +81,7 @@
      return NS_OK;
  
    bool hasMore;
-@@ -1197,17 +1216,17 @@ static nsresult pref_LoadPrefsInDirList(
+@@ -1190,17 +1209,17 @@ static nsresult pref_LoadPrefsInDirList(
  
      nsAutoCString leaf;
      path->GetNativeLeafName(leaf);
@@ -100,7 +100,7 @@
  {
    nsZipItemPtr<char> manifest(jarReader, name, true);
    NS_ENSURE_TRUE(manifest.Buffer(), NS_ERROR_NOT_AVAILABLE);
-@@ -1301,26 +1320,38 @@ static nsresult pref_InitInitialObjects(
+@@ -1294,26 +1313,38 @@ static nsresult pref_InitInitialObjects(
    /* these pref file names should not be used: we process them after all other application pref files for backwards compatibility */
    static const char* specialFiles[] = {
  #if defined(XP_MACOSX)
@@ -223,9 +223,9 @@
  
  #ifdef MOZ_WIDGET_ANDROID
  #include "AndroidBridge.h"
- using namespace mozilla::widget::android;
  #endif
-@@ -2717,16 +2721,25 @@ nsDownload::SetState(DownloadState aStat
+ 
+@@ -2716,16 +2720,25 @@ nsDownload::SetState(DownloadState aStat
        nsCOMPtr<nsIPrefBranch> pref(do_GetService(NS_PREFSERVICE_CONTRACTID));
  
        // Master pref to control this function.
@@ -251,12 +251,12 @@
          int64_t goat = PR_Now() - mStartTime;
          showTaskbarAlert = goat > alertIntervalUSec;
  
-@@ -2757,16 +2770,17 @@ nsDownload::SetState(DownloadState aStat
+@@ -2756,16 +2769,17 @@ nsDownload::SetState(DownloadState aStat
                    NS_LITERAL_STRING(DOWNLOAD_MANAGER_ALERT_ICON), title,
                    message, !removeWhenDone,
                    mPrivate ? NS_LITERAL_STRING("private") : NS_LITERAL_STRING("non-private"),
                    mDownloadManager, EmptyString(), NS_LITERAL_STRING("auto"),
-                   EmptyString(), EmptyString(), nullptr);
+                   EmptyString(), EmptyString(), nullptr, mPrivate);
              }
          }
        }
@@ -3137,13 +3137,13 @@
 diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
 --- a/widget/gtk/nsFilePicker.cpp
 +++ b/widget/gtk/nsFilePicker.cpp
-@@ -1,32 +1,34 @@
- /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
+@@ -4,32 +4,34 @@
   * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  
  #include "mozilla/Types.h"
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <unistd.h>
  
  #include <gtk/gtk.h>
 +#include <gdk/gdkx.h>
@@ -3172,7 +3172,7 @@
  nsIFile *nsFilePicker::mPrevDisplayDirectory = nullptr;
  
  void
-@@ -224,17 +226,19 @@ nsFilePicker::AppendFilters(int32_t aFil
+@@ -238,17 +240,19 @@ nsFilePicker::AppendFilters(int32_t aFil
    return nsBaseFilePicker::AppendFilters(aFilterMask);
  }
  
@@ -3193,7 +3193,7 @@
  
    mFilters.AppendElement(filter);
    mFilterNames.AppendElement(name);
-@@ -349,16 +353,32 @@ nsFilePicker::Show(int16_t *aReturn)
+@@ -363,16 +367,32 @@ nsFilePicker::Show(int16_t *aReturn)
  
  NS_IMETHODIMP
  nsFilePicker::Open(nsIFilePickerShownCallback *aCallback)
@@ -3226,7 +3226,7 @@
  
    GtkFileChooserAction action = GetGtkFileChooserAction(mMode);
    const gchar *accept_button = (action == GTK_FILE_CHOOSER_ACTION_SAVE)
-@@ -537,8 +557,235 @@ nsFilePicker::Done(GtkWidget* file_choos
+@@ -551,8 +571,235 @@ nsFilePicker::Done(GtkWidget* file_choos
    if (mCallback) {
      mCallback->Done(result);
      mCallback = nullptr;
@@ -3561,7 +3561,7 @@
      mozilla::AndroidBridge::Bridge()->GetStaticStringField("android/os/Build$VERSION",
                                                             "RELEASE",
                                                             osVersion);
-     isTablet = mozilla::widget::android::GeckoAppShell::IsTablet();
+     isTablet = mozilla::widget::GeckoAppShell::IsTablet();
    }
 +  desktop = NS_LITERAL_STRING("android");
  #endif
--- a/mozilla-openaes-decl.patch	Sun Mar 22 13:58:24 2015 +0100
+++ b/mozilla-openaes-decl.patch	Sun Mar 22 14:02:18 2015 +0100
@@ -1,17 +1,18 @@
 # HG changeset patch
 # Parent 33024abb3c58dab7239e32388df58e14f99defd5
 # User Wolfgang Rosenauer <wr@rosenauer.org>
+# Parent  12305a99d90ce098f8f11f5609571cd709b6e2de
 
 diff --git a/media/gmp-clearkey/0.1/openaes/oaes_lib.c b/media/gmp-clearkey/0.1/openaes/oaes_lib.c
 --- a/media/gmp-clearkey/0.1/openaes/oaes_lib.c
 +++ b/media/gmp-clearkey/0.1/openaes/oaes_lib.c
-@@ -27,16 +27,17 @@
+@@ -24,16 +24,17 @@
+  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGE.
   * ---------------------------------------------------------------------------
   */
- static const char _NR[] = {
- 	0x4e,0x61,0x62,0x69,0x6c,0x20,0x53,0x2e,0x20,
- 	0x41,0x6c,0x20,0x52,0x61,0x6d,0x6c,0x69,0x00 };
  
  #include <stdlib.h>
 +#include <stdio.h>
--- a/mozilla-repo.patch	Sun Mar 22 13:58:24 2015 +0100
+++ b/mozilla-repo.patch	Sun Mar 22 14:02:18 2015 +0100
@@ -1,5 +1,6 @@
 # HG changeset patch
 # Parent 80b6464bd883864fce57e8748010869af1be69e9
+# Parent  d160c6876c5f05d902b391551bf4f684254b3c7d
 
 diff --git a/toolkit/mozapps/installer/package-name.mk b/toolkit/mozapps/installer/package-name.mk
 --- a/toolkit/mozapps/installer/package-name.mk
@@ -10,7 +11,7 @@
  
  ifndef INCLUDED_RCS_MK
    USE_RCS_MK := 1
-   include $(topsrcdir)/config/makefiles/makeutils.mk
+   include $(MOZILLA_DIR)/config/makefiles/makeutils.mk
  endif
  
 -MOZ_SOURCE_STAMP = $(firstword $(shell hg -R $(MOZILLA_DIR) parent --template="{node|short}\n" 2>/dev/null))
--- a/mozilla-shared-nss-db.patch	Sun Mar 22 13:58:24 2015 +0100
+++ b/mozilla-shared-nss-db.patch	Sun Mar 22 14:02:18 2015 +0100
@@ -7,7 +7,7 @@
 diff --git a/configure.in b/configure.in
 --- a/configure.in
 +++ b/configure.in
-@@ -8268,16 +8268,31 @@ if test "$MOZ_ENABLE_SKIA"; then
+@@ -8207,16 +8207,31 @@ if test "$MOZ_ENABLE_SKIA"; then
      MOZ_ENABLE_SKIA_GPU=1
      AC_DEFINE(USE_SKIA_GPU)
      AC_SUBST(MOZ_ENABLE_SKIA_GPU)
@@ -84,10 +84,10 @@
  #include "ExtendedValidation.h"
  #include "NSSCertDBTrustDomain.h"
  #include "mozilla/Telemetry.h"
+ #include "nsAppDirectoryServiceDefs.h"
  #include "nsCertVerificationThread.h"
  #include "nsAppDirectoryServiceDefs.h"
- #include "nsComponentManagerUtils.h"
-@@ -986,17 +993,31 @@ nsNSSComponent::InitializeNSS()
+@@ -996,17 +1003,31 @@ nsNSSComponent::InitializeNSS()
    if (NS_FAILED(rv)) {
      nsPSMInitPanic::SetPanic();
      return NS_ERROR_NOT_AVAILABLE;
--- a/mozilla-skia-bmo1136958.patch	Sun Mar 22 13:58:24 2015 +0100
+++ b/mozilla-skia-bmo1136958.patch	Sun Mar 22 14:02:18 2015 +0100
@@ -1,410 +1,282 @@
-From 8dc9e73b80ec33fe1a1c855829ef1438301a5de1 Mon Sep 17 00:00:00 2001
-From: Mike Hommey <mh+mozilla@glandium.org>
-Date: Thu, 26 Feb 2015 14:14:02 +0900
-Subject: [PATCH 1/2] Bug 1136958 - Remove duplicate
- SkDiscardableMemory_none.cpp from gfx/skia/moz.build
+From a8ab3ec3542469c1d4e0741121eb1be17cc0acb0 Mon Sep 17 00:00:00 2001
+From: Mike Hommey <mh@glandium.org>
+Date: Mon, 9 Mar 2015 08:42:19 +0900
+Subject: [PATCH] Bug 1136958 - Reintroduce pixman code path removed in bug
+ 1097776 for --disable-skia builds
 
-And to do so, cleanup gfx/skia/generate_mozbuild.py a little.
 ---
- gfx/skia/generate_mozbuild.py | 53 ++++++++++++++++---------------------------
- gfx/skia/moz.build            |  1 -
- 2 files changed, 20 insertions(+), 34 deletions(-)
+ gfx/layers/basic/BasicCompositor.cpp   | 94 +++++++++++++++++++++++++++++++---
+ gfx/layers/basic/BasicLayerManager.cpp | 88 +++++++++++++++++++++++++++++--
+ 2 files changed, 171 insertions(+), 11 deletions(-)
 
-diff --git a/configure.in b/configure.in
---- a/configure.in
-+++ b/configure.in
-@@ -7997,39 +7997,16 @@ dnl ====================================
- 
- if test "${OS_TARGET}" = "WINNT"; then
-   if $PERL -e "exit($MOZ_WINSDK_MAXVER < 0x06020000)"; then
-     MOZ_ENABLE_DIRECT2D1_1=1
-     AC_SUBST(MOZ_ENABLE_DIRECT2D1_1)
-   fi
- fi
- 
--if test "${OS_TARGET}" = "WINNT" -o \
--        "${OS_ARCH}" = "Darwin" -o \
--        "${MOZ_WIDGET_TOOLKIT}" = "android" -o \
--        "${MOZ_WIDGET_TOOLKIT}" = "gonk" -o \
--        "${MOZ_WIDGET_TOOLKIT}" = "gtk2" -o \
--        "${MOZ_WIDGET_TOOLKIT}" = "gtk3"; then
--    case "${target_cpu}" in
--    i*86*|x86_64|arm)
--        MOZ_ENABLE_SKIA=1
--        ;;
--    *)
--        MOZ_ENABLE_SKIA=
--        ;;
--    esac
--else
--MOZ_ENABLE_SKIA=
--fi
--
--MOZ_ARG_ENABLE_BOOL(skia,
--[  --enable-skia   Enable use of Skia],
--MOZ_ENABLE_SKIA=1,
--MOZ_ENABLE_SKIA=)
--
- MOZ_ARG_DISABLE_BOOL(skia-gpu,
- [  --disable-skia-gpu  Disable use of Skia-GPU],
- MOZ_DISABLE_SKIA_GPU=1,
- MOZ_DISABLE_SKIA_GPU=)
- 
- if test "$USE_FC_FREETYPE"; then
-     if test "$COMPILE_ENVIRONMENT"; then
-         dnl ========================================================
-@@ -8252,30 +8229,26 @@ AC_SUBST(MOZ_TREE_CAIRO)
- AC_SUBST_LIST(MOZ_CAIRO_CFLAGS)
- AC_SUBST_LIST(MOZ_CAIRO_LIBS)
- AC_SUBST_LIST(MOZ_CAIRO_OSLIBS)
- AC_SUBST(MOZ_TREE_PIXMAN)
- 
- dnl ========================================================
- dnl Skia
- dnl ========================================================
--if test "$MOZ_ENABLE_SKIA"; then
--  AC_DEFINE(MOZ_ENABLE_SKIA)
--  AC_DEFINE(USE_SKIA)
--  if test "${MOZ_WIDGET_TOOLKIT}" = "android" -o x"$MOZ_WIDGET_TOOLKIT" = x"gonk"; then
--    AC_DEFINE(SK_BUILD_FOR_ANDROID_NDK)
--  fi
--
--  if test "${CPU_ARCH}" != "ppc" -a "${CPU_ARCH}" != "ppc64" -a "${CPU_ARCH}" != "sparc" -a -z "$MOZ_DISABLE_SKIA_GPU" ; then
--    MOZ_ENABLE_SKIA_GPU=1
--    AC_DEFINE(USE_SKIA_GPU)
--    AC_SUBST(MOZ_ENABLE_SKIA_GPU)
--  fi
--fi
--AC_SUBST(MOZ_ENABLE_SKIA)
-+AC_DEFINE(USE_SKIA)
-+if test "${MOZ_WIDGET_TOOLKIT}" = "android" -o x"$MOZ_WIDGET_TOOLKIT" = x"gonk"; then
-+  AC_DEFINE(SK_BUILD_FOR_ANDROID_NDK)
-+fi
-+
-+if test "${CPU_ARCH}" != "ppc" -a "${CPU_ARCH}" != "ppc64" -a "${CPU_ARCH}" != "sparc" -a -z "$MOZ_DISABLE_SKIA_GPU" ; then
-+  MOZ_ENABLE_SKIA_GPU=1
-+  AC_DEFINE(USE_SKIA_GPU)
-+  AC_SUBST(MOZ_ENABLE_SKIA_GPU)
-+fi
- 
- dnl ========================================================
- dnl Check for nss-shared-helper
- dnl ========================================================
- 
-   PKG_CHECK_MODULES(NSSHELPER, nss-shared-helper,
-     [MOZ_ENABLE_NSSHELPER=1],
-     [MOZ_ENABLE_NSSHELPER=])
-diff --git a/gfx/2d/moz.build b/gfx/2d/moz.build
---- a/gfx/2d/moz.build
-+++ b/gfx/2d/moz.build
-@@ -64,51 +64,46 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'wi
-         SOURCES += [
-             'DrawTargetD2D1.cpp',
-             'FilterNodeD2D1.cpp',
-             'RadialGradientEffectD2D1.cpp',
-             'SourceSurfaceD2D1.cpp'
-         ]
-         DEFINES['USE_D2D1_1'] = True
- 
--if CONFIG['MOZ_ENABLE_SKIA']:
--    UNIFIED_SOURCES += [
--        'convolver.cpp',
--        'DrawTargetSkia.cpp',
--        'PathSkia.cpp',
--        'SourceSurfaceSkia.cpp',
--    ]
--    SOURCES += [
--        'image_operations.cpp', # Uses _USE_MATH_DEFINES
--    ]
--    EXPORTS.mozilla.gfx += [
--        'HelpersSkia.h',
--    ]
-+UNIFIED_SOURCES += [
-+    'convolver.cpp',
-+    'DrawTargetSkia.cpp',
-+    'PathSkia.cpp',
-+    'SourceSurfaceSkia.cpp',
-+]
-+SOURCES += [
-+    'image_operations.cpp', # Uses _USE_MATH_DEFINES
-+]
-+EXPORTS.mozilla.gfx += [
-+    'HelpersSkia.h',
-+]
- 
- # Are we targeting x86 or x64?  If so, build SSE2 files.
- if CONFIG['INTEL_ARCHITECTURE']:
-     # VC2005 doesn't support _mm_castsi128_ps, so SSE2 is turned off
-     if CONFIG['_MSC_VER'] != '1400':
-         SOURCES += [
-             'BlurSSE2.cpp',
-+	    'convolverSSE2.cpp',
-             'FilterProcessingSSE2.cpp',
-             'ImageScalingSSE2.cpp',
-         ]
--        if CONFIG['MOZ_ENABLE_SKIA']:
--            SOURCES += [
--                'convolverSSE2.cpp',
--            ]
-         DEFINES['USE_SSE2'] = True
-         # The file uses SSE2 intrinsics, so it needs special compile flags on some
-         # compilers.
-         SOURCES['BlurSSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
-         SOURCES['FilterProcessingSSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
-         SOURCES['ImageScalingSSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
--        if CONFIG['MOZ_ENABLE_SKIA']:
--            SOURCES['convolverSSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
-+        SOURCES['convolverSSE2.cpp'].flags += CONFIG['SSE2_FLAGS']
- 
- UNIFIED_SOURCES += [
-     'Blur.cpp',
-     'DataSourceSurface.cpp',
-     'DataSurfaceHelpers.cpp',
-     'DrawEventRecorder.cpp',
-     'DrawTarget.cpp',
-     'DrawTargetCairo.cpp',
-diff --git a/gfx/moz.build b/gfx/moz.build
---- a/gfx/moz.build
-+++ b/gfx/moz.build
-@@ -17,16 +17,15 @@ DIRS += [
-     'layers',
-     'graphite2/src',
-     'harfbuzz/src',
-     'ots/src',
-     'thebes',
-     'ipc',
- ]
- 
--if CONFIG['MOZ_ENABLE_SKIA']:
--    DIRS += ['skia']
-+DIRS += ['skia']
- 
- if CONFIG['ENABLE_TESTS']:
-     DIRS += ['tests/gtest']
- 
- TEST_DIRS += ['tests']
+diff --git a/gfx/layers/basic/BasicCompositor.cpp b/gfx/layers/basic/BasicCompositor.cpp
+index 0bef076..000b591 100644
+--- a/gfx/layers/basic/BasicCompositor.cpp
++++ b/gfx/layers/basic/BasicCompositor.cpp
+@@ -17,8 +17,13 @@
+ #include <algorithm>
+ #include "ImageContainer.h"
+ #include "gfxPrefs.h"
++#ifdef MOZ_ENABLE_SKIA
+ #include "skia/SkCanvas.h"              // for SkCanvas
+ #include "skia/SkBitmapDevice.h"        // for SkBitmapDevice
++#else
++#define PIXMAN_DONT_DEFINE_STDINT
++#include "pixman.h"                     // for pixman_f_transform, etc
++#endif
  
-diff --git a/gfx/skia/generate_mozbuild.py b/gfx/skia/generate_mozbuild.py
---- a/gfx/skia/generate_mozbuild.py
-+++ b/gfx/skia/generate_mozbuild.py
-@@ -1,13 +1,14 @@
- #!/usr/bin/env python
- 
- import os
- 
- import locale
-+from collections import defaultdict
- locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
- 
- header = """
- #
- #   #####   #######           #     #     #     #     #     #
- # ##     #  #     #          # #    #  #  #    # #     #   #
- # ##        #     #         #   #   #  #  #   #   #     # #
- # ##  ####  #     #        #     #  #  #  #  #     #     #
-@@ -187,17 +188,17 @@ def generate_platform_sources():
- 
-   for plat in platforms:
-     if os.system("cd trunk && GYP_GENERATORS=dump_mozbuild ./gyp_skia -D OS=%s gyp/skia_lib.gyp" % plat) != 0:
-       print 'Failed to generate sources for ' + plat
-       continue
- 
- 
-     f = open('trunk/sources.json');
--    sources[plat] = set(json.load(f));
-+    sources[plat] = set(v.replace('../', 'trunk/') for v in json.load(f));
-     f.close()
- 
-   return dict(sources.items() + generate_opt_sources().items())
- 
- 
- def generate_separated_sources(platform_sources):
-   blacklist = [
-     'ChromeUtils',
-@@ -232,17 +233,17 @@ def generate_separated_sources(platform_
- 
-   def isblacklisted(value):
-     for item in blacklist:
-       if value.find(item) >= 0:
-         return True
- 
-     return False
- 
--  separated = {
-+  separated = defaultdict(set, {
-     'common': {
-       #'trunk/src/effects/gradients/SkGradientTileProc.cpp',
-       'trunk/src/gpu/gl/GrGLCreateNativeInterface_none.cpp',
-       'trunk/src/ports/SkDiscardableMemory_none.cpp',
-       'trunk/src/ports/SkImageDecoder_empty.cpp',
-       'trunk/src/ports/SkMemory_mozalloc.cpp',
-       # 'trunk/src/images/SkImages.cpp',
-       # 'trunk/src/images/SkImageRef.cpp',
-@@ -277,69 +278,55 @@ def generate_separated_sources(platform_
-       'trunk/src/core/SkUtilsArm.cpp',
-     },
-     'neon': {
-       'trunk/src/opts/SkBitmapProcState_arm_neon.cpp',
-     },
-     'none': {
-       'trunk/src/opts/SkUtils_opts_none.cpp',
-     }
--  }
-+  })
- 
-   for plat in platform_sources.keys():
--    if not separated.has_key(plat):
--      separated[plat] = set()
--
-     for value in platform_sources[plat]:
-       if isblacklisted(value):
-         continue
- 
--      if value.find('_SSE') > 0 or value.find('_SSSE') > 0 or value.find('_SSE4') > 0 : #lol
--        separated['intel'].add(value)
-+      if value in separated['common']:
-         continue
- 
--      if value.find('_neon') > 0:
--        separated['neon'].add(value)
--        continue
-+      key = plat
+ namespace mozilla {
+ using namespace mozilla::gfx;
+@@ -168,6 +173,7 @@ DrawSurfaceWithTextureCoords(DrawTarget *aDest,
+                    mode, aMask, aMaskTransform, &matrix);
+ }
  
--      if value.find('_arm') > 0:
--        separated['arm'].add(value)
--        continue
-+      if '_SSE' in value or '_SSSE' in value:
-+        key = 'intel'
-+      elif '_neon' in value:
-+        key = 'neon'
-+      elif '_arm' in value:
-+        key = 'arm'
-+      elif '_none' in value:
-+        key = 'none'
-+      elif all(value in platform_sources.get(p, {})
-+               for p in platforms if p != plat):
-+        key = 'common'
- 
--      if value.find('_none') > 0:
--        separated['none'].add(value)
--        continue
--
--      found = True
--      for other in platforms:
--        if other == plat or not platform_sources.has_key(other):
--          continue
--
--        if not value in platform_sources[other]:
--          found = False
--          break;
--
--      if found:
--        separated['common'].add(value)
--      else:
--        separated[plat].add(value)
-+      separated[key].add(value)
- 
-   return separated
- 
- def uniq(seq):
-   seen = set()
-   seen_add = seen.add
-   return [ x for x in seq if x not in seen and not seen_add(x)]
- 
- def write_cflags(f, values, subsearch, cflag, indent):
-   def write_indent(indent):
-     for _ in range(indent):
-         f.write(' ')
- 
--  val_list = uniq(sorted(map(lambda val: val.replace('../', 'trunk/'), values), key=lambda x: x.lower()))
-+  val_list = uniq(sorted(values, key=lambda x: x.lower()))
- 
-   if len(val_list) == 0:
-     return
- 
-   for val in val_list:
-     if val.find(subsearch) > 0:
-       write_indent(indent)
-       f.write("SOURCES[\'" + val + "\'].flags += [\'" + cflag + "\']\n")
-@@ -391,17 +378,17 @@ def write_sources(f, values, indent):
-   write_list(f, "UNIFIED_SOURCES", sources['unified'], indent)
-   write_list(f, "SOURCES", sources['nonunified'], indent)
-   
- def write_list(f, name, values, indent):
-   def write_indent(indent):
-     for _ in range(indent):
-         f.write(' ')
- 
--  val_list = uniq(sorted(map(lambda val: val.replace('../', 'trunk/'), values), key=lambda x: x.lower()))
-+  val_list = uniq(sorted(values, key=lambda x: x.lower()))
- 
-   if len(val_list) == 0:
-     return
- 
-   write_indent(indent)
-   f.write(name + ' += [\n')
-   for val in val_list:
-     write_indent(indent + 4)
-diff --git a/gfx/skia/moz.build b/gfx/skia/moz.build
---- a/gfx/skia/moz.build
-+++ b/gfx/skia/moz.build
-@@ -847,17 +847,16 @@ else:
-         'trunk/src/opts/SkBitmapProcState_opts_none.cpp',
-         'trunk/src/opts/SkBlitMask_opts_none.cpp',
-         'trunk/src/opts/SkBlitRow_opts_none.cpp',
-         'trunk/src/opts/SkBlurImage_opts_none.cpp',
-         'trunk/src/opts/SkMorphology_opts_none.cpp',
-         'trunk/src/opts/SkTextureCompression_opts_none.cpp',
-         'trunk/src/opts/SkUtils_opts_none.cpp',
-         'trunk/src/opts/SkXfermode_opts_none.cpp',
--        'trunk/src/ports/SkDiscardableMemory_none.cpp',
-     ]
- 
- 
- # can we find a better way of dealing with asm sources?
- 
- # left out of UNIFIED_SOURCES for now; that's not C++ anyway, nothing else to unify it with
- if not CONFIG['INTEL_ARCHITECTURE'] and CONFIG['CPU_ARCH'] == 'arm' and CONFIG['GNU_CC']:
-     SOURCES += [
-diff --git a/image/src/RasterImage.cpp b/image/src/RasterImage.cpp
---- a/image/src/RasterImage.cpp
-+++ b/image/src/RasterImage.cpp
-@@ -2090,20 +2090,16 @@ RasterImage::RecoverFromLossOfFrames()
-   RequestDecodeCore(ASYNCHRONOUS);
++#ifdef MOZ_ENABLE_SKIA
+ static SkMatrix
+ Matrix3DToSkia(const gfx3DMatrix& aMatrix)
+ {
+@@ -186,10 +192,10 @@ Matrix3DToSkia(const gfx3DMatrix& aMatrix)
  }
  
- bool
- RasterImage::CanScale(GraphicsFilter aFilter,
-                       const nsIntSize& aSize,
-                       uint32_t aFlags)
+ static void
+-SkiaTransform(DataSourceSurface* aDest,
+-              DataSourceSurface* aSource,
+-              const gfx3DMatrix& aTransform,
+-              const Point& aDestOffset)
++Transform(DataSourceSurface* aDest,
++          DataSourceSurface* aSource,
++          const gfx3DMatrix& aTransform,
++          const Point& aDestOffset)
  {
--#ifndef MOZ_ENABLE_SKIA
--  // The high-quality scaler requires Skia.
--  return false;
--#else
-   // Check basic requirements: HQ downscaling is enabled, we're decoded, the
-   // flags allow us to do it, and a 'good' filter is being used. The flags may
-   // ask us not to scale because the caller isn't drawing to the window. If
-   // we're drawing to something else (e.g. a canvas) we usually have no way of
-   // updating what we've drawn, so HQ scaling is useless.
-   if (!gfxPrefs::ImageHQDownscalingEnabled() || !mDecoded ||
-       !(aFlags & imgIContainer::FLAG_HIGH_QUALITY_SCALING) ||
-       aFilter != GraphicsFilter::FILTER_GOOD) {
-@@ -2137,17 +2133,16 @@ RasterImage::CanScale(GraphicsFilter aFi
-   // XXX(seth): It's not clear what this check buys us over
-   // gfxPrefs::ImageHQUpscalingMaxSize().
-   // The default value of this pref is 1000, which means that we never upscale.
-   // If that's all it's getting us, I'd rather we just forbid that explicitly.
-   gfx::Size scale(double(aSize.width) / mSize.width,
-                   double(aSize.height) / mSize.height);
-   gfxFloat minFactor = gfxPrefs::ImageHQDownscalingMinFactor() / 1000.0;
-   return (scale.width < minFactor || scale.height < minFactor);
--#endif
+   if (aTransform.IsSingular()) {
+     return;
+@@ -225,6 +231,78 @@ SkiaTransform(DataSourceSurface* aDest,
+   SkRect destRect = SkRect::MakeXYWH(0, 0, srcSize.width, srcSize.height);
+   destCanvas.drawBitmapRectToRect(src, nullptr, destRect, &paint);
+ }
++#else
++static pixman_transform
++Matrix3DToPixman(const gfx3DMatrix& aMatrix)
++{
++  pixman_f_transform transform;
++
++  transform.m[0][0] = aMatrix._11;
++  transform.m[0][1] = aMatrix._21;
++  transform.m[0][2] = aMatrix._41;
++  transform.m[1][0] = aMatrix._12;
++  transform.m[1][1] = aMatrix._22;
++  transform.m[1][2] = aMatrix._42;
++  transform.m[2][0] = aMatrix._14;
++  transform.m[2][1] = aMatrix._24;
++  transform.m[2][2] = aMatrix._44;
++
++  pixman_transform result;
++  pixman_transform_from_pixman_f_transform(&result, &transform);
++
++  return result;
++}
++
++static void
++Transform(DataSourceSurface* aDest,
++          DataSourceSurface* aSource,
++          const gfx3DMatrix& aTransform,
++          const Point& aDestOffset)
++{
++  IntSize destSize = aDest->GetSize();
++  pixman_image_t* dest = pixman_image_create_bits(PIXMAN_a8r8g8b8,
++                                                  destSize.width,
++                                                  destSize.height,
++                                                  (uint32_t*)aDest->GetData(),
++                                                  aDest->Stride());
++
++  IntSize srcSize = aSource->GetSize();
++  pixman_image_t* src = pixman_image_create_bits(PIXMAN_a8r8g8b8,
++                                                 srcSize.width,
++                                                 srcSize.height,
++                                                 (uint32_t*)aSource->GetData(),
++                                                 aSource->Stride());
++
++  NS_ABORT_IF_FALSE(src && dest, "Failed to create pixman images?");
++
++  pixman_transform pixTransform = Matrix3DToPixman(aTransform);
++  pixman_transform pixTransformInverted;
++
++  // If the transform is singular then nothing would be drawn anyway, return here
++  if (!pixman_transform_invert(&pixTransformInverted, &pixTransform)) {
++    pixman_image_unref(dest);
++    pixman_image_unref(src);
++    return;
++  }
++  pixman_image_set_transform(src, &pixTransformInverted);
++
++  pixman_image_composite32(PIXMAN_OP_SRC,
++                           src,
++                           nullptr,
++                           dest,
++                           aDestOffset.x,
++                           aDestOffset.y,
++                           0,
++                           0,
++                           0,
++                           0,
++                           destSize.width,
++                           destSize.height);
++
++  pixman_image_unref(dest);
++  pixman_image_unref(src);
++}
++#endif
+ 
+ static inline IntRect
+ RoundOut(Rect r)
+@@ -364,12 +442,16 @@ BasicCompositor::DrawQuad(const gfx::Rect& aRect,
+     RefPtr<SourceSurface> snapshot = dest->Snapshot();
+     RefPtr<DataSourceSurface> source = snapshot->GetDataSurface();
+     RefPtr<DataSourceSurface> temp =
+-      Factory::CreateDataSourceSurface(RoundOut(transformBounds).Size(), SurfaceFormat::B8G8R8A8, true);
++      Factory::CreateDataSourceSurface(RoundOut(transformBounds).Size(), SurfaceFormat::B8G8R8A8
++#ifdef MOZ_ENABLE_SKIA
++        , true
++#endif
++        );
+     if (NS_WARN_IF(!temp)) {
+       return;
+     }
+ 
+-    SkiaTransform(temp, source, new3DTransform, transformBounds.TopLeft());
++    Transform(temp, source, new3DTransform, transformBounds.TopLeft());
+ 
+     transformBounds.MoveTo(0, 0);
+     buffer->DrawSurface(temp, transformBounds, transformBounds);
+diff --git a/gfx/layers/basic/BasicLayerManager.cpp b/gfx/layers/basic/BasicLayerManager.cpp
+index f4ec9e4..c849c27 100644
+--- a/gfx/layers/basic/BasicLayerManager.cpp
++++ b/gfx/layers/basic/BasicLayerManager.cpp
+@@ -46,8 +46,13 @@
+ #include "nsRect.h"                     // for nsIntRect
+ #include "nsRegion.h"                   // for nsIntRegion, etc
+ #include "nsTArray.h"                   // for nsAutoTArray
++#ifdef MOZ_ENABLE_SKIA
+ #include "skia/SkCanvas.h"              // for SkCanvas
+ #include "skia/SkBitmapDevice.h"        // for SkBitmapDevice
++#else
++#define PIXMAN_DONT_DEFINE_STDINT
++#include "pixman.h"                     // for pixman_f_transform, etc
++#endif
+ class nsIWidget;
+ 
+ namespace mozilla {
+@@ -601,6 +606,7 @@ BasicLayerManager::SetRoot(Layer* aLayer)
+   mRoot = aLayer;
  }
  
- void
- RasterImage::NotifyNewScaledFrame()
++#ifdef MOZ_ENABLE_SKIA
+ static SkMatrix
+ BasicLayerManager_Matrix3DToSkia(const gfx3DMatrix& aMatrix)
+ {
+@@ -619,10 +625,10 @@ BasicLayerManager_Matrix3DToSkia(const gfx3DMatrix& aMatrix)
+ }
+ 
+ static void
+-SkiaTransform(const gfxImageSurface* aDest,
+-              RefPtr<DataSourceSurface> aSrc,
+-              const gfx3DMatrix& aTransform,
+-              gfxPoint aDestOffset)
++Transform(const gfxImageSurface* aDest,
++          RefPtr<DataSourceSurface> aSrc,
++          const gfx3DMatrix& aTransform,
++          gfxPoint aDestOffset)
  {
-   if (mProgressTracker) {
-     // Send an invalidation so observers will repaint and can take advantage of
-     // the new scaled frame if possible.
+   if (aTransform.IsSingular()) {
+     return;
+@@ -658,6 +664,78 @@ SkiaTransform(const gfxImageSurface* aDest,
+   SkRect destRect = SkRect::MakeXYWH(0, 0, srcSize.width, srcSize.height);
+   destCanvas.drawBitmapRectToRect(src, nullptr, destRect, &paint);
+ }
++#else
++static pixman_transform
++BasicLayerManager_Matrix3DToPixman(const gfx3DMatrix& aMatrix)
++{
++  pixman_f_transform transform;
++
++  transform.m[0][0] = aMatrix._11;
++  transform.m[0][1] = aMatrix._21;
++  transform.m[0][2] = aMatrix._41;
++  transform.m[1][0] = aMatrix._12;
++  transform.m[1][1] = aMatrix._22;
++  transform.m[1][2] = aMatrix._42;
++  transform.m[2][0] = aMatrix._14;
++  transform.m[2][1] = aMatrix._24;
++  transform.m[2][2] = aMatrix._44;
++
++  pixman_transform result;
++  pixman_transform_from_pixman_f_transform(&result, &transform);
++
++  return result;
++}
++
++static void
++Transform(const gfxImageSurface* aDest,
++          RefPtr<DataSourceSurface> aSrc,
++          const gfx3DMatrix& aTransform,
++          gfxPoint aDestOffset)
++{
++  IntSize destSize = ToIntSize(aDest->GetSize());
++  pixman_image_t* dest = pixman_image_create_bits(aDest->Format() == gfxImageFormat::ARGB32 ? PIXMAN_a8r8g8b8 : PIXMAN_x8r8g8b8,
++                                                  destSize.width,
++                                                  destSize.height,
++                                                  (uint32_t*)aDest->Data(),
++                                                  aDest->Stride());
++
++  IntSize srcSize = aSrc->GetSize();
++  pixman_image_t* src = pixman_image_create_bits(aSrc->GetFormat() == SurfaceFormat::B8G8R8A8 ? PIXMAN_a8r8g8b8 : PIXMAN_x8r8g8b8,
++                                                 srcSize.width,
++                                                 srcSize.height,
++                                                 (uint32_t*)aSrc->GetData(),
++                                                 aSrc->Stride());
++
++  NS_ABORT_IF_FALSE(src && dest, "Failed to create pixman images?");
++
++  pixman_transform pixTransform = BasicLayerManager_Matrix3DToPixman(aTransform);
++  pixman_transform pixTransformInverted;
++
++  // If the transform is singular then nothing would be drawn anyway, return here
++  if (!pixman_transform_invert(&pixTransformInverted, &pixTransform)) {
++    pixman_image_unref(dest);
++    pixman_image_unref(src);
++    return;
++  }
++  pixman_image_set_transform(src, &pixTransformInverted);
++
++  pixman_image_composite32(PIXMAN_OP_SRC,
++                           src,
++                           nullptr,
++                           dest,
++                           aDestOffset.x,
++                           aDestOffset.y,
++                           0,
++                           0,
++                           0,
++                           0,
++                           destSize.width,
++                           destSize.height);
++
++  pixman_image_unref(dest);
++  pixman_image_unref(src);
++}
++#endif
+ 
+ /**
+  * Transform a surface using a gfx3DMatrix and blit to the destination if
+@@ -699,7 +777,7 @@ Transform3D(RefPtr<SourceSurface> aSource,
+   gfx3DMatrix translation = gfx3DMatrix::Translation(aBounds.x, aBounds.y, 0);
+ 
+   // Transform the content and offset it such that the content begins at the origin.
+-  SkiaTransform(destImage, aSource->GetDataSurface(), translation * aTransform, offset);
++  Transform(destImage, aSource->GetDataSurface(), translation * aTransform, offset);
+ 
+   // If we haven't actually drawn to aDest then return our temporary image so
+   // that the caller can do this.
+-- 
+2.3.0.4.g34b1174
+
--- a/series	Sun Mar 22 13:58:24 2015 +0100
+++ b/series	Sun Mar 22 14:02:18 2015 +0100
@@ -12,7 +12,6 @@
 mozilla-icu-strncat.patch
 mozilla-arm-disable-edsp.patch
 mozilla-idldir.patch
-mozilla-bmo1088588.patch
 mozilla-openaes-decl.patch
 mozilla-skia-bmo1136958.patch
 
--- a/toolkit-download-folder.patch	Sun Mar 22 13:58:24 2015 +0100
+++ b/toolkit-download-folder.patch	Sun Mar 22 14:02:18 2015 +0100
@@ -6,7 +6,7 @@
 diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
 --- a/browser/components/preferences/main.js
 +++ b/browser/components/preferences/main.js
-@@ -290,17 +290,17 @@ var gMainPane = {
+@@ -408,17 +408,17 @@ var gMainPane = {
        // and was available as an option in the 1.5 drop down. On XP this
        // was in My Documents, on OSX it was in User Docs. In 2.0, we did
        // away with the drop down option, although the special label was
@@ -17,18 +17,18 @@
        // folder. See nsDownloadManager for details. 
 -      downloadFolder.label = bundlePreferences.getString("downloadsFolderName");
 +      downloadFolder.label = "Downloads";
-       iconUrlSpec = fph.getURLSpecFromFile(this._indexToFolder(1));
+       iconUrlSpec = fph.getURLSpecFromFile(yield this._indexToFolder(1));
      } else {
        // 'Desktop'
        downloadFolder.label = bundlePreferences.getString("desktopFolderName");
-       iconUrlSpec = fph.getURLSpecFromFile(this._getDownloadsFolder("Desktop"));
+       iconUrlSpec = fph.getURLSpecFromFile(yield this._getDownloadsFolder("Desktop"));
      }
      downloadFolder.image = "moz-icon://" + iconUrlSpec + "?size=16";
-     
+   }),
 diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/components/downloads/nsDownloadManager.cpp
 --- a/toolkit/components/downloads/nsDownloadManager.cpp
 +++ b/toolkit/components/downloads/nsDownloadManager.cpp
-@@ -1365,18 +1365,20 @@ nsDownloadManager::GetDefaultDownloadsDi
+@@ -1361,18 +1361,20 @@ nsDownloadManager::GetDefaultDownloadsDi
    // Vista:
    // Downloads
    // XP/2K: