--- a/MozillaFirefox/MozillaFirefox.spec Sun Feb 03 16:47:11 2013 +0100
+++ b/MozillaFirefox/MozillaFirefox.spec Mon Feb 04 08:00:25 2013 +0100
@@ -17,9 +17,9 @@
#
-%define major 18
-%define mainver %major.99
-%define update_channel beta
+%define major 19
+%define mainver %major.98
+%define update_channel aurora
Name: MozillaFirefox
BuildRequires: Mesa-devel
@@ -44,8 +44,8 @@
%else
BuildRequires: wireless-tools
%endif
-BuildRequires: mozilla-nspr-devel >= 4.9.4
-BuildRequires: mozilla-nss-devel >= 3.14.1
+BuildRequires: mozilla-nspr-devel >= 4.9.5
+BuildRequires: mozilla-nss-devel >= 3.14.2
BuildRequires: nss-shared-helper-devel
%if %suse_version > 1140
BuildRequires: pkgconfig(gstreamer-0.10)
@@ -95,10 +95,9 @@
Patch10: mozilla-sle11.patch
Patch11: mozilla-disable-neon-option.patch
Patch12: mozilla-arm-disable-edsp.patch
-Patch14: mozilla-ppc.patch
-Patch15: mozilla-gstreamer-760140.patch
-Patch17: mozilla-libproxy-compat.patch
-Patch18: mozilla-webrtc-ppc.patch
+Patch13: mozilla-ppc.patch
+Patch14: mozilla-gstreamer-760140.patch
+Patch15: mozilla-libproxy-compat.patch
# Firefox/browser
Patch30: firefox-browser-css.patch
Patch31: firefox-kde.patch
@@ -131,7 +130,7 @@
%define desktop_file_name %{name}
%endif
### build options
-%define branding 1
+%define branding 0
%define localize 1
%ifarch ppc ppc64 s390 s390x ia64 %arm
%define crashreporter 0
@@ -229,10 +228,9 @@
%endif
#%patch11 -p1
%patch12 -p1
+%patch13 -p1
%patch14 -p1
%patch15 -p1
-%patch17 -p1
-%patch18 -p1
#
%patch30 -p1
%if %suse_version >= 1110
--- a/MozillaFirefox/create-tar.sh Sun Feb 03 16:47:11 2013 +0100
+++ b/MozillaFirefox/create-tar.sh Mon Feb 04 08:00:25 2013 +0100
@@ -1,9 +1,9 @@
#!/bin/bash
-CHANNEL="beta"
+CHANNEL="aurora"
BRANCH="releases/mozilla-$CHANNEL"
-RELEASE_TAG="FIREFOX_19_0b4_RELEASE"
-VERSION="18.99"
+RELEASE_TAG="default"
+VERSION="19.98"
# mozilla
echo "cloning $BRANCH..."
--- a/MozillaFirefox/mozilla-webrtc-ppc.patch Sun Feb 03 16:47:11 2013 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-../mozilla-webrtc-ppc.patch
\ No newline at end of file
--- a/firefox-branded-icons.patch Sun Feb 03 16:47:11 2013 +0100
+++ b/firefox-branded-icons.patch Mon Feb 04 08:00:25 2013 +0100
@@ -1,11 +1,11 @@
# HG changeset patch
-# Parent ab9210b3779914924d12de5a3952d4cc52cd9d78
+# Parent 716c063a34dc33046c36b49e3bd2b4ec867d2b5b
diff --git a/browser/app/Makefile.in b/browser/app/Makefile.in
--- a/browser/app/Makefile.in
+++ b/browser/app/Makefile.in
-@@ -133,16 +133,21 @@ endif
- endif #} LIBXUL_SDK
+@@ -131,16 +131,21 @@ GARBAGE += $(addprefix $(FINAL_TARGET)/d
+ endif
ifeq ($(MOZ_WIDGET_TOOLKIT),gtk2)
libs::
@@ -54,7 +54,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
-@@ -541,18 +541,21 @@
+@@ -552,18 +552,21 @@
@BINPATH@/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon.png
#ifdef SHIP_FEEDBACK
@BINPATH@/distribution/extensions/testpilot@labs.mozilla.com.xpi
--- a/firefox-kde.patch Sun Feb 03 16:47:11 2013 +0100
+++ b/firefox-kde.patch Mon Feb 04 08:00:25 2013 +0100
@@ -2,7 +2,7 @@
new file mode 100644
--- /dev/null
+++ b/browser/base/content/browser-kde.xul
-@@ -0,0 +1,1276 @@
+@@ -0,0 +1,1221 @@
+#filter substitution
+<?xml version="1.0"?>
+# -*- Mode: HTML -*-
@@ -49,7 +49,6 @@
+ windowtype="navigator:browser"
+ macanimationtype="document"
+ screenX="4" screenY="4"
-+ browsingmode="normal"
+ fullscreenbutton="true"
+ persist="screenX screenY width height sizemode">
+
@@ -199,7 +198,7 @@
+ <button id="social-undoactivation-button"
+ label="&social.activated.undobutton.label;"
+ accesskey="&social.activated.undobutton.accesskey;"
-+ onclick="SocialUI.undoActivation();"/>
++ onclick="SocialUI.undoActivation(this);"/>
+ <button default="true"
+ autofocus="autofocus"
+ label="&social.ok.label;"
@@ -214,7 +213,7 @@
+ <button id="social-undoactivation-button"
+ label="&social.activated.undobutton.label;"
+ accesskey="&social.activated.undobutton.accesskey;"
-+ onclick="SocialUI.undoActivation();"/>
++ onclick="SocialUI.undoActivation(this);"/>
+#endif
+ </hbox>
+ </vbox>
@@ -283,22 +282,6 @@
+ noautofocus="true"
+ position="topcenter topright"/>
+
-+ <menupopup id="inspector-node-popup">
-+ <menuitem id="inspectorHTMLCopyInner"
-+ label="&inspectorHTMLCopyInner.label;"
-+ accesskey="&inspectorHTMLCopyInner.accesskey;"
-+ command="Inspector:CopyInner"/>
-+ <menuitem id="inspectorHTMLCopyOuter"
-+ label="&inspectorHTMLCopyOuter.label;"
-+ accesskey="&inspectorHTMLCopyOuter.accesskey;"
-+ command="Inspector:CopyOuter"/>
-+ <menuseparator/>
-+ <menuitem id="inspectorHTMLDelete"
-+ label="&inspectorHTMLDelete.label;"
-+ accesskey="&inspectorHTMLDelete.accesskey;"
-+ command="Inspector:DeleteNode"/>
-+ </menupopup>
-+
+ <menupopup id="toolbar-context-menu"
+ onpopupshowing="onViewToolbarsPopupShowing(event);">
+ <menuseparator/>
@@ -465,6 +448,34 @@
+ <label class="tooltip-label" value="&backForwardButtonMenu.tooltip;"/>
+#endif
+ </tooltip>
++
++ <popupnotification id="webRTC-shareDevices-notification" hidden="true">
++ <popupnotificationcontent id="webRTC-selectCamera" orient="vertical">
++ <separator class="thin"/>
++ <label value="&getUserMedia.selectCamera.label;"
++ accesskey="&getUserMedia.selectCamera.accesskey;"
++ control="webRTC-selectCamera-menulist"/>
++ <menulist id="webRTC-selectCamera-menulist">
++ <menupopup id="webRTC-selectCamera-menupopup"/>
++ </menulist>
++ </popupnotificationcontent>
++ <popupnotificationcontent id="webRTC-selectMicrophone" orient="vertical">
++ <separator class="thin"/>
++ <label value="&getUserMedia.selectMicrophone.label;"
++ accesskey="&getUserMedia.selectMicrophone.accesskey;"
++ control="webRTC-selectMicrophone-menulist"/>
++ <menulist id="webRTC-selectMicrophone-menulist">
++ <menupopup id="webRTC-selectMicrophone-menupopup"/>
++ </menulist>
++ </popupnotificationcontent>
++ </popupnotification>
++
++ <popupnotification id="geolocation-notification" hidden="true">
++ <popupnotificationcontent orient="vertical" align="start">
++ <separator class="thin"/>
++ <label id="geolocation-learnmore-link" class="text-link"/>
++ </popupnotificationcontent>
++ </popupnotification>
+ </popupset>
+
+#ifdef CAN_DRAW_IN_TITLEBAR
@@ -522,7 +533,7 @@
+ toolbarname="&navbarCmd.label;" accesskey="&navbarCmd.accesskey;"
+ fullscreentoolbar="true" mode="icons" customizable="true"
+ iconsize="large"
-+ defaultset="unified-back-forward-button,urlbar-container,reload-button,stop-button,search-container,home-button,bookmarks-menu-button-container,window-controls"
++ defaultset="unified-back-forward-button,urlbar-container,reload-button,stop-button,search-container,webrtc-status-button,downloads-button,home-button,bookmarks-menu-button-container,window-controls"
+ context="toolbar-context-menu">
+
+ <toolbaritem id="unified-back-forward-button" class="chromeclass-toolbar-additional"
@@ -579,6 +590,8 @@
+ <image id="webapps-notification-icon" class="notification-anchor-icon" role="button"/>
+ <image id="plugins-notification-icon" class="notification-anchor-icon" role="button"/>
+ <image id="blocked-plugins-notification-icon" class="notification-anchor-icon" role="button"/>
++ <image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon" role="button"/>
++ <image id="webRTC-sharingDevices-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.
@@ -654,6 +667,18 @@
+ <searchbar id="searchbar" flex="1"/>
+ </toolbaritem>
+
++ <toolbarbutton id="webrtc-status-button"
++ class="toolbarbutton-1 chromeclass-toolbar-additional"
++ type="menu"
++ hidden="true"
++ orient="horizontal"
++ label="&webrtcIndicatorButton.label;"
++ tooltiptext="&webrtcIndicatorButton.tooltip;">
++ <menupopup onpopupshowing="WebrtcIndicator.fillPopup(this);"
++ onpopuphiding="WebrtcIndicator.clearPopup(this);"
++ oncommand="WebrtcIndicator.menuCommand(event.target);"/>
++ </toolbarbutton>
++
+ <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
+ persist="class" removable="true"
+ label="&homeButton.label;"
@@ -669,6 +694,7 @@
+ removable="false"
+ title="&socialToolbar.title;"
+ hidden="true"
++ skipintoolbarset="true"
+ observes="socialActiveBroadcaster">
+ <toolbarbutton id="social-provider-button"
+ class="toolbarbutton-1"
@@ -700,6 +726,7 @@
+ label="&social.toggleNotifications.label;"
+ accesskey="&social.toggleNotifications.accesskey;"/>
+ <menuseparator class="social-statusarea-separator"/>
++ <menuseparator class="social-provider-menu" hidden="true"/>
+ <menuitem class="social-toggle-menuitem" command="Social:Toggle"/>
+ <menuitem class="social-remove-menuitem" command="Social:Remove"/>
+ </menupopup>
@@ -893,7 +920,8 @@
+ tabbrowser="content"
+ flex="1"
+ setfocus="false"
-+ tooltip="tabbrowser-tab-tooltip">
++ tooltip="tabbrowser-tab-tooltip"
++ stopwatchid="FX_TAB_CLICK_MS">
+ <tab class="tabbrowser-tab" selected="true" fadein="true"/>
+ </tabs>
+
@@ -1048,6 +1076,8 @@
+ </toolbarpalette>
+ </toolbox>
+
++ <hbox id="fullscr-toggler" collapsed="true"/>
++
+ <hbox flex="1" id="browser">
+ <vbox id="browser-border-start" hidden="true" layer="true"/>
+ <vbox id="sidebar-box" hidden="true" class="chromeclass-extrachrome">
@@ -1071,19 +1101,6 @@
+ <chatbar id="pinnedchats" layer="true" mousethrough="always" hidden="true"/>
+ <statuspanel id="statusbar-display" inactive="true"/>
+ </vbox>
-+ <splitter id="devtools-side-splitter" hidden="true"/>
-+ <vbox id="devtools-sidebar-box" hidden="true"
-+ style="min-width: 18em; width: 22em; max-width: 42em;" persist="width">
-+ <toolbar id="devtools-sidebar-toolbar"
-+ class="devtools-toolbar"
-+ nowindowdrag="true">
-+ <spacer flex="1"/>
-+ <toolbarbutton tooltiptext="&inspectSidebarCloseButton.tooltiptext;"
-+ class="devtools-closebutton"
-+ command="Inspector:Sidebar"/>
-+ </toolbar>
-+ <deck id="devtools-sidebar-deck" flex="1"/>
-+ </vbox>
+ <splitter id="social-sidebar-splitter"
+ class="chromeclass-extrachrome sidebar-splitter"
+ observes="socialSidebarBroadcaster"/>
@@ -1122,52 +1139,6 @@
+ </hbox>
+
+ <vbox id="browser-bottombox" layer="true">
-+ <toolbar id="inspector-toolbar"
-+ class="devtools-toolbar"
-+ nowindowdrag="true"
-+ hidden="true">
-+#ifdef XP_MACOSX
-+ <toolbarbutton id="highlighter-closebutton"
-+ class="devtools-closebutton"
-+ oncommand="InspectorUI.closeInspectorUI(false);"
-+ tooltiptext="&inspectCloseButton.tooltiptext;"/>
-+#endif
-+ <toolbarbutton id="inspector-inspect-toolbutton"
-+ class="devtools-toolbarbutton"
-+ command="Inspector:Inspect"/>
-+ <toolbarbutton id="inspector-treepanel-toolbutton"
-+ class="devtools-toolbarbutton"
-+ tabindex="0"
-+ aria-label="&markupButton.arialabel;"
-+ accesskey="&markupButton.accesskey;"
-+ command="Inspector:HTMLPanel"/>
-+ <arrowscrollbox id="inspector-breadcrumbs"
-+ flex="1" orient="horizontal"
-+ clicktoscroll="true"/>
-+ <hbox id="inspector-tools">
-+ <toolbarbutton id="inspector-3D-button"
-+ class="devtools-toolbarbutton"
-+ hidden="true"
-+ label="&inspect3DViewButton.label;"
-+ accesskey="&inspect3DViewButton.accesskey;"
-+ tabindex="0"
-+ command="Inspector:Tilt"/>
-+ <toolbarbutton id="inspector-style-button"
-+ class="devtools-toolbarbutton"
-+ label="&inspectStyleButton.label;"
-+ accesskey="&inspectStyleButton.accesskey;"
-+ tabindex="0"
-+ command="Inspector:Sidebar"/>
-+ <!-- registered tools go here -->
-+ </hbox>
-+#ifndef XP_MACOSX
-+ <toolbarbutton id="highlighter-closebutton"
-+ class="devtools-closebutton"
-+ oncommand="InspectorUI.closeInspectorUI(false);"
-+ tooltiptext="&inspectCloseButton.tooltiptext;"/>
-+#endif
-+ </toolbar>
-+
+ <toolbar id="developer-toolbar"
+ class="devtools-toolbar"
+ hidden="true">
@@ -1184,36 +1155,10 @@
+ <hbox class="gclitoolbar-complete-node"/>
+ <textbox class="gclitoolbar-input-node" rows="1"/>
+ </stack>
-+ <toolbarbutton id="developer-toolbar-webconsole"
-+ class="developer-toolbar-button"
-+ observes="devtoolsMenuBroadcaster_WebConsole"/>
-+ <toolbarbutton id="developer-toolbar-inspector"
-+ class="developer-toolbar-button"
-+ observes="devtoolsMenuBroadcaster_Inspect"/>
-+ <toolbarbutton id="developer-toolbar-styleeditor"
-+ class="developer-toolbar-button"
-+ observes="devtoolsMenuBroadcaster_StyleEditor"/>
-+ <toolbarbutton id="developer-toolbar-debugger"
-+ class="developer-toolbar-button"
-+ observes="devtoolsMenuBroadcaster_Debugger"/>
-+ <toolbarbutton id="developer-toolbar-other-tools"
-+ type="menu"
++ <toolbarbutton id="developer-toolbar-toolbox-button"
+ class="developer-toolbar-button"
-+ label="&devToolbarOtherToolsButton.label;">
-+ <menupopup position="before_end">
-+ <menuitem observes="devtoolsMenuBroadcaster_DevToolbar"/>
-+ <menuitem observes="devtoolsMenuBroadcaster_ResponsiveUI"/>
-+ <menuitem observes="devtoolsMenuBroadcaster_RemoteDebugger"/>
-+ <menuitem observes="devtoolsMenuBroadcaster_ChromeDebugger"/>
-+ <menuitem observes="devtoolsMenuBroadcaster_Scratchpad"/>
-+ <menuitem observes="devtoolsMenuBroadcaster_StyleEditor"/>
-+ <menuitem observes="devtoolsMenuBroadcaster_PageSource"/>
-+ <menuitem observes="devtoolsMenuBroadcaster_ErrorConsole"/>
-+ <menuseparator/>
-+ <menuitem observes="devtoolsMenuBroadcaster_GetMoreTools"/>
-+ </menupopup>
-+ </toolbarbutton>
-+
++ observes="devtoolsMenuBroadcaster_DevToolbox"
++ tooltiptext="&devToolbarToolsButton.tooltip;"/>
+#ifndef XP_MACOSX
+ <toolbarbutton id="developer-toolbar-closebutton"
+ class="devtools-closebutton"
@@ -1282,8 +1227,8 @@
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
-@@ -50,16 +50,18 @@ browser.jar:
- content/browser/abouthome/mozilla@2x.png (content/abouthome/mozilla@2x.png)
+@@ -55,16 +55,18 @@ browser.jar:
+ content/browser/abouthealthreport/abouthealth.css (content/abouthealthreport/abouthealth.css)
#endif
content/browser/aboutRobots-icon.png (content/aboutRobots-icon.png)
content/browser/aboutRobots-widget-left.png (content/aboutRobots-widget-left.png)
@@ -1323,7 +1268,7 @@
#include "rdf.h"
#include "nsFeedSniffer.h"
-@@ -32,18 +32,16 @@ using namespace mozilla::browser;
+@@ -34,18 +34,16 @@ using namespace mozilla::browser;
/////////////////////////////////////////////////////////////////////////////
@@ -1342,9 +1287,9 @@
NS_GENERIC_FACTORY_CONSTRUCTOR(nsFeedSniffer)
-@@ -64,17 +62,17 @@ NS_DEFINE_NAMED_CID(NS_SHELLSERVICE_CID)
+@@ -70,17 +68,17 @@ NS_DEFINE_NAMED_CID(NS_SHELLSERVICE_CID)
+ NS_DEFINE_NAMED_CID(NS_PRIVATE_BROWSING_SERVICE_WRAPPER_CID);
#endif
- NS_DEFINE_NAMED_CID(NS_PRIVATE_BROWSING_SERVICE_WRAPPER_CID);
static const mozilla::Module::CIDEntry kBrowserCIDs[] = {
{ &kNS_BROWSERDIRECTORYPROVIDER_CID, false, NULL, DirectoryProviderConstructor },
@@ -1387,7 +1332,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.
-@@ -715,14 +721,25 @@ var gAdvancedPane = {
+@@ -791,14 +797,25 @@ var gAdvancedPane = {
* Set browser as the operating system default browser.
*/
setDefaultBrowser: function()
@@ -1849,24 +1794,25 @@
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
-@@ -578,18 +578,20 @@
- @BINPATH@/@PREF_DIR@/healthreport-prefs.js
- #endif
- @BINPATH@/greprefs.js
- @BINPATH@/defaults/autoconfig/platform.js
+@@ -578,19 +578,21 @@
@BINPATH@/defaults/autoconfig/prefcalls.js
+ @BINPATH@/defaults/profile/prefs.js
+
#ifndef LIBXUL_SDK
; Warning: changing the path to channel-prefs.js can cause bugs (Bug 756325)
+ ; Technically this is an app pref file, but we are keeping it in the original
+ ; gre location for now.
@BINPATH@/defaults/pref/channel-prefs.js
+@BINPATH@/defaults/pref/kde.js
#else
+ ; For Fx-on-xr, channel-prefs lives with the app preferences. (Bug 762588)
@BINPATH@/@PREF_DIR@/channel-prefs.js
+@BINPATH@/@PREF_DIR@/kde.js
#endif
- @BINPATH@/defaults/profile/prefs.js
- ; [Layout Engine Resources]
- ; Style Sheets, Graphics and other Resources used by the layout engine.
- @BINPATH@/res/EditorOverride.css
- @BINPATH@/res/contenteditable.css
- @BINPATH@/res/designmode.css
+ ; Services (gre) prefs
+ #ifdef MOZ_SERVICES_AITC
+ @BINPATH@/defaults/pref/services-aitc.js
+ #endif
+ #ifdef MOZ_SERVICES_NOTIFICATIONS
+ @BINPATH@/defaults/pref/services-notifications.js
--- a/mozilla-gstreamer-760140.patch Sun Feb 03 16:47:11 2013 +0100
+++ b/mozilla-gstreamer-760140.patch Mon Feb 04 08:00:25 2013 +0100
@@ -1,87 +1,93 @@
-From: Alessandro Decina <alessandro.d@gmail.com>
+# HG changeset patch
+# Parent 9fe99f8a584f2369a88bfb5281fd6bc95eb2593c
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
-@@ -143,16 +143,19 @@
- #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 "GStreamerDecoder.h"
-+#endif
+
+diff --git a/content/media/DecoderTraits.cpp b/content/media/DecoderTraits.cpp
+--- a/content/media/DecoderTraits.cpp
++++ b/content/media/DecoderTraits.cpp
+@@ -7,16 +7,18 @@
+ #include "DecoderTraits.h"
+ #include "MediaDecoder.h"
+ #include "nsCharSeparatedTokenizer.h"
+ #ifdef MOZ_MEDIA_PLUGINS
+ #include "MediaPluginHost.h"
#endif
- #include "nsDOMTouchEvent.h"
- #include "nsIContentViewer.h"
- #include "nsIObjectLoadingContent.h"
- #include "nsCCUncollectableMarker.h"
- #include "mozilla/Base64.h"
+ #ifdef MOZ_GSTREAMER
#include "mozilla/Preferences.h"
- #include "nsDOMMutationObserver.h"
-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
-@@ -259,17 +259,19 @@ public:
- void UpdateMediaSize(nsIntSize size);
++#include "GStreamerDecoder.h"
++#include "nsXPCOMStrings.h"
+ #endif
+ #ifdef MOZ_WMF
+ #include "WMFDecoder.h"
+ #endif
- // 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);
+ namespace mozilla
+ {
- // Returns the CanPlayStatus indicating if we can handle the
- // full MIME type including the optional codecs parameter.
- static CanPlayStatus GetCanPlay(const nsAString& aType);
+@@ -137,48 +139,35 @@
+ return false;
+ }
- // 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
-@@ -292,18 +294,16 @@ public:
- #ifdef MOZ_WEBM
- static bool IsWebMType(const nsACString& aType);
- static const char gWebMTypes[2][11];
- static char const *const gWebMCodecs[4];
+ return CodecListContains(gWebMTypes, aType);
+ }
#endif
#ifdef MOZ_GSTREAMER
- static bool IsGStreamerSupportedType(const nsACString& aType);
-- static bool IsH264Type(const nsACString& aType);
-- static const char gH264Types[3][16];
+-static const char* const gH264Types[4] = {
+- "video/mp4",
+- "video/3gpp",
+- "video/quicktime",
+- nullptr
+-};
+-
+ bool
+ DecoderTraits::IsGStreamerSupportedType(const nsACString& aMimeType)
+ {
+ if (!MediaDecoder::IsGStreamerEnabled())
+ return false;
+- if (IsH264Type(aMimeType))
++ if (GStreamerDecoder::CanHandleMediaType(aMimeType, nullptr))
+ return true;
+ if (!Preferences::GetBool("media.prefer-gstreamer", false))
+ return false;
+ #ifdef MOZ_WEBM
+ if (IsWebMType(aMimeType))
+ return true;
+ #endif
+ #ifdef MOZ_OGG
+ if (IsOggType(aMimeType))
+ return true;
+ #endif
+ return false;
+ }
+-
+-bool
+-DecoderTraits::IsH264Type(const nsACString& aType)
+-{
+- return CodecListContains(gH264Types, aType);
+-}
#endif
#ifdef MOZ_WIDGET_GONK
- static bool IsOmxSupportedType(const nsACString& aType);
- static const char gOmxTypes[5][16];
- #endif
-
- #if defined(MOZ_GSTREAMER) || defined(MOZ_WIDGET_GONK)
-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
-@@ -2213,50 +2213,29 @@ nsHTMLMediaElement::IsWebMType(const nsA
- return true;
- }
+ static const char* const gOmxTypes[6] = {
+ "audio/mpeg",
+ "audio/mp4",
+ "video/mp4",
+ "video/3gpp",
+@@ -190,19 +179,17 @@
+ DecoderTraits::IsOmxSupportedType(const nsACString& aType)
+ {
+ if (!MediaDecoder::IsOmxEnabled()) {
+ return false;
}
- return false;
+ return CodecListContains(gOmxTypes, aType);
}
- #endif
+-#endif
-#if defined(MOZ_GSTREAMER) || defined(MOZ_WIDGET_GONK)
-+#ifdef MOZ_WIDGET_GONK
- char const *const nsHTMLMediaElement::gH264Codecs[9] = {
+ static char const *const gH264Codecs[9] = {
"avc1.42E01E", // H.264 Constrained Baseline Profile Level 3.0
"avc1.42001E", // H.264 Baseline Profile Level 3.0
"avc1.58A01E", // H.264 Extended Profile Level 3.0
@@ -89,233 +95,73 @@
"avc1.64001E", // H.264 High Profile Level 3.0
"avc1.64001F", // H.264 High Profile Level 3.1
"mp4v.20.3", // 3GPP
- "mp4a.40.2", // AAC-LC
- nullptr
- };
--#endif
--
--#ifdef MOZ_GSTREAMER
--const char nsHTMLMediaElement::gH264Types[3][16] = {
-- "video/mp4",
-- "video/3gpp",
-- "video/quicktime",
--};
--
--bool
--nsHTMLMediaElement::IsH264Type(const nsACString& aType)
--{
-- for (uint32_t i = 0; i < ArrayLength(gH264Types); ++i) {
-- if (aType.EqualsASCII(gH264Types[i])) {
-- return true;
-- }
-- }
-- return false;
--}
--#endif
--
--#ifdef MOZ_WIDGET_GONK
-+
- const char nsHTMLMediaElement::gOmxTypes[5][16] = {
- "audio/mpeg",
- "audio/mp4",
- "video/mp4",
- "video/3gpp",
- "video/quicktime",
- };
-
-@@ -2319,18 +2298,22 @@ nsHTMLMediaElement::IsDASHMPDType(const
-
- return false;
- }
- #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;
+@@ -303,19 +290,19 @@
+ #ifdef MOZ_DASH
+ if (IsDASHMPDType(nsDependentCString(aMIMEType))) {
+ // DASH manifest uses WebM codecs only.
+ codecList = gWebMCodecs;
+ result = CANPLAY_YES;
}
#endif
- #ifdef MOZ_OGG
- if (IsOggType(nsDependentCString(aMIMEType))) {
-@@ -2354,20 +2337,22 @@ nsHTMLMediaElement::CanHandleMediaType(c
- if (IsDASHMPDType(nsDependentCString(aMIMEType))) {
- // DASH manifest uses WebM codecs only.
- *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 = nullptr;
-+ if (GStreamerDecoder::CanHandleMediaType(aMIMEType, aCodecs))
+- codecList = gH264Codecs;
+- result = CANPLAY_MAYBE;
++ if (GStreamerDecoder::CanHandleMediaType(nsDependentCString(aMIMEType),
++ aHaveRequestedCodecs ? &aRequestedCodecs : nullptr)) {
+ return CANPLAY_YES;
+ }
#endif
#ifdef MOZ_WIDGET_GONK
if (IsOmxSupportedType(nsDependentCString(aMIMEType))) {
- *aCodecList = gH264Codecs;
- return CANPLAY_MAYBE;
+ codecList = gH264Codecs;
+ result = CANPLAY_MAYBE;
}
#endif
- #ifdef MOZ_MEDIA_PLUGINS
-@@ -2388,17 +2373,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 (GStreamerDecoder::CanHandleMediaType(aMIMEType, nullptr))
- return true;
- #endif
- #ifdef MOZ_WIDGET_GONK
- if (IsOmxSupportedType(nsDependentCString(aMIMEType))) {
- return true;
+@@ -324,17 +311,17 @@
+ result = CANPLAY_MAYBE;
}
#endif
#ifdef MOZ_MEDIA_PLUGINS
-@@ -2429,26 +2414,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;
+ if (MediaDecoder::IsMediaPluginsEnabled() &&
+ GetMediaPluginHost()->FindDecoder(nsDependentCString(aMIMEType), &codecList))
+ result = CANPLAY_MAYBE;
+ #endif
+- if (result == CANPLAY_NO || !aHaveRequestedCodecs) {
++ if (result == CANPLAY_NO || !aHaveRequestedCodecs || !codecList) {
+ return result;
}
- CanPlayStatus result = CANPLAY_YES;
// See http://www.rfc-editor.org/rfc/rfc4281.txt for the description
// of the 'codecs' parameter
- nsCharSeparatedTokenizer tokenizer(codecs, ',');
+ nsCharSeparatedTokenizer tokenizer(aRequestedCodecs, ',');
bool expectMoreTokens = false;
-@@ -2487,43 +2477,39 @@ nsHTMLMediaElement::CanPlayType(const ns
- }
+ while (tokenizer.hasMoreTokens()) {
+diff --git a/content/media/DecoderTraits.h b/content/media/DecoderTraits.h
+--- a/content/media/DecoderTraits.h
++++ b/content/media/DecoderTraits.h
+@@ -49,17 +49,16 @@
+ #endif
+
+ #ifdef MOZ_WEBM
+ static bool IsWebMType(const nsACString& aType);
+ #endif
#ifdef MOZ_GSTREAMER
- bool
- nsHTMLMediaElement::IsGStreamerSupportedType(const nsACString& aMimeType)
- {
- if (!MediaDecoder::IsGStreamerEnabled())
- return false;
-- if (IsH264Type(aMimeType))
-+
-+ const char *type;
-+ NS_CStringGetData(aMimeType, &type, nullptr);
-+ if (GStreamerDecoder::CanHandleMediaType(type, nullptr))
- return true;
-- if (!Preferences::GetBool("media.prefer-gstreamer", false))
-- return false;
--#ifdef MOZ_WEBM
-- if (IsWebMType(aMimeType))
-- return true;
--#endif
--#ifdef MOZ_OGG
-- if (IsOggType(aMimeType))
-- return true;
--#endif
-+
- return false;
- }
+ static bool IsGStreamerSupportedType(const nsACString& aType);
+- static bool IsH264Type(const nsACString& aType);
#endif
- already_AddRefed<MediaDecoder>
- nsHTMLMediaElement::CreateDecoder(const nsACString& aType)
- {
-
- #ifdef MOZ_GSTREAMER
- // When enabled, use GStreamer for H.264, but not for codecs handled by our
- // bundled decoders, unless the "media.prefer-gstreamer" pref is set.
-- if (IsGStreamerSupportedType(aType)) {
-- nsRefPtr<GStreamerDecoder> decoder = new GStreamerDecoder();
-- if (decoder->Init(this)) {
-- return decoder.forget();
-+ if (!Preferences::GetBool("media.prefer-gstreamer", false)) {
-+ if (IsGStreamerSupportedType(aType)) {
-+ nsRefPtr<GStreamerDecoder> decoder = new GStreamerDecoder();
-+ if (decoder->Init(this)) {
-+ return decoder.forget();
-+ }
- }
- }
+ #ifdef MOZ_WIDGET_GONK
+ static bool IsOmxSupportedType(const nsACString& aType);
#endif
- #ifdef MOZ_RAW
- if (IsRawType(aType)) {
- nsRefPtr<RawDecoder> decoder = new RawDecoder();
- if (decoder->Init(this)) {
-@@ -2576,16 +2562,26 @@ nsHTMLMediaElement::CreateDecoder(const
- if (IsDASHMPDType(aType)) {
- nsRefPtr<DASHDecoder> decoder = new DASHDecoder();
- if (decoder->Init(this)) {
- return decoder.forget();
- }
- }
- #endif
-
-+#ifdef MOZ_GSTREAMER
-+ // use GStreamer as fallback if not preferred
-+ if (IsGStreamerSupportedType(aType)) {
-+ nsRefPtr<GStreamerDecoder> decoder = new GStreamerDecoder();
-+ if (decoder->Init(this)) {
-+ return decoder.forget();
-+ }
-+ }
-+#endif
-+
- return nullptr;
- }
-
- nsresult nsHTMLMediaElement::InitializeDecoderAsClone(MediaDecoder* aOriginal)
- {
- NS_ASSERTION(mLoadingSrc, "mLoadingSrc must already be set");
- NS_ASSERTION(mDecoder == nullptr, "Shouldn't have a decoder");
-
+ #ifdef MOZ_MEDIA_PLUGINS
+ static bool IsMediaPluginsType(const nsACString& aType);
diff --git a/content/media/gstreamer/GStreamerDecoder.cpp b/content/media/gstreamer/GStreamerDecoder.cpp
--- a/content/media/gstreamer/GStreamerDecoder.cpp
+++ b/content/media/gstreamer/GStreamerDecoder.cpp
-@@ -2,18 +2,23 @@
+@@ -2,18 +2,26 @@
/* 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,
@@ -324,7 +170,7 @@
#include "MediaDecoderStateMachine.h"
#include "GStreamerReader.h"
#include "GStreamerDecoder.h"
-+#include "nsGStreamerFormatHelper.h"
++#include "GStreamerFormatHelper.h"
namespace mozilla {
@@ -333,16 +179,28 @@
return new MediaDecoderStateMachine(this, new GStreamerReader(this));
}
-+bool GStreamerDecoder::CanHandleMediaType(const char* aMIMEType,
-+ const char* aCodecs) {
++bool
++GStreamerDecoder::CanHandleMediaType(const nsACString& aMIMEType,
++ const nsAString* aCodecs)
++{
+ return GStreamerFormatHelper::Instance()->CanHandleMediaType(aMIMEType, aCodecs);
+}
++
} // namespace mozilla
diff --git a/content/media/gstreamer/GStreamerDecoder.h b/content/media/gstreamer/GStreamerDecoder.h
--- a/content/media/gstreamer/GStreamerDecoder.h
+++ b/content/media/gstreamer/GStreamerDecoder.h
-@@ -11,13 +11,14 @@
+@@ -3,21 +3,23 @@
+ /* 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(GStreamerDecoder_h_)
+ #define GStreamerDecoder_h_
+
+ #include "MediaDecoder.h"
++#include "nsXPCOMStrings.h"
namespace mozilla {
@@ -351,45 +209,24 @@
public:
virtual MediaDecoder* Clone() { return new GStreamerDecoder(); }
virtual MediaDecoderStateMachine* CreateStateMachine();
-+ static bool CanHandleMediaType(const char* aMIMEType, const char* aCodecs);
++ static bool CanHandleMediaType(const nsACString& aMIMEType, const nsAString* aCodecs);
};
} // namespace mozilla
#endif
-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
-@@ -17,16 +17,17 @@ LIBXUL_LIBRARY = 1
-
- EXPORTS += \
- GStreamerDecoder.h \
- $(NULL)
-
- CPPSRCS = \
- GStreamerReader.cpp \
- GStreamerDecoder.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/nsGStreamerFormatHelper.cpp b/content/media/gstreamer/nsGStreamerFormatHelper.cpp
+diff --git a/content/media/gstreamer/GStreamerFormatHelper.cpp b/content/media/gstreamer/GStreamerFormatHelper.cpp
new file mode 100644
--- /dev/null
-+++ b/content/media/gstreamer/nsGStreamerFormatHelper.cpp
-@@ -0,0 +1,149 @@
++++ b/content/media/gstreamer/GStreamerFormatHelper.cpp
+@@ -0,0 +1,159 @@
+/* -*- 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 "GStreamerFormatHelper.h"
+#include "nsCharSeparatedTokenizer.h"
+#include "nsXPCOMStrings.h"
+
@@ -398,7 +235,7 @@
+
+GStreamerFormatHelper* GStreamerFormatHelper::gInstance = nullptr;
+
-+GStreamerFormatHelper *GStreamerFormatHelper::Instance() {
++GStreamerFormatHelper* GStreamerFormatHelper::Instance() {
+ if (!gInstance) {
+ gst_init(nullptr, nullptr);
+ gInstance = new GStreamerFormatHelper();
@@ -407,27 +244,35 @@
+ return gInstance;
+}
+
++void GStreamerFormatHelper::Shutdown() {
++ if (gInstance) {
++ delete gInstance;
++ gInstance = nullptr;
++ }
++}
++
++char const *const GStreamerFormatHelper::mContainers[4][2] = {
++ {"video/mp4", "video/quicktime"},
++ {"video/quicktime", "video/quicktime"},
++ {"audio/mp4", "audio/mpeg, mpegversion=(int)4"},
++ {"audio/mpeg", "audio/mpeg, mpegversion=(int)1"},
++};
++
++char const *const GStreamerFormatHelper::mCodecs[8][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"},
++ {"avc1.64001F", "video/x-h264"},
++ {"mp4v.20.3", "video/3gpp"},
++ {"mp4a.40.2", "audio/mpeg, mpegversion=(int)4"},
++};
++
+GStreamerFormatHelper::GStreamerFormatHelper()
+ : mFactories(nullptr),
-+ mCookie(0)
++ mCookie(static_cast<uint32_t>(-1))
+{
-+ 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));
+}
+
+GStreamerFormatHelper::~GStreamerFormatHelper() {
@@ -435,9 +280,12 @@
+ g_list_free(mFactories);
+}
+
-+bool GStreamerFormatHelper::CanHandleMediaType(const char* aMIMEType,
-+ const char *aCodecs) {
-+ GstCaps *caps = ConvertFormatsToCaps(aMIMEType, aCodecs);
++bool GStreamerFormatHelper::CanHandleMediaType(const nsACString& aMIMEType,
++ const nsAString* aCodecs) {
++ const char *type;
++ NS_CStringGetData(aMIMEType, &type, NULL);
++
++ GstCaps* caps = ConvertFormatsToCaps(type, aCodecs);
+ if (!caps) {
+ return false;
+ }
@@ -448,12 +296,12 @@
+ return ret;
+}
+
-+GstCaps *GStreamerFormatHelper::ConvertFormatsToCaps(const char *aMIMEType,
-+ const char *aCodecs) {
++GstCaps* GStreamerFormatHelper::ConvertFormatsToCaps(const char* aMIMEType,
++ const nsAString* aCodecs) {
+ unsigned int i;
+
+ /* convert aMIMEType to gst container caps */
-+ const char *capsString = nullptr;
++ const char* capsString = nullptr;
+ for (i = 0; i < G_N_ELEMENTS(mContainers); i++) {
+ if (!strcmp(ENTRY_FORMAT(mContainers[i]), aMIMEType)) {
+ capsString = ENTRY_CAPS(mContainers[i]);
@@ -466,20 +314,19 @@
+ return nullptr;
+ }
+
-+ GstCaps *caps = gst_caps_from_string(capsString);
++ GstCaps* caps = gst_caps_from_string(capsString);
+ /* container only */
+ if (!aCodecs) {
+ return caps;
+ }
+
-+ nsDependentCSubstring codecs(aCodecs, strlen(aCodecs));
-+ nsCCharSeparatedTokenizer tokenizer(codecs, ',');
++ nsCharSeparatedTokenizer tokenizer(*aCodecs, ',');
+ while (tokenizer.hasMoreTokens()) {
-+ const nsCSubstring& codec = tokenizer.nextToken();
++ const nsSubstring& codec = tokenizer.nextToken();
+ capsString = nullptr;
+
+ for (i = 0; i < G_N_ELEMENTS(mCodecs); i++) {
-+ if (codec.Equals(ENTRY_FORMAT(mCodecs[i]))) {
++ if (codec.EqualsASCII(ENTRY_FORMAT(mCodecs[i]))) {
+ capsString = ENTRY_CAPS(mCodecs[i]);
+ break;
+ }
@@ -490,7 +337,7 @@
+ return nullptr;
+ }
+
-+ GstCaps *tmp = gst_caps_from_string(capsString);
++ GstCaps* tmp = gst_caps_from_string(capsString);
+ /* appends and frees tmp */
+ gst_caps_append(caps, tmp);
+ }
@@ -498,17 +345,17 @@
+ return caps;
+}
+
-+bool GStreamerFormatHelper::HaveElementsToProcessCaps(GstCaps *aCaps) {
++bool GStreamerFormatHelper::HaveElementsToProcessCaps(GstCaps* aCaps) {
+
-+ GList *factories = GetFactories();
++ GList* factories = GetFactories();
+
-+ GList *list;
++ 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), nullptr);
++ GstStructure* s = gst_caps_get_structure(aCaps, i);
++ GstCaps* caps = gst_caps_new_full(gst_structure_copy(s), nullptr);
+ list = gst_element_factory_list_filter (factories, caps, GST_PAD_SINK, FALSE);
+ gst_caps_unref(caps);
+ if (!list) {
@@ -520,7 +367,7 @@
+ return true;
+}
+
-+GList * GStreamerFormatHelper::GetFactories() {
++GList* GStreamerFormatHelper::GetFactories() {
+ uint32_t cookie = gst_default_registry_get_feature_list_cookie ();
+ if (cookie != mCookie) {
+ g_list_free(mFactories);
@@ -532,45 +379,164 @@
+
+ return mFactories;
+}
-diff --git a/content/media/gstreamer/nsGStreamerFormatHelper.h b/content/media/gstreamer/nsGStreamerFormatHelper.h
+diff --git a/content/media/gstreamer/GStreamerFormatHelper.h b/content/media/gstreamer/GStreamerFormatHelper.h
new file mode 100644
--- /dev/null
-+++ b/content/media/gstreamer/nsGStreamerFormatHelper.h
-@@ -0,0 +1,37 @@
++++ b/content/media/gstreamer/GStreamerFormatHelper.h
+@@ -0,0 +1,60 @@
+/* -*- 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_
++#if !defined(GStreamerFormatHelper_h_)
++#define GStreamerFormatHelper_h_
+
+#include <gst/gst.h>
+#include <mozilla/Types.h>
++#include "nsXPCOMStrings.h"
+
+class GStreamerFormatHelper {
++ /* This class can be used to query the GStreamer registry for the required
++ * demuxers/decoders from nsHTMLMediaElement::CanPlayType.
++ * It implements looking at the GstRegistry to check if elements to
++ * demux/decode the formats passed to CanPlayType() are actually installed.
++ */
+ public:
-+ static GStreamerFormatHelper *Instance();
++ static GStreamerFormatHelper* Instance();
+ ~GStreamerFormatHelper();
+
-+ bool CanHandleMediaType(const char *aMIMEType,
-+ const char *aCodecs);
++ bool CanHandleMediaType(const nsACString& aMIMEType,
++ const nsAString* aCodecs);
++
++ static void Shutdown();
+
+ private:
+ GStreamerFormatHelper();
-+ GstCaps *ConvertFormatsToCaps(const char *aMIMEType,
-+ const char *aCodecs);
-+ char * const *CodecListFromCaps(GstCaps *aCaps);
-+ bool HaveElementsToProcessCaps(GstCaps *aCaps);
-+ GList *GetFactories();
++ GstCaps* ConvertFormatsToCaps(const char* aMIMEType,
++ const nsAString* aCodecs);
++ char* const *CodecListFromCaps(GstCaps* aCaps);
++ bool HaveElementsToProcessCaps(GstCaps* aCaps);
++ GList* GetFactories();
++
++ static GStreamerFormatHelper* gInstance;
++
++ /* table to convert from container MIME types to GStreamer elements */
++ static char const *const mContainers[4][2];
+
-+ static GStreamerFormatHelper *gInstance;
++ /* table to convert from codec MIME types to GStreamer elements */
++ static char const *const mCodecs[8][2];
+
-+ const char *mContainers[3][2];
-+ const char *mCodecs[7][2];
-+ GList *mFactories;
++ /* list of GStreamer element factories
++ * Element factories are the basic types retrieved from the GStreamer
++ * registry, they describe all plugins and elements that GStreamer can
++ * create.
++ * This means that element factories are useful for automated element
++ * instancing, such as what autopluggers do,
++ * and for creating lists of available elements. */
++ GList* mFactories;
++
++ /* Storage for the default registrys feature list cookie.
++ * It changes every time a feature is added to or removed from the
++ * GStreamer registry. */
+ uint32_t mCookie;
+};
+
+#endif
+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
+@@ -13,21 +13,23 @@
+ MODULE = content
+ LIBRARY_NAME = gkcongstreamer_s
+ LIBXUL_LIBRARY = 1
+
+
+ EXPORTS += \
+ GStreamerDecoder.h \
+ GStreamerReader.h \
++ GStreamerFormatHelper.h \
+ $(NULL)
+
+ CPPSRCS = \
+ GStreamerReader.cpp \
+ GStreamerDecoder.cpp \
++ GStreamerFormatHelper.cpp \
+ $(NULL)
+
+ FORCE_STATIC_LIB = 1
+
+ include $(topsrcdir)/config/rules.mk
+
+ CFLAGS += $(GSTREAMER_CFLAGS)
+ CXXFLAGS += $(GSTREAMER_CFLAGS)
+diff --git a/layout/build/Makefile.in b/layout/build/Makefile.in
+--- a/layout/build/Makefile.in
++++ b/layout/build/Makefile.in
+@@ -316,16 +316,20 @@
+ -I$(topsrcdir)/js/xpconnect/loader \
+ -I$(topsrcdir)/caps/include \
+ -I$(topsrcdir)/netwerk/base/src \
+ -I$(topsrcdir)/content/svg/content/src \
+ -I$(topsrcdir)/extensions/cookie \
+ -I$(topsrcdir)/netwerk/cookie \
+ $(NULL)
+
++ifdef MOZ_GSTREAMER
++LOCAL_INCLUDES += $(GSTREAMER_CFLAGS)
++endif
++
+ ifdef MOZ_B2G_RIL #{
+ LOCAL_INCLUDES += -I$(topsrcdir)/dom/system/gonk
+ endif #}
+
+ ifdef MOZ_B2G_FM #{
+ LOCAL_INCLUDES += -I$(topsrcdir)/dom/fm
+ endif #}
+
+diff --git a/layout/build/nsLayoutStatics.cpp b/layout/build/nsLayoutStatics.cpp
+--- a/layout/build/nsLayoutStatics.cpp
++++ b/layout/build/nsLayoutStatics.cpp
+@@ -78,16 +78,20 @@
+ #ifdef MOZ_MEDIA_PLUGINS
+ #include "MediaPluginHost.h"
+ #endif
+
+ #ifdef MOZ_WMF
+ #include "WMFDecoder.h"
+ #endif
+
++#ifdef MOZ_GSTREAMER
++#include "GStreamerFormatHelper.h"
++#endif
++
+ #ifdef MOZ_SYDNEYAUDIO
+ #include "AudioStream.h"
+ #endif
+
+ #include "nsError.h"
+
+ #include "nsCycleCollector.h"
+ #include "nsJSEnvironment.h"
+@@ -336,16 +340,20 @@
+ nsXBLService::Shutdown();
+ nsAutoCopyListener::Shutdown();
+ FrameLayerBuilder::Shutdown();
+
+ #ifdef MOZ_MEDIA_PLUGINS
+ MediaPluginHost::Shutdown();
+ #endif
+
++#ifdef MOZ_GSTREAMER
++ GStreamerFormatHelper::Shutdown();
++#endif
++
+ #ifdef MOZ_SYDNEYAUDIO
+ AudioStream::ShutdownLibrary();
+ #endif
+
+ #ifdef MOZ_WMF
+ WMFDecoder::UnloadDLLs();
+ #endif
+
--- a/mozilla-kde.patch Sun Feb 03 16:47:11 2013 +0100
+++ b/mozilla-kde.patch Mon Feb 04 08:00:25 2013 +0100
@@ -7,7 +7,7 @@
diff --git a/modules/libpref/src/Makefile.in b/modules/libpref/src/Makefile.in
--- a/modules/libpref/src/Makefile.in
+++ b/modules/libpref/src/Makefile.in
-@@ -45,14 +45,16 @@ GREPREF_FILES = $(topsrcdir)/netwerk/bas
+@@ -54,14 +54,15 @@ endif
# Optimizer bug with GCC 3.2.2 on OS/2
ifeq ($(OS_ARCH), OS2)
nsPrefService.$(OBJ_SUFFIX): nsPrefService.cpp
@@ -17,9 +17,8 @@
endif
+LOCAL_INCLUDES += -I$(topsrcdir)/toolkit/xre
-+
- greprefs.js: $(GREPREF_FILES)
+ greprefs.js: $(grepref_files)
$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(PREF_PPFLAGS) $(DEFINES) $(ACDEFINES) $(XULPPFLAGS) $^ > $@
libs:: greprefs.js
@@ -39,13 +38,13 @@
+#include "nsKDEUtils.h"
#include "nsQuickSort.h"
- #include "prmem.h"
#include "pldhash.h"
#include "prefapi.h"
#include "prefread.h"
#include "prefapi_private_data.h"
-@@ -950,16 +951,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char
+
+@@ -946,16 +947,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char
static nsresult pref_LoadPrefsInDirList(const char *listId)
{
@@ -80,7 +79,7 @@
return NS_OK;
bool hasMore;
-@@ -975,17 +994,17 @@ static nsresult pref_LoadPrefsInDirList(
+@@ -971,17 +990,17 @@ static nsresult pref_LoadPrefsInDirList(
nsAutoCString leaf;
path->GetNativeLeafName(leaf);
@@ -99,7 +98,7 @@
{
nsZipItemPtr<char> manifest(jarReader, name, true);
NS_ENSURE_TRUE(manifest.Buffer(), NS_ERROR_NOT_AVAILABLE);
-@@ -1079,28 +1098,40 @@ static nsresult pref_InitInitialObjects(
+@@ -1075,28 +1094,40 @@ 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)
@@ -180,7 +179,7 @@
#include "AndroidBridge.h"
#endif
-@@ -2740,16 +2744,25 @@ nsDownload::SetState(DownloadState aStat
+@@ -2739,16 +2743,25 @@ nsDownload::SetState(DownloadState aStat
nsCOMPtr<nsIPrefBranch> pref(do_GetService(NS_PREFSERVICE_CONTRACTID));
// Master pref to control this function.
@@ -207,14 +206,14 @@
showTaskbarAlert = goat > alertIntervalUSec;
@@ -2775,19 +2788,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
// the items they downloaded will have been removed.
alerts->ShowAlertNotification(
NS_LITERAL_STRING(DOWNLOAD_MANAGER_ALERT_ICON), title,
- message, !removeWhenDone, EmptyString(), mDownloadManager,
- EmptyString());
+ message, !removeWhenDone,
+ mPrivate ? NS_LITERAL_STRING("private") : NS_LITERAL_STRING("non-private"),
+ mDownloadManager, EmptyString());
- }
+ }
}
@@ -1366,7 +1365,7 @@
+ if (this.lastSelected) {
+ lastPane = document.getElementById(this.lastSelected);
+ if (!lastPane) {
-+ this.lastSelected = null;
++ this.lastSelected = "";
+ }
+ }
+
--- a/mozilla-shared-nss-db.patch Sun Feb 03 16:47:11 2013 +0100
+++ b/mozilla-shared-nss-db.patch Mon Feb 04 08:00:25 2013 +0100
@@ -7,7 +7,7 @@
diff --git a/configure.in b/configure.in
--- a/configure.in
+++ b/configure.in
-@@ -8108,16 +8108,31 @@ AC_SUBST(QCMS_LIBS)
+@@ -8275,16 +8275,31 @@ AC_SUBST(QCMS_LIBS)
dnl ========================================================
dnl HarfBuzz
@@ -42,7 +42,7 @@
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
-@@ -93,10 +93,13 @@ DEFINES += \
+@@ -92,16 +92,19 @@ DEFINES += \
$(NULL)
EXPORTS += \
@@ -54,6 +54,12 @@
+LOCAL_INCLUDES += $(NSSHELPER_CFLAGS)
+EXTRA_DSO_LDOPTS += $(NSSHELPER_LIBS)
+
+ EXPORTS_NAMESPACES = mozilla
+
+ EXPORTS_mozilla += \
+ PublicSSL.h \
+ $(NULL)
+
include $(topsrcdir)/config/rules.mk
diff --git a/security/manager/ssl/src/nsNSSComponent.cpp b/security/manager/ssl/src/nsNSSComponent.cpp
@@ -83,7 +89,7 @@
#include "nsNetUtil.h"
#include "nsAppDirectoryServiceDefs.h"
#include "nsDirectoryService.h"
-@@ -1735,18 +1742,34 @@ nsNSSComponent::InitializeNSS(bool showW
+@@ -1682,18 +1689,34 @@ nsNSSComponent::InitializeNSS(bool showW
ConfigureInternalPKCS11Token();
// The NSS_INIT_NOROOTINIT flag turns off the loading of the root certs
@@ -123,7 +129,7 @@
diff --git a/toolkit/library/Makefile.in b/toolkit/library/Makefile.in
--- a/toolkit/library/Makefile.in
+++ b/toolkit/library/Makefile.in
-@@ -484,17 +484,17 @@ EXTRA_DSO_LDOPTS += -INCREMENTAL:NO
+@@ -500,17 +500,17 @@ EXTRA_DSO_LDOPTS += -INCREMENTAL:NO
endif
endif
endif
--- a/mozilla-webrtc-ppc.patch Sun Feb 03 16:47:11 2013 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-Submitted-by: schwab@@linux-m68k.org
-Subject: fix PPC build
-References: (not delivered with the patch but apparently mix of:)
-Bug 750869 - Support WebRTC for Android in our build system (TM:20)
-Bug 814693 - Build failure on Debian powerpc (TM:20)
-
-diff --git a/media/webrtc/shared_libs.mk b/media/webrtc/shared_libs.mk
---- a/media/webrtc/shared_libs.mk
-+++ b/media/webrtc/shared_libs.mk
-@@ -23,33 +23,39 @@ WEBRTC_LIBS = \
- $(call EXPAND_LIBNAME_PATH,video_render_module,$(DEPTH)/media/webrtc/trunk/src/modules/modules_video_render_module) \
- $(call EXPAND_LIBNAME_PATH,video_engine_core,$(DEPTH)/media/webrtc/trunk/src/video_engine/video_engine_video_engine_core) \
- $(call EXPAND_LIBNAME_PATH,media_file,$(DEPTH)/media/webrtc/trunk/src/modules/modules_media_file) \
- $(call EXPAND_LIBNAME_PATH,rtp_rtcp,$(DEPTH)/media/webrtc/trunk/src/modules/modules_rtp_rtcp) \
- $(call EXPAND_LIBNAME_PATH,udp_transport,$(DEPTH)/media/webrtc/trunk/src/modules/modules_udp_transport) \
- $(call EXPAND_LIBNAME_PATH,bitrate_controller,$(DEPTH)/media/webrtc/trunk/src/modules/modules_bitrate_controller) \
- $(call EXPAND_LIBNAME_PATH,remote_bitrate_estimator,$(DEPTH)/media/webrtc/trunk/src/modules/modules_remote_bitrate_estimator) \
- $(call EXPAND_LIBNAME_PATH,video_processing,$(DEPTH)/media/webrtc/trunk/src/modules/modules_video_processing) \
-- $(call EXPAND_LIBNAME_PATH,video_processing_sse2,$(DEPTH)/media/webrtc/trunk/src/modules/modules_video_processing_sse2) \
- $(call EXPAND_LIBNAME_PATH,voice_engine_core,$(DEPTH)/media/webrtc/trunk/src/voice_engine/voice_engine_voice_engine_core) \
- $(call EXPAND_LIBNAME_PATH,audio_conference_mixer,$(DEPTH)/media/webrtc/trunk/src/modules/modules_audio_conference_mixer) \
- $(call EXPAND_LIBNAME_PATH,audio_device,$(DEPTH)/media/webrtc/trunk/src/modules/modules_audio_device) \
- $(call EXPAND_LIBNAME_PATH,audio_processing,$(DEPTH)/media/webrtc/trunk/src/modules/modules_audio_processing) \
- $(call EXPAND_LIBNAME_PATH,aec,$(DEPTH)/media/webrtc/trunk/src/modules/modules_aec) \
-- $(call EXPAND_LIBNAME_PATH,aec_sse2,$(DEPTH)/media/webrtc/trunk/src/modules/modules_aec_sse2) \
- $(call EXPAND_LIBNAME_PATH,apm_util,$(DEPTH)/media/webrtc/trunk/src/modules/modules_apm_util) \
- $(call EXPAND_LIBNAME_PATH,aecm,$(DEPTH)/media/webrtc/trunk/src/modules/modules_aecm) \
- $(call EXPAND_LIBNAME_PATH,agc,$(DEPTH)/media/webrtc/trunk/src/modules/modules_agc) \
- $(call EXPAND_LIBNAME_PATH,ns,$(DEPTH)/media/webrtc/trunk/src/modules/modules_ns) \
- $(call EXPAND_LIBNAME_PATH,yuv,$(DEPTH)/media/webrtc/trunk/third_party/libyuv/libyuv_libyuv) \
- $(call EXPAND_LIBNAME_PATH,webrtc_jpeg,$(DEPTH)/media/webrtc/trunk/src/common_video/common_video_webrtc_jpeg) \
- $(call EXPAND_LIBNAME_PATH,nicer,$(DEPTH)/media/mtransport/third_party/nICEr/nicer_nicer) \
- $(call EXPAND_LIBNAME_PATH,nrappkit,$(DEPTH)/media/mtransport/third_party/nrappkit/nrappkit_nrappkit) \
- $(NULL)
-
-+# if we're on an intel arch, we want SSE2 optimizations
-+ifneq (,$(INTEL_ARCHITECTURE))
-+WEBRTC_LIBS += \
-+ $(call EXPAND_LIBNAME_PATH,video_processing_sse2,$(DEPTH)/media/webrtc/trunk/src/modules/modules_video_processing_sse2) \
-+ $(call EXPAND_LIBNAME_PATH,aec_sse2,$(DEPTH)/media/webrtc/trunk/src/modules/modules_aec_sse2) \
-+ $(NULL)
-+endif
-+
- # If you enable one of these codecs in webrtc_config.gypi, you'll need to re-add the
- # relevant library from this list:
- #
- # $(call EXPAND_LIBNAME_PATH,G722,$(DEPTH)/media/webrtc/trunk/src/modules/modules_G722) \
- # $(call EXPAND_LIBNAME_PATH,iLBC,$(DEPTH)/media/webrtc/trunk/src/modules/modules_iLBC) \
- # $(call EXPAND_LIBNAME_PATH,iSAC,$(DEPTH)/media/webrtc/trunk/src/modules/modules_iSAC) \
- # $(call EXPAND_LIBNAME_PATH,iSACFix,$(DEPTH)/media/webrtc/trunk/src/modules/modules_iSACFix) \
- #
-diff --git a/media/webrtc/trunk/src/modules/audio_coding/codecs/pcm16b/pcm16b.gypi b/media/webrtc/trunk/src/modules/audio_coding/codecs/pcm16b/pcm16b.gypi
---- a/media/webrtc/trunk/src/modules/audio_coding/codecs/pcm16b/pcm16b.gypi
-+++ b/media/webrtc/trunk/src/modules/audio_coding/codecs/pcm16b/pcm16b.gypi
-@@ -6,16 +6,19 @@
- # in the file PATENTS. All contributing project authors may
- # be found in the AUTHORS file in the root of the source tree.
-
- {
- 'targets': [
- {
- 'target_name': 'PCM16B',
- 'type': '<(library)',
-+ 'dependencies': [
-+ '<(webrtc_root)/common_audio/common_audio.gyp:signal_processing',
-+ ],
- 'include_dirs': [
- 'include',
- ],
- 'direct_dependent_settings': {
- 'include_dirs': [
- 'include',
- ],
- },
-diff --git a/media/webrtc/trunk/src/typedefs.h b/media/webrtc/trunk/src/typedefs.h
---- a/media/webrtc/trunk/src/typedefs.h
-+++ b/media/webrtc/trunk/src/typedefs.h
-@@ -52,16 +52,24 @@
- //#define WEBRTC_ARCH_ARMEL
- #define WEBRTC_ARCH_32_BITS
- #define WEBRTC_ARCH_LITTLE_ENDIAN
- #define WEBRTC_LITTLE_ENDIAN
- #elif defined(__MIPSEL__)
- #define WEBRTC_ARCH_32_BITS
- #define WEBRTC_ARCH_LITTLE_ENDIAN
- #define WEBRTC_LITTLE_ENDIAN
-+#elif defined(__powerpc__)
-+#if defined(__powerpc64__)
-+#define WEBRTC_ARCH_64_BITS
-+#else
-+#define WEBRTC_ARCH_32_BITS
-+#endif
-+#define WEBRTC_ARCH_BIG_ENDIAN
-+#define WEBRTC_BIG_ENDIAN
- #else
- #error Please add support for your architecture in typedefs.h
- #endif
-
- #if defined(__SSE2__) || defined(_MSC_VER)
- #define WEBRTC_USE_SSE2
- #endif
-
--- a/series Sun Feb 03 16:47:11 2013 +0100
+++ b/series Mon Feb 04 08:00:25 2013 +0100
@@ -18,7 +18,6 @@
mozilla-ppc.patch
mozilla-idldir.patch
mozilla-libproxy-compat.patch
-mozilla-webrtc-ppc.patch
#mozilla-disable-neon-option.patch
# Firefox patches