1
diff -r 360bd0a75304 plugin/icedteanp/IcedTeaJavaRequestProcessor.cc
2
--- a/plugin/icedteanp/IcedTeaJavaRequestProcessor.cc Mon Jan 09 18:45:31 2012 -0500
3
+++ b/plugin/icedteanp/IcedTeaJavaRequestProcessor.cc Fri Feb 17 18:24:39 2012 -0500
6
PLUGIN_DEBUG("NPObject is not a Java object\n");
7
NPIdentifier length_id = browser_functions.getstringidentifier("length");
8
+ bool isJSObjectArray = false;
10
// FIXME: We currently only handle <= 2 dim arrays. Do we really need more though?
13
std::string length_str = std::string();
14
IcedTeaPluginUtilities::itoa(NPVARIANT_TO_INT32(length), &length_str);
16
- if (NPVARIANT_TO_INT32(length) > 0)
17
+ if (NPVARIANT_TO_INT32(length) >= 0)
19
NPIdentifier id_0 = browser_functions.getintidentifier(0);
20
NPVariant first_element = NPVariant();
23
getArrayTypeForJava(instance, first_element, &java_array_type);
26
- java_array_type.append("jsobject");
29
+ // For JSObject arrays, we create a regular object (accessible via JSObject.getSlot())
30
+ if (NPVARIANT_TO_INT32(length) < 0 || !java_array_type.compare("jsobject"))
32
+ isJSObjectArray = true;
33
+ goto createRegularObject;
36
java_result = java_request.newArray(java_array_type, length_str);
40
// Got here => no errors above. We're good to return!
42
- } else // Else it is not an array
45
+ createRegularObject:
46
+ if (!IcedTeaPluginUtilities::isObjectJSArray(instance, obj) || isJSObjectArray) // Else it is not an array
49
NPVariant* variant_copy = new NPVariant();
50
diff -r 360bd0a75304 plugin/icedteanp/IcedTeaPluginRequestProcessor.cc
51
--- a/plugin/icedteanp/IcedTeaPluginRequestProcessor.cc Mon Jan 09 18:45:31 2012 -0500
52
+++ b/plugin/icedteanp/IcedTeaPluginRequestProcessor.cc Fri Feb 17 18:24:39 2012 -0500
54
// returns immediately, so we do it in the same thread.
55
this->sendWindow(message_parts);
57
+ } else if (!command->find("Finalize"))
59
+ // Object can be finalized from the main thread only. And this
60
+ // call returns immediately, so we do it in the same thread.
61
+ this->finalize(message_parts);
63
} else if (!command->find("GetMember") ||
64
!command->find("SetMember") ||
65
!command->find("ToString") ||
67
!command->find("GetSlot") ||
68
!command->find("SetSlot") ||
69
!command->find("Eval") ||
70
- !command->find("Finalize") ||
71
!command->find("LoadURL"))
76
IcedTeaPluginUtilities::callAndWaitForResult(instance, &_eval, &thread_data);
78
- NPVariant* result_variant = (NPVariant*) IcedTeaPluginUtilities::stringToJSID(thread_data.result);
79
- std::string result_variant_jniid = std::string();
82
- createJavaObjectFromVariant(instance, *result_variant, &result_variant_jniid);
85
- result_variant_jniid = "0";
88
IcedTeaPluginUtilities::constructMessagePrefix(0, reference, &response);
89
response += " JavaScriptEval ";
90
- response += result_variant_jniid;
91
+ response += thread_data.result;
93
plugin_to_java_bus->post(response.c_str());
97
IcedTeaPluginUtilities::callAndWaitForResult(instance, &_call, &thread_data);
99
- result_variant = (NPVariant*) IcedTeaPluginUtilities::stringToJSID(thread_data.result);
101
- if (result_variant)
103
- createJavaObjectFromVariant(instance, *result_variant, &result_variant_jniid);
106
- result_variant_jniid = "0";
109
IcedTeaPluginUtilities::constructMessagePrefix(0, reference, &response);
110
response += " JavaScriptCall ";
111
- response += result_variant_jniid;
112
+ response += thread_data.result;
114
plugin_to_java_bus->post(response.c_str());
120
- NPIdentifier property_identifier;
121
+ std::string property_id = std::string();
122
+ bool int_identifier;
124
JavaRequestProcessor java_request = JavaRequestProcessor();
125
JavaResultData* java_result;
128
if (*(message_parts->at(4)) == "SetSlot")
130
- property_identifier = browser_functions.getintidentifier(atoi(message_parts->at(6)->c_str()));
131
+ property_id.append(*(message_parts->at(6)));
132
+ int_identifier = true;
135
java_result = java_request.getString(propertyNameID);
140
- property_identifier = browser_functions.getstringidentifier(java_result->return_string->c_str());
141
+ property_id.append(*(java_result->return_string));
142
+ int_identifier = false;
145
AsyncCallThreadData thread_data = AsyncCallThreadData();
148
thread_data.parameters.push_back(instance);
149
thread_data.parameters.push_back(NPVARIANT_TO_OBJECT(*member));
150
- thread_data.parameters.push_back(&property_identifier);
151
+ thread_data.parameters.push_back(&property_id);
152
thread_data.parameters.push_back(&value);
153
+ thread_data.parameters.push_back(&int_identifier);
155
IcedTeaPluginUtilities::callAndWaitForResult(instance, &_setMember, &thread_data);
161
+ bool int_identifier;
163
// debug printout of parent thread data
164
IcedTeaPluginUtilities::printStringPtrVector("PluginRequestProcessor::getMember:", message_parts);
166
/** Request data from Java if necessary **/
167
if (*(message_parts->at(4)) == "GetSlot")
169
- member_identifier = browser_functions.getintidentifier(atoi(member_id.c_str()));
170
+ int_identifier=true;
173
// make a new request for getString, to get the name of the identifier
178
- member_identifier = browser_functions.getstringidentifier(java_result->return_string->c_str());
179
+ member_id.assign(*(java_result->return_string));
180
+ int_identifier=false;
183
AsyncCallThreadData thread_data = AsyncCallThreadData();
184
@@ -551,16 +542,11 @@
186
thread_data.parameters.push_back(instance);
187
thread_data.parameters.push_back(NPVARIANT_TO_OBJECT(*parent_ptr));
188
- thread_data.parameters.push_back(&member_identifier);
189
+ thread_data.parameters.push_back(&member_id);
190
+ thread_data.parameters.push_back(&int_identifier);
192
IcedTeaPluginUtilities::callAndWaitForResult(instance, &_getMember, &thread_data);
194
- PLUGIN_DEBUG("Member PTR after internal request: %s\n", thread_data.result.c_str());
196
- member_ptr = (NPVariant*) IcedTeaPluginUtilities::stringToJSID(thread_data.result);
198
- createJavaObjectFromVariant(instance, *member_ptr, &result_id);
200
IcedTeaPluginUtilities::constructMessagePrefix(0, reference, &response);
201
if (*(message_parts->at(4)) == "GetSlot")
205
response.append(" JavaScriptGetMember ");
207
- response.append(result_id.c_str());
208
+ response.append(thread_data.result);
209
plugin_to_java_bus->post(response.c_str());
212
@@ -768,19 +754,26 @@
214
NPVariant value_variant = NPVariant();
216
- NPIdentifier* property;
217
+ NPIdentifier property_identifier;
220
std::vector<void*> parameters = ((AsyncCallThreadData*) data)->parameters;
221
instance = (NPP) parameters.at(0);
222
member = (NPObject*) parameters.at(1);
223
- property = (NPIdentifier*) parameters.at(2);
224
+ std::string* property_id = (std::string*) parameters.at(2);
225
value = (std::string*) parameters.at(3);
226
+ bool* int_identifier = (bool*) parameters.at(4);
228
- PLUGIN_DEBUG("Setting %s on instance %p, object %p to value %s\n", browser_functions.utf8fromidentifier(*property), instance, member, value->c_str());
229
+ if(*int_identifier==true)
230
+ property_identifier = browser_functions.getintidentifier(atoi(property_id->c_str()));
232
+ property_identifier = browser_functions.getstringidentifier(property_id->c_str());
234
+ PLUGIN_DEBUG("Setting %s on instance %p, object %p to value %s\n", browser_functions.utf8fromidentifier(property_identifier), instance, member, value->c_str());
236
IcedTeaPluginUtilities::javaResultToNPVariant(instance, value, &value_variant);
238
- ((AsyncCallThreadData*) data)->call_successful = browser_functions.setproperty(instance, member, *property, &value_variant);
239
+ ((AsyncCallThreadData*) data)->call_successful = browser_functions.setproperty(instance, member, property_identifier, &value_variant);
241
((AsyncCallThreadData*) data)->result_ready = true;
243
@@ -797,23 +790,32 @@
245
instance = (NPP) parameters.at(0);
246
parent_ptr = (NPObject*) parameters.at(1);
247
- NPIdentifier* member_identifier = (NPIdentifier*) parameters.at(2);
248
+ std::string* member_id = (std::string*) parameters.at(2);
249
+ NPIdentifier member_identifier;
251
+ bool* int_identifier = (bool*) parameters.at(3);
253
+ if(*int_identifier==true)
254
+ member_identifier = browser_functions.getintidentifier(atoi(member_id->c_str()));
256
+ member_identifier = browser_functions.getstringidentifier(member_id->c_str());
258
// Get the NPVariant corresponding to this member
259
- PLUGIN_DEBUG("Looking for %p %p %p (%s)\n", instance, parent_ptr, member_identifier, browser_functions.utf8fromidentifier(*member_identifier));
260
+ PLUGIN_DEBUG("Looking for %p %p %p (%s)\n", instance, parent_ptr, member_identifier, browser_functions.utf8fromidentifier(member_identifier));
262
- if (!browser_functions.hasproperty(instance, parent_ptr, *member_identifier))
263
+ if (!browser_functions.hasproperty(instance, parent_ptr, member_identifier))
265
- printf("%s not found!\n", browser_functions.utf8fromidentifier(*member_identifier));
266
+ printf("%s not found!\n", browser_functions.utf8fromidentifier(member_identifier));
268
- ((AsyncCallThreadData*) data)->call_successful = browser_functions.getproperty(instance, parent_ptr, *member_identifier, member_ptr);
269
+ ((AsyncCallThreadData*) data)->call_successful = browser_functions.getproperty(instance, parent_ptr, member_identifier, member_ptr);
271
IcedTeaPluginUtilities::printNPVariant(*member_ptr);
273
if (((AsyncCallThreadData*) data)->call_successful)
275
- IcedTeaPluginUtilities::JSIDToString(member_ptr, &member_ptr_str);
276
+ createJavaObjectFromVariant(instance, *member_ptr, &member_ptr_str);
277
((AsyncCallThreadData*) data)->result.append(member_ptr_str);
280
((AsyncCallThreadData*) data)->result_ready = true;
283
std::string* script_str;
284
NPIdentifier script_identifier;
285
NPString script = NPString();
286
- NPVariant* eval_result = new NPVariant();
287
- std::string eval_result_ptr_str = std::string();
288
+ NPVariant* eval_variant = new NPVariant();
289
+ std::string eval_variant_str = std::string();
291
PLUGIN_DEBUG("_eval called\n");
293
@@ -854,13 +856,19 @@
294
PLUGIN_DEBUG("Evaluating: %s\n", script.UTF8Characters);
297
- ((AsyncCallThreadData*) data)->call_successful = browser_functions.evaluate(instance, window_ptr, &script, eval_result);
298
- IcedTeaPluginUtilities::printNPVariant(*eval_result);
299
+ ((AsyncCallThreadData*) data)->call_successful = browser_functions.evaluate(instance, window_ptr, &script, eval_variant);
300
+ IcedTeaPluginUtilities::printNPVariant(*eval_variant);
302
if (((AsyncCallThreadData*) data)->call_successful)
304
- IcedTeaPluginUtilities::JSIDToString(eval_result, &eval_result_ptr_str);
305
- ((AsyncCallThreadData*) data)->result.append(eval_result_ptr_str);
308
+ createJavaObjectFromVariant(instance, *eval_variant, &eval_variant_str);
311
+ eval_variant_str = "0";
313
+ ((AsyncCallThreadData*) data)->result.append(eval_variant_str);
315
((AsyncCallThreadData*) data)->result_ready = true;
319
if (((AsyncCallThreadData*) data)->call_successful)
321
- IcedTeaPluginUtilities::JSIDToString(call_result, &call_result_ptr_str);
325
+ createJavaObjectFromVariant(instance, *call_result, &call_result_ptr_str);
328
+ call_result_ptr_str = "0";
331
((AsyncCallThreadData*) data)->result.append(call_result_ptr_str);