gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] /srv/bzr/gnash/trunk r9755: Do the same for LoadVars as f


From: Benjamin Wolsey
Subject: [Gnash-commit] /srv/bzr/gnash/trunk r9755: Do the same for LoadVars as for XML (sendAndLoad).
Date: Tue, 16 Sep 2008 16:15:33 +0200
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 9755
committer: Benjamin Wolsey <address@hidden>
branch nick: trunk
timestamp: Tue 2008-09-16 16:15:33 +0200
message:
  Do the same for LoadVars as for XML (sendAndLoad).
modified:
  libcore/asobj/LoadVars.cpp
  testsuite/actionscript.all/LoadVars.as
    ------------------------------------------------------------
    revno: 9754.1.1
    committer: Benjamin Wolsey <address@hidden>
    branch nick: work
    timestamp: Tue 2008-09-16 16:00:27 +0200
    message:
      Allow LoadVars.sendAndLoad to take any object. Load data into any object
      that has an overridden queueLoad methods (XML and LoadVars). This is
      almost identical behaviour to XML.sendAndLoad().
      
      Tests for AS compatibility in LoadVars.as.
    modified:
      libcore/asobj/LoadVars.cpp
      testsuite/actionscript.all/LoadVars.as
=== modified file 'libcore/asobj/LoadVars.cpp'
--- a/libcore/asobj/LoadVars.cpp        2008-09-16 11:02:17 +0000
+++ b/libcore/asobj/LoadVars.cpp        2008-09-16 14:00:27 +0000
@@ -93,7 +93,7 @@
        ///     If false, variables will be sent using the GET method.
        ///     If true (the default), variables will be sent using POST.
        ///
-       void sendAndLoad(const std::string& urlstr, LoadVars& target, bool 
post=true);
+       void sendAndLoad(const std::string& urlstr, as_object& target, bool 
post=true);
 
     void queueLoad(std::auto_ptr<IOChannel> str);
 
@@ -153,15 +153,6 @@
        /// new threads if needed.
        void checkLoads();
 
-       /// \brief
-       /// Add a load request to the queue, processing it
-       /// if no other loads are in progress.
-       ///
-       /// @param postdata
-       ///     URL-encoded post data. NULL for no post.
-       ///
-       void addLoadVariablesThread(const std::string& urlstr, const char* 
postdata=NULL);
-
        static as_value checkLoads_wrapper(const fn_call& fn);
 
        static as_value onLoad_getset(const fn_call& fn);
@@ -325,37 +316,6 @@
        return o.get();
 }
 
-void
-LoadVars::addLoadVariablesThread(const std::string& urlstr, const char* 
postdata)
-{
-       set_member(NSV::PROP_LOADED, false);
-
-       URL url(urlstr, get_base_url());
-
-       std::auto_ptr<IOChannel> str;
-       if ( postdata )
-    {
-        str.reset (StreamProvider::getDefaultInstance().getStream(
-                    url, std::string(postdata)) );
-    }
-       else
-    {
-        str.reset (StreamProvider::getDefaultInstance().getStream(url));
-    }
-
-       if (!str.get()) 
-       {
-               log_error(_("Can't load variables from %s (security?)"), 
url.str());
-               return;
-               // TODO: check if this is correct
-               //as_value nullValue; nullValue.set_null();
-               
//callMethod(VM::get().getStringTable().find(PROPNAME("onData")), nullValue);
-       }
-
-       log_security(_("Loading variables file from url: '%s'"), url.str());
-    queueLoad(str);
-
-}
 
 void
 LoadVars::queueLoad(std::auto_ptr<IOChannel> str)
@@ -395,7 +355,27 @@
 void
 LoadVars::load(const std::string& urlstr)
 {
-       addLoadVariablesThread(urlstr);
+    // Set loaded property to false; will be updated (hopefully)
+    // when loading is complete.
+       set_member(NSV::PROP_LOADED, false);
+
+       URL url(urlstr, get_base_url());
+
+    // Checks whether access is allowed.
+    std::auto_ptr<IOChannel> 
str(StreamProvider::getDefaultInstance().getStream(url));
+
+       if (!str.get()) 
+       {
+               log_error(_("LoadVars.load(): Can't load variables from %s 
(security?)"), url.str());
+               return;
+               // TODO: check if this is correct
+               //as_value nullValue; nullValue.set_null();
+               
//callMethod(VM::get().getStringTable().find(PROPNAME("onData")), nullValue);
+       }
+
+       log_security(_("Loading variables file from url: '%s'"), url.str());
+    queueLoad(str);
+
 }
 
 std::string
@@ -429,15 +409,39 @@
 }
 
 void
-LoadVars::sendAndLoad(const std::string& urlstr, LoadVars& target, bool post)
+LoadVars::sendAndLoad(const std::string& urlstr, as_object& target, bool post)
 {
+
+    /// All objects get a loaded member, set to false.
+    target.set_member(NSV::PROP_LOADED, false);
+
        std::string querystring = getURLEncodedProperties();
-       if ( post ) {
-               target.addLoadVariablesThread(urlstr, querystring.c_str());
-       } else {
-               std::string url = urlstr + "?" + querystring;
-               target.addLoadVariablesThread(urlstr);
+
+       URL url(urlstr, get_base_url());
+
+       std::auto_ptr<IOChannel> str;
+       if (post)
+    {
+        str.reset(StreamProvider::getDefaultInstance().getStream(url, 
querystring));
+    }
+       else
+    {
+       std::string url = urlstr + "?" + querystring;
+        str.reset(StreamProvider::getDefaultInstance().getStream(url));
+    }
+
+       if (!str.get()) 
+       {
+               log_error(_("Can't load variables from %s (security?)"), 
url.str());
+               return;
+               // TODO: check if this is correct
+               //as_value nullValue; nullValue.set_null();
+               
//callMethod(VM::get().getStringTable().find(PROPNAME("onData")), nullValue);
        }
+
+       log_security(_("Loading variables file from url: '%s'"), url.str());
+    target.queueLoad(str);
+       
 }
 
 /* private static */
@@ -594,15 +598,17 @@
                return as_value(false);
        }
 
-       boost::intrusive_ptr<LoadVars> target = 
boost::dynamic_pointer_cast<LoadVars>(fn.arg(1).to_object());
-       if ( ! target )
+       if (!fn.arg(1).is_object())
        {
                IF_VERBOSE_ASCODING_ERRORS(
-               log_aserror(_("LoadVars.sendAndLoad(): invalid target (must be 
a LoadVars object)"));
+                   log_aserror(_("LoadVars.sendAndLoad(): invalid target (must 
be an object)"));
                );
                return as_value(false);
        }
 
+
+       boost::intrusive_ptr<as_object> target = fn.arg(1).to_object();
+
        // Post by default, override by ActionScript third argument
        bool post = true;
        if ( fn.nargs > 2 && fn.arg(2).to_string() == "GET" ) post = false;

=== modified file 'testsuite/actionscript.all/LoadVars.as'
--- a/testsuite/actionscript.all/LoadVars.as    2008-04-16 22:07:14 +0000
+++ b/testsuite/actionscript.all/LoadVars.as    2008-09-16 14:00:27 +0000
@@ -120,6 +120,58 @@
 check (!LoadVars.prototype.hasOwnProperty('loaded'));
 check_equals (typeof(loadvarsObj.loaded), 'undefined');
 
+x = new LoadVars;
+
+r = new Object;
+check(!r.hasOwnProperty("loaded"));
+check_equals(x.sendAndLoad("some server name", r), true);
+check(r.hasOwnProperty("loaded"));
+
+r = new XML;
+check(!r.hasOwnProperty("loaded"));
+check_equals(x.sendAndLoad("some server name", r), true);
+check(!r.hasOwnProperty("loaded"));
+check_equals(typeof(r.loaded), "boolean");
+check_equals(r.loaded, false);
+
+r = new LoadVars;
+check(!r.hasOwnProperty("loaded"));
+check_equals(x.sendAndLoad("some server name", r), true);
+check(r.hasOwnProperty("loaded"));
+check_equals(typeof(r.loaded), "boolean");
+check_equals(r.loaded, false);
+
+r = new Date(1);
+check(!r.hasOwnProperty("loaded"));
+check_equals(x.sendAndLoad("some server name", r), true);
+check(r.hasOwnProperty("loaded"));
+check_equals(typeof(r.loaded), "boolean");
+check_equals(r.loaded, false);
+t = new Date(1);
+check_equals(r.toString(), t.toString());
+check(r instanceOf Date);
+
+r = 3;
+check(!r.hasOwnProperty("loaded"));
+check_equals(x.sendAndLoad("some server name", r), false);
+check(!r.hasOwnProperty("loaded"));
+check_equals(typeof(r.loaded), "undefined");
+check_equals(r.loaded, undefined);
+
+r = "string";
+check(!r.hasOwnProperty("loaded"));
+check_equals(x.sendAndLoad("some server name", r), false);
+check(!r.hasOwnProperty("loaded"));
+check_equals(typeof(r.loaded), "undefined");
+check_equals(r.loaded, undefined);
+
+r = {};
+check(!r.hasOwnProperty("loaded"));
+check_equals(x.sendAndLoad("some server name", r), true);
+check(r.hasOwnProperty("loaded"));
+check_equals(typeof(r.loaded), "boolean");
+check_equals(r.loaded, false);
+
 //--------------------------------------------------------------------------
 // Test LoadVars::load()
 //--------------------------------------------------------------------------
@@ -165,7 +217,7 @@
                // Gnash insists in looking for an ending & char !!             
                check_equals(loadvarsObj['var3'], 'val3\n');
 
-               check_totals(72);
+               check_totals(107);
 
                play();
        }
@@ -203,7 +255,6 @@
 // not start with a '?' char.
 // 
 check( loadvarsObj instanceOf LoadVars );
-//check( loadvarsObj.sendAndLoad( 'http://localhost/vars.php', loadvarsObj ) );
 check( loadvarsObj.load( MEDIA(vars.txt) ) );
 check_equals(typeof(this.loaded), 'undefined');
 //loadvarsObj.load( 'vars.cgi' );


reply via email to

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