gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] /srv/bzr/gnash/trunk r10064: Implement XML.send and LoadV


From: Benjamin Wolsey
Subject: [Gnash-commit] /srv/bzr/gnash/trunk r10064: Implement XML.send and LoadVars.send (needs better testing).
Date: Thu, 23 Oct 2008 20:27:11 +0200
User-agent: Bazaar (1.5)

------------------------------------------------------------
revno: 10064
committer: Benjamin Wolsey <address@hidden>
branch nick: trunk
timestamp: Thu 2008-10-23 20:27:11 +0200
message:
  Implement XML.send and LoadVars.send (needs better testing).
modified:
  libcore/asobj/LoadVars_as.cpp
  libcore/asobj/LoadableObject.cpp
  libcore/asobj/LoadableObject.h
  libcore/asobj/XML_as.cpp
  libcore/sprite_instance.cpp
=== modified file 'libcore/asobj/LoadVars_as.cpp'
--- a/libcore/asobj/LoadVars_as.cpp     2008-10-02 16:40:05 +0000
+++ b/libcore/asobj/LoadVars_as.cpp     2008-10-23 18:27:11 +0000
@@ -40,7 +40,6 @@
 
 namespace gnash {
 
-static as_value loadvars_send(const fn_call& fn);
 static as_value loadvars_tostring(const fn_call& fn);
 static as_value loadvars_ctor(const fn_call& fn);
 
@@ -148,7 +147,8 @@
                    LoadVars_as::getBytesTotal_method));
        o.init_member("load", new builtin_function(
                    LoadableObject::loadableobject_load));
-       o.init_member("send", new builtin_function(loadvars_send));
+       o.init_member("send", new builtin_function(
+                LoadableObject::loadableobject_send));
        o.init_member("sendAndLoad", new builtin_function(
                    LoadableObject::loadableobject_sendAndLoad));
        o.init_member("toString", new builtin_function(loadvars_tostring));
@@ -249,15 +249,6 @@
 
 
 static as_value
-loadvars_send(const fn_call& fn)
-{
-       boost::intrusive_ptr<LoadVars_as> ptr = 
ensureType<LoadVars_as>(fn.this_ptr);
-    ptr->send("");
-       return as_value(); 
-}
-
-
-static as_value
 loadvars_tostring(const fn_call& fn)
 {
        boost::intrusive_ptr<LoadVars_as> ptr = 
ensureType<LoadVars_as>(fn.this_ptr);

=== modified file 'libcore/asobj/LoadableObject.cpp'
--- a/libcore/asobj/LoadableObject.cpp  2008-10-02 16:40:05 +0000
+++ b/libcore/asobj/LoadableObject.cpp  2008-10-23 18:27:11 +0000
@@ -63,11 +63,36 @@
 
 
 void
-LoadableObject::send(const std::string& /*urlstr*/)
+LoadableObject::send(const std::string& urlstr, const std::string& target,
+        bool post)
 {
-    log_unimpl (__FUNCTION__);
+    movie_root& m = _vm.getRoot();
+    URL url(urlstr);
+
+    // Encode the object for HTTP. If post is true,
+    // XML should not be encoded. LoadVars is always
+    // encoded.
+    // TODO: test properly.
+    std::ostringstream data;
+    toString(data, !post);
+
+    const std::string& datastring = data.str();
+
+    if (post)
+    {
+        m.getURL(url, target, &datastring);
+        return;
+    }
+
+    // GET
+    std::string qs = url.querystring();
+    if (qs.empty()) url.set_querystring(datastring);
+    else url.set_querystring(qs + "&" + datastring);
+    m.getURL(url, target);
+
 }
 
+
 void
 LoadableObject::sendAndLoad(const std::string& urlstr,
                             as_object& target, bool post)
@@ -479,4 +504,46 @@
 
 }
 
+    
+as_value
+LoadableObject::loadableobject_send(const fn_call& fn)
+{
+    boost::intrusive_ptr<LoadableObject> ptr =
+        ensureType<LoadableObject>(fn.this_ptr);
+ 
+    std::ostringstream os;
+    fn.dump_args(os);
+    log_debug("XML.send(%s) / LoadVars.send() TESTING", os.str());
+
+    std::string target;
+    std::string url;
+    std::string method;
+
+    switch (fn.nargs)
+    {
+        case 0:
+            return as_value(false);
+        case 3:
+            method = fn.arg(2).to_string();
+        case 2:
+            target = fn.arg(1).to_string();
+        case 1:
+            url = fn.arg(0).to_string();
+            break;
+    }
+
+    StringNoCaseEqual noCaseCompare;
+    
+    // POST is the default in a browser, GET supposedly default
+    // in a Flash test environment (whatever that is).
+    bool post = !noCaseCompare(method, "get");
+
+    // Encode the data in the default way for the type.
+    std::ostringstream data;
+
+    ptr->send(url, target, post);
+    return as_value(true);
+}
+
+
 }

=== modified file 'libcore/asobj/LoadableObject.h'
--- a/libcore/asobj/LoadableObject.h    2008-10-02 16:40:05 +0000
+++ b/libcore/asobj/LoadableObject.h    2008-10-23 18:27:11 +0000
@@ -47,7 +47,12 @@
     /// Carry out the AS send() operation
     //
     /// @param urlstr   The URI to send the data to
-    void send(const std::string& urlstr);
+    /// @param target   The target for the data (e.g. _self, _blank)
+    /// @param post     Whether the data should be posted or not.
+    //
+    /// The success of the operation is irrelevant to AS.
+    void send(const std::string& urlstr, const std::string& target,
+            bool post);
 
     /// Carry out the AS sendAndLoad operation
     //

=== modified file 'libcore/asobj/XML_as.cpp'
--- a/libcore/asobj/XML_as.cpp  2008-10-19 19:36:12 +0000
+++ b/libcore/asobj/XML_as.cpp  2008-10-23 18:27:11 +0000
@@ -65,7 +65,6 @@
 static as_value xml_getbytesloaded(const fn_call& fn);
 static as_value xml_getbytestotal(const fn_call& fn);
 static as_value xml_parsexml(const fn_call& fn);
-static as_value xml_send(const fn_call& fn);
 static as_value xml_ondata(const fn_call& fn);
 
 
@@ -347,14 +346,19 @@
     // No flags:
     o.init_member("addRequestHeader", new builtin_function(
                 LoadableObject::loadableobject_addRequestHeader), flags);
-    o.init_member("createElement", new builtin_function(xml_createelement), 
flags);
-    o.init_member("createTextNode", new builtin_function(xml_createtextnode), 
flags);
-    o.init_member("getBytesLoaded", new builtin_function(xml_getbytesloaded), 
flags);
-    o.init_member("getBytesTotal", new builtin_function(xml_getbytestotal), 
flags);
+    o.init_member("createElement", 
+            new builtin_function(xml_createelement), flags);
+    o.init_member("createTextNode", 
+            new builtin_function(xml_createtextnode), flags);
+    o.init_member("getBytesLoaded", 
+            new builtin_function(xml_getbytesloaded), flags);
+    o.init_member("getBytesTotal", 
+            new builtin_function(xml_getbytestotal), flags);
     o.init_member("load", new builtin_function(
                 LoadableObject::loadableobject_load), flags);
     o.init_member("parseXML", new builtin_function(xml_parsexml), flags);
-    o.init_member("send", new builtin_function(xml_send), flags);
+    o.init_member("send", new builtin_function(
+                LoadableObject::loadableobject_send), flags);
     o.init_member("sendAndLoad", new builtin_function(
                 LoadableObject::loadableobject_sendAndLoad), flags);
     o.init_member("onData", new builtin_function(xml_ondata), flags);
@@ -469,7 +473,8 @@
 }
 
 
-as_value xml_getbytesloaded(const fn_call& fn)
+as_value
+xml_getbytesloaded(const fn_call& fn)
 {
     boost::intrusive_ptr<XML_as> ptr = ensureType<XML_as>(fn.this_ptr);
     long int ret = ptr->getBytesLoaded();
@@ -478,7 +483,8 @@
 }
 
 
-as_value xml_getbytestotal(const fn_call& fn)
+as_value
+xml_getbytestotal(const fn_call& fn)
 {
     boost::intrusive_ptr<XML_as> ptr = ensureType<XML_as>(fn.this_ptr);
     long int ret = ptr->getBytesTotal();
@@ -487,7 +493,8 @@
 }
 
 
-as_value xml_parsexml(const fn_call& fn)
+static as_value
+xml_parsexml(const fn_call& fn)
 {
 
     boost::intrusive_ptr<XML_as> ptr = ensureType<XML_as>(fn.this_ptr);
@@ -506,17 +513,6 @@
     return as_value();
 }
 
-/// \brief removes the specified XML object from its parent. Also
-/// deletes all descendants of the node.
-as_value xml_send(const fn_call& fn)
-{
-    GNASH_REPORT_FUNCTION;
-    boost::intrusive_ptr<XML_as> ptr = ensureType<XML_as>(fn.this_ptr);
-    
-    ptr->send("");
-    return as_value();
-}
-
 
 static as_value
 xml_ondata(const fn_call& fn)

=== modified file 'libcore/sprite_instance.cpp'
--- a/libcore/sprite_instance.cpp       2008-10-23 16:50:44 +0000
+++ b/libcore/sprite_instance.cpp       2008-10-23 18:27:11 +0000
@@ -4808,8 +4808,8 @@
             {
                 // Append variables
                 std::string qs = url.querystring();
-                if ( qs.empty() ) url.set_querystring(postdata);
-                else url.set_querystring(qs + std::string("&") + postdata);
+                if (qs.empty()) url.set_querystring(postdata);
+                else url.set_querystring(qs + "&" + postdata);
             }
             _loadVariableRequests.push_back(new LoadVariablesThread(url));
         }


reply via email to

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