gnash-commit
[Top][All Lists]
Advanced

[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)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]