CVSROOT: /sources/gnash Module name: gnash Changes by: Sandro Santilli <strk> 07/12/21 02:27:53
Modified files: . : ChangeLog server/asobj : MovieClipLoader.cpp testsuite/actionscript.all: MovieClipLoader.as Log message: don't abort if MovieClipLoader.getProgress is called w/out an argument, make the members of returned object enumerable. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5237&r2=1.5238 http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/MovieClipLoader.cpp?cvsroot=gnash&r1=1.39&r2=1.40 http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/MovieClipLoader.as?cvsroot=gnash&r1=1.6&r2=1.7 Patches: Index: ChangeLog =================================================================== RCS file: /sources/gnash/gnash/ChangeLog,v retrieving revision 1.5237 retrieving revision 1.5238 diff -u -b -r1.5237 -r1.5238 --- ChangeLog 21 Dec 2007 00:56:07 -0000 1.5237 +++ ChangeLog 21 Dec 2007 02:27:52 -0000 1.5238 @@ -1,3 +1,11 @@ +2007-12-20 Sandro Santilli <[EMAIL PROTECTED]> + + * server/asobj/MovieClipLoader.cpp: don't abort if getProgress + is called w/out an argument, make the members of returned object + enumerable. + * testsuite/actionscript.all/MovieClipLoader.as: test + MovieClipLoader.getProgress. + 2007-12-20 Rob Savoye <[EMAIL PROTECTED]> * server/asobj/SharedObject.cpp: Use the domain name as part of the Index: server/asobj/MovieClipLoader.cpp =================================================================== RCS file: /sources/gnash/gnash/server/asobj/MovieClipLoader.cpp,v retrieving revision 1.39 retrieving revision 1.40 diff -u -b -r1.39 -r1.40 --- server/asobj/MovieClipLoader.cpp 20 Dec 2007 14:28:50 -0000 1.39 +++ server/asobj/MovieClipLoader.cpp 21 Dec 2007 02:27:52 -0000 1.40 @@ -34,6 +34,7 @@ #include "log.h" #include "URL.h" // for url parsing #include "VM.h" // for the string table. +#include "string_table.h" // for the string table. #include "builtin_function.h" #include "Object.h" // for getObjectInterface #include "AsBroadcaster.h" // for initializing self as a broadcaster @@ -43,6 +44,7 @@ #include <typeinfo> #include <string> #include <set> +#include <boost/algorithm/string/case_conv.hpp> // for PROPNAME namespace gnash { @@ -324,20 +326,30 @@ static as_value moviecliploader_getprogress(const fn_call& fn) { - //log_msg(_("%s: nargs = %d"), __FUNCTION__, nargs); + //log_debug(_("%s: nargs = %d"), __FUNCTION__, nargs); boost::intrusive_ptr<MovieClipLoader> ptr = ensureType<MovieClipLoader>(fn.this_ptr); + if ( ! fn.nargs ) + { + IF_VERBOSE_ASCODING_ERRORS( + log_aserror(_("MovieClipLoader.getProgress(): missing argument")); + ); + return as_value(); + } + boost::intrusive_ptr<as_object> target = fn.arg(0).to_object(); struct mcl *mcl_data = ptr->getProgress(target.get()); boost::intrusive_ptr<mcl_as_object> mcl_obj ( new mcl_as_object ); - mcl_obj->init_member("bytesLoaded", mcl_data->bytes_loaded); - mcl_obj->init_member("bytesTotal", mcl_data->bytes_total); + // We want these to be enumerable + string_table& st = ptr->getVM().getStringTable(); + mcl_obj->set_member(st.find(PROPNAME("bytesLoaded")), mcl_data->bytes_loaded); + mcl_obj->set_member(st.find(PROPNAME("bytesTotal")), mcl_data->bytes_total); - return as_value(mcl_obj.get()); // will store in a boost::intrusive_ptr + return as_value(mcl_obj.get()); // will keep alive } void Index: testsuite/actionscript.all/MovieClipLoader.as =================================================================== RCS file: /sources/gnash/gnash/testsuite/actionscript.all/MovieClipLoader.as,v retrieving revision 1.6 retrieving revision 1.7 diff -u -b -r1.6 -r1.7 --- testsuite/actionscript.all/MovieClipLoader.as 20 Dec 2007 14:28:50 -0000 1.6 +++ testsuite/actionscript.all/MovieClipLoader.as 21 Dec 2007 02:27:53 -0000 1.7 @@ -21,7 +21,7 @@ // compile this test case with Ming makeswf, and then // execute it like this gnash -1 -r 0 -v out.swf -rcsid="$Id: MovieClipLoader.as,v 1.6 2007/12/20 14:28:50 strk Exp $"; +rcsid="$Id: MovieClipLoader.as,v 1.7 2007/12/21 02:27:53 strk Exp $"; #include "check.as" @@ -68,7 +68,7 @@ MovieClipLoader.prototype.bm = MovieClipLoader.prototype.broadcastMessage; MovieClipLoader.prototype.broadcastMessage = function(arg1, arg2, arg3, arg4) { - note("Broadcasting "+arg1); + //note("Broadcasting "+arg1); //this.bm(arg1, arg2, arg3, arg4); this.bm.apply(this, arguments); }; @@ -126,11 +126,8 @@ }; totalProgressCalls=0; -mcl.onLoadError = function(target, msg, n) +nextTestOrEnd = function() { - check_equals(arguments.length, 3); - check_equals(target, expected.target); - note("onLoadError called ("+msg+")"); if ( state.nextFunction == undefined ) { // we don't know how many times onLoadProgress will be called @@ -141,9 +138,10 @@ // the bug from supposedly subsequent callbacks, which check for // a local flag set by the onLoadProgress handler. // - progCallbackTests = totalProgressCalls*6; + var testsPerProgressCallback = 15; + progCallbackTests = totalProgressCalls*testsPerProgressCallback; note("Number of onLoadProgress runs: "+totalProgressCalls+" - tests: "+progCallbackTests); - if ( expect.failtotals ) { + if ( expected.failtotals ) { xcheck_totals(expected.totals + progCallbackTests); } else { check_totals(expected.totals + progCallbackTests); @@ -154,6 +152,14 @@ { state.nextFunction(); } +}; + +mcl.onLoadError = function(target, msg, n) +{ + check_equals(arguments.length, 3); + check_equals(target, expected.target); + note("onLoadError called ("+msg+")"); + nextTestOrEnd(); //dumpObj(arguments); }; @@ -162,17 +168,37 @@ check_equals(arguments.length, 1); check_equals(target, expected.target); state.onLoadStartCalls++; + note("onLoadStart("+target+", "+target._url+") called"); //note("onLoadStart called with "+arguments.length+" args:"); dumpObj(arguments); }; mcl.onLoadProgress = function(target, bytesLoaded, bytesTotal) { + //note("onLoadProgress("+target+", "+target._url+") called"); + check_equals(arguments.length, 3); check_equals(target, expected.target); check_equals(state.onLoadStartCalls, 1); check_equals(typeof(bytesLoaded), 'number') check_equals(typeof(bytesTotal), 'number') check(bytesTotal <= bytesTotal); + + check_equals(this, mcl); + + var tmp = this.getProgress(); + check_equals(typeof(tmp), 'undefined'); + + var prog = this.getProgress(target); + check_equals(typeof(prog), 'object'); + check_equals(prog.__proto__, undefined); + check_equals(prog.bytesLoaded, bytesLoaded); + check_equals(prog.bytesTotal, bytesTotal); + var progcopy = {}; var progcount=0; + for (var i in prog) { progcopy[i] = prog[i]; progcount++; } + check_equals(progcount, 2); + check_equals(progcopy.bytesLoaded, bytesLoaded); + check_equals(progcopy.bytesTotal, bytesTotal); + ++state.onLoadProgressCalls; ++totalProgressCalls; //note("onLoadProgress called with "+arguments.length+" args:"); dumpObj(arguments); @@ -180,6 +206,7 @@ mcl.onLoadComplete = function(target, n) { + note("onLoadComplete("+target+", "+target._url+") called"); check_equals(arguments.length, 2); check_equals(target, expected.target); check_equals(state.onLoadStartCalls, 1); @@ -192,6 +219,7 @@ mcl.onLoadInit = function(target) { + note("onLoadInit("+target+", "+target._url+") called"); check_equals(arguments.length, 1); check_equals(target, expected.target); check_equals(state.onLoadStartCalls, 1); @@ -201,30 +229,7 @@ //note("target.var1: "+target.var1); //note("onLoadInit called with "+arguments.length+" args:"); dumpObj(arguments); - if ( state.nextFunction == undefined ) - { - // we don't know how many times onLoadProgress will be called - // so we have that handler increment a totalProgressCalls and - // we use that value to figure out how many tests to expect to - // be run (6 tests each onLoadProgress call). - // Note that if we miss to call onLoadProgress at all we'd catch - // the bug from supposedly subsequent callbacks, which check for - // a local flag set by the onLoadProgress handler. - // - progCallbackTests = totalProgressCalls*6; - note("Number of onLoadProgress runs: "+totalProgressCalls+" - tests: "+progCallbackTests); - if ( expect.failtotals ) { - xcheck_totals(expected.totals + progCallbackTests); - } else { - check_totals(expected.totals + progCallbackTests); - } - - play(); - } - else - { - state.nextFunction(); - } + nextTestOrEnd(); }; check( ! mcl.loadClip() ); @@ -263,12 +268,15 @@ // onLoadProgress) // // subtract the number of progress callback runs reported when playing from the totals to get the correct number + // BUT MAKE SURE nextTestOrEnd CONTAINS THE CORRECT testsPerProgressCallback INFO !! // expected.totals = 57; // gnash doesn't call onLoadInit if the data at the url is not an SWF or JPG // (or whatever else can become a movie_instance), while the PP does. // So in this testcase, the attempt to load vars.txt is invalid for Gnash // (triggers onLoadError) + // TODO: fix gnash to be compatible and find out if there's anything + // actually dont for loadVariable-like data // expected.failtotals = true; _______________________________________________ Gnash-commit mailing list Gnash-commit@gnu.org http://lists.gnu.org/mailman/listinfo/gnash-commit