[Top][All Lists]
[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));
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] /srv/bzr/gnash/trunk r10064: Implement XML.send and LoadVars.send (needs better testing).,
Benjamin Wolsey <=