Bug 569301 - Add on* event handler property support for media events. r=smaug

This commit is contained in:
Matthew Gregan 2010-08-02 17:53:45 +12:00
parent d08de7d497
commit 03ad3eb6b1
4 changed files with 194 additions and 18 deletions

View File

@ -121,6 +121,7 @@ _TEST_FILES = \
test_paused.html \
test_paused_after_ended.html \
test_play_events.html \
test_play_events_2.html \
test_play_twice.html \
test_playback.html \
test_playback_errors.html \

View File

@ -0,0 +1,70 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Media test: play() method via DOM 0 handlers</title>
<script type="text/javascript" src="/MochiKit/packed.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="manifest.js"></script>
</head>
<body>
<pre id="test">
<script>
var videos = [];
var tokens = {
0: ["play"],
"play": ["canplay"],
"canplay": ["playing"],
"playing": ["canplay", "canplaythrough"],
"canplaythrough": ["canplay", "canplaythrough"]
};
function gotPlayEvent(event) {
var v = event.target;
ok(tokens[v._state].indexOf(event.type) >= 0,
"Check expected event got " + event.type + " at " + v._state + " for " + v.src);
v._state = event.type;
}
function ended(event) {
var v = event.target;
v._finished = true;
is(v._state, "canplaythrough", "Last event should be canplaythrough for " + v.src);
if (AllFinished(videos)) {
SimpleTest.finish();
}
}
for (var i=0; i<gSmallTests.length; ++i) {
var v = document.createElement('video');
var test = gSmallTests[i];
if (!v.canPlayType(test.type))
continue;
v._state = 0;
v._finished = false;
["play", "canplay", "playing", "canplaythrough"].forEach(function (e) {
v["on" + e] = gotPlayEvent;
});
v.onended = ended;
v.src = test.name;
document.body.appendChild(v); // Causes load.
v.play();
videos.push(v);
}
if (videos.length == 0) {
todo(false, "No types supported");
} else {
SimpleTest.waitForExplicitFinish();
}
</script>
</pre>
</body>
</html>

View File

@ -1585,6 +1585,26 @@ jsid nsDOMClassInfo::sOncut_id = JSID_VOID;
jsid nsDOMClassInfo::sOnpaste_id = JSID_VOID;
jsid nsDOMClassInfo::sJava_id = JSID_VOID;
jsid nsDOMClassInfo::sPackages_id = JSID_VOID;
jsid nsDOMClassInfo::sOnloadstart_id = JSID_VOID;
jsid nsDOMClassInfo::sOnprogress_id = JSID_VOID;
jsid nsDOMClassInfo::sOnsuspend_id = JSID_VOID;
jsid nsDOMClassInfo::sOnemptied_id = JSID_VOID;
jsid nsDOMClassInfo::sOnstalled_id = JSID_VOID;
jsid nsDOMClassInfo::sOnplay_id = JSID_VOID;
jsid nsDOMClassInfo::sOnpause_id = JSID_VOID;
jsid nsDOMClassInfo::sOnloadedmetadata_id= JSID_VOID;
jsid nsDOMClassInfo::sOnloadeddata_id = JSID_VOID;
jsid nsDOMClassInfo::sOnwaiting_id = JSID_VOID;
jsid nsDOMClassInfo::sOnplaying_id = JSID_VOID;
jsid nsDOMClassInfo::sOncanplay_id = JSID_VOID;
jsid nsDOMClassInfo::sOncanplaythrough_id= JSID_VOID;
jsid nsDOMClassInfo::sOnseeking_id = JSID_VOID;
jsid nsDOMClassInfo::sOnseeked_id = JSID_VOID;
jsid nsDOMClassInfo::sOntimeupdate_id = JSID_VOID;
jsid nsDOMClassInfo::sOnended_id = JSID_VOID;
jsid nsDOMClassInfo::sOnratechange_id = JSID_VOID;
jsid nsDOMClassInfo::sOndurationchange_id= JSID_VOID;
jsid nsDOMClassInfo::sOnvolumechange_id = JSID_VOID;
static const JSClass *sObjectClass = nsnull;
JSPropertyOp nsDOMClassInfo::sXPCNativeWrapperGetPropertyOp = nsnull;
@ -1787,6 +1807,28 @@ nsDOMClassInfo::DefineStaticJSVals(JSContext *cx)
SET_JSID_TO_STRING(sOnpaste_id, cx, "onpaste");
SET_JSID_TO_STRING(sJava_id, cx, "java");
SET_JSID_TO_STRING(sPackages_id, cx, "Packages");
#ifdef MOZ_MEDIA
SET_JSID_TO_STRING(sOnloadstart_id, cx, "onloadstart");
SET_JSID_TO_STRING(sOnprogress_id, cx, "onprogress");
SET_JSID_TO_STRING(sOnsuspend_id, cx, "onsuspend");
SET_JSID_TO_STRING(sOnemptied_id, cx, "onemptied");
SET_JSID_TO_STRING(sOnstalled_id, cx, "onstalled");
SET_JSID_TO_STRING(sOnplay_id, cx, "onplay");
SET_JSID_TO_STRING(sOnpause_id, cx, "onpause");
SET_JSID_TO_STRING(sOnloadedmetadata_id,cx, "onloadedmetadata");
SET_JSID_TO_STRING(sOnloadeddata_id, cx, "onloadeddata");
SET_JSID_TO_STRING(sOnwaiting_id, cx, "onwaiting");
SET_JSID_TO_STRING(sOnplaying_id, cx, "onplaying");
SET_JSID_TO_STRING(sOncanplay_id, cx, "oncanplay");
SET_JSID_TO_STRING(sOncanplaythrough_id,cx, "oncanplaythrough");
SET_JSID_TO_STRING(sOnseeking_id, cx, "onseeking");
SET_JSID_TO_STRING(sOnseeked_id, cx, "onseeked");
SET_JSID_TO_STRING(sOntimeupdate_id, cx, "ontimeupdate");
SET_JSID_TO_STRING(sOnended_id, cx, "onended");
SET_JSID_TO_STRING(sOnratechange_id, cx, "onratechange");
SET_JSID_TO_STRING(sOndurationchange_id,cx, "ondurationchange");
SET_JSID_TO_STRING(sOnvolumechange_id, cx, "onvolumechange");
#endif // MOZ_MEDIA
return NS_OK;
}
@ -4815,6 +4857,26 @@ nsDOMClassInfo::ShutDown()
sOnpaste_id = JSID_VOID;
sJava_id = JSID_VOID;
sPackages_id = JSID_VOID;
sOnloadstart_id = JSID_VOID;
sOnprogress_id = JSID_VOID;
sOnsuspend_id = JSID_VOID;
sOnemptied_id = JSID_VOID;
sOnstalled_id = JSID_VOID;
sOnplay_id = JSID_VOID;
sOnpause_id = JSID_VOID;
sOnloadedmetadata_id= JSID_VOID;
sOnloadeddata_id = JSID_VOID;
sOnwaiting_id = JSID_VOID;
sOnplaying_id = JSID_VOID;
sOncanplay_id = JSID_VOID;
sOncanplaythrough_id= JSID_VOID;
sOnseeking_id = JSID_VOID;
sOnseeked_id = JSID_VOID;
sOntimeupdate_id = JSID_VOID;
sOnended_id = JSID_VOID;
sOnratechange_id = JSID_VOID;
sOndurationchange_id= JSID_VOID;
sOnvolumechange_id = JSID_VOID;
NS_IF_RELEASE(sXPConnect);
NS_IF_RELEASE(sSecMan);
@ -7642,16 +7704,14 @@ nsEventReceiverSH::ReallyIsEventName(jsid id, jschar aFirstChar)
case 'b' :
return (id == sOnbeforeunload_id ||
id == sOnblur_id);
case 'e' :
return id == sOnerror_id;
case 'f' :
return id == sOnfocus_id;
case 'c' :
return (id == sOnchange_id ||
id == sOnclick_id ||
id == sOncontextmenu_id ||
id == sOncopy_id ||
id == sOncut_id);
id == sOncut_id ||
id == sOncanplay_id ||
id == sOncanplaythrough_id);
case 'd' :
return (id == sOndblclick_id ||
id == sOndrag_id ||
@ -7660,37 +7720,62 @@ nsEventReceiverSH::ReallyIsEventName(jsid id, jschar aFirstChar)
id == sOndragleave_id ||
id == sOndragover_id ||
id == sOndragstart_id ||
id == sOndrop_id);
id == sOndrop_id ||
id == sOndurationchange_id);
case 'e' :
return (id == sOnerror_id ||
id == sOnemptied_id ||
id == sOnended_id);
case 'f' :
return id == sOnfocus_id;
case 'h' :
return id == sOnhashchange_id;
case 'l' :
return id == sOnload_id;
case 'p' :
return (id == sOnpaint_id ||
id == sOnpageshow_id ||
id == sOnpagehide_id ||
id == sOnpaste_id ||
id == sOnpopstate_id);
case 'k' :
return (id == sOnkeydown_id ||
id == sOnkeypress_id ||
id == sOnkeyup_id);
case 'u' :
return id == sOnunload_id;
case 'l' :
return (id == sOnload_id ||
id == sOnloadeddata_id ||
id == sOnloadedmetadata_id ||
id == sOnloadstart_id);
case 'm' :
return (id == sOnmousemove_id ||
id == sOnmouseout_id ||
id == sOnmouseover_id ||
id == sOnmouseup_id ||
id == sOnmousedown_id);
case 'p' :
return (id == sOnpaint_id ||
id == sOnpageshow_id ||
id == sOnpagehide_id ||
id == sOnpaste_id ||
id == sOnpopstate_id ||
id == sOnpause_id ||
id == sOnplay_id ||
id == sOnplaying_id ||
id == sOnprogress_id);
case 'r' :
return (id == sOnreadystatechange_id ||
id == sOnreset_id ||
id == sOnresize_id);
id == sOnresize_id ||
id == sOnratechange_id);
case 's' :
return (id == sOnscroll_id ||
id == sOnselect_id ||
id == sOnsubmit_id);
id == sOnsubmit_id ||
id == sOnseeked_id ||
id == sOnseeking_id ||
id == sOnstalled_id ||
id == sOnsuspend_id);
case 't':
return id == sOntimeupdate_id;
case 'u' :
return id == sOnunload_id;
case 'v':
return id == sOnvolumechange_id;
case 'w':
return id == sOnwaiting_id;
}
return PR_FALSE;

View File

@ -360,6 +360,26 @@ protected:
static jsid sOnpaste_id;
static jsid sJava_id;
static jsid sPackages_id;
static jsid sOnloadstart_id;
static jsid sOnprogress_id;
static jsid sOnsuspend_id;
static jsid sOnemptied_id;
static jsid sOnstalled_id;
static jsid sOnplay_id;
static jsid sOnpause_id;
static jsid sOnloadedmetadata_id;
static jsid sOnloadeddata_id;
static jsid sOnwaiting_id;
static jsid sOnplaying_id;
static jsid sOncanplay_id;
static jsid sOncanplaythrough_id;
static jsid sOnseeking_id;
static jsid sOnseeked_id;
static jsid sOntimeupdate_id;
static jsid sOnended_id;
static jsid sOnratechange_id;
static jsid sOndurationchange_id;
static jsid sOnvolumechange_id;
static JSPropertyOp sXPCNativeWrapperGetPropertyOp;
static JSPropertyOp sXrayWrapperPropertyHolderGetPropertyOp;