1
0

- update to Firefox 16.0 (bnc#783533)

- requires NSPR 4.9.2
- improve GStreamer integration (bmo#760140)
- removed upstreamed mozilla-crashreporter-restart-args.patch
- webapprt now included
- use kmozillahelper's new REVEAL command (bnc#777415)
  (requires mozilla-kde4-integration >= 0.6.4)
- updated translations-other with new languages

OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox?expand=0&rev=295
This commit is contained in:
Wolfgang Rosenauer 2012-10-09 11:14:08 +00:00 committed by Git OBS Bridge
parent a1842748f3
commit 6f2059ff99
21 changed files with 813 additions and 209 deletions

View File

@ -1,3 +1,15 @@
-------------------------------------------------------------------
Sun Oct 7 21:40:14 UTC 2012 - wr@rosenauer.org
- update to Firefox 16.0 (bnc#783533)
- requires NSPR 4.9.2
- improve GStreamer integration (bmo#760140)
- removed upstreamed mozilla-crashreporter-restart-args.patch
- webapprt now included
- use kmozillahelper's new REVEAL command (bnc#777415)
(requires mozilla-kde4-integration >= 0.6.4)
- updated translations-other with new languages
-------------------------------------------------------------------
Mon Sep 10 19:37:56 UTC 2012 - wr@rosenauer.org

View File

@ -17,8 +17,8 @@
#
%define major 15
%define mainver %major.0.1
%define major 16
%define mainver %major.0
%define update_channel release
Name: MozillaFirefox
@ -44,7 +44,7 @@ BuildRequires: libproxy-devel
%else
BuildRequires: wireless-tools
%endif
BuildRequires: mozilla-nspr-devel >= 4.9.1
BuildRequires: mozilla-nspr-devel >= 4.9.2
BuildRequires: mozilla-nss-devel >= 3.13.6
BuildRequires: nss-shared-helper-devel
%if %suse_version > 1140
@ -54,7 +54,7 @@ BuildRequires: pkgconfig(gstreamer-plugins-base-0.10)
%endif
Version: %{mainver}
Release: 0
%define releasedate 2012090600
%define releasedate 2012100700
Provides: firefox = %{mainver}
Provides: firefox = %{version}-%{release}
Provides: web_browser
@ -76,6 +76,7 @@ Source5: source-stamp.txt
Source6: kde.js
Source7: l10n-%{version}.tar.bz2
Source8: firefox-mimeinfo.xml
Source9: firefox.js
Source10: compare-locales.tar.bz2
Source11: firefox.1
Source12: mozilla-get-app-id
@ -94,9 +95,9 @@ Patch9: mozilla-repo.patch
Patch10: mozilla-sle11.patch
Patch11: mozilla-disable-neon-option.patch
Patch13: mozilla-arm-disable-edsp.patch
Patch14: mozilla-crashreporter-restart-args.patch
Patch15: mozilla-gstreamer.patch
Patch16: mozilla-ppc.patch
Patch17: mozilla-gstreamer-760140.patch
# Firefox/browser
Patch30: firefox-browser-css.patch
Patch31: firefox-kde.patch
@ -166,7 +167,7 @@ of MozillaFirefox.
%package translations-other
Summary: Extra translations for MozillaFirefox
Group: System/Localization
Provides: locale(%{name}:af;ak;as;ast;be;bg;bn_BD;bn_IN;br;bs;csb;cy;el;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;el;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)
Requires: %{name} = %{version}
Obsoletes: %{name}-translations < %{version}-%{release}
@ -223,9 +224,9 @@ cd $RPM_BUILD_DIR/mozilla
%endif
#%patch11 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
#
%patch30 -p1
%if %suse_version >= 1110
@ -340,6 +341,7 @@ mkdir -p $RPM_BUILD_ROOT%{progdir}/defaults/preferences/
# install kde.js
%if %suse_version >= 1110
install -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{progdir}/defaults/preferences/kde.js
install -m 644 %{SOURCE9} $RPM_BUILD_ROOT%{progdir}/defaults/preferences/firefox.js
%endif
# install add-plugins.sh
sed "s:%%PROGDIR:%{progdir}:g" \
@ -551,6 +553,8 @@ exit 0
%{progdir}/omni.ja
%{progdir}/platform.ini
%{progdir}/plugin-container
%{progdir}/webapprt-stub
%{progdir}/webapprt/
%if %crashreporter
%{progdir}/crashreporter-override.ini
%{progdir}/crashreporter

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:af28abf28728f5e44f04b74735f305f22ea05496d627d6c31dfec8c2b613f0c8
size 29300
oid sha256:fbf6da8dd1ad0d08340f84e4a1128487bfe3979bdc2bfd6ddfe9d2814d333e1d
size 29920

View File

@ -2,8 +2,8 @@
CHANNEL="release"
BRANCH="releases/mozilla-$CHANNEL"
RELEASE_TAG="FIREFOX_15_0_1_RELEASE"
VERSION="15.0.1"
RELEASE_TAG="FIREFOX_16_0_RELEASE"
VERSION="16.0"
# mozilla
echo "cloning $BRANCH..."

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e2b898c3e56d3c825f4a378f8a3903b1040c9d0eb385b4a2c646ec83d679ff0c
size 83657418

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:622e8f233f1f08eb464e52296ccfe050223fa8317bf3c78eaa86125caa27fbff
size 90705047

View File

@ -1,12 +1,12 @@
# HG changeset patch
# User Wolfgang Rosenauer <wr@rosenauer.org>
# Parent 0db25ab919ad61d91a46d7700d3f06e2b66f9feb
# Parent 5a741476f1d87380057f9fa02c6a580aed6e81ff
With openSUSE 11.4 the desktop file name changed from MozillaFirefox to firefox
diff --git a/browser/components/preferences/advanced.js b/browser/components/preferences/advanced.js
--- a/browser/components/preferences/advanced.js
+++ b/browser/components/preferences/advanced.js
@@ -719,15 +719,15 @@ var gAdvancedPane = {
@@ -751,17 +751,17 @@ var gAdvancedPane = {
if (kde_session == 1) {
var shellObj = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
@ -19,7 +19,9 @@ diff --git a/browser/components/preferences/advanced.js b/browser/components/pre
+ "BrowserApplication", "firefox"];
process.run(false, args, args.length);
}
document.getElementById("setDefaultPane").selectedIndex = 1;
let selectedIndex =
shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
}
#endif
};

View File

@ -2,7 +2,7 @@ diff --git a/browser/base/content/browser-kde.xul b/browser/base/content/browser
new file mode 100644
--- /dev/null
+++ b/browser/base/content/browser-kde.xul
@@ -0,0 +1,1126 @@
@@ -0,0 +1,1210 @@
+#filter substitution
+<?xml version="1.0"?>
+# -*- Mode: HTML -*-
@ -29,7 +29,7 @@ new file mode 100644
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ onload="BrowserStartup()" onunload="BrowserShutdown()" onclose="return WindowIsClosing();"
+ onload="gBrowserInit.onLoad()" onunload="gBrowserInit.onUnload()" onclose="return WindowIsClosing();"
+ title="&mainWindow.title;@PRE_RELEASE_SUFFIX@"
+ title_normal="&mainWindow.title;@PRE_RELEASE_SUFFIX@"
+#ifdef XP_MACOSX
@ -142,6 +142,7 @@ new file mode 100644
+ footertype="promobox"
+ orient="vertical"
+ ignorekeys="true"
+ consumeoutsideclicks="true"
+ hidden="true"
+ onpopupshown="StarUI.panelShown(event);"
+ aria-labelledby="editBookmarkPanelTitle">
@ -186,6 +187,49 @@ new file mode 100644
+ </hbox>
+ </panel>
+
+ <panel id="editSharePopup"
+ type="arrow"
+ orient="vertical"
+ ignorekeys="true"
+ hidden="true"
+ onpopupshown="SocialShareButton.panelShown(event);"
+ consumeoutsideclicks="true"
+ level="top">
+ <hbox id="editSharePopupBottomButtons" pack="end">
+#ifdef XP_UNIX
+ <button id="editSharePopupUndoButton"
+ class="editSharePopupBottomButton"
+ label="&social.sharePopup.undo.label;"
+ accesskey="&social.sharePopup.undo.accesskey;"
+ command="Social:UnsharePage"/>
+ <button id="editSharePopupOkButton"
+ class="editSharePopupBottomButton"
+ default="true"
+ autofocus="autofocus"
+ label="&social.sharePopup.ok.label;"
+ accesskey="&social.sharePopup.ok.accesskey;"
+ oncommand="SocialShareButton.dismissSharePopup();"/>
+#else
+ <button id="editSharePopupOkButton"
+ class="editSharePopupBottomButton"
+ default="true"
+ autofocus="autofocus"
+ label="&social.sharePopup.ok.label;"
+ accesskey="&social.sharePopup.ok.accesskey;"
+ oncommand="SocialShareButton.dismissSharePopup();"/>
+ <button id="editSharePopupUndoButton"
+ class="editSharePopupBottomButton"
+ label="&social.sharePopup.undo.label;"
+ accesskey="&social.sharePopup.undo.accesskey;"
+ command="Social:UnsharePage"/>
+#endif
+ </hbox>
+ </panel>
+
+ <panel id="social-notification-panel" type="arrow" hidden="true" noautofocus="true">
+ <browser id="social-notification-browser" type="content" flex="1"/>
+ </panel>
+
+ <menupopup id="inspector-node-popup">
+ <menuitem id="inspectorHTMLCopyInner"
+ label="&inspectorHTMLCopyInner.label;"
@ -264,6 +308,7 @@ new file mode 100644
+ type="arrow"
+ hidden="true"
+ noautofocus="true"
+ consumeoutsideclicks="true"
+ onpopupshown="gIdentityHandler.onPopupShown(event);"
+ level="top">
+ <hbox id="identity-popup-container" align="top">
@ -349,11 +394,8 @@ new file mode 100644
+ <tooltip id="bhTooltip"/>
+
+ <panel id="customizeToolbarSheetPopup"
+ noautohide="true">
+ <iframe id="customizeToolbarSheetIFrame"
+ style="&dialog.dimensions;"
+ hidden="true"/>
+ </panel>
+ noautohide="true"
+ sheetstyle="&dialog.dimensions;"/>
+
+ <tooltip id="tabbrowser-tab-tooltip" onpopupshowing="gBrowser.createTooltip(event);"/>
+
@ -492,19 +534,16 @@ new file mode 100644
+ We only add the identity-box button to the tab order when the location bar
+ has focus, otherwise pressing F6 focuses it instead of the location bar -->
+ <box id="identity-box" role="button"
+ align="center"
+ onclick="gIdentityHandler.handleIdentityButtonEvent(event);"
+ onkeypress="gIdentityHandler.handleIdentityButtonEvent(event);"
+ ondragstart="gIdentityHandler.onDragStart(event);">
+ <hbox id="identity-box-inner" align="center">
+ <hbox id="page-proxy-stack"
+ onclick="PageProxyClickHandler(event);">
+ <image id="page-proxy-favicon"
+ pageproxystate="invalid"/>
+ </hbox>
+ <hbox id="identity-icon-labels">
+ <label id="identity-icon-label" class="plain" flex="1"/>
+ <label id="identity-icon-country-label" class="plain"/>
+ </hbox>
+ <image id="page-proxy-favicon"
+ onclick="PageProxyClickHandler(event);"
+ pageproxystate="invalid"/>
+ <hbox id="identity-icon-labels">
+ <label id="identity-icon-label" class="plain" flex="1"/>
+ <label id="identity-icon-country-label" class="plain"/>
+ </hbox>
+ </box>
+ <box id="urlbar-display-box" align="center">
@ -517,6 +556,12 @@ new file mode 100644
+ tooltiptext="&pageReportIcon.tooltip;"
+ onclick="gPopupBlockerObserver.onReportButtonClick(event);"/>
+
+ <label id="share-button-status" collapsed="true" role="status"/>
+ <image id="share-button"
+ class="urlbar-icon"
+ hidden="true"
+ onclick="SocialShareButton.onClick(event);"/>
+
+ <image id="star-button"
+ class="urlbar-icon"
+ onclick="PlacesStarButton.onClick(event);"/>
@ -568,6 +613,45 @@ new file mode 100644
+ onclick="BrowserGoHome(event);"
+ aboutHomeOverrideTooltip="&abouthome.pageTitle;"/>
+
+ <toolbaritem id="social-toolbar-button"
+ class="toolbarbutton-1 chromeclass-toolbar-additional"
+ removable="false"
+ title="&socialToolbar.title;"
+ hidden="true">
+ <hbox id="social-toolbar-button-box" class="social-statusarea-container">
+ <button id="social-provider-image" type="menu">
+ <menupopup id="social-statusarea-popup">
+ <hbox id="social-statusarea-user" pack="left" align="center">
+ <image id="social-statusarea-user-portrait"/>
+ <vbox>
+ <label id="social-statusarea-notloggedin"
+ value="&social.notLoggedIn.label;"/>
+ <button id="social-statusarea-username"
+ oncommand="SocialUI.showProfile(); document.getElementById('social-statusarea-popup').hidePopup();"/>
+ </vbox>
+ </hbox>
+ </menupopup>
+ </button>
+ <hbox id="social-status-iconbox" flex="1">
+ <box class="social-notification-icon-container" collapsed="true"
+ onclick="SocialToolbar.showAmbientPopup(this);">
+ <image class="social-notification-icon-image"/>
+ <box class="social-notification-icon-counter" collapsed="true"/>
+ </box>
+ <box class="social-notification-icon-container" collapsed="true"
+ onclick="SocialToolbar.showAmbientPopup(this);">
+ <image class="social-notification-icon-image"/>
+ <box class="social-notification-icon-counter" collapsed="true"/>
+ </box>
+ <box class="social-notification-icon-container" collapsed="true"
+ onclick="SocialToolbar.showAmbientPopup(this);">
+ <image class="social-notification-icon-image"/>
+ <box class="social-notification-icon-counter" collapsed="true"/>
+ </box>
+ </hbox>
+ </hbox>
+ </toolbaritem>
+
+ <toolbaritem id="bookmarks-menu-button-container"
+ class="chromeclass-toolbar-additional"
+ removable="true"
@ -1047,21 +1131,21 @@ new file mode 100644
+ </stack>
+ <toolbarbutton id="developer-toolbar-webconsole"
+ label="&webConsoleButton.label;"
+ class="devtools-toolbarbutton"
+ class="developer-toolbar-button"
+ command="Tools:WebConsole"/>
+ <toolbarbutton id="developer-toolbar-inspector"
+ label="&inspectorButton.label;"
+ class="devtools-toolbarbutton"
+ class="developer-toolbar-button"
+ hidden="true"
+ command="Tools:Inspect"/>
+ <toolbarbutton id="developer-toolbar-responsiveui"
+ label="&responsiveDesignTool.label;"
+ class="devtools-toolbarbutton"
+ <toolbarbutton id="developer-toolbar-styleeditor"
+ label="&styleeditor.label;"
+ class="developer-toolbar-button"
+ hidden="true"
+ command="Tools:ResponsiveUI"/>
+ command="Tools:StyleEditor"/>
+ <toolbarbutton id="developer-toolbar-debugger"
+ label="&scriptsButton.label;"
+ class="devtools-toolbarbutton"
+ label="&debuggerMenu.label2;"
+ class="developer-toolbar-button"
+ hidden="true"
+ command="Tools:Debugger"/>
+#ifndef XP_MACOSX
@ -1167,7 +1251,7 @@ diff --git a/browser/components/build/nsModule.cpp b/browser/components/build/ns
+#include "nsUnixShellService.h"
#endif
#if defined(XP_WIN) && !defined(__MINGW32__)
#if defined(XP_WIN)
#include "nsIEHistoryEnumerator.h"
#endif
@ -1186,7 +1270,7 @@ diff --git a/browser/components/build/nsModule.cpp b/browser/components/build/ns
-NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGNOMEShellService, Init)
#endif
#if defined(XP_WIN) && !defined(__MINGW32__)
#if defined(XP_WIN)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEHistoryEnumerator)
#endif
@ -1206,7 +1290,7 @@ diff --git a/browser/components/build/nsModule.cpp b/browser/components/build/ns
#endif
{ &kNS_FEEDSNIFFER_CID, false, NULL, nsFeedSnifferConstructor },
{ &kNS_BROWSER_ABOUT_REDIRECTOR_CID, false, NULL, AboutRedirector::Create },
#if defined(XP_WIN) && !defined(__MINGW32__)
#if defined(XP_WIN)
{ &kNS_WINIEHISTORYENUMERATOR_CID, false, NULL, nsIEHistoryEnumeratorConstructor },
#elif defined(XP_MACOSX)
{ &kNS_SHELLSERVICE_CID, false, NULL, nsMacShellServiceConstructor },
@ -1231,13 +1315,13 @@ diff --git a/browser/components/preferences/advanced.js b/browser/components/pre
+
#ifdef HAVE_SHELL_SERVICE
this.updateSetDefaultBrowser();
#endif
#ifdef MOZ_UPDATER
this.updateReadPrefs();
#endif
this.updateOfflineApps();
#ifdef MOZ_CRASHREPORTER
@@ -715,12 +721,23 @@ var gAdvancedPane = {
#ifdef XP_WIN
let shellSvc = getShellService();
// In Windows 8 we launch the control panel since it's the only
// way to get all file type association prefs. So we don't know
// when the user will select the default. We refresh here periodically
// in case the default changes.
@@ -737,14 +743,25 @@ var gAdvancedPane = {
* Set browser as the operating system default browser.
*/
setDefaultBrowser: function()
@ -1257,7 +1341,9 @@ diff --git a/browser/components/preferences/advanced.js b/browser/components/pre
+ "BrowserApplication", "MozillaFirefox"];
+ process.run(false, args, args.length);
+ }
document.getElementById("setDefaultPane").selectedIndex = 1;
let selectedIndex =
shellSvc.isDefaultBrowser(false, true) ? 1 : 0;
document.getElementById("setDefaultPane").selectedIndex = selectedIndex;
}
#endif
};
@ -1288,7 +1374,7 @@ diff --git a/browser/components/shell/src/nsKDEShellService.cpp b/browser/compon
new file mode 100644
--- /dev/null
+++ b/browser/components/shell/src/nsKDEShellService.cpp
@@ -0,0 +1,264 @@
@@ -0,0 +1,265 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
@ -1331,7 +1417,7 @@ new file mode 100644
+#include "nsCOMPtr.h"
+#include "nsIPrefService.h"
+#include "nsIProcess.h"
+#include "nsILocalFile.h"
+#include "nsIFile.h"
+#include "nsServiceManagerUtils.h"
+#include "nsComponentManagerUtils.h"
+#include "nsIMutableArray.h"
@ -1350,6 +1436,7 @@ new file mode 100644
+
+NS_IMETHODIMP
+nsKDEShellService::IsDefaultBrowser(bool aStartupCheck,
+ bool aForAllTypes,
+ bool* aIsDefaultBrowser)
+ {
+ *aIsDefaultBrowser = false;
@ -1478,7 +1565,7 @@ new file mode 100644
+ }
+
+NS_IMETHODIMP
+nsKDEShellService::OpenApplicationWithURI(nsILocalFile* aApplication, const nsACString& aURI)
+nsKDEShellService::OpenApplicationWithURI(nsIFile* aApplication, const nsACString& aURI)
+ {
+ nsCOMPtr<nsIMutableArray> command = do_CreateInstance( NS_ARRAY_CONTRACTID );
+ if (!command)
@ -1503,7 +1590,7 @@ new file mode 100644
+ }
+
+NS_IMETHODIMP
+nsKDEShellService::GetDefaultFeedReader(nsILocalFile** _retval)
+nsKDEShellService::GetDefaultFeedReader(nsIFile** _retval)
+ {
+ *_retval = nsnull;
+
@ -1537,7 +1624,7 @@ new file mode 100644
+ return NS_ERROR_FAILURE;
+
+ nsresult rv;
+ nsCOMPtr<nsILocalFile> defaultReader =
+ nsCOMPtr<nsIFile> defaultReader =
+ do_CreateInstance("@mozilla.org/file/local;1", &rv);
+ NS_ENSURE_SUCCESS(rv, rv);
+
@ -1727,8 +1814,8 @@ new file mode 100644
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
@@ -520,18 +520,20 @@
@BINPATH@/@PREF_DIR@/services-aitc.js
@@ -558,18 +558,20 @@
@BINPATH@/@PREF_DIR@/services-sync.js
#endif
@BINPATH@/greprefs.js
@BINPATH@/defaults/autoconfig/platform.js

View File

@ -1,12 +1,12 @@
# HG changeset patch
# User Wolfgang Rosenauer <wr@rosenauer.org>
# Parent 2f0c475e3ea9ba2309ab4ff7debb8bd0d6850a14
# Parent 5c446cfb862fdb6685634dbeea9bff31fa19fc3e
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
@@ -332,16 +332,20 @@ pref("browser.download.useToolkitUI", tr
@@ -327,16 +327,20 @@ pref("browser.download.useToolkitUI", fa
pref("browser.download.panel.removeFinishedDownloads", false);
// search engines URL
@ -112,4 +112,4 @@ diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn
locale/pdfviewer/viewer.properties (%pdfviewer/viewer.properties)
locale/pdfviewer/chrome.properties (%pdfviewer/chrome.properties)
#ifdef MOZ_WEBAPP_RUNTIME
% locale webapprt @AB_CD@ %locale/webapprt/
../webapprt/chrome/@AB_CD@.jar:

1
firefox.js Normal file
View File

@ -0,0 +1 @@
pref("browser.preferences.instantApply", true);

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0c758deb9816f80476bc5660ec3c833ef1414c37300d864a6093629a0394030d
size 49787598

3
l10n-16.0.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a94a1191c731677af03b779b9190162ea601386f63d75f70535289b4a689d491
size 52087229

View File

@ -1,46 +0,0 @@
# HG changeset patch
# User Wolfgang Rosenauer <wr@rosenauer.org>
# Parent 07bb4ecfd6d6cc16360e7a32ee10b885d523f20d
Bug 762780 - crashreporter restart command should support MOZ_APP_LAUNCHER
diff --git a/toolkit/crashreporter/nsExceptionHandler.cpp b/toolkit/crashreporter/nsExceptionHandler.cpp
--- a/toolkit/crashreporter/nsExceptionHandler.cpp
+++ b/toolkit/crashreporter/nsExceptionHandler.cpp
@@ -1360,32 +1360,25 @@ nsresult
SetRestartArgs(int argc, char** argv)
{
if (!gExceptionHandler)
return NS_OK;
int i;
nsCAutoString envVar;
char *env;
+ char *argv1 = getenv("MOZ_APP_LAUNCHER");
for (i = 0; i < argc; i++) {
envVar = "MOZ_CRASHREPORTER_RESTART_ARG_";
envVar.AppendInt(i);
envVar += "=";
-#if defined(XP_UNIX) && !defined(XP_MACOSX)
- // we'd like to run the script around the binary
- // instead of the binary itself, so remove the -bin
- // if it exists on the first argument
- int arg_len = 0;
- if (i == 0 &&
- (arg_len = strlen(argv[i])) > 4 &&
- strcmp(argv[i] + arg_len - 4, "-bin") == 0) {
- envVar.Append(argv[i], arg_len - 4);
- } else
-#endif
- {
+ if (argv1 && i == 0) {
+ // Is there a request to suppress default binary launcher?
+ envVar += argv1;
+ } else {
envVar += argv[i];
}
// PR_SetEnv() wants the string to be available for the lifetime
// of the app, so dup it here
env = ToNewCString(envVar);
if (!env)
return NS_ERROR_OUT_OF_MEMORY;

View File

@ -0,0 +1,566 @@
From: Alessandro Decina <alessandro.d@gmail.com>
Bug 760140 - Query the GstRegistry for the required demuxers/decoders from canPlayType
diff --git a/content/base/src/nsContentUtils.cpp b/content/base/src/nsContentUtils.cpp
--- a/content/base/src/nsContentUtils.cpp
+++ b/content/base/src/nsContentUtils.cpp
@@ -137,16 +137,19 @@ static NS_DEFINE_CID(kXTFServiceCID, NS_
#include "xpcprivate.h" // nsXPConnect
#include "nsScriptSecurityManager.h"
#include "nsIChannelPolicy.h"
#include "nsChannelPolicy.h"
#include "nsIContentSecurityPolicy.h"
#include "nsContentDLF.h"
#ifdef MOZ_MEDIA
#include "nsHTMLMediaElement.h"
+#ifdef MOZ_GSTREAMER
+#include "nsGStreamerDecoder.h"
+#endif
#endif
#include "nsDOMTouchEvent.h"
#include "nsIContentViewer.h"
#include "nsIObjectLoadingContent.h"
#include "nsCCUncollectableMarker.h"
#include "mozilla/Base64.h"
#include "mozilla/Preferences.h"
#include "nsDOMMutationObserver.h"
@@ -6511,26 +6514,23 @@ nsContentUtils::FindInternalContentViewe
}
return docFactory.forget();
}
}
}
#endif
#ifdef MOZ_GSTREAMER
- if (nsHTMLMediaElement::IsH264Enabled()) {
- for (unsigned int i = 0; i < ArrayLength(nsHTMLMediaElement::gH264Types); ++i) {
- const char* type = nsHTMLMediaElement::gH264Types[i];
- if (!strcmp(aType, type)) {
- docFactory = do_GetService("@mozilla.org/content/document-loader-factory;1");
- if (docFactory && aLoaderType) {
- *aLoaderType = TYPE_CONTENT;
- }
- return docFactory.forget();
+ if (nsHTMLMediaElement::IsGStreamerEnabled()) {
+ if (nsGStreamerDecoder::CanHandleMediaType(aType, NULL)) {
+ docFactory = do_GetService("@mozilla.org/content/document-loader-factory;1");
+ if (docFactory && aLoaderType) {
+ *aLoaderType = TYPE_CONTENT;
}
+ return docFactory.forget();
}
}
#endif
#endif // MOZ_MEDIA
return NULL;
}
diff --git a/content/html/content/public/nsHTMLMediaElement.h b/content/html/content/public/nsHTMLMediaElement.h
--- a/content/html/content/public/nsHTMLMediaElement.h
+++ b/content/html/content/public/nsHTMLMediaElement.h
@@ -250,17 +250,19 @@ public:
void UpdateMediaSize(nsIntSize size);
// Returns the CanPlayStatus indicating if we can handle this
// MIME type. The MIME type should not include the codecs parameter.
// If it returns anything other than CANPLAY_NO then it also
// returns a null-terminated list of supported codecs
// in *aSupportedCodecs. This list should not be freed, it is static data.
static CanPlayStatus CanHandleMediaType(const char* aMIMEType,
- char const *const ** aSupportedCodecs);
+ const char* aCodecs,
+ char const *const ** aSupportedCodecs,
+ bool* aCheckSupportedCodecs);
// Returns the CanPlayStatus indicating if we can handle the
// full MIME type including the optional codecs parameter.
static CanPlayStatus GetCanPlay(const nsAString& aType);
// Returns true if we should handle this MIME type when it appears
// as an <object> or as a toplevel page. If, in practice, our support
// for the type is more limited than appears in the wild, we should return
@@ -290,20 +292,17 @@ public:
#ifdef MOZ_WEBM
static bool IsWebMEnabled();
static bool IsWebMType(const nsACString& aType);
static const char gWebMTypes[2][17];
static char const *const gWebMCodecs[4];
#endif
#ifdef MOZ_GSTREAMER
- static bool IsH264Enabled();
- static bool IsH264Type(const nsACString& aType);
- static const char gH264Types[3][17];
- static char const *const gH264Codecs[7];
+ static bool IsGStreamerEnabled();
#endif
#ifdef MOZ_MEDIA_PLUGINS
static bool IsMediaPluginsEnabled();
static bool IsMediaPluginsType(const nsACString& aType);
#endif
/**
diff --git a/content/html/content/src/nsHTMLMediaElement.cpp b/content/html/content/src/nsHTMLMediaElement.cpp
--- a/content/html/content/src/nsHTMLMediaElement.cpp
+++ b/content/html/content/src/nsHTMLMediaElement.cpp
@@ -2070,68 +2070,40 @@ nsHTMLMediaElement::IsWebMType(const nsA
}
}
return false;
}
#endif
#ifdef MOZ_GSTREAMER
-const char nsHTMLMediaElement::gH264Types[3][17] = {
- "video/mp4",
- "video/3gpp",
- "video/quicktime",
-};
-
-char const *const nsHTMLMediaElement::gH264Codecs[7] = {
- "avc1.42E01E",
- "avc1.42001E",
- "avc1.58A01E",
- "avc1.4D401E",
- "avc1.64001E",
- "mp4a.40.2",
- nsnull
-};
-
bool
-nsHTMLMediaElement::IsH264Enabled()
+nsHTMLMediaElement::IsGStreamerEnabled()
{
- return Preferences::GetBool("media.h264.enabled");
-}
-
-bool
-nsHTMLMediaElement::IsH264Type(const nsACString& aType)
-{
- if (!IsH264Enabled()) {
- return false;
- }
-
- for (PRUint32 i = 0; i < ArrayLength(gH264Types); ++i) {
- if (aType.EqualsASCII(gH264Types[i])) {
- return true;
- }
- }
-
- return false;
+ return Preferences::GetBool("media.gstreamer.enabled");
}
#endif
#ifdef MOZ_MEDIA_PLUGINS
bool
nsHTMLMediaElement::IsMediaPluginsEnabled()
{
return Preferences::GetBool("media.plugins.enabled");
}
#endif
/* static */
nsHTMLMediaElement::CanPlayStatus
nsHTMLMediaElement::CanHandleMediaType(const char* aMIMEType,
- char const *const ** aCodecList)
+ const char *aCodecs,
+ char const *const ** aCodecList,
+ bool* aCheckCodecList)
{
+ if (aCheckCodecList)
+ *aCheckCodecList = true;
#ifdef MOZ_RAW
if (IsRawType(nsDependentCString(aMIMEType))) {
*aCodecList = gRawCodecs;
return CANPLAY_MAYBE;
}
#endif
#ifdef MOZ_OGG
if (IsOggType(nsDependentCString(aMIMEType))) {
@@ -2148,20 +2120,22 @@ nsHTMLMediaElement::CanHandleMediaType(c
#ifdef MOZ_WEBM
if (IsWebMType(nsDependentCString(aMIMEType))) {
*aCodecList = gWebMCodecs;
return CANPLAY_YES;
}
#endif
#ifdef MOZ_GSTREAMER
- if (IsH264Type(nsDependentCString(aMIMEType))) {
- *aCodecList = gH264Codecs;
- return CANPLAY_MAYBE;
- }
+ if (aCheckCodecList)
+ *aCheckCodecList = false;
+ if (aCodecList)
+ *aCodecList = NULL;
+ if (nsGStreamerDecoder::CanHandleMediaType(aMIMEType, aCodecs))
+ return CANPLAY_YES;
#endif
#ifdef MOZ_MEDIA_PLUGINS
if (GetMediaPluginHost()->FindDecoder(nsDependentCString(aMIMEType), aCodecList))
return CANPLAY_MAYBE;
#endif
return CANPLAY_NO;
}
@@ -2176,17 +2150,17 @@ bool nsHTMLMediaElement::ShouldHandleMed
if (IsOggType(nsDependentCString(aMIMEType)))
return true;
#endif
#ifdef MOZ_WEBM
if (IsWebMType(nsDependentCString(aMIMEType)))
return true;
#endif
#ifdef MOZ_GSTREAMER
- if (IsH264Type(nsDependentCString(aMIMEType)))
+ if (nsGStreamerDecoder::CanHandleMediaType(aMIMEType, NULL))
return true;
#endif
#ifdef MOZ_MEDIA_PLUGINS
if (GetMediaPluginHost()->FindDecoder(nsDependentCString(aMIMEType), NULL))
return true;
#endif
// We should not return true for Wave types, since there are some
// Wave codecs actually in use in the wild that we don't support, and
@@ -2212,26 +2186,31 @@ nsHTMLMediaElement::GetCanPlay(const nsA
{
nsContentTypeParser parser(aType);
nsAutoString mimeType;
nsresult rv = parser.GetType(mimeType);
if (NS_FAILED(rv))
return CANPLAY_NO;
NS_ConvertUTF16toUTF8 mimeTypeUTF8(mimeType);
+ nsAutoString codecs;
+ rv = parser.GetParameter("codecs", codecs);
+ NS_ConvertUTF16toUTF8 codecsUTF8(codecs);
char const *const * supportedCodecs;
+ bool checkSupportedCodecs = true;
CanPlayStatus status = CanHandleMediaType(mimeTypeUTF8.get(),
- &supportedCodecs);
+ codecsUTF8.get(),
+ &supportedCodecs,
+ &checkSupportedCodecs);
if (status == CANPLAY_NO)
return CANPLAY_NO;
- nsAutoString codecs;
- rv = parser.GetParameter("codecs", codecs);
- if (NS_FAILED(rv)) {
- // Parameter not found or whatever
+ if (codecs.IsEmpty() || !checkSupportedCodecs) {
+ /* no codecs to check for or they were already checked in CanHandleMediaType
+ * above */
return status;
}
CanPlayStatus result = CANPLAY_YES;
// See http://www.rfc-editor.org/rfc/rfc4281.txt for the description
// of the 'codecs' parameter
nsCharSeparatedTokenizer tokenizer(codecs, ',');
bool expectMoreTokens = false;
@@ -2309,17 +2288,19 @@ nsHTMLMediaElement::CreateDecoder(const
nsRefPtr<nsWebMDecoder> decoder = new nsWebMDecoder();
if (decoder->Init(this)) {
return decoder.forget();
}
}
#endif
#ifdef MOZ_GSTREAMER
- if (IsH264Type(aType)) {
+ const char *type;
+ NS_CStringGetData(aType, &type, NULL);
+ if (nsGStreamerDecoder::CanHandleMediaType(type, NULL)) {
nsRefPtr<nsGStreamerDecoder> decoder = new nsGStreamerDecoder();
if (decoder->Init(this)) {
return decoder.forget();
}
}
#endif
return nsnull;
}
diff --git a/content/media/gstreamer/Makefile.in b/content/media/gstreamer/Makefile.in
--- a/content/media/gstreamer/Makefile.in
+++ b/content/media/gstreamer/Makefile.in
@@ -16,16 +16,17 @@ LIBXUL_LIBRARY = 1
EXPORTS += \
nsGStreamerDecoder.h \
$(NULL)
CPPSRCS = \
nsGStreamerReader.cpp \
nsGStreamerDecoder.cpp \
+ nsGStreamerFormatHelper.cpp \
$(NULL)
FORCE_STATIC_LIB = 1
include $(topsrcdir)/config/rules.mk
CFLAGS += $(GSTREAMER_CFLAGS)
CXXFLAGS += $(GSTREAMER_CFLAGS)
diff --git a/content/media/gstreamer/nsGStreamerDecoder.cpp b/content/media/gstreamer/nsGStreamerDecoder.cpp
--- a/content/media/gstreamer/nsGStreamerDecoder.cpp
+++ b/content/media/gstreamer/nsGStreamerDecoder.cpp
@@ -2,13 +2,19 @@
/* vim:set ts=2 sw=2 sts=2 et cindent: */
/* 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 file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsBuiltinDecoderStateMachine.h"
#include "nsGStreamerReader.h"
#include "nsGStreamerDecoder.h"
+#include "nsGStreamerFormatHelper.h"
nsDecoderStateMachine* nsGStreamerDecoder::CreateStateMachine()
{
return new nsBuiltinDecoderStateMachine(this, new nsGStreamerReader(this));
}
+
+bool nsGStreamerDecoder::CanHandleMediaType(const char* aMIMEType,
+ const char* aCodecs) {
+ return nsGStreamerFormatHelper::Instance()->CanHandleMediaType(aMIMEType, aCodecs);
+}
diff --git a/content/media/gstreamer/nsGStreamerDecoder.h b/content/media/gstreamer/nsGStreamerDecoder.h
--- a/content/media/gstreamer/nsGStreamerDecoder.h
+++ b/content/media/gstreamer/nsGStreamerDecoder.h
@@ -9,11 +9,12 @@
#include "nsBuiltinDecoder.h"
class nsGStreamerDecoder : public nsBuiltinDecoder
{
public:
virtual nsMediaDecoder* Clone() { return new nsGStreamerDecoder(); }
virtual nsDecoderStateMachine* CreateStateMachine();
+ static bool CanHandleMediaType(const char* aMIMEType, const char* aCodecs);
};
#endif
diff --git a/content/media/gstreamer/nsGStreamerFormatHelper.cpp b/content/media/gstreamer/nsGStreamerFormatHelper.cpp
new file mode 100644
--- /dev/null
+++ b/content/media/gstreamer/nsGStreamerFormatHelper.cpp
@@ -0,0 +1,149 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim:set ts=2 sw=2 sts=2 et cindent: */
+/* 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 file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsGStreamerFormatHelper.h"
+#include "nsCharSeparatedTokenizer.h"
+#include "nsXPCOMStrings.h"
+
+#define ENTRY_FORMAT(entry) entry[0]
+#define ENTRY_CAPS(entry) entry[1]
+
+nsGStreamerFormatHelper* nsGStreamerFormatHelper::gInstance = NULL;
+
+nsGStreamerFormatHelper *nsGStreamerFormatHelper::Instance() {
+ if (!gInstance) {
+ gst_init(NULL, NULL);
+ gInstance = new nsGStreamerFormatHelper();
+ }
+
+ return gInstance;
+}
+
+nsGStreamerFormatHelper::nsGStreamerFormatHelper()
+ : mFactories(NULL),
+ mCookie(0)
+{
+ const char *containers[3][2] = {
+ {"video/mp4", "video/quicktime"},
+ {"audio/mp4", "audio/mpeg, mpegversion=(int)4"},
+ {"audio/mpeg", "audio/mpeg, mpegversion=(int)1"},
+ };
+ memcpy(mContainers, containers, sizeof(containers));
+
+ const char *codecs[7][2] = {
+ {"avc1.42E01E", "video/x-h264"},
+ {"avc1.42001E", "video/x-h264"},
+ {"avc1.58A01E", "video/x-h264"},
+ {"avc1.4D401E", "video/x-h264"},
+ {"avc1.64001E", "video/x-h264"},
+ {"mp4a.40.2", "audio/mpeg, mpegversion=(int)4"},
+ {"mp3", "audio/mpeg, mpegversion=(int)1"},
+ };
+ memcpy(mCodecs, codecs, sizeof(codecs));
+}
+
+nsGStreamerFormatHelper::~nsGStreamerFormatHelper() {
+ if (mFactories)
+ g_list_free(mFactories);
+}
+
+bool nsGStreamerFormatHelper::CanHandleMediaType(const char* aMIMEType,
+ const char *aCodecs) {
+ GstCaps *caps = ConvertFormatsToCaps(aMIMEType, aCodecs);
+ if (!caps) {
+ return false;
+ }
+
+ bool ret = HaveElementsToProcessCaps(caps);
+ gst_caps_unref(caps);
+
+ return ret;
+}
+
+GstCaps *nsGStreamerFormatHelper::ConvertFormatsToCaps(const char *aMIMEType,
+ const char *aCodecs) {
+ unsigned int i;
+
+ /* convert aMIMEType to gst container caps */
+ const char *capsString = NULL;
+ for (i = 0; i < G_N_ELEMENTS(mContainers); i++) {
+ if (!strcmp(ENTRY_FORMAT(mContainers[i]), aMIMEType)) {
+ capsString = ENTRY_CAPS(mContainers[i]);
+ break;
+ }
+ }
+
+ if (!capsString) {
+ /* we couldn't find any matching caps */
+ return NULL;
+ }
+
+ GstCaps *caps = gst_caps_from_string(capsString);
+ /* container only */
+ if (!aCodecs) {
+ return caps;
+ }
+
+ nsDependentCSubstring codecs(aCodecs, strlen(aCodecs));
+ nsCCharSeparatedTokenizer tokenizer(codecs, ',');
+ while (tokenizer.hasMoreTokens()) {
+ const nsCSubstring& codec = tokenizer.nextToken();
+ capsString = NULL;
+
+ for (i = 0; i < G_N_ELEMENTS(mCodecs); i++) {
+ if (codec.Equals(ENTRY_FORMAT(mCodecs[i]))) {
+ capsString = ENTRY_CAPS(mCodecs[i]);
+ break;
+ }
+ }
+
+ if (!capsString) {
+ gst_caps_unref(caps);
+ return NULL;
+ }
+
+ GstCaps *tmp = gst_caps_from_string(capsString);
+ /* appends and frees tmp */
+ gst_caps_append(caps, tmp);
+ }
+
+ return caps;
+}
+
+bool nsGStreamerFormatHelper::HaveElementsToProcessCaps(GstCaps *aCaps) {
+
+ GList *factories = GetFactories();
+
+ GList *list;
+ /* here aCaps contains [containerCaps, [codecCaps1, [codecCaps2, ...]]] so process
+ * caps structures individually as we want one element for _each_
+ * structure */
+ for (unsigned int i = 0; i < gst_caps_get_size(aCaps); i++) {
+ GstStructure *s = gst_caps_get_structure(aCaps, i);
+ GstCaps *caps = gst_caps_new_full(gst_structure_copy(s), NULL);
+ list = gst_element_factory_list_filter (factories, caps, GST_PAD_SINK, FALSE);
+ gst_caps_unref(caps);
+ if (!list) {
+ return false;
+ }
+ g_list_free(list);
+ }
+
+ return true;
+}
+
+GList * nsGStreamerFormatHelper::GetFactories() {
+ uint32_t cookie = gst_default_registry_get_feature_list_cookie ();
+ if (cookie != mCookie) {
+ g_list_free(mFactories);
+ mFactories = gst_element_factory_list_get_elements
+ (GST_ELEMENT_FACTORY_TYPE_DEMUXER | GST_ELEMENT_FACTORY_TYPE_DECODER,
+ GST_RANK_MARGINAL);
+ mCookie = cookie;
+ }
+
+ return mFactories;
+}
diff --git a/content/media/gstreamer/nsGStreamerFormatHelper.h b/content/media/gstreamer/nsGStreamerFormatHelper.h
new file mode 100644
--- /dev/null
+++ b/content/media/gstreamer/nsGStreamerFormatHelper.h
@@ -0,0 +1,37 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim:set ts=2 sw=2 sts=2 et cindent: */
+/* 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 file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#if !defined(nsGStreamerFormatHelper_h_)
+#define nsGStreamerFormatHelper_h_
+
+#include <gst/gst.h>
+#include <mozilla/Types.h>
+
+class nsGStreamerFormatHelper {
+ public:
+ static nsGStreamerFormatHelper *Instance();
+ ~nsGStreamerFormatHelper();
+
+ bool CanHandleMediaType(const char *aMIMEType,
+ const char *aCodecs);
+
+ private:
+ nsGStreamerFormatHelper();
+ GstCaps *ConvertFormatsToCaps(const char *aMIMEType,
+ const char *aCodecs);
+ char * const *CodecListFromCaps(GstCaps *aCaps);
+ bool HaveElementsToProcessCaps(GstCaps *aCaps);
+ GList *GetFactories();
+
+ static nsGStreamerFormatHelper *gInstance;
+
+ const char *mContainers[3][2];
+ const char *mCodecs[7][2];
+ GList *mFactories;
+ uint32_t mCookie;
+};
+
+#endif
diff --git a/modules/libpref/src/init/all.js b/modules/libpref/src/init/all.js
--- a/modules/libpref/src/init/all.js
+++ b/modules/libpref/src/init/all.js
@@ -159,17 +159,17 @@ pref("media.opus.enabled", true);
#endif
#ifdef MOZ_WAVE
pref("media.wave.enabled", true);
#endif
#ifdef MOZ_WEBM
pref("media.webm.enabled", true);
#endif
#ifdef MOZ_GSTREAMER
-pref("media.h264.enabled", true);
+pref("media.gstreamer.enabled", true);
#endif
// Whether to autostart a media element with an |autoplay| attribute
pref("media.autoplay.enabled", true);
// 0 = Off, 1 = Full, 2 = Tagged Images Only.
// See eCMSMode in gfx/thebes/gfxPlatform.h

View File

@ -1,14 +1,12 @@
# HG changeset patch
# Parent a9a49c20c491011f981b6c110aadfa6a01a1431e
# Parent e4b87e710b1a5f0bb7db058911bc163b4bf30227
# User Wolfgang Rosenauer <wr@rosenauer.org>
Bug 761030 - Crash with HTML 5 video with gstreamer enabled (TM: 16)
No Bug - use GStreamer _only_ for MP4 (not WebM/OGG)
diff --git a/content/html/content/src/nsHTMLMediaElement.cpp b/content/html/content/src/nsHTMLMediaElement.cpp
--- a/content/html/content/src/nsHTMLMediaElement.cpp
+++ b/content/html/content/src/nsHTMLMediaElement.cpp
@@ -2278,21 +2278,17 @@ nsHTMLMediaElement::CreateDecoder(const
@@ -2277,21 +2277,17 @@ nsHTMLMediaElement::CreateDecoder(const
nsRefPtr<nsRawDecoder> decoder = new nsRawDecoder();
if (decoder->Init(this)) {
return decoder.forget();
@ -30,7 +28,7 @@ diff --git a/content/html/content/src/nsHTMLMediaElement.cpp b/content/html/cont
#ifdef MOZ_WAVE
if (IsWaveType(aType)) {
nsRefPtr<nsWaveDecoder> decoder = new nsWaveDecoder();
@@ -2306,21 +2302,17 @@ nsHTMLMediaElement::CreateDecoder(const
@@ -2305,21 +2301,17 @@ nsHTMLMediaElement::CreateDecoder(const
nsRefPtr<nsMediaPluginDecoder> decoder = new nsMediaPluginDecoder(aType);
if (decoder->Init(this)) {
return decoder.forget();
@ -52,25 +50,3 @@ diff --git a/content/html/content/src/nsHTMLMediaElement.cpp b/content/html/cont
#ifdef MOZ_GSTREAMER
if (IsH264Type(aType)) {
diff --git a/content/media/gstreamer/nsGStreamerReader.cpp b/content/media/gstreamer/nsGStreamerReader.cpp
--- a/content/media/gstreamer/nsGStreamerReader.cpp
+++ b/content/media/gstreamer/nsGStreamerReader.cpp
@@ -447,16 +447,18 @@ bool nsGStreamerReader::DecodeVideoFrame
for(int i = 0; i < 3; i++) {
b.mPlanes[i].mData = data + gst_video_format_get_component_offset(format, i,
width, height);
b.mPlanes[i].mStride = gst_video_format_get_row_stride(format, i, width);
b.mPlanes[i].mHeight = gst_video_format_get_component_height(format,
i, height);
b.mPlanes[i].mWidth = gst_video_format_get_component_width(format,
i, width);
+ b.mPlanes[i].mOffset = 0;
+ b.mPlanes[i].mSkip = 0;
}
bool isKeyframe = !GST_BUFFER_FLAG_IS_SET(buffer,
GST_BUFFER_FLAG_DELTA_UNIT);
/* XXX ? */
PRInt64 offset = 0;
VideoData *video = VideoData::Create(mInfo,
mDecoder->GetImageContainer(),

View File

@ -180,7 +180,7 @@ diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/compon
#include "AndroidBridge.h"
#endif
@@ -2236,16 +2240,25 @@ nsDownload::SetState(DownloadState aStat
@@ -2233,16 +2237,25 @@ nsDownload::SetState(DownloadState aStat
nsCOMPtr<nsIPrefBranch> pref(do_GetService(NS_PREFSERVICE_CONTRACTID));
// Master pref to control this function.
@ -206,7 +206,7 @@ diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/compon
PRInt64 goat = PR_Now() - mStartTime;
showTaskbarAlert = goat > alertIntervalUSec;
@@ -2269,19 +2282,20 @@ nsDownload::SetState(DownloadState aStat
@@ -2266,19 +2279,20 @@ nsDownload::SetState(DownloadState aStat
// If downloads are automatically removed per the user's
// retention policy, there's no reason to make the text clickable
// because if it is, they'll click open the download manager and
@ -232,39 +232,39 @@ diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn
--- a/toolkit/content/jar.mn
+++ b/toolkit/content/jar.mn
@@ -45,29 +45,33 @@ toolkit.jar:
*+ content/global/viewZoomOverlay.js (viewZoomOverlay.js)
content/global/viewZoomOverlay.js (viewZoomOverlay.js)
*+ content/global/bindings/autocomplete.xml (widgets/autocomplete.xml)
*+ content/global/bindings/browser.xml (widgets/browser.xml)
*+ content/global/bindings/button.xml (widgets/button.xml)
*+ content/global/bindings/checkbox.xml (widgets/checkbox.xml)
*+ content/global/bindings/colorpicker.xml (widgets/colorpicker.xml)
*+ content/global/bindings/datetimepicker.xml (widgets/datetimepicker.xml)
content/global/bindings/browser.xml (widgets/browser.xml)
content/global/bindings/button.xml (widgets/button.xml)
content/global/bindings/checkbox.xml (widgets/checkbox.xml)
content/global/bindings/colorpicker.xml (widgets/colorpicker.xml)
content/global/bindings/datetimepicker.xml (widgets/datetimepicker.xml)
*+ content/global/bindings/dialog.xml (widgets/dialog.xml)
+*+ content/global/bindings/dialog-kde.xml (widgets/dialog-kde.xml)
+% override chrome://global/content/bindings/dialog.xml chrome://global/content/bindings/dialog-kde.xml desktop=kde
*+ content/global/bindings/editor.xml (widgets/editor.xml)
* content/global/bindings/expander.xml (widgets/expander.xml)
content/global/bindings/editor.xml (widgets/editor.xml)
content/global/bindings/expander.xml (widgets/expander.xml)
* content/global/bindings/filefield.xml (widgets/filefield.xml)
*+ content/global/bindings/findbar.xml (widgets/findbar.xml)
*+ content/global/bindings/general.xml (widgets/general.xml)
*+ content/global/bindings/groupbox.xml (widgets/groupbox.xml)
content/global/bindings/general.xml (widgets/general.xml)
content/global/bindings/groupbox.xml (widgets/groupbox.xml)
*+ content/global/bindings/listbox.xml (widgets/listbox.xml)
*+ content/global/bindings/menu.xml (widgets/menu.xml)
*+ content/global/bindings/menulist.xml (widgets/menulist.xml)
*+ content/global/bindings/notification.xml (widgets/notification.xml)
*+ content/global/bindings/numberbox.xml (widgets/numberbox.xml)
*+ content/global/bindings/popup.xml (widgets/popup.xml)
content/global/bindings/menu.xml (widgets/menu.xml)
content/global/bindings/menulist.xml (widgets/menulist.xml)
content/global/bindings/notification.xml (widgets/notification.xml)
content/global/bindings/numberbox.xml (widgets/numberbox.xml)
content/global/bindings/popup.xml (widgets/popup.xml)
*+ content/global/bindings/preferences.xml (widgets/preferences.xml)
+*+ content/global/bindings/preferences-kde.xml (widgets/preferences-kde.xml)
+% override chrome://global/content/bindings/preferences.xml chrome://global/content/bindings/preferences-kde.xml desktop=kde
*+ content/global/bindings/progressmeter.xml (widgets/progressmeter.xml)
*+ content/global/bindings/radio.xml (widgets/radio.xml)
*+ content/global/bindings/resizer.xml (widgets/resizer.xml)
*+ content/global/bindings/richlistbox.xml (widgets/richlistbox.xml)
*+ content/global/bindings/scale.xml (widgets/scale.xml)
*+ content/global/bindings/scrollbar.xml (widgets/scrollbar.xml)
*+ content/global/bindings/scrollbox.xml (widgets/scrollbox.xml)
*+ content/global/bindings/splitter.xml (widgets/splitter.xml)
content/global/bindings/progressmeter.xml (widgets/progressmeter.xml)
content/global/bindings/radio.xml (widgets/radio.xml)
content/global/bindings/resizer.xml (widgets/resizer.xml)
content/global/bindings/richlistbox.xml (widgets/richlistbox.xml)
content/global/bindings/scale.xml (widgets/scale.xml)
content/global/bindings/scrollbar.xml (widgets/scrollbar.xml)
content/global/bindings/scrollbox.xml (widgets/scrollbox.xml)
content/global/bindings/splitter.xml (widgets/splitter.xml)
diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml
new file mode 100644
--- /dev/null
@ -305,7 +305,7 @@ new file mode 100644
+ pack="end">
+ <xul:button dlgtype="help" class="dialog-button" hidden="true"/>
+ <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
+ <xul:spacer anonid="spacer" flex="1"/>
+ <xul:spacer anonid="spacer" flex="1" hidden="true"/>
+ <xul:button dlgtype="accept" class="dialog-button" xbl:inherits="disabled=buttondisabledaccept"/>
+ <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
+ <xul:button dlgtype="cancel" class="dialog-button"/>
@ -1312,8 +1312,8 @@ new file mode 100644
+ <xul:button dlgtype="accept" class="dialog-button" icon="accept"/>
+#elif XP_UNIX
+ pack="end">
+ <xul:button dlgtype="help" class="dialog-button" hidden="true" icon="help"/>
+ <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
+ <xul:button dlgtype="help" class="dialog-button" hidden="true" icon="help"/>
+ <xul:button dlgtype="extra2" class="dialog-button" hidden="true"/>
+ <xul:spacer anonid="spacer" flex="1"/>
+ <xul:button dlgtype="accept" class="dialog-button" icon="accept"/>
+ <xul:button dlgtype="extra1" class="dialog-button" hidden="true"/>
@ -3227,7 +3227,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
diff --git a/widget/gtk2/Makefile.in b/widget/gtk2/Makefile.in
--- a/widget/gtk2/Makefile.in
+++ b/widget/gtk2/Makefile.in
@@ -104,11 +104,14 @@ DEFINES += -DCAIRO_GFX -DMOZ_APP_NAME='
@@ -105,11 +105,14 @@ DEFINES += -DCAIRO_GFX -DMOZ_APP_NAME='
INCLUDES += \
-I$(srcdir)/../xpwidgets \
@ -3259,7 +3259,7 @@ diff --git a/widget/gtk2/nsFilePicker.cpp b/widget/gtk2/nsFilePicker.cpp
#include "nsIFileURL.h"
#include "nsIURI.h"
#include "nsIWidget.h"
#include "nsILocalFile.h"
#include "nsIFile.h"
#include "nsIStringBundle.h"
#include "nsArrayEnumerator.h"
@ -3281,7 +3281,7 @@ diff --git a/widget/gtk2/nsFilePicker.cpp b/widget/gtk2/nsFilePicker.cpp
using namespace mozilla;
#define MAX_PREVIEW_SIZE 180
@@ -253,17 +255,19 @@ nsFilePicker::AppendFilters(PRInt32 aFil
@@ -252,17 +254,19 @@ nsFilePicker::AppendFilters(PRInt32 aFil
return nsBaseFilePicker::AppendFilters(aFilterMask);
}
@ -3302,7 +3302,7 @@ diff --git a/widget/gtk2/nsFilePicker.cpp b/widget/gtk2/nsFilePicker.cpp
mFilters.AppendElement(filter);
mFilterNames.AppendElement(name);
@@ -358,16 +362,19 @@ nsFilePicker::GetFiles(nsISimpleEnumerat
@@ -357,16 +361,19 @@ nsFilePicker::GetFiles(nsISimpleEnumerat
return NS_ERROR_FAILURE;
}
@ -3322,7 +3322,7 @@ diff --git a/widget/gtk2/nsFilePicker.cpp b/widget/gtk2/nsFilePicker.cpp
GtkFileChooserAction action = GetGtkFileChooserAction(mMode);
const gchar *accept_button = (action == GTK_FILE_CHOOSER_ACTION_SAVE)
? GTK_STOCK_SAVE : GTK_STOCK_OPEN;
@@ -506,8 +513,234 @@ nsFilePicker::Show(PRInt16 *aReturn)
@@ -505,8 +512,234 @@ nsFilePicker::Show(PRInt16 *aReturn)
*aReturn = nsIFilePicker::returnCancel;
break;
}
@ -3475,7 +3475,7 @@ diff --git a/widget/gtk2/nsFilePicker.cpp b/widget/gtk2/nsFilePicker.cpp
+ i < count;
+ ++i )
+ {
+ nsCOMPtr<nsILocalFile> localfile;
+ nsCOMPtr<nsIFile> localfile;
+ nsresult rv = NS_NewNativeLocalFile( output[ i ],
+ PR_FALSE,
+ getter_AddRefs(localfile));
@ -3496,19 +3496,19 @@ diff --git a/widget/gtk2/nsFilePicker.cpp b/widget/gtk2/nsFilePicker.cpp
+ }
+ }
+ // Remember last used directory.
+ nsCOMPtr<nsILocalFile> file;
+ nsCOMPtr<nsIFile> file;
+ GetFile(getter_AddRefs(file));
+ if (file) {
+ nsCOMPtr<nsIFile> dir;
+ file->GetParent(getter_AddRefs(dir));
+ nsCOMPtr<nsILocalFile> localDir(do_QueryInterface(dir));
+ nsCOMPtr<nsIFile> localDir(do_QueryInterface(dir));
+ if (localDir) {
+ localDir.swap(mPrevDisplayDirectory);
+ }
+ }
+ if (mMode == nsIFilePicker::modeSave)
+ {
+ nsCOMPtr<nsILocalFile> file;
+ nsCOMPtr<nsIFile> file;
+ GetFile(getter_AddRefs(file));
+ if (file)
+ {
@ -3568,7 +3568,7 @@ diff --git a/widget/gtk2/nsFilePicker.h b/widget/gtk2/nsFilePicker.h
nsTArray<nsCString> mFilterNames;
private:
static nsILocalFile *mPrevDisplayDirectory;
static nsIFile *mPrevDisplayDirectory;
+
+ bool kdeRunning();
+ bool getKdeRunning();
@ -3749,13 +3749,13 @@ diff --git a/xpcom/io/Makefile.in b/xpcom/io/Makefile.in
diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
--- a/xpcom/io/nsLocalFileUnix.cpp
+++ b/xpcom/io/nsLocalFileUnix.cpp
@@ -48,16 +48,17 @@
@@ -49,16 +49,17 @@
#include "prproces.h"
#include "nsIDirectoryEnumerator.h"
#include "nsISimpleEnumerator.h"
#include "private/pprio.h"
#ifdef MOZ_WIDGET_GTK2
#ifdef MOZ_WIDGET_GTK
#include "nsIGIOService.h"
#include "nsIGnomeVFSService.h"
+#include "nsKDEUtils.h"
@ -3767,7 +3767,7 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
#include "prmem.h"
#include "plbase64.h"
@@ -1763,44 +1764,51 @@ nsLocalFile::SetPersistentDescriptor(con
@@ -1760,44 +1761,51 @@ nsLocalFile::SetPersistentDescriptor(con
return InitWithNativePath(aPersistentDescriptor);
#endif
}
@ -3775,7 +3775,7 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
NS_IMETHODIMP
nsLocalFile::Reveal()
{
#ifdef MOZ_WIDGET_GTK2
#ifdef MOZ_WIDGET_GTK
- nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
- nsCOMPtr<nsIGnomeVFSService> gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID);
- if (!giovfs && !gnomevfs)
@ -3810,8 +3810,8 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
+
+ if(nsKDEUtils::kdeSupport()) {
+ nsTArray<nsCString> command;
+ command.AppendElement( NS_LITERAL_CSTRING("OPEN") );
+ command.AppendElement( url );
+ command.AppendElement( NS_LITERAL_CSTRING("REVEAL") );
+ command.AppendElement( mPath );
+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
+ }
+
@ -3833,7 +3833,7 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
return rv;
}
return NS_ERROR_FAILURE;
@@ -1826,16 +1834,23 @@ nsLocalFile::Launch()
@@ -1823,16 +1831,23 @@ nsLocalFile::Launch()
if (nsnull == connection)
return NS_ERROR_FAILURE;

View File

@ -1,12 +1,12 @@
# HG changeset patch
# User Petr Cerny <pcerny@novell.com>
# Parent a843037ea4cee813a68dd529e7a503d1e40b81e4
# Parent 4f5fe2278cd5cff898ad762457312f60a7e82a67
Bug 634334 - call to the ntlm_auth helper fails
diff --git a/extensions/auth/nsAuthSambaNTLM.cpp b/extensions/auth/nsAuthSambaNTLM.cpp
--- a/extensions/auth/nsAuthSambaNTLM.cpp
+++ b/extensions/auth/nsAuthSambaNTLM.cpp
@@ -200,17 +200,17 @@ static PRUint8* ExtractMessage(const nsA
@@ -168,17 +168,17 @@ static PRUint8* ExtractMessage(const nsA
nsresult
nsAuthSambaNTLM::SpawnNTLMAuthHelper()
{
@ -14,14 +14,14 @@ diff --git a/extensions/auth/nsAuthSambaNTLM.cpp b/extensions/auth/nsAuthSambaNT
if (!username)
return NS_ERROR_FAILURE;
char* args[] = {
const char* const args[] = {
- "ntlm_auth",
+ "/usr/bin/ntlm_auth",
"--helper-protocol", "ntlmssp-client-1",
"--use-cached-creds",
"--username", const_cast<char*>(username),
"--username", username,
nsnull
};
bool isOK = SpawnIOChild(args, &mChildPID, &mFromChildFD, &mToChildFD);
bool isOK = SpawnIOChild(const_cast<char* const*>(args), &mChildPID, &mFromChildFD, &mToChildFD);
if (!isOK)

View File

@ -1,5 +1,5 @@
# HG changeset patch
# Parent 0f6722dd9d75458124795d22e9240887c9b4aeca
# Parent 58ae98c85e39def96a90cb21c90e871f41a03a71
# User Wolfgang Rosenauer <wr@rosenauer.org>
Bug 746112 - RegExp hang on ppc64 in execute.
Bug 750620 - Make double-conversion portable to exotic architectures. TM: mozilla15
@ -67,9 +67,9 @@ diff --git a/js/src/yarr/YarrPattern.h b/js/src/yarr/YarrPattern.h
parentheses.subpatternId = subpatternId;
parentheses.isCopy = false;
parentheses.isTerminal = false;
diff --git a/memory/jemalloc/jemalloc.c b/memory/jemalloc/jemalloc.c
--- a/memory/jemalloc/jemalloc.c
+++ b/memory/jemalloc/jemalloc.c
diff --git a/memory/mozjemalloc/jemalloc.c b/memory/mozjemalloc/jemalloc.c
--- a/memory/mozjemalloc/jemalloc.c
+++ b/memory/mozjemalloc/jemalloc.c
@@ -1086,17 +1086,19 @@ struct arena_s {
static unsigned ncpus;
#endif

View File

@ -1,5 +1,5 @@
# HG changeset patch
# Parent c9af3b8022c3f92070c1bd205553d799887cd1b8
# Parent 7820633b718ca1983da7b105d7868c455809cff1
diff --git a/build/Makefile.in b/build/Makefile.in
--- a/build/Makefile.in
@ -48,7 +48,7 @@ diff --git a/toolkit/content/Makefile.in b/toolkit/content/Makefile.in
diff --git a/toolkit/mozapps/installer/package-name.mk b/toolkit/mozapps/installer/package-name.mk
--- a/toolkit/mozapps/installer/package-name.mk
+++ b/toolkit/mozapps/installer/package-name.mk
@@ -128,20 +128,20 @@ SYMBOL_ARCHIVE_BASENAME = $(PKG_BASENAME
@@ -131,22 +131,22 @@ SYMBOL_ARCHIVE_BASENAME = $(PKG_BASENAME
TEST_PACKAGE = $(PKG_BASENAME).tests.zip
ifneq (,$(wildcard $(DIST)/bin/application.ini))
@ -71,10 +71,12 @@ diff --git a/toolkit/mozapps/installer/package-name.mk b/toolkit/mozapps/install
# JavaScript Shell
PKG_JSSHELL = $(DIST)/jsshell-$(MOZ_PKG_PLATFORM).zip
endif # PACKAGE_NAME_MK_INCLUDED
diff --git a/toolkit/xre/Makefile.in b/toolkit/xre/Makefile.in
--- a/toolkit/xre/Makefile.in
+++ b/toolkit/xre/Makefile.in
@@ -220,20 +220,20 @@ endif
@@ -218,20 +218,20 @@ endif
MOZ_SOURCE_STAMP ?= $(firstword $(shell hg -R $(topsrcdir) parent --template="{node|short}\n" 2>/dev/null))
ifdef MOZ_SOURCE_STAMP

View File

@ -7,7 +7,7 @@ References:
diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in
--- a/config/autoconf.mk.in
+++ b/config/autoconf.mk.in
@@ -573,16 +573,20 @@ MOZ_ENABLE_LIBNOTIFY = @MOZ_ENABLE_LIBNO
@@ -540,16 +540,20 @@ MOZ_ENABLE_LIBNOTIFY = @MOZ_ENABLE_LIBNO
MOZ_ALSA_LIBS = @MOZ_ALSA_LIBS@
MOZ_ALSA_CFLAGS = @MOZ_ALSA_CFLAGS@
@ -20,9 +20,9 @@ diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in
+NSSHELPER_CFLAGS = @NSSHELPER_CFLAGS@
+NSSHELPER_LIBS = @NSSHELPER_LIBS@
+
MOZ_NATIVE_MAKEDEPEND = @SYSTEM_MAKEDEPEND@
MOZ_NATIVE_MAKEDEPEND = @MOZ_NATIVE_MAKEDEPEND@
export CL_INCLUDES_PREFIX = @CL_INCLUDES_PREFIX@
CL_INCLUDES_PREFIX = @CL_INCLUDES_PREFIX@
MOZ_AUTO_DEPS = @MOZ_AUTO_DEPS@
COMPILER_DEPEND = @COMPILER_DEPEND@
@ -31,7 +31,7 @@ diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in
diff --git a/configure.in b/configure.in
--- a/configure.in
+++ b/configure.in
@@ -8270,16 +8270,31 @@ AC_SUBST(QCMS_LIBS)
@@ -8052,16 +8052,31 @@ AC_SUBST(QCMS_LIBS)
dnl ========================================================
dnl HarfBuzz
@ -66,11 +66,11 @@ diff --git a/configure.in b/configure.in
diff --git a/security/manager/ssl/src/Makefile.in b/security/manager/ssl/src/Makefile.in
--- a/security/manager/ssl/src/Makefile.in
+++ b/security/manager/ssl/src/Makefile.in
@@ -86,12 +86,14 @@ EXTRA_DEPS = $(NSS_DEP_LIBS)
DEFINES += \
-DNSS_ENABLE_ECC \
-DDLL_PREFIX=\"$(DLL_PREFIX)\" \
-DDLL_SUFFIX=\"$(DLL_SUFFIX)\" \
@@ -90,12 +90,14 @@ DEFINES += \
$(NULL)
EXPORTS += \
nsNSSShutDown.h \
$(NULL)
# Use local includes because they are inserted before INCLUDES
@ -107,7 +107,7 @@ diff --git a/security/manager/ssl/src/nsNSSComponent.cpp b/security/manager/ssl/
#include "nsNetUtil.h"
#include "nsAppDirectoryServiceDefs.h"
#include "nsDirectoryService.h"
@@ -1738,18 +1745,34 @@ nsNSSComponent::InitializeNSS(bool showW
@@ -1740,18 +1747,34 @@ nsNSSComponent::InitializeNSS(bool showW
ConfigureInternalPKCS11Token();
// The NSS_INIT_NOROOTINIT flag turns off the loading of the root certs
@ -147,7 +147,7 @@ diff --git a/security/manager/ssl/src/nsNSSComponent.cpp b/security/manager/ssl/
diff --git a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in
--- a/toolkit/library/Makefile.in
+++ b/toolkit/library/Makefile.in
@@ -446,17 +446,17 @@ EXTRA_DSO_LDOPTS += -INCREMENTAL:NO
@@ -441,17 +441,17 @@ EXTRA_DSO_LDOPTS += -INCREMENTAL:NO
endif
endif
endif
@ -163,6 +163,6 @@ diff --git a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in
CXXFLAGS += $(TK_CFLAGS)
OS_LIBS += \
-framework SystemConfiguration \
-framework QuickTime \
-framework QTKit \
-framework IOKit \
-F/System/Library/PrivateFrameworks -framework CoreUI \

View File

@ -1,2 +1,2 @@
REV=0b774a1067fe
REV=10fe550fadc6
REPO=http://hg.mozilla.org/releases/mozilla-release