[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog server/swf/ASHandlers.cpp
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog server/swf/ASHandlers.cpp |
Date: |
Tue, 19 Sep 2006 08:24:57 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 06/09/19 08:24:57
Modified files:
. : ChangeLog
server/swf : ASHandlers.cpp
Log message:
* server/swf/ASHandlers.cpp (CommonGetUrl): added comments about
relative url resolution "known" bug. Added parsing of method
bitfield flags and warnings about unsupported features.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.862&r2=1.863
http://cvs.savannah.gnu.org/viewcvs/gnash/server/swf/ASHandlers.cpp?cvsroot=gnash&r1=1.64&r2=1.65
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.862
retrieving revision 1.863
diff -u -b -r1.862 -r1.863
--- ChangeLog 18 Sep 2006 14:39:26 -0000 1.862
+++ ChangeLog 19 Sep 2006 08:24:57 -0000 1.863
@@ -1,3 +1,9 @@
+2006-09-19 Sandro Santilli <address@hidden>
+
+ * server/swf/ASHandlers.cpp (CommonGetUrl): added comments about
+ relative url resolution "known" bug. Added parsing of method
+ bitfield flags and warnings about unsupported features.
+
2006-09-18 Sandro Santilli <address@hidden>
* libbase/URL.cpp: removed call to set_workdir.
Index: server/swf/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/swf/ASHandlers.cpp,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -b -r1.64 -r1.65
--- server/swf/ASHandlers.cpp 18 Sep 2006 13:36:44 -0000 1.64
+++ server/swf/ASHandlers.cpp 19 Sep 2006 08:24:57 -0000 1.65
@@ -1559,13 +1559,20 @@
// - http://www.voiptalk.org
// pressing 'My Account' button should open
// https://www.voiptalk.org/products/login.php
+// NOTE: this is affected by the GetUrl bug reported with an excerpt
+// from Colin Moock book, see below. (won't work, and won't fix)
//
void
SWFHandlers::CommonGetUrl(as_environment& env,
as_value target, // the target window, or _level1..10
const char* url_c,
- uint8_t method /* 0:NONE, 1:GET, 2:POST
- * 64: load internally ?
+ uint8_t method /*
+ * Bit-packed as follow
+ *
+ * SendVarsMethod:2 (0:NONE 1:GET 2:POST)
+ * Reserved:4
+ * LoadTargetFlag:1
+ * LoadVariableFlag:1
*/
)
{
@@ -1578,6 +1585,31 @@
return;
}
+#define GETURL2_LOADTARGET_FLAG 1<<7
+#define GETURL2_LOADVARIABLE_FLAG 1<<8
+
+ // Parse the method bitfield
+ uint8_t sendVarsMethod = method & 3;
+ bool loadTargetFlag = method & 64;
+ bool loadVariableFlag = method & 128;
+
+ // handle malformed sendVarsMethod
+ if ( sendVarsMethod == 3 )
+ {
+ log_warning("Bogus GetUrl2 send vars method "
+ " in SWF file (both GET and POST requested), set to 0");
+ sendVarsMethod=0;
+ }
+
+ // Warn about unsupported features
+ if ( loadVariableFlag ) {
+ log_warning("Unhandled GetUrl2 loadVariable flag");
+ }
+ if ( sendVarsMethod ) {
+ log_warning("Unhandled GetUrl2 sendVariableMethod (%d)",
+ sendVarsMethod);
+ }
+
const char* target_string = NULL;
if ( ! target.is_undefined() && ! target.is_null() )
{
@@ -1597,10 +1629,23 @@
return;
}
- string url_s(url_c);
+ //
+ // From "ActionScript: The Definitive Guide" by Colin Moock p. 470
+ // --------8<------------------------------------------------------
+ // In most browsers, getURL() relative links are resolved relative
+ // to the HTML file that contains the .swf file. In IE 4.5 and older
+ // versions on Macintosh, relative links are resolved relative to
+ // the location of the .swf file, not the HTML file, which causes
+ // problems when the two are in different directories. To avoid
+ // the problem, either place the .swf and the .html file in the
+ // same directory or use absolute URLs when invoking getURL().
+ // --------8<------------------------------------------------------
+ //
+ // Since there's no standard behaviour we'll stick to the simpler
+ // one of resolving relative to the location of the .swf file.
+ //
- // @@ TODO: find out how should 'relative' urls be
- // resolved (against who? target or self?)
+ string url_s(url_c);
sprite_instance* tgt_sprt = \
dynamic_cast<sprite_instance*>(env.get_target());
@@ -1617,21 +1662,10 @@
return;
}
- bool load_internally = method&64;
- method &= ~64; // strip flag
-
- // handle malformed methods
- if ( method > 2 )
- {
- log_warning("Bogus (or unsupported) GetUrl2 method (%d)"
- " in SWF file, set to 0",
- method);
- method=0;
- }
- if ( load_internally )
+ if ( loadTargetFlag )
{
- log_msg("get url internal load");
+ log_msg("getURL2 target load");
character* target_movie = env.find_target(target);
if (target_movie == NULL)