[Swfdec-commits] 10 commits - swfdec-gtk/swfdec_gtk_loader.c swfdec/swfdec_as_interpret.c swfdec/swfdec_codec_gst.c swfdec/swfdec_file_loader.c swfdec/swfdec_loader.c swfdec/swfdec_loader.h swfdec/swfdec_load_object_as.c swfdec/swfdec_load_object.c swfdec/swfdec_load_object.h swfdec/swfdec_movie_clip_loader.c swfdec/swfdec_net_stream.c swfdec/swfdec_player.c swfdec/swfdec_player_internal.h swfdec/swfdec_policy_file.c swfdec/swfdec_resource.c swfdec/swfdec_resource.h swfdec/swfdec_text_field_movie.c test/swfdec_test_plugin.c test/trace vivified/code
Pekka Lampila
medar at kemper.freedesktop.org
Fri May 30 01:35:36 PDT 2008
swfdec-gtk/swfdec_gtk_loader.c | 6 -
swfdec/swfdec_as_interpret.c | 65 ++++++++++++++++---
swfdec/swfdec_codec_gst.c | 2
swfdec/swfdec_file_loader.c | 2
swfdec/swfdec_load_object.c | 7 --
swfdec/swfdec_load_object.h | 2
swfdec/swfdec_load_object_as.c | 26 ++++---
swfdec/swfdec_loader.c | 12 ---
swfdec/swfdec_loader.h | 8 --
swfdec/swfdec_movie_clip_loader.c | 6 -
swfdec/swfdec_net_stream.c | 3
swfdec/swfdec_player.c | 14 +---
swfdec/swfdec_player_internal.h | 2
swfdec/swfdec_policy_file.c | 2
swfdec/swfdec_resource.c | 29 ++++----
swfdec/swfdec_resource.h | 2
swfdec/swfdec_text_field_movie.c | 2
test/swfdec_test_plugin.c | 5 -
test/trace/Makefile.am | 28 ++++++++
test/trace/loadobject-sendandload-6.swf |binary
test/trace/loadobject-sendandload-6.swf.trace | 2
test/trace/loadobject-sendandload-7.swf |binary
test/trace/loadobject-sendandload-7.swf.trace | 2
test/trace/loadobject-sendandload-8.swf |binary
test/trace/loadobject-sendandload-8.swf.trace | 2
test/trace/loadobject-sendandload.as | 22 ++++++
test/trace/try-return-in-finally-5.swf |binary
test/trace/try-return-in-finally-5.swf.trace | 2
test/trace/try-return-in-finally-6.swf |binary
test/trace/try-return-in-finally-6.swf.trace | 2
test/trace/try-return-in-finally-7.swf |binary
test/trace/try-return-in-finally-7.swf.trace | 2
test/trace/try-return-in-finally-8.swf |binary
test/trace/try-return-in-finally-8.swf.trace | 2
test/trace/try-return-in-finally.as | 17 ++++
test/trace/try-variable-propflags-5.swf |binary
test/trace/try-variable-propflags-5.swf.trace | 4 +
test/trace/try-variable-propflags-6.swf |binary
test/trace/try-variable-propflags-6.swf.trace | 4 +
test/trace/try-variable-propflags-7.swf |binary
test/trace/try-variable-propflags-7.swf.trace | 4 +
test/trace/try-variable-propflags-8.swf |binary
test/trace/try-variable-propflags-8.swf.trace | 4 +
test/trace/try-variable-propflags.as | 15 ++++
test/trace/video-enumerate.c | 39 +++++++++++
test/trace/video-enumerate.swf |binary
test/trace/video-enumerate.swf.trace | 2
vivified/code/test/compiler/Makefile.am | 2
vivified/code/test/compiler/asm_jump.as | 4 +
vivified/code/test/compiler/asm_jump.as.expect | 6 +
vivified/code/test/compiler/try.as.expect | 1
vivified/code/test/compiler/try_no_finally.as.expect | 1
vivified/code/vivi_code_asm_get_url2.c | 6 -
vivified/code/vivi_code_asm_get_url2.h | 2
vivified/code/vivi_code_get_url.c | 2
vivified/code/vivi_code_get_url.h | 4 -
vivified/code/vivi_code_try.c | 3
vivified/code/vivi_parser.c | 38 +++++++++--
58 files changed, 318 insertions(+), 99 deletions(-)
New commits:
commit c1222930eb12abafdb6ec370d0d8a5fafd5adddd
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri May 30 11:35:05 2008 +0300
Fix two bugs shown by compiler warnings
diff --git a/swfdec/swfdec_codec_gst.c b/swfdec/swfdec_codec_gst.c
index 7414180..919c8e8 100644
--- a/swfdec/swfdec_codec_gst.c
+++ b/swfdec/swfdec_codec_gst.c
@@ -226,6 +226,8 @@ swfdec_gst_decoder_init (SwfdecGstDecoder *dec, GstCaps *srccaps, GstCaps *sinkc
if (factory) {
decoder = gst_element_factory_create (factory, "decoder");
gst_object_unref (factory);
+ } else {
+ decoder = NULL;
}
if (decoder == NULL) {
SWFDEC_ERROR ("failed to create decoder");
diff --git a/swfdec/swfdec_resource.c b/swfdec/swfdec_resource.c
index c602355..5732a10 100644
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@ -543,6 +543,8 @@ swfdec_resource_create_movie (SwfdecResource *resource, SwfdecResourceLoad *load
int level = swfdec_player_get_level (player, load->target_string);
if (level >= 0)
movie = swfdec_player_create_movie_at_level (player, resource, level);
+ else
+ movie = NULL;
}
if (movie == NULL) {
SWFDEC_WARNING ("target does not reference a movie, not loading %s", load->url);
commit c5bffc0b3737b609570f50c53f647f0d93f7e4c1
Merge: 0f0b51c... c88a4bd...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri May 30 11:31:10 2008 +0300
Merge branch 'master' of ssh://medar@git.freedesktop.org/git/swfdec/swfdec
Conflicts:
swfdec/swfdec_as_interpret.c
swfdec/swfdec_movie_clip_loader.c
swfdec/swfdec_resource.c
swfdec/swfdec_resource.h
diff --cc swfdec/swfdec_as_interpret.c
index e972af0,534a86a..e7c2422
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@@ -1143,8 -1143,8 +1143,7 @@@ swfdec_action_get_url (SwfdecAsContext
if (!SWFDEC_IS_PLAYER (cx)) {
SWFDEC_ERROR ("GetURL without a SwfdecPlayer");
} else {
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
- NULL, NULL, FALSE);
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
++ swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL);
}
g_free (url);
g_free (target);
@@@ -1219,37 -1180,29 +1218,40 @@@ swfdec_action_get_url2 (SwfdecAsContex
}
internal = data[0] & 64;
variables = data[0] & 128;
- if (method == 1 || method == 2) {
- SWFDEC_FIXME ("encode variables");
- }
- target = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
url = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 2));
+ buffer = NULL;
+
+ if (method == 1 || method == 2) {
+ char *text = swfdec_as_interpret_encode_variables (cx->frame->target);
+ if (method == 1) {
+ url = swfdec_as_context_give_string (cx, g_strjoin (NULL, url,
+ strchr (url, '?') == NULL ? "?" : "&", data, NULL));
+ } else {
+ // don't send the nul-byte
+ buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (text)),
+ strlen (text));
+ }
+ g_free (text);
+ }
if (!SWFDEC_IS_PLAYER (cx)) {
SWFDEC_ERROR ("GetURL2 action requires a SwfdecPlayer");
} else if (variables) {
SwfdecMovie *movie;
+ target = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
if (movie != NULL) {
- swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
+ swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, buffer, NULL,
swfdec_as_interpret_load_variables_on_finish);
}
+ } else if (internal) {
+ swfdec_resource_load_movie (SWFDEC_PLAYER (cx), swfdec_as_stack_peek (cx, 1),
- url, method, NULL, NULL);
++ url, NULL, NULL);
} else {
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, buffer, NULL,
- internal);
+ target = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL);
++ swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, buffer);
}
swfdec_as_stack_pop_n (cx, 2);
diff --cc swfdec/swfdec_movie_clip_loader.c
index fc05a1e,2c6d5e4..1cb56b2
--- a/swfdec/swfdec_movie_clip_loader.c
+++ b/swfdec/swfdec_movie_clip_loader.c
@@@ -70,11 -70,13 +70,12 @@@ swfdec_movie_clip_loader_loadClip (Swfd
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
SwfdecMovieClipLoader *loader;
- const char *url, *target;
+ const char *url;
+ SwfdecAsValue target;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "ss", &url, &target);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "sv", &url, &target);
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL, loader, TRUE);
- swfdec_resource_load_movie (SWFDEC_PLAYER (cx), &target, url,
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader);
++ swfdec_resource_load_movie (SWFDEC_PLAYER (cx), &target, url, NULL, loader);
}
SWFDEC_AS_NATIVE (112, 102, swfdec_movie_clip_loader_unloadClip)
@@@ -83,11 -85,12 +84,11 @@@ swfdec_movie_clip_loader_unloadClip (Sw
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
SwfdecMovieClipLoader *loader;
- const char *target;
+ SwfdecAsValue target;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "s", &target);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "v", &target);
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, "", NULL, loader, TRUE);
- swfdec_resource_load_movie (SWFDEC_PLAYER (cx), &target, "",
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader);
++ swfdec_resource_load_movie (SWFDEC_PLAYER (cx), &target, "", NULL, loader);
}
SWFDEC_AS_NATIVE (112, 101, swfdec_movie_clip_loader_getProgress)
diff --cc swfdec/swfdec_resource.c
index 35750a1,7b90528..c602355
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@@ -522,11 -492,12 +492,11 @@@ swfdec_resource_add_export (SwfdecResou
typedef struct _SwfdecResourceLoad SwfdecResourceLoad;
struct _SwfdecResourceLoad {
SwfdecSandbox * sandbox;
- char * target;
+ char * target_string;
+ SwfdecSpriteMovie * target_movie;
char * url;
- SwfdecLoaderRequest request;
SwfdecBuffer * buffer;
SwfdecMovieClipLoader * loader;
- gboolean target_is_movie;
};
static void
@@@ -579,8 -580,10 +579,10 @@@ swfdec_resource_do_load (SwfdecPlayer *
return;
}
- swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
- loader = swfdec_player_load (player, load-> url, load->buffer);
+ /* FIXME: load nonetheless, even if there's no movie? */
+ if (!swfdec_resource_create_movie (resource, load))
+ return;
- loader = swfdec_player_load (player, load->url, load->request, load->buffer);
++ loader = swfdec_player_load (player, load->url, load->buffer);
swfdec_resource_set_loader (resource, loader);
g_object_unref (loader);
}
@@@ -615,8 -624,8 +623,8 @@@ swfdec_resource_load_request (gpointer
}
/* LAUNCH command (aka getURL) */
- if (!load->target_is_movie && swfdec_player_get_level (player, load->target) < 0) {
- swfdec_player_launch (player, load->url, load->target, load->buffer);
+ if (load->target_string && swfdec_player_get_level (player, load->target_string) < 0) {
- swfdec_player_launch (player, load->request, load->url,load->target_string, load->buffer);
++ swfdec_player_launch (player, load->url, load->target_string, load->buffer);
return;
}
@@@ -653,46 -662,76 +661,74 @@@
}
/* NB: must be called from a script */
-/* FIXME: 7 arguments?! */
+/* FIXME: 6 arguments?! */
- void
- swfdec_resource_load (SwfdecPlayer *player, const char *target,
- const char *url, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader,
- gboolean target_is_movie)
+ static void
-swfdec_resource_load_internal (SwfdecPlayer *player, SwfdecSpriteMovie *target_movie,
- const char *target_string, const char *url, SwfdecLoaderRequest request,
- SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader)
++swfdec_resource_load_internal (SwfdecPlayer *player,
++ SwfdecSpriteMovie *target_movie, const char *target_string,
++ const char *url, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader)
{
- SwfdecSpriteMovie *movie;
SwfdecResourceLoad *load;
- g_return_if_fail (SWFDEC_IS_PLAYER (player));
- g_return_if_fail (target != NULL);
- g_return_if_fail (url != NULL);
- g_return_if_fail (loader == NULL || SWFDEC_IS_MOVIE_CLIP_LOADER (loader));
-
g_assert (SWFDEC_AS_CONTEXT (player)->frame != NULL);
load = g_slice_new (SwfdecResourceLoad);
- if (target_is_movie) {
- movie = (SwfdecSpriteMovie *) swfdec_player_get_movie_from_string (player, target);
- if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
- load->target = swfdec_movie_get_path (SWFDEC_MOVIE (movie), TRUE);
- } else if (swfdec_player_get_level (player, target) >= 0) {
- load->target = g_strdup (target);
- } else {
- SWFDEC_WARNING ("%s does not reference a movie, not loading %s", target, url);
- return;
- }
- } else {
- load->target = g_strdup (target);
- }
load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
load->url = g_strdup (url);
+ load->target_movie = target_movie;
+ load->target_string = g_strdup (target_string);
- load->request = request;
load->buffer = buffer;
load->loader = loader;
- load->target_is_movie = target_is_movie;
swfdec_player_root (player, load, swfdec_resource_load_mark);
swfdec_player_request_resource (player, swfdec_resource_load_request, load, swfdec_resource_load_free);
}
+ void
+ swfdec_resource_load_movie (SwfdecPlayer *player, const SwfdecAsValue *target,
- const char *url, SwfdecLoaderRequest request, SwfdecBuffer *buffer,
- SwfdecMovieClipLoader *loader)
++ const char *url, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader)
+ {
+ SwfdecMovie *movie;
+ const char *s;
+
+ g_return_if_fail (SWFDEC_IS_PLAYER (player));
+ g_return_if_fail (target != NULL);
+ g_return_if_fail (url != NULL);
+ g_return_if_fail (loader == NULL || SWFDEC_IS_MOVIE_CLIP_LOADER (loader));
+
+ if (SWFDEC_AS_VALUE_IS_OBJECT (target)) {
+ SwfdecAsObject *object = SWFDEC_AS_VALUE_GET_OBJECT (target);
+ if (SWFDEC_IS_SPRITE_MOVIE (object)) {
+ swfdec_resource_load_internal (player, SWFDEC_SPRITE_MOVIE (object),
- NULL, url, request, buffer, loader);
++ NULL, url, buffer, loader);
+ return;
+ }
+ }
+
+ s = swfdec_as_value_to_string (SWFDEC_AS_CONTEXT (player), target);
+ movie = swfdec_player_get_movie_from_string (player, s);
+ if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
+ swfdec_resource_load_internal (player, SWFDEC_SPRITE_MOVIE (movie),
- NULL, url, request, buffer, loader);
++ NULL, url, buffer, loader);
+ return;
+ }
+ if (swfdec_player_get_level (player, s) < 0) {
+ SWFDEC_WARNING ("%s does not reference a movie, not loading %s", s, url);
+ return;
+ }
- swfdec_resource_load_internal (player, NULL, s, url, request, buffer, NULL);
++ swfdec_resource_load_internal (player, NULL, s, url, buffer, NULL);
+ }
+
+ void
+ swfdec_resource_load (SwfdecPlayer *player, const char *target,
- const char *url, SwfdecLoaderRequest request, SwfdecBuffer *buffer)
++ const char *url, SwfdecBuffer *buffer)
+ {
+ g_return_if_fail (SWFDEC_IS_PLAYER (player));
+ g_return_if_fail (target != NULL);
+ g_return_if_fail (url != NULL);
+
- swfdec_resource_load_internal (player, NULL, target, url, request, buffer, NULL);
++ swfdec_resource_load_internal (player, NULL, target, url, buffer, NULL);
+ }
+
gboolean
swfdec_resource_emit_on_load_init (SwfdecResource *resource)
{
diff --cc swfdec/swfdec_resource.h
index ac4f292,d1c977f..5b12ee6
--- a/swfdec/swfdec_resource.h
+++ b/swfdec/swfdec_resource.h
@@@ -85,12 -85,17 +85,15 @@@ gpointer swfdec_resource_get_export (S
const char * swfdec_resource_get_export_name (SwfdecResource * root,
SwfdecCharacter * character);
+ void swfdec_resource_load_movie (SwfdecPlayer * player,
+ const SwfdecAsValue * target,
+ const char * url,
- SwfdecLoaderRequest request,
+ SwfdecBuffer * buffer,
+ SwfdecMovieClipLoader *loader);
void swfdec_resource_load (SwfdecPlayer * player,
const char * target,
const char * url,
- SwfdecBuffer * buffer,
- SwfdecMovieClipLoader *loader,
- gboolean target_is_movie);
- SwfdecLoaderRequest request,
+ SwfdecBuffer * buffer);
G_END_DECLS
commit 0f0b51c3c48777a9bfc3d03a31fd3a3f7a93c32c
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri May 30 10:12:46 2008 +0300
Implement encoding variables for getURL2 action
diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index 3aefca5..e972af0 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -1162,11 +1162,50 @@ swfdec_as_interpret_load_variables_on_finish (SwfdecAsObject *target,
swfdec_actor_queue_script (SWFDEC_ACTOR (target), SWFDEC_EVENT_DATA);
}
+static gboolean
+swfdec_as_interpret_encode_variables_foreach (SwfdecAsObject *object,
+ const char *variable, SwfdecAsValue *value, guint flags, gpointer data)
+{
+ GString *variables = data;
+ char *escaped;
+
+ // FIXME: check propflags?
+
+ if (variables->len > 0)
+ g_string_append_c (variables, '&');
+
+ escaped = swfdec_as_string_escape (object->context, variable);
+ g_string_append (variables, escaped);
+ g_free (escaped);
+
+ g_string_append_c (variables, '=');
+
+ escaped = swfdec_as_string_escape (object->context,
+ swfdec_as_value_to_string (object->context, value));
+ g_string_append (variables, escaped);
+ g_free (escaped);
+
+ return TRUE;
+}
+
+static char *
+swfdec_as_interpret_encode_variables (SwfdecAsObject *object)
+{
+ GString *variables = g_string_new ("");
+
+ SWFDEC_FIXME ("Encoding variables for getURL2 shouldn't include child movies");
+ swfdec_as_object_foreach (object,
+ swfdec_as_interpret_encode_variables_foreach, variables);
+
+ return g_string_free (variables, FALSE);
+}
+
static void
swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
{
const char *target, *url;
guint method, internal, variables;
+ SwfdecBuffer *buffer;
if (len != 1) {
SWFDEC_ERROR ("GetURL2 requires 1 byte of data, not %u", len);
@@ -1180,12 +1219,23 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
}
internal = data[0] & 64;
variables = data[0] & 128;
- if (method == 1 || method == 2) {
- SWFDEC_FIXME ("encode variables");
- }
target = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
url = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 2));
+ buffer = NULL;
+
+ if (method == 1 || method == 2) {
+ char *text = swfdec_as_interpret_encode_variables (cx->frame->target);
+ if (method == 1) {
+ url = swfdec_as_context_give_string (cx, g_strjoin (NULL, url,
+ strchr (url, '?') == NULL ? "?" : "&", data, NULL));
+ } else {
+ // don't send the nul-byte
+ buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (text)),
+ strlen (text));
+ }
+ g_free (text);
+ }
if (!SWFDEC_IS_PLAYER (cx)) {
SWFDEC_ERROR ("GetURL2 action requires a SwfdecPlayer");
@@ -1194,11 +1244,12 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
if (movie != NULL) {
- swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, NULL, NULL,
+ swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, buffer, NULL,
swfdec_as_interpret_load_variables_on_finish);
}
} else {
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL, NULL, internal);
+ swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, buffer, NULL,
+ internal);
}
swfdec_as_stack_pop_n (cx, 2);
commit d01cfebb94a1573aa692b9b2040fbd9bba9f11d5
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri May 30 10:04:29 2008 +0300
Add a test to see whether Video object's special props are included in for each
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index fb92f67..9fc0ec2 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -3679,6 +3679,9 @@ EXTRA_DIST = \
utf-32-le-bom.txt \
values.as \
video.flv \
+ video-enumerate.c \
+ video-enumerate.swf \
+ video-enumerate.swf.trace \
video-properties.as \
video-properties-6.swf \
video-properties-6.swf.trace \
diff --git a/test/trace/video-enumerate.c b/test/trace/video-enumerate.c
new file mode 100644
index 0000000..250b159
--- /dev/null
+++ b/test/trace/video-enumerate.c
@@ -0,0 +1,39 @@
+/* gcc `pkg-config --libs --cflags libming` video-enumerate.c -o video-enumerate && ./video-enumerate
+ */
+
+#include <ming.h>
+
+int
+main (int argc, char **argv)
+{
+ SWFMovie movie;
+ SWFVideoStream video;
+ SWFDisplayItem item;
+ SWFAction action;
+
+ if (Ming_init ())
+ return 1;
+ Ming_useSWFVersion (8);
+
+ movie = newSWFMovie();
+ SWFMovie_setRate (movie, 1);
+ SWFMovie_setDimension (movie, 200, 150);
+ video = newSWFVideoStream ();
+ SWFVideoStream_setDimension (video, 200, 150);
+ item = SWFMovie_add (movie, (SWFBlock) video);
+ SWFDisplayItem_setName (item, "video");
+ action = newSWFAction (""
+ "trace (\"Test if the special properties of Video object show up when enumerating\");"
+ "video.x = 'hello';"
+ "props = [];"
+ "for (var prop in video) {"
+ " props.push(prop);"
+ "}"
+ "props.sort ();"
+ "trace (props);"
+ "getURL ('fscommand:quit', '');"
+ "");
+ SWFMovie_add (movie, (SWFBlock) action);
+ SWFMovie_save (movie, "video-enumerate.swf");
+ return 0;
+}
diff --git a/test/trace/video-enumerate.swf b/test/trace/video-enumerate.swf
new file mode 100644
index 0000000..fa1100d
Binary files /dev/null and b/test/trace/video-enumerate.swf differ
diff --git a/test/trace/video-enumerate.swf.trace b/test/trace/video-enumerate.swf.trace
new file mode 100644
index 0000000..09e13aa
--- /dev/null
+++ b/test/trace/video-enumerate.swf.trace
@@ -0,0 +1,2 @@
+Test if the special properties of Video object show up when enumerating
+deblocking,height,smoothing,width,x
commit 7d3aca171f2125e3443e22c7749b88169e86fe9a
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu May 29 15:23:15 2008 +0300
Remove SwfdecLoaderRequest, now GET variables are appended to the URL earlier
Loads are normal get requests if the buffer is NULL and post requests otherwise
diff --git a/swfdec-gtk/swfdec_gtk_loader.c b/swfdec-gtk/swfdec_gtk_loader.c
index 76155e8..1793a03 100644
--- a/swfdec-gtk/swfdec_gtk_loader.c
+++ b/swfdec-gtk/swfdec_gtk_loader.c
@@ -128,7 +128,7 @@ swfdec_gtk_loader_dispose (GObject *object)
static void
swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
- const char *url_string, SwfdecLoaderRequest request, SwfdecBuffer *buffer)
+ const char *url_string, SwfdecBuffer *buffer)
{
SwfdecURL *url;
@@ -145,12 +145,12 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
if (!swfdec_url_has_protocol (url, "http") &&
!swfdec_url_has_protocol (url, "https")) {
SWFDEC_LOADER_CLASS (swfdec_gtk_loader_parent_class)->load (loader, player,
- url_string, request, buffer);
+ url_string, buffer);
} else {
SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (loader);
SwfdecGtkLoaderClass *klass = SWFDEC_GTK_LOADER_GET_CLASS (gtk);
- gtk->message = soup_message_new (request == SWFDEC_LOADER_REQUEST_POST ? "POST" : "GET",
+ gtk->message = soup_message_new (buffer != NULL ? "POST" : "GET",
swfdec_url_get_url (url));
soup_message_set_flags (gtk->message, SOUP_MESSAGE_OVERWRITE_CHUNKS);
g_signal_connect (gtk->message, "got-chunk", G_CALLBACK (swfdec_gtk_loader_push), gtk);
diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index a6d7044..3aefca5 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -1143,8 +1143,8 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu
if (!SWFDEC_IS_PLAYER (cx)) {
SWFDEC_ERROR ("GetURL without a SwfdecPlayer");
} else {
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL, NULL, FALSE);
+ swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
+ NULL, NULL, FALSE);
}
g_free (url);
g_free (target);
@@ -1194,11 +1194,11 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
if (movie != NULL) {
- swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
+ swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, NULL, NULL,
swfdec_as_interpret_load_variables_on_finish);
}
} else {
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL, internal);
+ swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL, NULL, internal);
}
swfdec_as_stack_pop_n (cx, 2);
diff --git a/swfdec/swfdec_file_loader.c b/swfdec/swfdec_file_loader.c
index 178601a..7f92275 100644
--- a/swfdec/swfdec_file_loader.c
+++ b/swfdec/swfdec_file_loader.c
@@ -39,7 +39,7 @@ G_DEFINE_TYPE (SwfdecFileLoader, swfdec_file_loader, SWFDEC_TYPE_LOADER)
static void
swfdec_file_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
- const char *url_string, SwfdecLoaderRequest request, SwfdecBuffer *buffer)
+ const char *url_string, SwfdecBuffer *buffer)
{
SwfdecStream *stream = SWFDEC_STREAM (loader);
GError *error = NULL;
diff --git a/swfdec/swfdec_load_object.c b/swfdec/swfdec_load_object.c
index 59ff143..2b15c09 100644
--- a/swfdec/swfdec_load_object.c
+++ b/swfdec/swfdec_load_object.c
@@ -172,7 +172,7 @@ swfdec_load_object_load (SwfdecPlayer *player, gboolean allow, gpointer obj)
return;
}
- load->loader = swfdec_player_load (player, load->url, load->request, load->buffer);
+ load->loader = swfdec_player_load (player, load->url, load->buffer);
swfdec_stream_set_target (SWFDEC_STREAM (load->loader), SWFDEC_STREAM_TARGET (load));
swfdec_loader_set_data_type (load->loader, SWFDEC_LOADER_DATA_TEXT);
@@ -241,8 +241,8 @@ swfdec_load_object_mark (gpointer object, gpointer player)
void
swfdec_load_object_create (SwfdecAsObject *target, const char *url,
- SwfdecLoaderRequest request, SwfdecBuffer *data,
- SwfdecLoadObjectProgress progress, SwfdecLoadObjectFinish finish)
+ SwfdecBuffer *data, SwfdecLoadObjectProgress progress,
+ SwfdecLoadObjectFinish finish)
{
SwfdecPlayer *player;
SwfdecLoadObject *load;
@@ -257,7 +257,6 @@ swfdec_load_object_create (SwfdecAsObject *target, const char *url,
load->target = target;
load->url = url;
- load->request = request;
load->buffer = data;
load->progress = progress;
load->finish = finish;
diff --git a/swfdec/swfdec_load_object.h b/swfdec/swfdec_load_object.h
index cd899a9..4e69288 100644
--- a/swfdec/swfdec_load_object.h
+++ b/swfdec/swfdec_load_object.h
@@ -47,7 +47,6 @@ struct _SwfdecLoadObject {
GObject object;
const char * url; /* GC'ed url to request */
- SwfdecLoaderRequest request; /* type of request */
SwfdecBuffer * buffer; /* data to send */
SwfdecLoader * loader; /* loader when loading or NULL */
@@ -66,7 +65,6 @@ GType swfdec_load_object_get_type (void);
void swfdec_load_object_create (SwfdecAsObject * target,
const char * url,
- SwfdecLoaderRequest request,
SwfdecBuffer * data,
SwfdecLoadObjectProgress progress,
SwfdecLoadObjectFinish finish);
diff --git a/swfdec/swfdec_load_object_as.c b/swfdec/swfdec_load_object_as.c
index b697e6a..5a6510b 100644
--- a/swfdec/swfdec_load_object_as.c
+++ b/swfdec/swfdec_load_object_as.c
@@ -74,8 +74,8 @@ swfdec_load_object_as_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "s", &url);
- swfdec_load_object_create (object, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
- swfdec_load_object_on_progress, swfdec_load_object_on_finish);
+ swfdec_load_object_create (object, url, NULL, swfdec_load_object_on_progress,
+ swfdec_load_object_on_finish);
SWFDEC_AS_VALUE_SET_INT (&val, 0);
swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR__bytesLoaded,
@@ -108,23 +108,31 @@ swfdec_load_object_as_sendAndLoad (SwfdecAsContext *cx, SwfdecAsObject *object,
SwfdecAsObject *target;
SwfdecAsValue val;
SwfdecBuffer *buffer;
- SwfdecLoaderRequest method;
+ gboolean get;
SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "sO|s", &url, &target, &method_string);
SWFDEC_FIXME ("support for contentType is missing");
if (method_string == NULL || g_ascii_strcasecmp (method_string, "get") == 0) {
- method = SWFDEC_LOADER_REQUEST_GET;
+ get = TRUE;
} else {
- method = SWFDEC_LOADER_REQUEST_POST;
+ get = FALSE;
}
SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
data = swfdec_as_value_to_string (cx, &val);
- // don't send the nul-byte
- buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data)),
- strlen (data));
- swfdec_load_object_create (target, url, method, buffer,
+
+ if (get) {
+ url = swfdec_as_context_give_string (cx,
+ g_strjoin (NULL, url, "?", data, NULL));
+ buffer = NULL;
+ } else {
+ // don't send the nul-byte
+ buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data)),
+ strlen (data));
+ }
+
+ swfdec_load_object_create (target, url, buffer,
swfdec_load_object_on_progress, swfdec_load_object_on_finish);
SWFDEC_AS_VALUE_SET_INT (&val, 0);
diff --git a/swfdec/swfdec_loader.c b/swfdec/swfdec_loader.c
index 9b96681..0b7cff2 100644
--- a/swfdec/swfdec_loader.c
+++ b/swfdec/swfdec_loader.c
@@ -78,18 +78,6 @@
* inside a #SwfdecLoader.
*/
-/**
- * SwfdecLoaderRequest:
- * @SWFDEC_LOADER_REQUEST_DEFAULT: Use the default method (this most likely is
- * equal to HTTPget)
- * @SWFDEC_LOADER_REQUEST_GET: Use HTTP get
- * @SWFDEC_LOADER_REQUEST_POST: Use HTTP post
- *
- * Describes the moethod to use for requesting a given URL. These methods map
- * naturally to HTTP methods, since HTTP is the common method for requesting
- * Flash content.
- */
-
/*** SwfdecLoader ***/
enum {
diff --git a/swfdec/swfdec_loader.h b/swfdec/swfdec_loader.h
index 0622770..1b0c272 100644
--- a/swfdec/swfdec_loader.h
+++ b/swfdec/swfdec_loader.h
@@ -38,13 +38,6 @@ typedef enum {
SWFDEC_LOADER_DATA_PNG
} SwfdecLoaderDataType;
-/* NB: actal numbers in SwfdecLoaderRequest are important for GetURL2 action */
-typedef enum {
- SWFDEC_LOADER_REQUEST_DEFAULT = 0,
- SWFDEC_LOADER_REQUEST_GET = 1,
- SWFDEC_LOADER_REQUEST_POST = 2
-} SwfdecLoaderRequest;
-
typedef struct _SwfdecLoader SwfdecLoader;
typedef struct _SwfdecLoaderClass SwfdecLoaderClass;
@@ -74,7 +67,6 @@ struct _SwfdecLoaderClass
void (* load) (SwfdecLoader * loader,
SwfdecPlayer * player,
const char * url,
- SwfdecLoaderRequest request,
SwfdecBuffer * buffer);
};
diff --git a/swfdec/swfdec_movie_clip_loader.c b/swfdec/swfdec_movie_clip_loader.c
index 77d8704..fc05a1e 100644
--- a/swfdec/swfdec_movie_clip_loader.c
+++ b/swfdec/swfdec_movie_clip_loader.c
@@ -74,8 +74,7 @@ swfdec_movie_clip_loader_loadClip (SwfdecAsContext *cx, SwfdecAsObject *object,
SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "ss", &url, &target);
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader, TRUE);
+ swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL, loader, TRUE);
}
SWFDEC_AS_NATIVE (112, 102, swfdec_movie_clip_loader_unloadClip)
@@ -88,8 +87,7 @@ swfdec_movie_clip_loader_unloadClip (SwfdecAsContext *cx, SwfdecAsObject *object
SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "s", &target);
- swfdec_resource_load (SWFDEC_PLAYER (cx), target, "",
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader, TRUE);
+ swfdec_resource_load (SWFDEC_PLAYER (cx), target, "", NULL, loader, TRUE);
}
SWFDEC_AS_NATIVE (112, 101, swfdec_movie_clip_loader_getProgress)
diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c
index 8b2729b..6a99e5e 100644
--- a/swfdec/swfdec_net_stream.c
+++ b/swfdec/swfdec_net_stream.c
@@ -557,8 +557,7 @@ swfdec_net_stream_load (SwfdecPlayer *player, gboolean allowed, gpointer streamp
SwfdecLoader *loader;
if (allowed) {
- loader = swfdec_player_load (player, stream->requested_url,
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
+ loader = swfdec_player_load (player, stream->requested_url, NULL);
swfdec_net_stream_set_loader (stream, loader);
g_object_unref (loader);
} else {
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index c06537c..81dd781 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -2298,8 +2298,7 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
*/
signals[LAUNCH] = g_signal_new ("launch", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST, 0, NULL, NULL, swfdec_marshal_VOID__ENUM_STRING_STRING_BOXED,
- G_TYPE_NONE, 4, SWFDEC_TYPE_LOADER_REQUEST, G_TYPE_STRING, G_TYPE_STRING,
- SWFDEC_TYPE_BUFFER);
+ G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_STRING, SWFDEC_TYPE_BUFFER);
/**
* SwfdecPlayer::missing-plugins:
* @player: the #SwfdecPlayer missing plugins
@@ -2545,7 +2544,7 @@ swfdec_player_get_movie_at_level (SwfdecPlayer *player, int level)
}
void
-swfdec_player_launch (SwfdecPlayer *player, SwfdecLoaderRequest request, const char *url,
+swfdec_player_launch (SwfdecPlayer *player, const char *url,
const char *target, SwfdecBuffer *data)
{
g_return_if_fail (SWFDEC_IS_PLAYER (player));
@@ -2557,7 +2556,7 @@ swfdec_player_launch (SwfdecPlayer *player, SwfdecLoaderRequest request, const c
g_signal_emit (player, signals[FSCOMMAND], 0, command, target);
return;
}
- g_signal_emit (player, signals[LAUNCH], 0, (int) request, url, target, data);
+ g_signal_emit (player, signals[LAUNCH], 0, url, target, data);
}
void
@@ -2715,7 +2714,7 @@ swfdec_player_create_url (SwfdecPlayer *player, const char *string)
SwfdecLoader *
swfdec_player_load (SwfdecPlayer *player, const char *url,
- SwfdecLoaderRequest request, SwfdecBuffer *buffer)
+ SwfdecBuffer *buffer)
{
SwfdecLoader *loader;
SwfdecLoaderClass *klass;
@@ -2726,7 +2725,7 @@ swfdec_player_load (SwfdecPlayer *player, const char *url,
loader = g_object_new (player->priv->loader_type, NULL);
klass = SWFDEC_LOADER_GET_CLASS (loader);
g_return_val_if_fail (klass->load != NULL, NULL);
- klass->load (loader, player, url, request, buffer);
+ klass->load (loader, player, url, buffer);
return loader;
}
@@ -3732,8 +3731,7 @@ swfdec_player_set_url (SwfdecPlayer *player, const SwfdecURL *url)
}
/* we initialize url and base_url before requesting the loader, so the loader
* can query them */
- loader = swfdec_player_load (player, swfdec_url_get_url (url),
- SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
+ loader = swfdec_player_load (player, swfdec_url_get_url (url), NULL);
priv->resource = swfdec_resource_new (player, loader, priv->variables);
movie = swfdec_movie_new (player, -16384, NULL, priv->resource, NULL, SWFDEC_AS_STR__level0);
SWFDEC_ACTOR (movie)->focusrect = SWFDEC_FLASH_YES;
diff --git a/swfdec/swfdec_player_internal.h b/swfdec/swfdec_player_internal.h
index 2eee43e..cd31855 100644
--- a/swfdec/swfdec_player_internal.h
+++ b/swfdec/swfdec_player_internal.h
@@ -182,7 +182,6 @@ SwfdecURL * swfdec_player_create_url (SwfdecPlayer * player,
const char * string);
SwfdecLoader * swfdec_player_load (SwfdecPlayer * player,
const char * url,
- SwfdecLoaderRequest request,
SwfdecBuffer * buffer);
SwfdecAsObject *swfdec_player_get_export_class (SwfdecPlayer * player,
const char * name);
@@ -252,7 +251,6 @@ SwfdecSpriteMovie *
SwfdecResource * resource,
int level);
void swfdec_player_launch (SwfdecPlayer * player,
- SwfdecLoaderRequest request,
const char * url,
const char * target,
SwfdecBuffer * data);
diff --git a/swfdec/swfdec_policy_file.c b/swfdec/swfdec_policy_file.c
index 941aaa4..9a2471d 100644
--- a/swfdec/swfdec_policy_file.c
+++ b/swfdec/swfdec_policy_file.c
@@ -260,7 +260,7 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
swfdec_url_get_host (url), swfdec_url_get_port (url)));
} else {
file->stream = SWFDEC_STREAM (swfdec_player_load (player,
- swfdec_url_get_url (url), SWFDEC_LOADER_REQUEST_DEFAULT, NULL));
+ swfdec_url_get_url (url), NULL));
}
swfdec_stream_set_target (file->stream, SWFDEC_STREAM_TARGET (file));
player->priv->loading_policy_files =
diff --git a/swfdec/swfdec_resource.c b/swfdec/swfdec_resource.c
index deb7d91..35750a1 100644
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@ -524,7 +524,6 @@ struct _SwfdecResourceLoad {
SwfdecSandbox * sandbox;
char * target;
char * url;
- SwfdecLoaderRequest request;
SwfdecBuffer * buffer;
SwfdecMovieClipLoader * loader;
gboolean target_is_movie;
@@ -581,7 +580,7 @@ swfdec_resource_do_load (SwfdecPlayer *player, gboolean allowed, gpointer loadp)
}
swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
- loader = swfdec_player_load (player, load-> url, load->request, load->buffer);
+ loader = swfdec_player_load (player, load-> url, load->buffer);
swfdec_resource_set_loader (resource, loader);
g_object_unref (loader);
}
@@ -617,7 +616,7 @@ swfdec_resource_load_request (gpointer loadp, gpointer playerp)
/* LAUNCH command (aka getURL) */
if (!load->target_is_movie && swfdec_player_get_level (player, load->target) < 0) {
- swfdec_player_launch (player, load->request, load->url,load->target, load->buffer);
+ swfdec_player_launch (player, load->url, load->target, load->buffer);
return;
}
@@ -654,10 +653,10 @@ swfdec_resource_load_request (gpointer loadp, gpointer playerp)
}
/* NB: must be called from a script */
-/* FIXME: 7 arguments?! */
+/* FIXME: 6 arguments?! */
void
-swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
- SwfdecLoaderRequest request, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader,
+swfdec_resource_load (SwfdecPlayer *player, const char *target,
+ const char *url, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader,
gboolean target_is_movie)
{
SwfdecSpriteMovie *movie;
@@ -686,7 +685,6 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
}
load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
load->url = g_strdup (url);
- load->request = request;
load->buffer = buffer;
load->loader = loader;
load->target_is_movie = target_is_movie;
diff --git a/swfdec/swfdec_resource.h b/swfdec/swfdec_resource.h
index 3496789..ac4f292 100644
--- a/swfdec/swfdec_resource.h
+++ b/swfdec/swfdec_resource.h
@@ -88,7 +88,6 @@ const char * swfdec_resource_get_export_name (SwfdecResource * root,
void swfdec_resource_load (SwfdecPlayer * player,
const char * target,
const char * url,
- SwfdecLoaderRequest request,
SwfdecBuffer * buffer,
SwfdecMovieClipLoader *loader,
gboolean target_is_movie);
diff --git a/swfdec/swfdec_text_field_movie.c b/swfdec/swfdec_text_field_movie.c
index d6ec755..a231b12 100644
--- a/swfdec/swfdec_text_field_movie.c
+++ b/swfdec/swfdec_text_field_movie.c
@@ -515,7 +515,7 @@ swfdec_text_field_movie_letter_clicked (SwfdecTextFieldMovie *text,
if (attr->url != SWFDEC_AS_STR_EMPTY) {
swfdec_player_launch (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (text)->context),
- SWFDEC_LOADER_REQUEST_DEFAULT, attr->url, attr->target, NULL);
+ attr->url, attr->target, NULL);
}
}
diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
index 120aba3..5bf4adb 100644
--- a/test/swfdec_test_plugin.c
+++ b/test/swfdec_test_plugin.c
@@ -100,9 +100,8 @@ swfdec_test_plugin_swfdec_trace (SwfdecPlayer *player, const char *message,
}
static void
-swfdec_test_plugin_swfdec_launch (SwfdecPlayer *player,
- SwfdecLoaderRequest request, const char *url, const char *target,
- SwfdecBuffer *data, SwfdecTestPlugin *plugin)
+swfdec_test_plugin_swfdec_launch (SwfdecPlayer *player, const char *url,
+ const char *target, SwfdecBuffer *data, SwfdecTestPlugin *plugin)
{
plugin->launch (plugin, url);
}
diff --git a/vivified/code/vivi_code_asm_get_url2.c b/vivified/code/vivi_code_asm_get_url2.c
index 8fe0faf..348810b 100644
--- a/vivified/code/vivi_code_asm_get_url2.c
+++ b/vivified/code/vivi_code_asm_get_url2.c
@@ -133,14 +133,14 @@ vivi_code_asm_get_url2_new_from_flags (guint flags)
}
ViviCodeAsm *
-vivi_code_asm_get_url2_new (SwfdecLoaderRequest method, gboolean internal,
+vivi_code_asm_get_url2_new (guint method, gboolean internal,
gboolean variables)
{
guint flags = 0;
- if (method == SWFDEC_LOADER_REQUEST_GET) {
+ if (method == 1) {
flags |= (1 << 0);
- } else if (method == SWFDEC_LOADER_REQUEST_POST) {
+ } else if (method == 2) {
flags |= (1 << 1);
}
if (internal)
diff --git a/vivified/code/vivi_code_asm_get_url2.h b/vivified/code/vivi_code_asm_get_url2.h
index 552d2a6..b53de99 100644
--- a/vivified/code/vivi_code_asm_get_url2.h
+++ b/vivified/code/vivi_code_asm_get_url2.h
@@ -49,7 +49,7 @@ struct _ViviCodeAsmGetUrl2Class
GType vivi_code_asm_get_url2_get_type (void);
-ViviCodeAsm * vivi_code_asm_get_url2_new (SwfdecLoaderRequest method,
+ViviCodeAsm * vivi_code_asm_get_url2_new (guint method,
gboolean internal,
gboolean variables);
diff --git a/vivified/code/vivi_code_get_url.c b/vivified/code/vivi_code_get_url.c
index 9d36316..e93f987 100644
--- a/vivified/code/vivi_code_get_url.c
+++ b/vivified/code/vivi_code_get_url.c
@@ -93,7 +93,7 @@ vivi_code_get_url_init (ViviCodeGetUrl *token)
ViviCodeStatement *
vivi_code_get_url_new (ViviCodeValue *target, ViviCodeValue *url,
- SwfdecLoaderRequest method, gboolean internal, gboolean variables)
+ guint method, gboolean internal, gboolean variables)
{
ViviCodeGetUrl *ret;
diff --git a/vivified/code/vivi_code_get_url.h b/vivified/code/vivi_code_get_url.h
index 1207a61..74ee15f 100644
--- a/vivified/code/vivi_code_get_url.h
+++ b/vivified/code/vivi_code_get_url.h
@@ -42,7 +42,7 @@ struct _ViviCodeGetUrl
ViviCodeValue * url;
ViviCodeValue * target;
- SwfdecLoaderRequest method;
+ guint method;
gboolean internal;
gboolean variables;
};
@@ -56,7 +56,7 @@ GType vivi_code_get_url_get_type (void);
ViviCodeStatement * vivi_code_get_url_new (ViviCodeValue * target,
ViviCodeValue * url,
- SwfdecLoaderRequest method,
+ guint method,
gboolean internal,
gboolean variables);
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 1383f50..283143e 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -1440,7 +1440,7 @@ parse_get_url2 (ParseData *data, gboolean require_two, gboolean level,
{
ViviCodeValue *url, *target;
ViviCodeStatement *statement;
- SwfdecLoaderRequest method;
+ guint method;
parse_token (data, TOKEN_PARENTHESIS_LEFT);
@@ -1478,25 +1478,25 @@ parse_get_url2 (ParseData *data, gboolean require_two, gboolean level,
method_string = parse_string_value (data);
}
if (g_ascii_strcasecmp (method_string, "GET") == 0) {
- method = SWFDEC_LOADER_REQUEST_GET;
+ method = 1;
} else if (g_ascii_strcasecmp (method_string, "POST") == 0) {
- method = SWFDEC_LOADER_REQUEST_POST;
+ method = 2;
} else {
- method = SWFDEC_LOADER_REQUEST_DEFAULT;
+ method = 0;
// FIXME: only for identifiers?
vivi_parser_error (data, "Invalid URL method: %s\n", method_string);
}
} else {
vivi_parser_error_unexpected_or (data, TOKEN_IDENTIFIER, TOKEN_STRING,
TOKEN_NONE);
- method = SWFDEC_LOADER_REQUEST_DEFAULT;
+ method = 0;
}
} else {
- method = SWFDEC_LOADER_REQUEST_DEFAULT;
+ method = 0;
}
} else {
target = vivi_code_string_new ("");
- method = SWFDEC_LOADER_REQUEST_DEFAULT;
+ method = 0;
}
parse_token (data, TOKEN_PARENTHESIS_RIGHT);
commit 817c77910140ac6544d88df7c0be20d28785f1f2
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu May 29 14:17:40 2008 +0300
Add a test for LoadObject's sendAndLoad method
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 6001933..fb92f67 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -1620,6 +1620,13 @@ EXTRA_DIST = \
loadobject-bom-7.swf.trace \
loadobject-bom-8.swf \
loadobject-bom-8.swf.trace \
+ loadobject-sendandload.as \
+ loadobject-sendandload-6.swf \
+ loadobject-sendandload-6.swf.trace \
+ loadobject-sendandload-7.swf \
+ loadobject-sendandload-7.swf.trace \
+ loadobject-sendandload-8.swf \
+ loadobject-sendandload-8.swf.trace \
loadvariables.as \
loadvariables-5.swf \
loadvariables-5.swf.trace \
diff --git a/test/trace/loadobject-sendandload-6.swf b/test/trace/loadobject-sendandload-6.swf
new file mode 100644
index 0000000..8806115
Binary files /dev/null and b/test/trace/loadobject-sendandload-6.swf differ
diff --git a/test/trace/loadobject-sendandload-6.swf.trace b/test/trace/loadobject-sendandload-6.swf.trace
new file mode 100644
index 0000000..b519a50
--- /dev/null
+++ b/test/trace/loadobject-sendandload-6.swf.trace
@@ -0,0 +1,2 @@
+Finished: test=normal\n
+Finished: test=normal\n
diff --git a/test/trace/loadobject-sendandload-7.swf b/test/trace/loadobject-sendandload-7.swf
new file mode 100644
index 0000000..e74c094
Binary files /dev/null and b/test/trace/loadobject-sendandload-7.swf differ
diff --git a/test/trace/loadobject-sendandload-7.swf.trace b/test/trace/loadobject-sendandload-7.swf.trace
new file mode 100644
index 0000000..b519a50
--- /dev/null
+++ b/test/trace/loadobject-sendandload-7.swf.trace
@@ -0,0 +1,2 @@
+Finished: test=normal\n
+Finished: test=normal\n
diff --git a/test/trace/loadobject-sendandload-8.swf b/test/trace/loadobject-sendandload-8.swf
new file mode 100644
index 0000000..c7e658c
Binary files /dev/null and b/test/trace/loadobject-sendandload-8.swf differ
diff --git a/test/trace/loadobject-sendandload-8.swf.trace b/test/trace/loadobject-sendandload-8.swf.trace
new file mode 100644
index 0000000..b519a50
--- /dev/null
+++ b/test/trace/loadobject-sendandload-8.swf.trace
@@ -0,0 +1,2 @@
+Finished: test=normal\n
+Finished: test=normal\n
diff --git a/test/trace/loadobject-sendandload.as b/test/trace/loadobject-sendandload.as
new file mode 100644
index 0000000..1bb4adc
--- /dev/null
+++ b/test/trace/loadobject-sendandload.as
@@ -0,0 +1,22 @@
+// makeswf -v 7 -s 200x150 -r 15 -o loadobject-sendandload-7.swf loadobject-sendandload.as
+
+var o = {};
+o.sendAndLoad = ASnative (301, 2);
+var t = { test: "supernormal" };
+o.test = "verynormal";
+
+t.onData2 = function (str) {
+ trace ("Finished: " + str.split("\n").join("\\n"));
+
+ getURL ("fscommand:quit");
+};
+
+t.onData = function (str) {
+ trace ("Finished: " + str.split("\n").join("\\n"));
+
+ t.onData = t.onData2;
+
+ o.sendAndLoad("test.txt?test=paranormal", t, "POST");
+};
+
+o.sendAndLoad("test.txt?test=paranormal", t, "GET");
commit c7b0f64748de79591048b8fb3960e510ec4db787
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed May 28 17:20:08 2008 +0300
Add a test to see whether the error variable in catch can be changed or deleted
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index f8f97b6..6001933 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -3606,6 +3606,15 @@ EXTRA_DIST = \
try-return-in-finally-7.swf.trace \
try-return-in-finally-8.swf \
try-return-in-finally-8.swf.trace \
+ try-variable-propflags.as \
+ try-variable-propflags-5.swf \
+ try-variable-propflags-5.swf.trace \
+ try-variable-propflags-6.swf \
+ try-variable-propflags-6.swf.trace \
+ try-variable-propflags-7.swf \
+ try-variable-propflags-7.swf.trace \
+ try-variable-propflags-8.swf \
+ try-variable-propflags-8.swf.trace \
undefined-tostring.swf \
undefined-tostring.swf.trace \
undefined1.swf \
diff --git a/test/trace/try-variable-propflags-5.swf b/test/trace/try-variable-propflags-5.swf
new file mode 100644
index 0000000..faec9fc
Binary files /dev/null and b/test/trace/try-variable-propflags-5.swf differ
diff --git a/test/trace/try-variable-propflags-5.swf.trace b/test/trace/try-variable-propflags-5.swf.trace
new file mode 100644
index 0000000..fcdc025
--- /dev/null
+++ b/test/trace/try-variable-propflags-5.swf.trace
@@ -0,0 +1,4 @@
+See if the error variable can be changed and deleted
+Error
+Error2
+undefined
diff --git a/test/trace/try-variable-propflags-6.swf b/test/trace/try-variable-propflags-6.swf
new file mode 100644
index 0000000..6bc3ff4
Binary files /dev/null and b/test/trace/try-variable-propflags-6.swf differ
diff --git a/test/trace/try-variable-propflags-6.swf.trace b/test/trace/try-variable-propflags-6.swf.trace
new file mode 100644
index 0000000..fcdc025
--- /dev/null
+++ b/test/trace/try-variable-propflags-6.swf.trace
@@ -0,0 +1,4 @@
+See if the error variable can be changed and deleted
+Error
+Error2
+undefined
diff --git a/test/trace/try-variable-propflags-7.swf b/test/trace/try-variable-propflags-7.swf
new file mode 100644
index 0000000..6d0131e
Binary files /dev/null and b/test/trace/try-variable-propflags-7.swf differ
diff --git a/test/trace/try-variable-propflags-7.swf.trace b/test/trace/try-variable-propflags-7.swf.trace
new file mode 100644
index 0000000..fcdc025
--- /dev/null
+++ b/test/trace/try-variable-propflags-7.swf.trace
@@ -0,0 +1,4 @@
+See if the error variable can be changed and deleted
+Error
+Error2
+undefined
diff --git a/test/trace/try-variable-propflags-8.swf b/test/trace/try-variable-propflags-8.swf
new file mode 100644
index 0000000..850fb7a
Binary files /dev/null and b/test/trace/try-variable-propflags-8.swf differ
diff --git a/test/trace/try-variable-propflags-8.swf.trace b/test/trace/try-variable-propflags-8.swf.trace
new file mode 100644
index 0000000..fcdc025
--- /dev/null
+++ b/test/trace/try-variable-propflags-8.swf.trace
@@ -0,0 +1,4 @@
+See if the error variable can be changed and deleted
+Error
+Error2
+undefined
diff --git a/test/trace/try-variable-propflags.as b/test/trace/try-variable-propflags.as
new file mode 100644
index 0000000..c065185
--- /dev/null
+++ b/test/trace/try-variable-propflags.as
@@ -0,0 +1,15 @@
+// makeswf -v 7 -s 200x150 -r 15 -o try-variable-propflags.swf try-variable-propflags.as
+
+trace ("See if the error variable can be changed and deleted");
+
+try {
+ throw "Error";
+} catch (e) {
+ trace (e);
+ e = "Error2";
+ trace (e);
+ delete e;
+ trace (e);
+};
+
+getURL ("fscommand:quit", "");
commit b7cc9ae1f1294d30598782b75ce858b4654ed554
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed May 28 17:04:12 2008 +0300
Add a test for using return in try action's finally block
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 7bc4bb4..f8f97b6 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -3597,6 +3597,15 @@ EXTRA_DIST = \
try-throw-in-finally-7.swf.trace \
try-throw-in-finally-8.swf \
try-throw-in-finally-8.swf.trace \
+ try-return-in-finally.as \
+ try-return-in-finally-5.swf \
+ try-return-in-finally-5.swf.trace \
+ try-return-in-finally-6.swf \
+ try-return-in-finally-6.swf.trace \
+ try-return-in-finally-7.swf \
+ try-return-in-finally-7.swf.trace \
+ try-return-in-finally-8.swf \
+ try-return-in-finally-8.swf.trace \
undefined-tostring.swf \
undefined-tostring.swf.trace \
undefined1.swf \
diff --git a/test/trace/try-return-in-finally-5.swf b/test/trace/try-return-in-finally-5.swf
new file mode 100644
index 0000000..393a0c1
Binary files /dev/null and b/test/trace/try-return-in-finally-5.swf differ
diff --git a/test/trace/try-return-in-finally-5.swf.trace b/test/trace/try-return-in-finally-5.swf.trace
new file mode 100644
index 0000000..37f91a7
--- /dev/null
+++ b/test/trace/try-return-in-finally-5.swf.trace
@@ -0,0 +1,2 @@
+Finally
+undefined
diff --git a/test/trace/try-return-in-finally-6.swf b/test/trace/try-return-in-finally-6.swf
new file mode 100644
index 0000000..46826fc
Binary files /dev/null and b/test/trace/try-return-in-finally-6.swf differ
diff --git a/test/trace/try-return-in-finally-6.swf.trace b/test/trace/try-return-in-finally-6.swf.trace
new file mode 100644
index 0000000..37f91a7
--- /dev/null
+++ b/test/trace/try-return-in-finally-6.swf.trace
@@ -0,0 +1,2 @@
+Finally
+undefined
diff --git a/test/trace/try-return-in-finally-7.swf b/test/trace/try-return-in-finally-7.swf
new file mode 100644
index 0000000..3ba84fb
Binary files /dev/null and b/test/trace/try-return-in-finally-7.swf differ
diff --git a/test/trace/try-return-in-finally-7.swf.trace b/test/trace/try-return-in-finally-7.swf.trace
new file mode 100644
index 0000000..37f91a7
--- /dev/null
+++ b/test/trace/try-return-in-finally-7.swf.trace
@@ -0,0 +1,2 @@
+Finally
+undefined
diff --git a/test/trace/try-return-in-finally-8.swf b/test/trace/try-return-in-finally-8.swf
new file mode 100644
index 0000000..0f29661
Binary files /dev/null and b/test/trace/try-return-in-finally-8.swf differ
diff --git a/test/trace/try-return-in-finally-8.swf.trace b/test/trace/try-return-in-finally-8.swf.trace
new file mode 100644
index 0000000..37f91a7
--- /dev/null
+++ b/test/trace/try-return-in-finally-8.swf.trace
@@ -0,0 +1,2 @@
+Finally
+undefined
diff --git a/test/trace/try-return-in-finally.as b/test/trace/try-return-in-finally.as
new file mode 100644
index 0000000..3892718
--- /dev/null
+++ b/test/trace/try-return-in-finally.as
@@ -0,0 +1,17 @@
+// makeswf -v 7 -r 1 -o try-return-finally-7.swf try-return-finally.as
+
+function test () {
+ try {
+ throw "Try";
+ } finally {
+ return "Finally";
+ };
+}
+
+try {
+ trace (test ());
+} catch (e) {
+ trace (e);
+};
+
+getURL ("FSCommand:quit", "");
commit 4ce990c036d41e3da6e03b19e625baa4103985f5
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed May 28 16:04:24 2008 +0300
Implement parsing of jump asm statements. Add a test
diff --git a/vivified/code/test/compiler/Makefile.am b/vivified/code/test/compiler/Makefile.am
index b17c4b0..af55f30 100644
--- a/vivified/code/test/compiler/Makefile.am
+++ b/vivified/code/test/compiler/Makefile.am
@@ -28,6 +28,8 @@ EXTRA_DIST = \
asm_empty.as.expect \
asm_get_url2.as \
asm_get_url2.as.expect \
+ asm_jump.as \
+ asm_jump.as.expect \
asm_label.as \
asm_label.as.expect \
asm_pool.as \
diff --git a/vivified/code/test/compiler/asm_jump.as b/vivified/code/test/compiler/asm_jump.as
new file mode 100644
index 0000000..758fbff
--- /dev/null
+++ b/vivified/code/test/compiler/asm_jump.as
@@ -0,0 +1,4 @@
+asm {
+ jump hello
+hello:
+}
diff --git a/vivified/code/test/compiler/asm_jump.as.expect b/vivified/code/test/compiler/asm_jump.as.expect
new file mode 100644
index 0000000..771ad9b
--- /dev/null
+++ b/vivified/code/test/compiler/asm_jump.as.expect
@@ -0,0 +1,6 @@
+asm {
+ jump hello
+
+hello:
+ end
+}
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 67d9121..1383f50 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -31,6 +31,7 @@
#include "vivi_code_and.h"
#include "vivi_code_asm_code_default.h"
#include "vivi_code_asm_get_url2.h"
+#include "vivi_code_asm_jump.h"
#include "vivi_code_asm_pool.h"
#include "vivi_code_asm_push.h"
#include "vivi_code_asm_store.h"
@@ -1011,6 +1012,28 @@ parse_asm_store (ParseData *data)
}
static ViviCodeAsm *
+parse_asm_jump (ParseData *data)
+{
+ ViviCodeAsm *code;
+ ViviCodeLabel *label;
+ const char *name;
+
+ name = parse_identifier_value (data);
+ label = vivi_parser_get_label (data, name);
+ if (label == NULL) {
+ label = VIVI_CODE_LABEL (vivi_code_label_new (name));
+ vivi_parser_add_waiting_label (data, label);
+ }
+
+ parse_automatic_semicolon (data);
+
+ code = vivi_code_asm_jump_new (label);
+ g_object_unref (label);
+
+ return code;
+}
+
+static ViviCodeAsm *
parse_asm_try (ParseData *data)
{
gboolean has_catch, has_finally;
@@ -1275,6 +1298,7 @@ static const AsmStatement asm_statements[] = {
#include "vivi_code_defaults.h"
#undef DEFAULT_ASM
{ "get_url2", NULL, parse_asm_get_url2 },
+ { "jump", NULL, parse_asm_jump },
{ "pool", NULL, parse_asm_pool },
{ "push", NULL, parse_asm_push },
{ "store", NULL, parse_asm_store },
commit 23ce0311de3e0269142f0852517c755ae9e638e0
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed May 28 15:52:19 2008 +0300
Fix compiling of try action to jump over catch when there is no exception
Also fixed the test case outputs
diff --git a/vivified/code/test/compiler/try.as.expect b/vivified/code/test/compiler/try.as.expect
index b5a9254..acdadb1 100644
--- a/vivified/code/test/compiler/try.as.expect
+++ b/vivified/code/test/compiler/try.as.expect
@@ -3,6 +3,7 @@ asm {
try has_catch has_finally "e" try_catch_0001 try_finally_0002 try_end_0003
push pool 0
trace
+ jump try_finally_0002
try_catch_0001:
push pool 1
diff --git a/vivified/code/test/compiler/try_no_finally.as.expect b/vivified/code/test/compiler/try_no_finally.as.expect
index d4db888..73a7c86 100644
--- a/vivified/code/test/compiler/try_no_finally.as.expect
+++ b/vivified/code/test/compiler/try_no_finally.as.expect
@@ -3,6 +3,7 @@ asm {
try has_catch "e" try_catch_0001 try_end_0002 try_end_0002
push pool 0
trace
+ jump try_end_0002
try_catch_0001:
push pool 1
diff --git a/vivified/code/vivi_code_try.c b/vivified/code/vivi_code_try.c
index b855ea1..0dcef10 100644
--- a/vivified/code/vivi_code_try.c
+++ b/vivified/code/vivi_code_try.c
@@ -27,6 +27,7 @@
#include "vivi_code_asm.h"
#include "vivi_code_asm_code_default.h"
#include "vivi_code_asm_try.h"
+#include "vivi_code_asm_jump.h"
G_DEFINE_TYPE (ViviCodeTry, vivi_code_try, VIVI_TYPE_CODE_STATEMENT)
@@ -98,6 +99,8 @@ vivi_code_try_compile (ViviCodeToken *token, ViviCodeCompiler *compiler)
vivi_code_compiler_compile_statement (compiler, try_->try_statement);
if (try_->catch_statement) {
+ vivi_code_compiler_take_code (compiler, vivi_code_asm_jump_new (
+ label_finally != NULL ? label_finally : label_end));
vivi_code_compiler_take_code (compiler, VIVI_CODE_ASM (label_catch));
vivi_code_compiler_compile_statement (compiler, try_->catch_statement);
}
More information about the Swfdec-commits
mailing list