mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge inbound and m-c.
This commit is contained in:
commit
d4115d34f7
@ -20,8 +20,6 @@ GARBAGE += $(MIDL_GENERATED_FILES)
|
||||
|
||||
FORCE_SHARED_LIB = 1
|
||||
|
||||
SRCS_IN_OBJDIR = 1
|
||||
|
||||
# Please keep this list in sync with the moz.build file until the rest of this
|
||||
# Makefile is ported over.
|
||||
MIDL_INTERFACES = \
|
||||
|
@ -18,8 +18,6 @@ GARBAGE += $(MIDL_GENERATED_FILES) done_gen dlldata.c
|
||||
|
||||
FORCE_SHARED_LIB = 1
|
||||
|
||||
SRCS_IN_OBJDIR = 1
|
||||
|
||||
CSRCS = \
|
||||
dlldata.c \
|
||||
ISimpleDOMNode_p.c \
|
||||
|
@ -3612,6 +3612,7 @@ function mimeTypeIsTextBased(aMimeType)
|
||||
aMimeType.endsWith("+xml") ||
|
||||
aMimeType == "application/x-javascript" ||
|
||||
aMimeType == "application/javascript" ||
|
||||
aMimeType == "application/json" ||
|
||||
aMimeType == "application/xml" ||
|
||||
aMimeType == "mozilla.application/cached-xul";
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
this.popup._input = this;
|
||||
]]>
|
||||
</constructor>
|
||||
|
||||
<method name="openPopup">
|
||||
<body>
|
||||
<![CDATA[
|
||||
@ -37,6 +38,21 @@
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
||||
<method name="formatValue">
|
||||
<body>
|
||||
<![CDATA[
|
||||
BrowserUI.formatURI();
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
||||
<method name="trimValue">
|
||||
<parameter name="aURL"/>
|
||||
<body><![CDATA[
|
||||
return BrowserUI.trimURL(aURL);
|
||||
]]></body>
|
||||
</method>
|
||||
</implementation>
|
||||
|
||||
<handlers>
|
||||
|
@ -97,7 +97,11 @@ var BrowserUI = {
|
||||
window.addEventListener("MozImprecisePointer", this, true);
|
||||
|
||||
Services.prefs.addObserver("browser.cache.disk_cache_ssl", this, false);
|
||||
Services.prefs.addObserver("browser.urlbar.formatting.enabled", this, false);
|
||||
Services.prefs.addObserver("browser.urlbar.trimURLs", this, false);
|
||||
Services.obs.addObserver(this, "metro_viewstate_changed", false);
|
||||
|
||||
this._edit.inputField.controllers.insertControllerAt(0, this._copyCutURIController);
|
||||
|
||||
// Init core UI modules
|
||||
ContextUI.init();
|
||||
@ -239,11 +243,20 @@ var BrowserUI = {
|
||||
|
||||
getDisplayURI: function(browser) {
|
||||
let uri = browser.currentURI;
|
||||
let spec = uri.spec;
|
||||
|
||||
try {
|
||||
uri = gURIFixup.createExposableURI(uri);
|
||||
spec = gURIFixup.createExposableURI(uri).spec;
|
||||
} catch (ex) {}
|
||||
|
||||
return uri.spec;
|
||||
try {
|
||||
let charset = browser.characterSet;
|
||||
let textToSubURI = Cc["@mozilla.org/intl/texttosuburi;1"].
|
||||
getService(Ci.nsITextToSubURI);
|
||||
spec = textToSubURI.unEscapeNonAsciiURI(charset, spec);
|
||||
} catch (ex) {}
|
||||
|
||||
return spec;
|
||||
},
|
||||
|
||||
/**
|
||||
@ -560,6 +573,12 @@ var BrowserUI = {
|
||||
case "browser.cache.disk_cache_ssl":
|
||||
this._sslDiskCacheEnabled = Services.prefs.getBoolPref(aData);
|
||||
break;
|
||||
case "browser.urlbar.formatting.enabled":
|
||||
this._formattingEnabled = Services.prefs.getBookPref(aData);
|
||||
break;
|
||||
case "browser.urlbar.trimURLs":
|
||||
this._mayTrimURLs = Services.prefs.getBoolPref(aData);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case "metro_viewstate_changed":
|
||||
@ -650,11 +669,120 @@ var BrowserUI = {
|
||||
Elements.urlbarState.setAttribute("mode", "view");
|
||||
},
|
||||
|
||||
_trimURL: function _trimURL(aURL) {
|
||||
// This function must not modify the given URL such that calling
|
||||
// nsIURIFixup::createFixupURI with the result will produce a different URI.
|
||||
return aURL /* remove single trailing slash for http/https/ftp URLs */
|
||||
.replace(/^((?:http|https|ftp):\/\/[^/]+)\/$/, "$1")
|
||||
/* remove http:// unless the host starts with "ftp\d*\." or contains "@" */
|
||||
.replace(/^http:\/\/((?!ftp\d*\.)[^\/@]+(?:\/|$))/, "$1");
|
||||
},
|
||||
|
||||
trimURL: function trimURL(aURL) {
|
||||
return this.mayTrimURLs ? this._trimURL(aURL) : aURL;
|
||||
},
|
||||
|
||||
_setURI: function _setURI(aURL) {
|
||||
this._edit.value = aURL;
|
||||
this.lastKnownGoodURL = aURL;
|
||||
},
|
||||
|
||||
_getSelectedURIForClipboard: function _getSelectedURIForClipboard() {
|
||||
// Grab the actual input field's value, not our value, which could include moz-action:
|
||||
let inputVal = this._edit.inputField.value;
|
||||
let selectedVal = inputVal.substring(this._edit.selectionStart, this._edit.electionEnd);
|
||||
|
||||
// If the selection doesn't start at the beginning or doesn't span the full domain or
|
||||
// the URL bar is modified, nothing else to do here.
|
||||
if (this._edit.selectionStart > 0 || this._edit.valueIsTyped)
|
||||
return selectedVal;
|
||||
// The selection doesn't span the full domain if it doesn't contain a slash and is
|
||||
// followed by some character other than a slash.
|
||||
if (!selectedVal.contains("/")) {
|
||||
let remainder = inputVal.replace(selectedVal, "");
|
||||
if (remainder != "" && remainder[0] != "/")
|
||||
return selectedVal;
|
||||
}
|
||||
|
||||
let uriFixup = Cc["@mozilla.org/docshell/urifixup;1"].getService(Ci.nsIURIFixup);
|
||||
|
||||
let uri;
|
||||
try {
|
||||
uri = uriFixup.createFixupURI(inputVal, Ci.nsIURIFixup.FIXUP_FLAG_USE_UTF8);
|
||||
} catch (e) {}
|
||||
if (!uri)
|
||||
return selectedVal;
|
||||
|
||||
// Only copy exposable URIs
|
||||
try {
|
||||
uri = uriFixup.createExposableURI(uri);
|
||||
} catch (ex) {}
|
||||
|
||||
// If the entire URL is selected, just use the actual loaded URI.
|
||||
if (inputVal == selectedVal) {
|
||||
// ... but only if isn't a javascript: or data: URI, since those
|
||||
// are hard to read when encoded
|
||||
if (!uri.schemeIs("javascript") && !uri.schemeIs("data")) {
|
||||
// Parentheses are known to confuse third-party applications (bug 458565).
|
||||
selectedVal = uri.spec.replace(/[()]/g, function (c) escape(c));
|
||||
}
|
||||
|
||||
return selectedVal;
|
||||
}
|
||||
|
||||
// Just the beginning of the URL is selected, check for a trimmed value
|
||||
let spec = uri.spec;
|
||||
let trimmedSpec = this.trimURL(spec);
|
||||
if (spec != trimmedSpec) {
|
||||
// Prepend the portion that trimURL removed from the beginning.
|
||||
// This assumes trimURL will only truncate the URL at
|
||||
// the beginning or end (or both).
|
||||
let trimmedSegments = spec.split(trimmedSpec);
|
||||
selectedVal = trimmedSegments[0] + selectedVal;
|
||||
}
|
||||
|
||||
return selectedVal;
|
||||
},
|
||||
|
||||
_copyCutURIController: {
|
||||
doCommand: function(aCommand) {
|
||||
let urlbar = BrowserUI._edit;
|
||||
let val = BrowserUI._getSelectedURIForClipboard();
|
||||
if (!val)
|
||||
return;
|
||||
|
||||
if (aCommand == "cmd_cut" && this.isCommandEnabled(aCommand)) {
|
||||
let start = urlbar.selectionStart;
|
||||
let end = urlbar.selectionEnd;
|
||||
urlbar.inputField.value = urlbar.inputField.value.substring(0, start) +
|
||||
urlbar.inputField.value.substring(end);
|
||||
urlbar.selectionStart = urlbar.selectionEnd = start;
|
||||
}
|
||||
|
||||
Cc["@mozilla.org/widget/clipboardhelper;1"]
|
||||
.getService(Ci.nsIClipboardHelper)
|
||||
.copyString(val, document);
|
||||
},
|
||||
|
||||
supportsCommand: function(aCommand) {
|
||||
switch (aCommand) {
|
||||
case "cmd_copy":
|
||||
case "cmd_cut":
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
isCommandEnabled: function(aCommand) {
|
||||
let urlbar = BrowserUI._edit;
|
||||
return this.supportsCommand(aCommand) &&
|
||||
(aCommand != "cmd_cut" || !urlbar.readOnly) &&
|
||||
urlbar.selectionStart < urlbar.selectionEnd;
|
||||
},
|
||||
|
||||
onEvent: function(aEventName) {}
|
||||
},
|
||||
|
||||
_urlbarClicked: function _urlbarClicked() {
|
||||
// If the urlbar is not already focused, focus it and select the contents.
|
||||
if (Elements.urlbarState.getAttribute("mode") != "edit")
|
||||
@ -662,6 +790,7 @@ var BrowserUI = {
|
||||
},
|
||||
|
||||
_editURI: function _editURI(aShouldDismiss) {
|
||||
this._clearURIFormatting();
|
||||
this._edit.focus();
|
||||
this._edit.select();
|
||||
|
||||
@ -671,11 +800,77 @@ var BrowserUI = {
|
||||
ContextUI.dismissTabs();
|
||||
},
|
||||
|
||||
formatURI: function formatURI() {
|
||||
if (!this.formattingEnabled ||
|
||||
Elements.urlbarState.getAttribute("mode") == "edit")
|
||||
return;
|
||||
|
||||
let controller = this._edit.editor.selectionController;
|
||||
let selection = controller.getSelection(controller.SELECTION_URLSECONDARY);
|
||||
selection.removeAllRanges();
|
||||
|
||||
let textNode = this._edit.editor.rootElement.firstChild;
|
||||
let value = textNode.textContent;
|
||||
|
||||
let protocol = value.match(/^[a-z\d.+\-]+:(?=[^\d])/);
|
||||
if (protocol &&
|
||||
["http:", "https:", "ftp:"].indexOf(protocol[0]) == -1)
|
||||
return;
|
||||
let matchedURL = value.match(/^((?:[a-z]+:\/\/)?(?:[^\/]+@)?)(.+?)(?::\d+)?(?:\/|$)/);
|
||||
if (!matchedURL)
|
||||
return;
|
||||
|
||||
let [, preDomain, domain] = matchedURL;
|
||||
let baseDomain = domain;
|
||||
let subDomain = "";
|
||||
// getBaseDomainFromHost doesn't recognize IPv6 literals in brackets as IPs (bug 667159)
|
||||
if (domain[0] != "[") {
|
||||
try {
|
||||
baseDomain = Services.eTLD.getBaseDomainFromHost(domain);
|
||||
if (!domain.endsWith(baseDomain)) {
|
||||
// getBaseDomainFromHost converts its resultant to ACE.
|
||||
let IDNService = Cc["@mozilla.org/network/idn-service;1"]
|
||||
.getService(Ci.nsIIDNService);
|
||||
baseDomain = IDNService.convertACEtoUTF8(baseDomain);
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
if (baseDomain != domain) {
|
||||
subDomain = domain.slice(0, -baseDomain.length);
|
||||
}
|
||||
|
||||
let rangeLength = preDomain.length + subDomain.length;
|
||||
if (rangeLength) {
|
||||
let range = document.createRange();
|
||||
range.setStart(textNode, 0);
|
||||
range.setEnd(textNode, rangeLength);
|
||||
selection.addRange(range);
|
||||
}
|
||||
|
||||
let startRest = preDomain.length + domain.length;
|
||||
if (startRest < value.length) {
|
||||
let range = document.createRange();
|
||||
range.setStart(textNode, startRest);
|
||||
range.setEnd(textNode, value.length);
|
||||
selection.addRange(range);
|
||||
}
|
||||
},
|
||||
|
||||
_clearURIFormatting: function _clearURIFormatting() {
|
||||
if (!this.formattingEnabled)
|
||||
return;
|
||||
|
||||
let controller = this._edit.editor.selectionController;
|
||||
let selection = controller.getSelection(controller.SELECTION_URLSECONDARY);
|
||||
selection.removeAllRanges();
|
||||
},
|
||||
|
||||
_urlbarBlurred: function _urlbarBlurred() {
|
||||
let state = Elements.urlbarState;
|
||||
if (state.getAttribute("mode") == "edit")
|
||||
state.removeAttribute("mode");
|
||||
this._updateToolbar();
|
||||
this.formatURI();
|
||||
},
|
||||
|
||||
_closeOrQuit: function _closeOrQuit() {
|
||||
@ -959,6 +1154,24 @@ var BrowserUI = {
|
||||
return this._sslDiskCacheEnabled;
|
||||
},
|
||||
|
||||
_formattingEnabled: null,
|
||||
|
||||
get formattingEnabled() {
|
||||
if (this._formattingEnabled === null) {
|
||||
this._formattingEnabled = Services.prefs.getBoolPref("browser.urlbar.formatting.enabled");
|
||||
}
|
||||
return this._formattingEnabled;
|
||||
},
|
||||
|
||||
_mayTrimURLs: null,
|
||||
|
||||
get mayTrimURLs() {
|
||||
if (this._mayTrimURLs === null) {
|
||||
this._mayTrimURLs = Services.prefs.getBoolPref("browser.urlbar.trimURLs");
|
||||
}
|
||||
return this._mayTrimURLs;
|
||||
},
|
||||
|
||||
supportsCommand : function(cmd) {
|
||||
var isSupported = false;
|
||||
switch (cmd) {
|
||||
|
@ -261,6 +261,8 @@ pref("places.favicons.optimizeToDimension", 25);
|
||||
|
||||
// various and sundry awesomebar prefs (should remove/re-evaluate
|
||||
// these once bug 447900 is fixed)
|
||||
pref("browser.urlbar.trimURLs", true);
|
||||
pref("browser.urlbar.formatting.enabled", true);
|
||||
pref("browser.urlbar.clickSelectsAll", true);
|
||||
pref("browser.urlbar.doubleClickSelectsAll", true);
|
||||
pref("browser.urlbar.autoFill", false);
|
||||
|
@ -308,6 +308,12 @@ documenttab[selected] .documenttab-selection {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
#urlbar-edit > hbox > .textbox-input-box > .textbox-input:invalid {
|
||||
/* Hide error glow around the address bar that shows by default
|
||||
* when URLs are made invalid by trmming. */
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
/* Combined stop-reload button */
|
||||
#tool-reload {
|
||||
list-style-image: url("chrome://browser/skin/images/reload.png");
|
||||
|
@ -47,15 +47,15 @@
|
||||
border-radius: 5px;
|
||||
position: absolute;
|
||||
background: #0095dd;
|
||||
left:0px;
|
||||
top:0px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
|
||||
@keyframes orbit {
|
||||
0% {
|
||||
opacity: 1;
|
||||
z-index:99;
|
||||
z-index: 99;
|
||||
transform: rotate(180deg);
|
||||
animation-timing-function: ease-out;
|
||||
}
|
||||
@ -64,39 +64,34 @@
|
||||
opacity: 1;
|
||||
transform: rotate(300deg);
|
||||
animation-timing-function: linear;
|
||||
origin:0%;
|
||||
}
|
||||
|
||||
30% {
|
||||
opacity: 1;
|
||||
transform:rotate(410deg);
|
||||
transform: rotate(410deg);
|
||||
animation-timing-function: ease-in-out;
|
||||
origin:7%;
|
||||
}
|
||||
|
||||
39% {
|
||||
opacity: 1;
|
||||
transform: rotate(645deg);
|
||||
animation-timing-function: linear;
|
||||
origin:30%;
|
||||
}
|
||||
|
||||
70% {
|
||||
opacity: 1;
|
||||
transform: rotate(770deg);
|
||||
animation-timing-function: ease-out;
|
||||
origin:39%;
|
||||
}
|
||||
|
||||
75% {
|
||||
opacity: 1;
|
||||
transform: rotate(900deg);
|
||||
animation-timing-function: ease-out;
|
||||
origin:70%;
|
||||
}
|
||||
|
||||
76%, 100% {
|
||||
opacity: 0;
|
||||
transform:rotate(900deg);
|
||||
transform: rotate(900deg);
|
||||
}
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ function prompt(aWindowID, aCallID, aAudioRequested, aVideoRequested, aDevices)
|
||||
}
|
||||
|
||||
let contentWindow = Services.wm.getOuterWindowWithId(aWindowID);
|
||||
let host = contentWindow.document.documentURIObject.asciiHost;
|
||||
let host = contentWindow.document.documentURIObject.host;
|
||||
let browser = getBrowserForWindow(contentWindow);
|
||||
let chromeDoc = browser.ownerDocument;
|
||||
let chromeWin = chromeDoc.defaultView;
|
||||
|
@ -17,18 +17,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=777467
|
||||
SpecialPowers.addPermission("browser", true, document);
|
||||
SpecialPowers.addPermission("embed-apps", true, document);
|
||||
|
||||
var previousPrefs = {
|
||||
mozBrowserFramesEnabled: undefined,
|
||||
oop_by_default: undefined,
|
||||
};
|
||||
try {
|
||||
previousPrefs.mozBrowserFramesEnabled = SpecialPowers.getBoolPref('dom.mozBrowserFramesEnabled');
|
||||
} catch(e) {}
|
||||
|
||||
try {
|
||||
previousPrefs.oop_by_default = SpecialPowers.getBoolPref('dom.ipc.browser_frames.oop_by_default');
|
||||
} catch(e) {}
|
||||
|
||||
SpecialPowers.setBoolPref('dom.mozBrowserFramesEnabled', true);
|
||||
SpecialPowers.setBoolPref("dom.ipc.browser_frames.oop_by_default", false);
|
||||
</script>
|
||||
@ -66,13 +54,8 @@ addLoadEvent(function() {
|
||||
}
|
||||
|
||||
// Cleanup.
|
||||
if (previousPrefs.mozBrowserFramesEnabled !== undefined) {
|
||||
SpecialPowers.setBoolPref('dom.mozBrowserFramesEnabled', previousPrefs.mozBrowserFramesEnabled);
|
||||
}
|
||||
if (previousPrefs.oop_by_default !== undefined) {
|
||||
SpecialPowers.setBoolPref("dom.ipc.browser_frames.oop_by_default", previousPrefs.oop_by_default);
|
||||
}
|
||||
|
||||
SpecialPowers.clearUserPref('dom.mozBrowserFramesEnabled');
|
||||
SpecialPowers.clearUserPref('dom.ipc.browser_frames.oop_by_default');
|
||||
SpecialPowers.removePermission("browser", window.document);
|
||||
SpecialPowers.removePermission("embed-apps", window.document);
|
||||
|
||||
|
@ -44,19 +44,6 @@ using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
using namespace mozilla::dom::ipc;
|
||||
|
||||
|
||||
static bool
|
||||
IsChromeProcess()
|
||||
{
|
||||
nsCOMPtr<nsIXULRuntime> rt = do_GetService("@mozilla.org/xre/runtime;1");
|
||||
if (!rt)
|
||||
return true;
|
||||
|
||||
uint32_t type;
|
||||
rt->GetProcessType(&type);
|
||||
return type == nsIXULRuntime::PROCESS_TYPE_DEFAULT;
|
||||
}
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsFrameMessageManager)
|
||||
uint32_t count = tmp->mListeners.Length();
|
||||
for (uint32_t i = 0; i < count; i++) {
|
||||
@ -836,7 +823,8 @@ nsFrameMessageManager::Disconnect(bool aRemoveFromParent)
|
||||
nsresult
|
||||
NS_NewGlobalMessageManager(nsIMessageBroadcaster** aResult)
|
||||
{
|
||||
NS_ENSURE_TRUE(IsChromeProcess(), NS_ERROR_NOT_AVAILABLE);
|
||||
NS_ENSURE_TRUE(XRE_GetProcessType() == GeckoProcessType_Default,
|
||||
NS_ERROR_NOT_AVAILABLE);
|
||||
nsFrameMessageManager* mm = new nsFrameMessageManager(nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
@ -1387,7 +1375,8 @@ NS_NewParentProcessMessageManager(nsIMessageBroadcaster** aResult)
|
||||
{
|
||||
NS_ASSERTION(!nsFrameMessageManager::sParentProcessManager,
|
||||
"Re-creating sParentProcessManager");
|
||||
NS_ENSURE_TRUE(IsChromeProcess(), NS_ERROR_NOT_AVAILABLE);
|
||||
NS_ENSURE_TRUE(XRE_GetProcessType() == GeckoProcessType_Default,
|
||||
NS_ERROR_NOT_AVAILABLE);
|
||||
nsRefPtr<nsFrameMessageManager> mm = new nsFrameMessageManager(nullptr,
|
||||
nullptr,
|
||||
nullptr,
|
||||
@ -1432,7 +1421,7 @@ NS_NewChildProcessMessageManager(nsISyncMessageSender** aResult)
|
||||
"Re-creating sChildProcessManager");
|
||||
|
||||
MessageManagerCallback* cb;
|
||||
if (IsChromeProcess()) {
|
||||
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
||||
cb = new SameChildProcessMessageManagerCallback();
|
||||
} else {
|
||||
cb = new ChildProcessMessageManagerCallback();
|
||||
|
@ -32,9 +32,9 @@ function testHTMLDocuments(ids, isXHTML) {
|
||||
is(docType1.ownerDocument, doc1, "docType should have ownerDocument!");
|
||||
ok(!doc1.documentElement, "Document shouldn't have document element!");
|
||||
is(doc1.body, null, "Shouldn't have .body!");
|
||||
ok(doc1 instanceof SpecialPowers.Ci.nsIDOMHTMLDocument,
|
||||
ok(doc1 instanceof HTMLDocument,
|
||||
"Document should be an HTML document!");
|
||||
ok(!(doc1 instanceof SpecialPowers.Ci.nsIDOMSVGDocument),
|
||||
ok(!(doc1 instanceof SVGDocument),
|
||||
"Document shouldn't be an SVG document!");
|
||||
|
||||
var docType2 =
|
||||
@ -68,9 +68,9 @@ function testSVGDocument() {
|
||||
var doc1 = document.implementation.createDocument(null, null, docType1);
|
||||
is(docType1.ownerDocument, doc1, "docType should have ownerDocument!");
|
||||
ok(!doc1.documentElement, "Document shouldn't have document element!");
|
||||
ok(!(doc1 instanceof SpecialPowers.Ci.nsIDOMHTMLDocument),
|
||||
ok(!(doc1 instanceof HTMLDocument),
|
||||
"Document shouldn't be an HTML document!");
|
||||
ok(doc1 instanceof SpecialPowers.Ci.nsIDOMSVGDocument,
|
||||
ok(doc1 instanceof SVGDocument,
|
||||
"Document should be an SVG document!");
|
||||
|
||||
// SVG documents have .rootElement.
|
||||
@ -95,9 +95,9 @@ function testFooBarDocument() {
|
||||
var doc1 = document.implementation.createDocument(null, null, docType1);
|
||||
is(docType1.ownerDocument, doc1, "docType should have ownerDocument!");
|
||||
ok(!doc1.documentElement, "Document shouldn't have document element!");
|
||||
ok(!(doc1 instanceof SpecialPowers.Ci.nsIDOMHTMLDocument),
|
||||
ok(!(doc1 instanceof HTMLDocument),
|
||||
"Document shouldn't be an HTML document!");
|
||||
ok(!(doc1 instanceof SpecialPowers.Ci.nsIDOMSVGDocument),
|
||||
ok(!(doc1 instanceof SVGDocument),
|
||||
"Document shouldn't be an SVG document!");
|
||||
|
||||
var docType2 =
|
||||
@ -112,9 +112,9 @@ function testFooBarDocument() {
|
||||
function testNullDocTypeDocument() {
|
||||
var doc1 = document.implementation.createDocument(null, null, null);
|
||||
ok(!doc1.documentElement, "Document shouldn't have document element!");
|
||||
ok(!(doc1 instanceof SpecialPowers.Ci.nsIDOMHTMLDocument),
|
||||
ok(!(doc1 instanceof HTMLDocument),
|
||||
"Document shouldn't be an HTML document!");
|
||||
ok(!(doc1 instanceof SpecialPowers.Ci.nsIDOMSVGDocument),
|
||||
ok(!(doc1 instanceof SVGDocument),
|
||||
"Document shouldn't be an SVG document!");
|
||||
|
||||
var doc2 = document.implementation.createDocument("FooBarNS",
|
||||
|
@ -777,8 +777,6 @@ function test22()
|
||||
waitTest22 = true;
|
||||
|
||||
const pref_open = "network.websocket.timeout.open";
|
||||
var oldpref_open_value = 20;
|
||||
oldpref_open_value = SpecialPowers.getIntPref(pref_open);
|
||||
SpecialPowers.setIntPref(pref_open, 5);
|
||||
|
||||
var ws = CreateTestWS("ws://sub2.test2.example.org/tests/content/base/test/file_websocket", "test-22");
|
||||
@ -791,7 +789,7 @@ function test22()
|
||||
maybeFinished();
|
||||
};
|
||||
|
||||
SpecialPowers.setIntPref(pref_open, oldpref_open_value);
|
||||
SpecialPowers.clearUserPref(pref_open);
|
||||
doTest(23);
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,6 @@
|
||||
|
||||
#include "mozilla/dom/HTMLIFrameElement.h"
|
||||
#include "mozilla/dom/HTMLIFrameElementBinding.h"
|
||||
#include "nsIDOMSVGDocument.h"
|
||||
#include "nsMappedAttributes.h"
|
||||
#include "nsAttrValueInlines.h"
|
||||
#include "nsError.h"
|
||||
|
@ -28,7 +28,7 @@ HTMLLabelElement::WrapNode(JSContext *aCx, JS::Handle<JSObject*> aScope)
|
||||
return HTMLLabelElementBinding::Wrap(aCx, aScope, this);
|
||||
}
|
||||
|
||||
// nsISupports
|
||||
// nsISupports
|
||||
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(HTMLLabelElement, Element)
|
||||
@ -171,27 +171,26 @@ HTMLLabelElement::PostHandleEvent(nsEventChainPostVisitor& aVisitor)
|
||||
dragDistance.y > CLICK_DISTANCE ||
|
||||
dragDistance.y < -CLICK_DISTANCE;
|
||||
}
|
||||
|
||||
// Don't click the for-content if we did drag-select text or if we
|
||||
// have a kbd modifier (which adjusts a selection), or if it's a
|
||||
// double click (we already forwarded the first click event).
|
||||
if (dragSelect || event->clickCount > 1 ||
|
||||
event->IsShift() || event->IsControl() || event->IsAlt() ||
|
||||
event->IsMeta()) {
|
||||
// have a kbd modifier (which adjusts a selection).
|
||||
if (dragSelect || event->IsShift() || event->IsControl() ||
|
||||
event->IsAlt() || event->IsMeta()) {
|
||||
break;
|
||||
}
|
||||
|
||||
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
|
||||
if (fm) {
|
||||
// Use FLAG_BYMOVEFOCUS here so that the label is scrolled to.
|
||||
// Also, within HTMLInputElement::PostHandleEvent, inputs will
|
||||
// be selected only when focused via a key or when the navigation
|
||||
// flag is used and we want to select the text on label clicks as
|
||||
// well.
|
||||
nsCOMPtr<nsIDOMElement> elem = do_QueryInterface(content);
|
||||
fm->SetFocus(elem, nsIFocusManager::FLAG_BYMOVEFOCUS);
|
||||
// Only set focus on the first click of multiple clicks to prevent
|
||||
// to prevent immediate de-focus.
|
||||
if (event->clickCount <= 1) {
|
||||
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
|
||||
if (fm) {
|
||||
// Use FLAG_BYMOVEFOCUS here so that the label is scrolled to.
|
||||
// Also, within HTMLInputElement::PostHandleEvent, inputs will
|
||||
// be selected only when focused via a key or when the navigation
|
||||
// flag is used and we want to select the text on label clicks as
|
||||
// well.
|
||||
nsCOMPtr<nsIDOMElement> elem = do_QueryInterface(content);
|
||||
fm->SetFocus(elem, nsIFocusManager::FLAG_BYMOVEFOCUS);
|
||||
}
|
||||
}
|
||||
|
||||
// Dispatch a new click event to |content|
|
||||
// (For compatibility with IE, we do only left click. If
|
||||
// we wanted to interpret the HTML spec very narrowly, we
|
||||
|
@ -13,7 +13,6 @@
|
||||
#include "nsIPluginDocument.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsThreadUtils.h"
|
||||
#include "nsIDOMSVGDocument.h"
|
||||
#include "nsIScriptError.h"
|
||||
#include "nsIWidget.h"
|
||||
#include "nsContentUtils.h"
|
||||
|
@ -19,6 +19,7 @@ namespace mozilla {
|
||||
* for regular audio contexts, and the rate requested by the web content
|
||||
* for offline audio contexts.
|
||||
* Each chunk in the track is a single block of WEBAUDIO_BLOCK_SIZE samples.
|
||||
* Note: This must be a different value than MEDIA_STREAM_DEST_TRACK_ID
|
||||
*/
|
||||
static const int AUDIO_NODE_STREAM_TRACK_ID = 1;
|
||||
|
||||
@ -235,23 +236,6 @@ AudioNodeStream::SetChannelMixingParametersImpl(uint32_t aNumberOfChannels,
|
||||
mChannelInterpretation = aChannelInterpretation;
|
||||
}
|
||||
|
||||
StreamBuffer::Track*
|
||||
AudioNodeStream::EnsureTrack()
|
||||
{
|
||||
StreamBuffer::Track* track = mBuffer.FindTrack(AUDIO_NODE_STREAM_TRACK_ID);
|
||||
if (!track) {
|
||||
nsAutoPtr<MediaSegment> segment(new AudioSegment());
|
||||
for (uint32_t j = 0; j < mListeners.Length(); ++j) {
|
||||
MediaStreamListener* l = mListeners[j];
|
||||
l->NotifyQueuedTrackChanges(Graph(), AUDIO_NODE_STREAM_TRACK_ID, mSampleRate, 0,
|
||||
MediaStreamListener::TRACK_EVENT_CREATED,
|
||||
*segment);
|
||||
}
|
||||
track = &mBuffer.AddTrack(AUDIO_NODE_STREAM_TRACK_ID, mSampleRate, 0, segment.forget());
|
||||
}
|
||||
return track;
|
||||
}
|
||||
|
||||
bool
|
||||
AudioNodeStream::AllInputsFinished() const
|
||||
{
|
||||
@ -399,7 +383,7 @@ AudioNodeStream::ProduceOutput(GraphTime aFrom, GraphTime aTo)
|
||||
FinishOutput();
|
||||
}
|
||||
|
||||
StreamBuffer::Track* track = EnsureTrack();
|
||||
StreamBuffer::Track* track = EnsureTrack(AUDIO_NODE_STREAM_TRACK_ID, mSampleRate);
|
||||
|
||||
AudioSegment* segment = track->Get<AudioSegment>();
|
||||
|
||||
@ -460,7 +444,7 @@ AudioNodeStream::ProduceOutput(GraphTime aFrom, GraphTime aTo)
|
||||
TrackTicks
|
||||
AudioNodeStream::GetCurrentPosition()
|
||||
{
|
||||
return EnsureTrack()->Get<AudioSegment>()->GetDuration();
|
||||
return EnsureTrack(AUDIO_NODE_STREAM_TRACK_ID, mSampleRate)->Get<AudioSegment>()->GetDuration();
|
||||
}
|
||||
|
||||
void
|
||||
@ -470,7 +454,7 @@ AudioNodeStream::FinishOutput()
|
||||
return;
|
||||
}
|
||||
|
||||
StreamBuffer::Track* track = EnsureTrack();
|
||||
StreamBuffer::Track* track = EnsureTrack(AUDIO_NODE_STREAM_TRACK_ID, mSampleRate);
|
||||
track->SetEnded();
|
||||
FinishOnGraphThread();
|
||||
|
||||
|
@ -116,7 +116,6 @@ public:
|
||||
protected:
|
||||
void FinishOutput();
|
||||
|
||||
StreamBuffer::Track* EnsureTrack();
|
||||
void ObtainInputBlock(AudioChunk& aTmpChunk, uint32_t aPortIndex);
|
||||
|
||||
// The engine that will generate output for this node.
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "nsContentUtils.h"
|
||||
#include "mozilla/dom/MediaStreamBinding.h"
|
||||
#include "mozilla/dom/LocalMediaStreamBinding.h"
|
||||
#include "mozilla/dom/AudioNode.h"
|
||||
#include "MediaStreamGraph.h"
|
||||
#include "AudioStreamTrack.h"
|
||||
#include "VideoStreamTrack.h"
|
||||
@ -39,6 +40,15 @@ NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(DOMMediaStream)
|
||||
NS_IMPL_ISUPPORTS_INHERITED1(DOMLocalMediaStream, DOMMediaStream,
|
||||
nsIDOMLocalMediaStream)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_1(DOMAudioNodeMediaStream, DOMMediaStream,
|
||||
mStreamNode)
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(DOMAudioNodeMediaStream, DOMMediaStream)
|
||||
NS_IMPL_RELEASE_INHERITED(DOMAudioNodeMediaStream, DOMMediaStream)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(DOMAudioNodeMediaStream)
|
||||
NS_INTERFACE_MAP_END_INHERITING(DOMMediaStream)
|
||||
|
||||
class DOMMediaStream::StreamListener : public MediaStreamListener {
|
||||
public:
|
||||
StreamListener(DOMMediaStream* aStream)
|
||||
@ -346,3 +356,18 @@ DOMLocalMediaStream::CreateTrackUnionStream(nsIDOMWindow* aWindow,
|
||||
stream->InitTrackUnionStream(aWindow, aHintContents);
|
||||
return stream.forget();
|
||||
}
|
||||
|
||||
DOMAudioNodeMediaStream::DOMAudioNodeMediaStream(AudioNode* aNode)
|
||||
: mStreamNode(aNode)
|
||||
{
|
||||
}
|
||||
|
||||
already_AddRefed<DOMAudioNodeMediaStream>
|
||||
DOMAudioNodeMediaStream::CreateTrackUnionStream(nsIDOMWindow* aWindow,
|
||||
AudioNode* aNode,
|
||||
TrackTypeHints aHintContents)
|
||||
{
|
||||
nsRefPtr<DOMAudioNodeMediaStream> stream = new DOMAudioNodeMediaStream(aNode);
|
||||
stream->InitTrackUnionStream(aWindow, aHintContents);
|
||||
return stream.forget();
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ namespace mozilla {
|
||||
class MediaStream;
|
||||
|
||||
namespace dom {
|
||||
class AudioNode;
|
||||
class MediaStreamTrack;
|
||||
class AudioStreamTrack;
|
||||
class VideoStreamTrack;
|
||||
@ -206,6 +207,29 @@ public:
|
||||
CreateTrackUnionStream(nsIDOMWindow* aWindow, TrackTypeHints aHintContents = 0);
|
||||
};
|
||||
|
||||
class DOMAudioNodeMediaStream : public DOMMediaStream
|
||||
{
|
||||
typedef dom::AudioNode AudioNode;
|
||||
public:
|
||||
DOMAudioNodeMediaStream(AudioNode* aNode);
|
||||
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DOMAudioNodeMediaStream, DOMMediaStream)
|
||||
|
||||
/**
|
||||
* Create a DOMAudioNodeMediaStream whose underlying stream is a TrackUnionStream.
|
||||
*/
|
||||
static already_AddRefed<DOMAudioNodeMediaStream>
|
||||
CreateTrackUnionStream(nsIDOMWindow* aWindow,
|
||||
AudioNode* aNode,
|
||||
TrackTypeHints aHintContents = 0);
|
||||
|
||||
private:
|
||||
// If this object wraps a stream owned by an AudioNode, we need to ensure that
|
||||
// the node isn't cycle-collected too early.
|
||||
nsRefPtr<AudioNode> mStreamNode;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif /* NSDOMMEDIASTREAM_H_ */
|
||||
|
@ -1525,6 +1525,23 @@ MediaStream::FinishOnGraphThread()
|
||||
GraphImpl()->FinishStream(this);
|
||||
}
|
||||
|
||||
StreamBuffer::Track*
|
||||
MediaStream::EnsureTrack(TrackID aTrackId, TrackRate aSampleRate)
|
||||
{
|
||||
StreamBuffer::Track* track = mBuffer.FindTrack(aTrackId);
|
||||
if (!track) {
|
||||
nsAutoPtr<MediaSegment> segment(new AudioSegment());
|
||||
for (uint32_t j = 0; j < mListeners.Length(); ++j) {
|
||||
MediaStreamListener* l = mListeners[j];
|
||||
l->NotifyQueuedTrackChanges(Graph(), aTrackId, aSampleRate, 0,
|
||||
MediaStreamListener::TRACK_EVENT_CREATED,
|
||||
*segment);
|
||||
}
|
||||
track = &mBuffer.AddTrack(aTrackId, aSampleRate, 0, segment.forget());
|
||||
}
|
||||
return track;
|
||||
}
|
||||
|
||||
void
|
||||
MediaStream::RemoveAllListenersImpl()
|
||||
{
|
||||
|
@ -277,9 +277,11 @@ public:
|
||||
, mMainThreadDestroyed(false)
|
||||
, mGraph(nullptr)
|
||||
{
|
||||
MOZ_COUNT_CTOR(MediaStream);
|
||||
}
|
||||
virtual ~MediaStream()
|
||||
{
|
||||
MOZ_COUNT_DTOR(MediaStream);
|
||||
NS_ASSERTION(mMainThreadDestroyed, "Should have been destroyed already");
|
||||
NS_ASSERTION(mMainThreadListeners.IsEmpty(),
|
||||
"All main thread listeners should have been removed");
|
||||
@ -431,6 +433,8 @@ public:
|
||||
|
||||
bool HasCurrentData() { return mHasCurrentData; }
|
||||
|
||||
StreamBuffer::Track* EnsureTrack(TrackID aTrack, TrackRate aSampleRate);
|
||||
|
||||
void ApplyTrackDisabling(TrackID aTrackID, MediaSegment* aSegment);
|
||||
|
||||
DOMMediaStream* GetWrapper()
|
||||
|
@ -26,6 +26,7 @@ class TrackUnionStream : public ProcessedMediaStream {
|
||||
public:
|
||||
TrackUnionStream(DOMMediaStream* aWrapper) :
|
||||
ProcessedMediaStream(aWrapper),
|
||||
mFilterCallback(nullptr),
|
||||
mMaxTrackID(0) {}
|
||||
|
||||
virtual void RemoveInput(MediaInputPort* aPort)
|
||||
@ -75,7 +76,7 @@ public:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
if (!found && (!mFilterCallback || mFilterCallback(tracks.get()))) {
|
||||
bool trackFinished = false;
|
||||
uint32_t mapIndex = AddTrack(mInputs[i], tracks.get(), aFrom);
|
||||
CopyTrackData(tracks.get(), mapIndex, aFrom, aTo, &trackFinished);
|
||||
@ -107,7 +108,16 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// Consumers may specify a filtering callback to apply to every input track.
|
||||
// Returns true to allow the track to act as an input; false to reject it entirely.
|
||||
typedef bool (*TrackIDFilterCallback)(StreamBuffer::Track*);
|
||||
void SetTrackIDFilter(TrackIDFilterCallback aCallback) {
|
||||
mFilterCallback = aCallback;
|
||||
}
|
||||
|
||||
protected:
|
||||
TrackIDFilterCallback mFilterCallback;
|
||||
|
||||
// Only non-ended tracks are allowed to persist in this map.
|
||||
struct TrackMapEntry {
|
||||
MediaInputPort* mInputPort;
|
||||
|
@ -71,6 +71,7 @@ EXPORTS += [
|
||||
'SharedBuffer.h',
|
||||
'StreamBuffer.h',
|
||||
'TimeVarying.h',
|
||||
'TrackUnionStream.h',
|
||||
'VideoFrameContainer.h',
|
||||
'VideoSegment.h',
|
||||
'VideoUtils.h',
|
||||
|
@ -17,6 +17,8 @@
|
||||
#include "MPAPI.h"
|
||||
|
||||
#define MAX_DROPPED_FRAMES 25
|
||||
// Try not to spend more than this much time in a single call to DecodeVideoFrame.
|
||||
#define MAX_VIDEO_DECODE_SECONDS 3.0
|
||||
|
||||
using namespace android;
|
||||
|
||||
@ -156,8 +158,10 @@ bool MediaOmxReader::DecodeVideoFrame(bool &aKeyframeSkip,
|
||||
aTimeThreshold = mVideoSeekTimeUs;
|
||||
}
|
||||
|
||||
// Read next frame
|
||||
while (true) {
|
||||
TimeStamp start = TimeStamp::Now();
|
||||
|
||||
// Read next frame. Don't let this loop run for too long.
|
||||
while ((TimeStamp::Now() - start) < TimeDuration::FromSeconds(MAX_VIDEO_DECODE_SECONDS)) {
|
||||
MPAPI::VideoFrame frame;
|
||||
frame.mGraphicBuffer = nullptr;
|
||||
frame.mShouldSkip = false;
|
||||
@ -165,22 +169,23 @@ bool MediaOmxReader::DecodeVideoFrame(bool &aKeyframeSkip,
|
||||
mVideoQueue.Finish();
|
||||
return false;
|
||||
}
|
||||
doSeek = false;
|
||||
|
||||
// Ignore empty buffer which stagefright media read will sporadically return
|
||||
if (frame.mSize == 0 && !frame.mGraphicBuffer) {
|
||||
return true;
|
||||
continue;
|
||||
}
|
||||
|
||||
parsed++;
|
||||
if (frame.mShouldSkip && mSkipCount < MAX_DROPPED_FRAMES) {
|
||||
mSkipCount++;
|
||||
return true;
|
||||
continue;
|
||||
}
|
||||
|
||||
mSkipCount = 0;
|
||||
|
||||
mVideoSeekTimeUs = -1;
|
||||
doSeek = aKeyframeSkip = false;
|
||||
aKeyframeSkip = false;
|
||||
|
||||
nsIntRect picture = mPicture;
|
||||
if (frame.Y.mWidth != mInitialFrame.width ||
|
||||
|
@ -117,7 +117,6 @@ MOCHITEST_FILES = \
|
||||
test_too_many_elements.html \
|
||||
test_volume.html \
|
||||
test_video_to_canvas.html \
|
||||
use_large_cache.js \
|
||||
test_audiowrite.html \
|
||||
test_mozHasAudio.html \
|
||||
test_source_media.html \
|
||||
|
@ -8,7 +8,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=462957
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
<script type="text/javascript" src="manifest.js"></script>
|
||||
<script type="application/javascript" src="use_large_cache.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=462957">Mozilla Bug 462957</a>
|
||||
@ -85,8 +84,11 @@ function startTest(test, token) {
|
||||
document.body.appendChild(v);
|
||||
}
|
||||
|
||||
manager.runTests(gSeekTests, startTest);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, beginTest);
|
||||
function beginTest() {
|
||||
manager.runTests(gSeekTests, startTest);
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -8,7 +8,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=493187
|
||||
<title>Bug 493187 - enter HAVE_FUTURE_DATA when seeking within buffered data even if new data isn't arriving</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
<script type="text/javascript" src="use_large_cache.js"></script>
|
||||
<script type="text/javascript" src="manifest.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
@ -62,8 +61,11 @@ function startTest(test, token) {
|
||||
document.body.appendChild(v);
|
||||
}
|
||||
|
||||
manager.runTests(gSeekTests, startTest);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, beginTest);
|
||||
function beginTest() {
|
||||
manager.runTests(gSeekTests, startTest);
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -33,24 +33,17 @@ function IsWindows7() {
|
||||
}
|
||||
|
||||
function getMediaPref(name) {
|
||||
// Can't use SpecialPowers.getBoolPref because it throws when pref isn't
|
||||
// present, and for example on non-Windows systems the WMF prefs won't be
|
||||
// present.
|
||||
var pref = false;
|
||||
var prefService = SpecialPowers.wrap(SpecialPowers.Components)
|
||||
.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(SpecialPowers.Ci.nsIPrefService);
|
||||
var branch = prefService.getBranch("media.");
|
||||
try {
|
||||
pref = branch.getBoolPref(name);
|
||||
pref = SpecialPowers.getBoolPref(name);
|
||||
} catch(ex) { }
|
||||
return pref;
|
||||
}
|
||||
|
||||
var haveMp4 = (getMediaPref("windows-media-foundation.enabled") && IsWindowsVistaOrLater()) ||
|
||||
getMediaPref("omx.enabled") ||
|
||||
getMediaPref("gstreamer.enabled");
|
||||
// TODO: Add "getMediaPref("plugins.enabled")" once MP4 works on Gingerbread.
|
||||
var haveMp4 = (getMediaPref("media.windows-media-foundation.enabled") && IsWindowsVistaOrLater()) ||
|
||||
getMediaPref("media.omx.enabled") ||
|
||||
getMediaPref("media.gstreamer.enabled");
|
||||
// TODO: Add "getMediaPref("media.plugins.enabled")" once MP4 works on Gingerbread.
|
||||
|
||||
check_mp4(document.getElementById('v'), haveMp4);
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE HTML>
|
||||
hg diff<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=479863
|
||||
@ -32,17 +32,20 @@ window.onload = function() {
|
||||
we've got the first frame.
|
||||
*/
|
||||
|
||||
|
||||
var resource = getPlayableVideo(gSeekTests);
|
||||
if (resource != null) {
|
||||
for (var i=0; i<20; ++i) {
|
||||
var v = document.createElement("video");
|
||||
v.src = resource.name;
|
||||
document.body.appendChild(v);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, beginTest);
|
||||
function beginTest() {
|
||||
if (resource != null) {
|
||||
for (var i=0; i<20; ++i) {
|
||||
var v = document.createElement("video");
|
||||
v.src = resource.name;
|
||||
document.body.appendChild(v);
|
||||
}
|
||||
} else {
|
||||
todo(false, "No types supported");
|
||||
}
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
} else {
|
||||
todo(false, "No types supported");
|
||||
}
|
||||
</script>
|
||||
|
||||
|
@ -4,7 +4,6 @@
|
||||
<title>Media test: unknown/invalid formats raise decode error</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
<script type="text/javascript" src="use_large_cache.js"></script>
|
||||
<script type="text/javascript" src="manifest.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
@ -44,8 +43,11 @@ function startTest(test, token) {
|
||||
v.src = test.name; // implicitly starts a load.
|
||||
}
|
||||
|
||||
manager.runTests(gDecodeErrorTests, startTest);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, beginTest);
|
||||
function beginTest() {
|
||||
manager.runTests(gDecodeErrorTests, startTest);
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -8,7 +8,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=548523
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
<script type="text/javascript" src="manifest.js"></script>
|
||||
<script type="text/javascript" src="use_large_cache.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=548523">Mozilla Bug 548523</a>
|
||||
@ -568,8 +567,11 @@ function startTest(test, token) {
|
||||
}
|
||||
|
||||
var twiceTests = tests.concat(tests);
|
||||
manager.runTests(twiceTests, startTest);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, beginTest);
|
||||
function beginTest() {
|
||||
manager.runTests(twiceTests, startTest);
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -7,7 +7,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=479863
|
||||
<title>Test for Bug 479863</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
<script type="application/javascript" src="use_large_cache.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=479863">Mozilla Bug 479863</a>
|
||||
@ -70,17 +69,21 @@ function suspended(event) {
|
||||
}
|
||||
|
||||
var key = Math.random();
|
||||
for (var i = 1; i <= 6; ++i) {
|
||||
var id = "v" + i;
|
||||
var v = document.getElementById(id);
|
||||
suspendCount[id] = 0;
|
||||
v.addEventListener("suspend", suspended, false);
|
||||
// Treat "load" as "suspend" for now, it means the same thing: we
|
||||
// stopped the download.
|
||||
v.addEventListener("load", suspended, false);
|
||||
v.src = "seek.ogv?key=" + key + "&id=" + id;
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, beginTest);
|
||||
function beginTest() {
|
||||
for (var i = 1; i <= 6; ++i) {
|
||||
var id = "v" + i;
|
||||
var v = document.getElementById(id);
|
||||
suspendCount[id] = 0;
|
||||
v.addEventListener("suspend", suspended, false);
|
||||
// Treat "load" as "suspend" for now, it means the same thing: we
|
||||
// stopped the download.
|
||||
v.addEventListener("load", suspended, false);
|
||||
v.src = "seek.ogv?key=" + key + "&id=" + id;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -8,7 +8,6 @@
|
||||
</head>
|
||||
<body>
|
||||
<pre id="test">
|
||||
<script src="use_large_cache.js"></script>
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var manager = new MediaTestManager;
|
||||
@ -40,8 +39,11 @@ function startTest(test, token) {
|
||||
document.body.appendChild(v);
|
||||
}
|
||||
|
||||
manager.runTests(gProgressTests, startTest);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, beginTest);
|
||||
function beginTest() {
|
||||
manager.runTests(gProgressTests, startTest);
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -9,7 +9,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=486646
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
<script type="text/javascript" src="use_large_cache.js"></script>
|
||||
<script type="text/javascript" src="manifest.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
@ -56,8 +55,11 @@ function startTest(test, token) {
|
||||
document.body.appendChild(v);
|
||||
}
|
||||
|
||||
manager.runTests(gSmallTests, startTest);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, beginTest);
|
||||
function beginTest() {
|
||||
manager.runTests(gSmallTests, startTest);
|
||||
}
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
@ -1,14 +0,0 @@
|
||||
(function() {
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
// Set cache size to something large
|
||||
var prefService = Components.classes["@mozilla.org/preferences-service;1"]
|
||||
.getService(Components.interfaces.nsIPrefService);
|
||||
var branch = prefService.getBranch("media.");
|
||||
var oldSize = branch.getIntPref("cache_size");
|
||||
branch.setIntPref("cache_size", 40000);
|
||||
|
||||
window.addEventListener("unload", function() {
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
branch.setIntPref("cache_size", oldSize);
|
||||
}, false);
|
||||
})();
|
@ -24,6 +24,7 @@
|
||||
#include "ScriptProcessorNode.h"
|
||||
#include "ChannelMergerNode.h"
|
||||
#include "ChannelSplitterNode.h"
|
||||
#include "MediaStreamAudioDestinationNode.h"
|
||||
#include "WaveShaperNode.h"
|
||||
#include "WaveTable.h"
|
||||
#include "ConvolverNode.h"
|
||||
@ -204,6 +205,14 @@ bool IsValidBufferSize(uint32_t aBufferSize) {
|
||||
|
||||
}
|
||||
|
||||
already_AddRefed<MediaStreamAudioDestinationNode>
|
||||
AudioContext::CreateMediaStreamDestination()
|
||||
{
|
||||
nsRefPtr<MediaStreamAudioDestinationNode> node =
|
||||
new MediaStreamAudioDestinationNode(this);
|
||||
return node.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<ScriptProcessorNode>
|
||||
AudioContext::CreateScriptProcessor(uint32_t aBufferSize,
|
||||
uint32_t aNumberOfInputChannels,
|
||||
|
@ -51,6 +51,7 @@ class DelayNode;
|
||||
class DynamicsCompressorNode;
|
||||
class GainNode;
|
||||
class GlobalObject;
|
||||
class MediaStreamAudioDestinationNode;
|
||||
class OfflineRenderSuccessCallback;
|
||||
class PannerNode;
|
||||
class ScriptProcessorNode;
|
||||
@ -125,6 +126,9 @@ public:
|
||||
CreateBuffer(JSContext* aJSContext, ArrayBuffer& aBuffer,
|
||||
bool aMixToMono, ErrorResult& aRv);
|
||||
|
||||
already_AddRefed<MediaStreamAudioDestinationNode>
|
||||
CreateMediaStreamDestination();
|
||||
|
||||
already_AddRefed<ScriptProcessorNode>
|
||||
CreateScriptProcessor(uint32_t aBufferSize,
|
||||
uint32_t aNumberOfInputChannels,
|
||||
|
95
content/media/webaudio/MediaStreamAudioDestinationNode.cpp
Normal file
95
content/media/webaudio/MediaStreamAudioDestinationNode.cpp
Normal file
@ -0,0 +1,95 @@
|
||||
/* -*- 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 "MediaStreamAudioDestinationNode.h"
|
||||
#include "mozilla/dom/AudioStreamTrack.h"
|
||||
#include "mozilla/dom/MediaStreamAudioDestinationNodeBinding.h"
|
||||
#include "AudioNodeEngine.h"
|
||||
#include "AudioNodeStream.h"
|
||||
#include "DOMMediaStream.h"
|
||||
#include "TrackUnionStream.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED_1(MediaStreamAudioDestinationNode, AudioNode, mDOMStream)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(MediaStreamAudioDestinationNode)
|
||||
NS_INTERFACE_MAP_END_INHERITING(AudioNode)
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(MediaStreamAudioDestinationNode, AudioNode)
|
||||
NS_IMPL_RELEASE_INHERITED(MediaStreamAudioDestinationNode, AudioNode)
|
||||
|
||||
// This must be a different value than AUDIO_NODE_STREAM_TRACK_ID
|
||||
static const int MEDIA_STREAM_DEST_TRACK_ID = 2;
|
||||
|
||||
class MediaStreamDestinationEngine : public AudioNodeEngine {
|
||||
public:
|
||||
MediaStreamDestinationEngine(AudioNode* aNode, ProcessedMediaStream* aOutputStream)
|
||||
: AudioNodeEngine(aNode)
|
||||
, mOutputStream(aOutputStream)
|
||||
{
|
||||
MOZ_ASSERT(mOutputStream);
|
||||
}
|
||||
|
||||
virtual void ProduceAudioBlock(AudioNodeStream* aStream,
|
||||
const AudioChunk& aInput,
|
||||
AudioChunk* aOutput,
|
||||
bool* aFinished) MOZ_OVERRIDE
|
||||
{
|
||||
*aOutput = aInput;
|
||||
StreamBuffer::Track* track = mOutputStream->EnsureTrack(MEDIA_STREAM_DEST_TRACK_ID,
|
||||
aStream->SampleRate());
|
||||
AudioSegment* segment = track->Get<AudioSegment>();
|
||||
segment->AppendAndConsumeChunk(aOutput);
|
||||
}
|
||||
|
||||
private:
|
||||
ProcessedMediaStream* mOutputStream;
|
||||
};
|
||||
|
||||
// This callback is used to ensure that only the audio data for this track is audible
|
||||
static bool FilterAudioNodeStreamTrack(StreamBuffer::Track* aTrack)
|
||||
{
|
||||
return aTrack->GetID() == MEDIA_STREAM_DEST_TRACK_ID;
|
||||
}
|
||||
|
||||
MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode(AudioContext* aContext)
|
||||
: AudioNode(aContext,
|
||||
2,
|
||||
ChannelCountMode::Explicit,
|
||||
ChannelInterpretation::Speakers)
|
||||
, mDOMStream(DOMAudioNodeMediaStream::CreateTrackUnionStream(GetOwner(),
|
||||
this,
|
||||
DOMMediaStream::HINT_CONTENTS_AUDIO))
|
||||
{
|
||||
TrackUnionStream* tus = static_cast<TrackUnionStream*>(mDOMStream->GetStream());
|
||||
MOZ_ASSERT(tus == mDOMStream->GetStream()->AsProcessedStream());
|
||||
tus->SetTrackIDFilter(FilterAudioNodeStreamTrack);
|
||||
|
||||
MediaStreamDestinationEngine* engine = new MediaStreamDestinationEngine(this, tus);
|
||||
mStream = aContext->Graph()->CreateAudioNodeStream(engine, MediaStreamGraph::INTERNAL_STREAM);
|
||||
mPort = tus->AllocateInputPort(mStream, 0);
|
||||
}
|
||||
|
||||
void
|
||||
MediaStreamAudioDestinationNode::DestroyMediaStream()
|
||||
{
|
||||
AudioNode::DestroyMediaStream();
|
||||
if (mPort) {
|
||||
mPort->Destroy();
|
||||
mPort = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
JSObject*
|
||||
MediaStreamAudioDestinationNode::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aScope)
|
||||
{
|
||||
return MediaStreamAudioDestinationNodeBinding::Wrap(aCx, aScope, this);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
48
content/media/webaudio/MediaStreamAudioDestinationNode.h
Normal file
48
content/media/webaudio/MediaStreamAudioDestinationNode.h
Normal file
@ -0,0 +1,48 @@
|
||||
/* -*- 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/. */
|
||||
|
||||
#ifndef MediaStreamAudioDestinationNode_h_
|
||||
#define MediaStreamAudioDestinationNode_h_
|
||||
|
||||
#include "AudioNode.h"
|
||||
|
||||
namespace mozilla {
|
||||
class DOMMediaStream;
|
||||
|
||||
namespace dom {
|
||||
|
||||
class MediaStreamAudioDestinationNode : public AudioNode
|
||||
{
|
||||
public:
|
||||
explicit MediaStreamAudioDestinationNode(AudioContext* aContext);
|
||||
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MediaStreamAudioDestinationNode, AudioNode)
|
||||
|
||||
virtual JSObject* WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aScope) MOZ_OVERRIDE;
|
||||
|
||||
virtual uint16_t NumberOfOutputs() const MOZ_FINAL MOZ_OVERRIDE
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual void DestroyMediaStream() MOZ_OVERRIDE;
|
||||
|
||||
DOMMediaStream* DOMStream() const
|
||||
{
|
||||
return mDOMStream;
|
||||
}
|
||||
|
||||
private:
|
||||
nsRefPtr<DOMMediaStream> mDOMStream;
|
||||
nsRefPtr<MediaInputPort> mPort;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
@ -39,6 +39,7 @@ EXPORTS.mozilla.dom += [
|
||||
'DynamicsCompressorNode.h',
|
||||
'EnableWebAudioCheck.h',
|
||||
'GainNode.h',
|
||||
'MediaStreamAudioDestinationNode.h',
|
||||
'OfflineAudioCompletionEvent.h',
|
||||
'PannerNode.h',
|
||||
'ScriptProcessorNode.h',
|
||||
@ -65,6 +66,7 @@ CPP_SOURCES += [
|
||||
'EnableWebAudioCheck.cpp',
|
||||
'GainNode.cpp',
|
||||
'MediaBufferDecoder.cpp',
|
||||
'MediaStreamAudioDestinationNode.cpp',
|
||||
'OfflineAudioCompletionEvent.cpp',
|
||||
'PannerNode.cpp',
|
||||
'ScriptProcessorNode.cpp',
|
||||
|
@ -62,6 +62,7 @@ MOCHITEST_FILES := \
|
||||
test_gainNodeInLoop.html \
|
||||
test_maxChannelCount.html \
|
||||
test_mediaDecoding.html \
|
||||
test_mediaStreamAudioDestinationNode.html \
|
||||
test_mixingRules.html \
|
||||
test_nodeToParamConnection.html \
|
||||
test_OfflineAudioContext.html \
|
||||
|
@ -0,0 +1,46 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<title>Test MediaStreamAudioDestinationNode</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="webaudio.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<pre id="test">
|
||||
<audio id="audioelem"></audio>
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
addLoadEvent(function() {
|
||||
SpecialPowers.setBoolPref("media.webaudio.enabled", true);
|
||||
|
||||
var context = new AudioContext();
|
||||
var buffer = context.createBuffer(1, 2048, context.sampleRate);
|
||||
for (var i = 0; i < 2048; ++i) {
|
||||
buffer.getChannelData(0)[i] = Math.sin(440 * 2 * Math.PI * i / context.sampleRate);
|
||||
}
|
||||
|
||||
var source = context.createBufferSource();
|
||||
source.buffer = buffer;
|
||||
|
||||
var dest = context.createMediaStreamDestination();
|
||||
source.connect(dest);
|
||||
|
||||
var elem = document.getElementById('audioelem');
|
||||
elem.mozSrcObject = dest.stream;
|
||||
elem.onloadedmetadata = function() {
|
||||
ok(true, "got metadata event");
|
||||
setTimeout(function() {
|
||||
is(elem.played.length, 1, "should have a played interval");
|
||||
is(elem.played.start(0), 0, "should have played immediately");
|
||||
isnot(elem.played.end(0), 0, "should have played for a non-zero interval");
|
||||
SpecialPowers.clearUserPref("media.webaudio.enabled");
|
||||
SimpleTest.finish();
|
||||
}, 2000);
|
||||
};
|
||||
|
||||
source.start(0);
|
||||
elem.play();
|
||||
});
|
||||
</script>
|
@ -170,6 +170,7 @@ function synthCleanup() {
|
||||
.getService(SpecialPowers.Ci.nsISyncMessageSender);
|
||||
mm.sendSyncMessage('test:SpeechSynthesis:ipcSynthCleanup');
|
||||
}
|
||||
SpecialPowers.clearUserPref("media.webspeech.synth.enabled");
|
||||
}
|
||||
|
||||
function synthTestQueue(aTestArgs, aEndFunc) {
|
||||
|
@ -10,7 +10,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=525444
|
||||
<script type="application/javascript" src="common.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body onunload="synthCleanup();">
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=650295">Mozilla Bug 650295</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
@ -10,7 +10,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=525444
|
||||
<script type="application/javascript" src="common.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body onunload="synthCleanup();">
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=525444">Mozilla Bug 525444</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
@ -10,7 +10,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=650295
|
||||
<script type="application/javascript" src="common.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body onunload="synthCleanup();">
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=650295">Mozilla Bug 650295</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
@ -50,7 +50,7 @@ SVGAElement::SVGAElement(already_AddRefed<nsINodeInfo> aNodeInfo)
|
||||
{
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGAElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
@ -79,7 +79,7 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGAElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGAElement::Target()
|
||||
{
|
||||
return mStringAttributes[TARGET].ToDOMAnimatedString(this);
|
||||
|
@ -66,8 +66,8 @@ public:
|
||||
bool aNotify) MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Target();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Target();
|
||||
void GetDownload(nsAString & aDownload);
|
||||
void SetDownload(const nsAString & aDownload, ErrorResult& rv);
|
||||
|
||||
|
@ -36,7 +36,7 @@ SVGAltGlyphElement::SVGAltGlyphElement(already_AddRefed<nsINodeInfo> aNodeInfo)
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGAltGlyphElement)
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGAltGlyphElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
|
@ -33,7 +33,7 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
void GetGlyphRef(nsAString & aGlyphRef);
|
||||
void SetGlyphRef(const nsAString & aGlyphRef, ErrorResult& rv);
|
||||
void GetFormat(nsAString & aFormat);
|
||||
|
20
content/svg/content/src/SVGAnimatedString.cpp
Normal file
20
content/svg/content/src/SVGAnimatedString.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "mozilla/dom/SVGAnimatedString.h"
|
||||
#include "mozilla/dom/SVGAnimatedStringBinding.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
JSObject*
|
||||
SVGAnimatedString::WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aScope)
|
||||
{
|
||||
return SVGAnimatedStringBinding::Wrap(aCx, aScope, this);
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
43
content/svg/content/src/SVGAnimatedString.h
Normal file
43
content/svg/content/src/SVGAnimatedString.h
Normal file
@ -0,0 +1,43 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef mozilla_dom_SVGAnimatedString_h
|
||||
#define mozilla_dom_SVGAnimatedString_h
|
||||
|
||||
#include "nsSVGElement.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class SVGAnimatedString : public nsISupports,
|
||||
public nsWrapperCache
|
||||
{
|
||||
public:
|
||||
SVGAnimatedString(nsSVGElement* aSVGElement)
|
||||
: mSVGElement(aSVGElement)
|
||||
{
|
||||
SetIsDOMBinding();
|
||||
}
|
||||
|
||||
virtual JSObject* WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aScope) MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
nsSVGElement* GetParentObject() const
|
||||
{
|
||||
return mSVGElement;
|
||||
}
|
||||
|
||||
virtual void GetBaseVal(nsAString& aResult) = 0;
|
||||
virtual void SetBaseVal(const nsAString& aValue) = 0;
|
||||
virtual void GetAnimVal(nsAString& aResult) = 0;
|
||||
|
||||
nsRefPtr<nsSVGElement> mSVGElement;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_dom_SVGAnimatedString_h
|
@ -50,13 +50,13 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEBlendElement)
|
||||
//----------------------------------------------------------------------
|
||||
// nsIDOMSVGFEBlendElement methods
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEBlendElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEBlendElement::In2()
|
||||
{
|
||||
return mStringAttributes[IN2].ToDOMAnimatedString(this);
|
||||
|
@ -48,8 +48,8 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In2();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In2();
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> Mode();
|
||||
|
||||
protected:
|
||||
|
@ -57,7 +57,7 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEColorMatrixElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEColorMatrixElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> Type();
|
||||
already_AddRefed<DOMSVGAnimatedNumberList> Values();
|
||||
|
||||
|
@ -30,7 +30,7 @@ nsSVGElement::StringInfo SVGFEComponentTransferElement::sStringInfo[2] =
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEComponentTransferElement)
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEComponentTransferElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -42,7 +42,7 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
|
||||
protected:
|
||||
virtual bool OperatesOnPremultipledAlpha(int32_t) MOZ_OVERRIDE { return false; }
|
||||
|
@ -55,13 +55,13 @@ nsSVGElement::StringInfo SVGFECompositeElement::sStringInfo[3] =
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFECompositeElement)
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFECompositeElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFECompositeElement::In2()
|
||||
{
|
||||
return mStringAttributes[IN2].ToDOMAnimatedString(this);
|
||||
|
@ -55,8 +55,8 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In2();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In2();
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> Operator();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> K1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> K2();
|
||||
|
@ -85,7 +85,7 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEConvolveMatrixElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEConvolveMatrixElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -58,7 +58,7 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedInteger> OrderX();
|
||||
already_AddRefed<nsIDOMSVGAnimatedInteger> OrderY();
|
||||
already_AddRefed<DOMSVGAnimatedNumberList> KernelMatrix();
|
||||
|
@ -25,7 +25,7 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEDiffuseLightingElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEDiffuseLightingElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -35,7 +35,7 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> SurfaceScale();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> DiffuseConstant();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> KernelUnitLengthX();
|
||||
|
@ -65,13 +65,13 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEDisplacementMapElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEDisplacementMapElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEDisplacementMapElement::In2()
|
||||
{
|
||||
return mStringAttributes[IN2].ToDOMAnimatedString(this);
|
||||
|
@ -49,8 +49,8 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In2();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In2();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> Scale();
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> XChannelSelector();
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> YChannelSelector();
|
||||
|
@ -37,7 +37,7 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEGaussianBlurElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEGaussianBlurElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -50,7 +50,7 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> StdDeviationX();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> StdDeviationY();
|
||||
void SetStdDeviation(float stdDeviationX, float stdDeviationY);
|
||||
|
@ -175,7 +175,7 @@ SVGFEImageElement::IntrinsicState() const
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEImageElement)
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEImageElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
|
@ -65,7 +65,7 @@ public:
|
||||
void MaybeLoadSVGImage();
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
already_AddRefed<DOMSVGAnimatedPreserveAspectRatio> PreserveAspectRatio();
|
||||
|
||||
private:
|
||||
|
@ -37,7 +37,7 @@ SVGFEMergeNodeElement::AttributeAffectsRendering(int32_t aNameSpaceID,
|
||||
return aNameSpaceID == kNameSpaceID_None && aAttribute == nsGkAtoms::in;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEMergeNodeElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -37,7 +37,7 @@ public:
|
||||
const nsSVGString* GetIn1() { return &mStringAttributes[IN1]; }
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
|
||||
protected:
|
||||
virtual StringAttributesInfo GetStringInfo() MOZ_OVERRIDE;
|
||||
|
@ -58,7 +58,7 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEMorphologyElement)
|
||||
//----------------------------------------------------------------------
|
||||
// SVGFEMorphologyElement methods
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEMorphologyElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -50,7 +50,7 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> Operator();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> RadiusX();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> RadiusY();
|
||||
|
@ -39,7 +39,7 @@ NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFEOffsetElement)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFEOffsetElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> Dx();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> Dy();
|
||||
|
||||
|
@ -23,7 +23,7 @@ SVGFESpecularLightingElement::WrapNode(JSContext* aCx, JS::Handle<JSObject*> aSc
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFESpecularLightingElement)
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFESpecularLightingElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -41,7 +41,7 @@ public:
|
||||
int32_t aNameSpaceID, nsIAtom* aAttribute) const;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> SurfaceScale();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> SpecularConstant();
|
||||
already_AddRefed<nsIDOMSVGAnimatedNumber> SpecularExponent();
|
||||
|
@ -31,7 +31,7 @@ nsSVGElement::StringInfo SVGFETileElement::sStringInfo[2] =
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGFETileElement)
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFETileElement::In1()
|
||||
{
|
||||
return mStringAttributes[IN1].ToDOMAnimatedString(this);
|
||||
|
@ -49,7 +49,7 @@ public:
|
||||
virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> In1();
|
||||
already_AddRefed<SVGAnimatedString> In1();
|
||||
|
||||
protected:
|
||||
virtual StringAttributesInfo GetStringInfo() MOZ_OVERRIDE;
|
||||
|
@ -125,7 +125,7 @@ SVGFilterElement::SetFilterRes(uint32_t filterResX, uint32_t filterResY)
|
||||
mIntegerPairAttributes[FILTERRES].SetBaseValues(filterResX, filterResY, this);
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGFilterElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
|
@ -57,7 +57,7 @@ public:
|
||||
already_AddRefed<nsIDOMSVGAnimatedInteger> FilterResX();
|
||||
already_AddRefed<nsIDOMSVGAnimatedInteger> FilterResY();
|
||||
void SetFilterRes(uint32_t filterResX, uint32_t filterResY);
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -93,7 +93,7 @@ SVGGradientElement::SpreadMethod()
|
||||
return mEnumAttributes[SPREADMETHOD].ToDOMAnimatedEnum(this);
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGGradientElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
|
@ -62,7 +62,7 @@ public:
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> GradientUnits();
|
||||
already_AddRefed<SVGAnimatedTransformList> GradientTransform();
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> SpreadMethod();
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
|
||||
protected:
|
||||
virtual EnumAttributesInfo GetEnumInfo() MOZ_OVERRIDE;
|
||||
|
@ -103,7 +103,7 @@ SVGImageElement::PreserveAspectRatio()
|
||||
return ratio.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGImageElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
|
@ -73,7 +73,7 @@ public:
|
||||
already_AddRefed<SVGAnimatedLength> Width();
|
||||
already_AddRefed<SVGAnimatedLength> Height();
|
||||
already_AddRefed<DOMSVGAnimatedPreserveAspectRatio> PreserveAspectRatio();
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
|
||||
protected:
|
||||
nsresult LoadSVGImage(bool aForce, bool aNotify);
|
||||
|
@ -78,7 +78,7 @@ SVGMPathElement::~SVGMPathElement()
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGMPathElement)
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGMPathElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
|
@ -62,7 +62,7 @@ public:
|
||||
SVGPathElement* GetReferencedPath();
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
|
||||
protected:
|
||||
class PathReference : public nsReferencedElement {
|
||||
|
@ -125,7 +125,7 @@ SVGPatternElement::Height()
|
||||
return mLengthAttributes[ATTR_HEIGHT].ToDOMAnimatedLength(this);
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGPatternElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
|
@ -63,7 +63,7 @@ public:
|
||||
already_AddRefed<SVGAnimatedLength> Y();
|
||||
already_AddRefed<SVGAnimatedLength> Width();
|
||||
already_AddRefed<SVGAnimatedLength> Height();
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -98,7 +98,7 @@ SVGScriptElement::SetCrossOrigin(const nsAString & aOrigin, ErrorResult& rv)
|
||||
rv = SetAttr(kNameSpaceID_None, nsGkAtoms::crossorigin, aOrigin, true);
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGScriptElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
|
@ -69,7 +69,7 @@ public:
|
||||
void SetType(const nsAString & aType, ErrorResult& rv);
|
||||
void GetCrossOrigin(nsAString & aOrigin);
|
||||
void SetCrossOrigin(const nsAString & aOrigin, ErrorResult& rv);
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
|
||||
protected:
|
||||
virtual StringAttributesInfo GetStringInfo() MOZ_OVERRIDE;
|
||||
|
@ -70,7 +70,7 @@ SVGTextPathElement::SVGTextPathElement(already_AddRefed<nsINodeInfo> aNodeInfo)
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE_WITH_INIT(SVGTextPathElement)
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGTextPathElement::Href()
|
||||
{
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
|
@ -55,7 +55,7 @@ public:
|
||||
already_AddRefed<SVGAnimatedLength> StartOffset();
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> Method();
|
||||
already_AddRefed<nsIDOMSVGAnimatedEnumeration> Spacing();
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
|
||||
protected:
|
||||
|
||||
|
@ -115,12 +115,10 @@ SVGUseElement::Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const
|
||||
return NS_FAILED(rv1) ? rv1 : rv2;
|
||||
}
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
SVGUseElement::Href()
|
||||
{
|
||||
nsCOMPtr<nsIDOMSVGAnimatedString> href;
|
||||
mStringAttributes[HREF].ToDOMAnimatedString(getter_AddRefs(href), this);
|
||||
return href.forget();
|
||||
return mStringAttributes[HREF].ToDOMAnimatedString(this);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -70,7 +70,7 @@ public:
|
||||
NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* aAttribute) const MOZ_OVERRIDE;
|
||||
|
||||
// WebIDL
|
||||
already_AddRefed<nsIDOMSVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedString> Href();
|
||||
already_AddRefed<SVGAnimatedLength> X();
|
||||
already_AddRefed<SVGAnimatedLength> Y();
|
||||
already_AddRefed<SVGAnimatedLength> Width();
|
||||
|
@ -25,6 +25,7 @@ EXPORTS.mozilla.dom += [
|
||||
'SVGAnimatedBoolean.h',
|
||||
'SVGAnimatedLength.h',
|
||||
'SVGAnimatedRect.h',
|
||||
'SVGAnimatedString.h',
|
||||
'SVGAnimatedTransformList.h',
|
||||
'SVGAnimationElement.h',
|
||||
'SVGCircleElement.h',
|
||||
@ -122,6 +123,7 @@ CPP_SOURCES += [
|
||||
'SVGAnimatedPointList.cpp',
|
||||
'SVGAnimatedPreserveAspectRatio.cpp',
|
||||
'SVGAnimatedRect.cpp',
|
||||
'SVGAnimatedString.cpp',
|
||||
'SVGAnimatedTransformList.cpp',
|
||||
'SVGAnimationElement.cpp',
|
||||
'SVGAttrValueWrapper.cpp',
|
||||
|
@ -7,22 +7,54 @@
|
||||
#include "nsSVGElement.h"
|
||||
#include "nsSMILValue.h"
|
||||
#include "SMILStringType.h"
|
||||
#include "mozilla/dom/SVGAnimatedString.h"
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
|
||||
NS_SVG_VAL_IMPL_CYCLE_COLLECTION(nsSVGClass::DOMAnimatedString, mSVGElement)
|
||||
struct DOMAnimatedString MOZ_FINAL : public SVGAnimatedString
|
||||
{
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(DOMAnimatedString)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGClass::DOMAnimatedString)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGClass::DOMAnimatedString)
|
||||
DOMAnimatedString(nsSVGClass* aVal, nsSVGElement* aSVGElement)
|
||||
: SVGAnimatedString(aSVGElement)
|
||||
, mVal(aVal)
|
||||
{}
|
||||
|
||||
DOMCI_DATA(SVGAnimatedClass, nsSVGClass::DOMAnimatedString)
|
||||
nsSVGClass* mVal; // kept alive because it belongs to content
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGClass::DOMAnimatedString)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedString)
|
||||
void GetBaseVal(nsAString& aResult) MOZ_OVERRIDE
|
||||
{
|
||||
mVal->GetBaseValue(aResult, mSVGElement);
|
||||
}
|
||||
|
||||
void SetBaseVal(const nsAString& aValue) MOZ_OVERRIDE
|
||||
{
|
||||
mVal->SetBaseValue(aValue, mSVGElement, true);
|
||||
}
|
||||
|
||||
void GetAnimVal(nsAString& aResult) MOZ_OVERRIDE;
|
||||
};
|
||||
|
||||
NS_SVG_VAL_IMPL_CYCLE_COLLECTION_WRAPPERCACHED(DOMAnimatedString, mSVGElement)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(DOMAnimatedString)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(DOMAnimatedString)
|
||||
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DOMAnimatedString)
|
||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedString)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
already_AddRefed<SVGAnimatedString>
|
||||
nsSVGClass::ToDOMAnimatedString(nsSVGElement* aSVGElement)
|
||||
{
|
||||
nsRefPtr<DOMAnimatedString> result = new DOMAnimatedString(this, aSVGElement);
|
||||
return result.forget();
|
||||
}
|
||||
|
||||
/* Implementation */
|
||||
|
||||
void
|
||||
@ -72,12 +104,11 @@ nsSVGClass::SetAnimValue(const nsAString& aValue, nsSVGElement *aSVGElement)
|
||||
aSVGElement->DidAnimateClass();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSVGClass::DOMAnimatedString::GetAnimVal(nsAString& aResult)
|
||||
{
|
||||
void
|
||||
DOMAnimatedString::GetAnimVal(nsAString& aResult)
|
||||
{
|
||||
mSVGElement->FlushAnimations();
|
||||
mVal->GetAnimValue(aResult, mSVGElement);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsISMILAttr*
|
||||
|
@ -9,13 +9,18 @@
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "nsError.h"
|
||||
#include "nsIDOMSVGAnimatedString.h"
|
||||
#include "nsISMILAttr.h"
|
||||
#include "nsString.h"
|
||||
#include "mozilla/Attributes.h"
|
||||
|
||||
class nsSVGElement;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
class SVGAnimatedString;
|
||||
}
|
||||
}
|
||||
|
||||
class nsSVGClass
|
||||
{
|
||||
|
||||
@ -34,18 +39,8 @@ public:
|
||||
bool IsAnimated() const
|
||||
{ return !!mAnimVal; }
|
||||
|
||||
already_AddRefed<nsIDOMSVGAnimatedString>
|
||||
ToDOMAnimatedString(nsSVGElement* aSVGElement)
|
||||
{
|
||||
nsRefPtr<DOMAnimatedString> result = new DOMAnimatedString(this, aSVGElement);
|
||||
return result.forget();
|
||||
}
|
||||
nsresult ToDOMAnimatedString(nsIDOMSVGAnimatedString **aResult,
|
||||
nsSVGElement *aSVGElement)
|
||||
{
|
||||
*aResult = ToDOMAnimatedString(aSVGElement).get();
|
||||
return NS_OK;
|
||||
}
|
||||
already_AddRefed<mozilla::dom::SVGAnimatedString>
|
||||
ToDOMAnimatedString(nsSVGElement* aSVGElement);
|
||||
|
||||
// Returns a new nsISMILAttr object that the caller must delete
|
||||
nsISMILAttr* ToSMILAttr(nsSVGElement *aSVGElement);
|
||||
@ -55,24 +50,6 @@ private:
|
||||
nsAutoPtr<nsString> mAnimVal;
|
||||
|
||||
public:
|
||||
struct DOMAnimatedString MOZ_FINAL : public nsIDOMSVGAnimatedString
|
||||
{
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS(DOMAnimatedString)
|
||||
|
||||
DOMAnimatedString(nsSVGClass *aVal, nsSVGElement *aSVGElement)
|
||||
: mVal(aVal), mSVGElement(aSVGElement) {}
|
||||
|
||||
nsSVGClass* mVal; // kept alive because it belongs to content
|
||||
nsRefPtr<nsSVGElement> mSVGElement;
|
||||
|
||||
NS_IMETHOD GetBaseVal(nsAString& aResult) MOZ_OVERRIDE
|
||||
{ mVal->GetBaseValue(aResult, mSVGElement); return NS_OK; }
|
||||
NS_IMETHOD SetBaseVal(const nsAString& aValue) MOZ_OVERRIDE
|
||||
{ mVal->SetBaseValue(aValue, mSVGElement, true); return NS_OK; }
|
||||
|
||||
NS_IMETHOD GetAnimVal(nsAString& aResult) MOZ_OVERRIDE;
|
||||
};
|
||||
struct SMILString : public nsISMILAttr
|
||||
{
|
||||
public:
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user