- Timestamp:
- Feb 11, 2013, 8:53:47 PM (13 years ago)
- Location:
- trunk/icedtea-web
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/icedtea-web
-
Property svn:mergeinfo
set to
/branches/vendor/sourceforge/icedtea-web/1.3 merged eligible /branches/vendor/sourceforge/icedtea-web/current merged eligible
-
Property svn:mergeinfo
set to
-
trunk/icedtea-web/plugin/icedteanp/IcedTeaPluginRequestProcessor.cc
r369 r418 124 124 this->sendWindow(message_parts); 125 125 return true; 126 } else if (!command->find("Finalize")) 127 { 128 // Object can be finalized from the main thread only. And this 129 // call returns immediately, so we do it in the same thread. 130 this->finalize(message_parts); 131 return true; 126 132 } else if (!command->find("GetMember") || 127 133 !command->find("SetMember") || … … 131 137 !command->find("SetSlot") || 132 138 !command->find("Eval") || 133 !command->find("Finalize") ||134 139 !command->find("LoadURL")) 135 140 { … … 242 247 IcedTeaPluginUtilities::callAndWaitForResult(instance, &_eval, &thread_data); 243 248 244 NPVariant* result_variant = (NPVariant*) IcedTeaPluginUtilities::stringToJSID(thread_data.result);245 std::string result_variant_jniid = std::string();246 createJavaObjectFromVariant(instance, *result_variant, &result_variant_jniid);247 248 249 IcedTeaPluginUtilities::constructMessagePrefix(0, reference, &response); 249 250 response += " JavaScriptEval "; 250 response += result_variant_jniid;251 response += thread_data.result; 251 252 252 253 plugin_to_java_bus->post(response.c_str()); … … 275 276 NPVariant* result_variant; 276 277 std::string result_variant_jniid = std::string(); 277 NPVariant* args_array ;278 NPVariant* args_array = NULL; 278 279 AsyncCallThreadData thread_data = AsyncCallThreadData(); 279 280 … … 331 332 IcedTeaPluginUtilities::callAndWaitForResult(instance, &_call, &thread_data); 332 333 333 result_variant = (NPVariant*) IcedTeaPluginUtilities::stringToJSID(thread_data.result);334 335 if (result_variant)336 {337 createJavaObjectFromVariant(instance, *result_variant, &result_variant_jniid);338 } else339 {340 result_variant_jniid = "0";341 }342 343 334 IcedTeaPluginUtilities::constructMessagePrefix(0, reference, &response); 344 335 response += " JavaScriptCall "; 345 response += result_variant_jniid;336 response += thread_data.result; 346 337 347 338 plugin_to_java_bus->post(response.c_str()); … … 410 401 NPP instance; 411 402 NPVariant* member; 412 NPIdentifier property_identifier; 403 std::string property_id = std::string(); 404 bool int_identifier; 413 405 414 406 JavaRequestProcessor java_request = JavaRequestProcessor(); … … 440 432 if (*(message_parts->at(4)) == "SetSlot") 441 433 { 442 property_identifier = browser_functions.getintidentifier(atoi(message_parts->at(6)->c_str())); 434 property_id.append(*(message_parts->at(6))); 435 int_identifier = true; 443 436 } else 444 437 { … … 452 445 } 453 446 454 property_identifier = browser_functions.getstringidentifier(java_result->return_string->c_str()); 447 property_id.append(*(java_result->return_string)); 448 int_identifier = false; 455 449 } 456 450 … … 462 456 thread_data.parameters.push_back(instance); 463 457 thread_data.parameters.push_back(NPVARIANT_TO_OBJECT(*member)); 464 thread_data.parameters.push_back(&property_id entifier);458 thread_data.parameters.push_back(&property_id); 465 459 thread_data.parameters.push_back(&value); 460 thread_data.parameters.push_back(&int_identifier); 466 461 467 462 IcedTeaPluginUtilities::callAndWaitForResult(instance, &_setMember, &thread_data); … … 478 473 * can only be requested from the main thread in Mozilla, this function 479 474 * does whatever it can seperately, and then makes an internal request that 480 * causes _ sendMember to do the rest of the work.475 * causes _getMember to do the rest of the work. 481 476 * 482 477 * @param message_parts The request message … … 491 486 JavaResultData* java_result; 492 487 NPVariant* parent_ptr; 488 NPVariant* member_ptr; 493 489 494 490 //int reference; 495 491 std::string member_id = std::string(); 496 std::string jsObjectClassID = std::string();497 std::string jsObjectConstructorID = std::string();498 492 std::string response = std::string(); 493 std::string result_id = std::string(); 499 494 500 495 NPIdentifier member_identifier; … … 503 498 int instance_id; 504 499 int reference; 500 bool int_identifier; 505 501 506 502 // debug printout of parent thread data … … 517 513 if (*(message_parts->at(4)) == "GetSlot") 518 514 { 519 member_identifier = browser_functions.getintidentifier(atoi(member_id.c_str()));515 int_identifier=true; 520 516 } else 521 517 { … … 530 526 } 531 527 532 member_identifier = browser_functions.getstringidentifier(java_result->return_string->c_str()); 528 member_id.assign(*(java_result->return_string)); 529 int_identifier=false; 533 530 } 534 531 … … 546 543 thread_data.parameters.push_back(instance); 547 544 thread_data.parameters.push_back(NPVARIANT_TO_OBJECT(*parent_ptr)); 548 thread_data.parameters.push_back(&member_identifier); 545 thread_data.parameters.push_back(&member_id); 546 thread_data.parameters.push_back(&int_identifier); 549 547 550 548 IcedTeaPluginUtilities::callAndWaitForResult(instance, &_getMember, &thread_data); 551 549 552 PLUGIN_DEBUG("Member PTR after internal request: %s\n", thread_data.result.c_str());553 554 java_result = java_request.findClass(0, "netscape.javascript.JSObject");555 556 // the result we want is in result_string (assuming there was no error)557 if (java_result->error_occurred)558 {559 printf("Unable to process getMember request. Error occurred: %s\n", java_result->error_msg->c_str());560 //goto cleanup;561 }562 563 jsObjectClassID.append(*(java_result->return_string));564 565 args = std::vector<std::string>();566 std::string longArg = "J";567 args.push_back(longArg);568 569 java_result = java_request.getMethodID(jsObjectClassID,570 browser_functions.getstringidentifier("<init>"),571 args);572 573 // the result we want is in result_string (assuming there was no error)574 if (java_result->error_occurred)575 {576 printf("Unable to process getMember request. Error occurred: %s\n", java_result->error_msg->c_str());577 //goto cleanup;578 }579 580 jsObjectConstructorID.append(*(java_result->return_string));581 582 // We have the method id. Now create a new object.583 584 args.clear();585 args.push_back(thread_data.result);586 java_result = java_request.newObjectWithConstructor("",587 jsObjectClassID,588 jsObjectConstructorID,589 args);590 591 // the result we want is in result_string (assuming there was no error)592 if (java_result->error_occurred)593 {594 printf("Unable to process getMember request. Error occurred: %s\n", java_result->error_msg->c_str());595 //goto cleanup;596 }597 598 599 550 IcedTeaPluginUtilities::constructMessagePrefix(0, reference, &response); 600 if (*(message_parts->at(2)) == "GetSlot") 601 { 551 if (*(message_parts->at(4)) == "GetSlot") 552 { 553 response.append(" JavaScriptGetSlot "); 554 } else { 602 555 response.append(" JavaScriptGetMember "); 603 } else { 604 response.append(" JavaScriptGetSlot "); 605 } 606 response.append(java_result->return_string->c_str()); 556 } 557 response.append(thread_data.result); 607 558 plugin_to_java_bus->post(response.c_str()); 608 559 } … … 764 715 processor->setMember(message_parts); 765 716 pthread_mutex_unlock(&syn_write_mutex); 766 } else if (command == "Finalize")767 {768 // write methods are synchronized769 pthread_mutex_lock(&syn_write_mutex);770 processor->finalize(message_parts);771 pthread_mutex_unlock(&syn_write_mutex);772 717 } else if (command == "LoadURL") // For instance X url <url> <target> 773 718 { … … 821 766 NPVariant value_variant = NPVariant(); 822 767 NPObject* member; 823 NPIdentifier* property; 768 NPIdentifier property_identifier; 769 824 770 825 771 std::vector<void*> parameters = ((AsyncCallThreadData*) data)->parameters; 826 772 instance = (NPP) parameters.at(0); 827 773 member = (NPObject*) parameters.at(1); 828 property = (NPIdentifier*) parameters.at(2);774 std::string* property_id = (std::string*) parameters.at(2); 829 775 value = (std::string*) parameters.at(3); 830 831 PLUGIN_DEBUG("Setting %s on instance %p, object %p to value %s\n", browser_functions.utf8fromidentifier(*property), instance, member, value->c_str()); 776 bool* int_identifier = (bool*) parameters.at(4); 777 778 if(*int_identifier==true) 779 property_identifier = browser_functions.getintidentifier(atoi(property_id->c_str())); 780 else 781 property_identifier = browser_functions.getstringidentifier(property_id->c_str()); 782 783 PLUGIN_DEBUG("Setting %s on instance %p, object %p to value %s\n", browser_functions.utf8fromidentifier(property_identifier), instance, member, value->c_str()); 832 784 833 785 IcedTeaPluginUtilities::javaResultToNPVariant(instance, value, &value_variant); 834 786 835 ((AsyncCallThreadData*) data)->call_successful = browser_functions.setproperty(instance, member, *property, &value_variant);787 ((AsyncCallThreadData*) data)->call_successful = browser_functions.setproperty(instance, member, property_identifier, &value_variant); 836 788 837 789 ((AsyncCallThreadData*) data)->result_ready = true; … … 850 802 instance = (NPP) parameters.at(0); 851 803 parent_ptr = (NPObject*) parameters.at(1); 852 NPIdentifier* member_identifier = (NPIdentifier*) parameters.at(2); 804 std::string* member_id = (std::string*) parameters.at(2); 805 NPIdentifier member_identifier; 806 807 bool* int_identifier = (bool*) parameters.at(3); 808 809 if(*int_identifier==true) 810 member_identifier = browser_functions.getintidentifier(atoi(member_id->c_str())); 811 else 812 member_identifier = browser_functions.getstringidentifier(member_id->c_str()); 853 813 854 814 // Get the NPVariant corresponding to this member 855 PLUGIN_DEBUG("Looking for %p %p %p (%s)\n", instance, parent_ptr, member_identifier, browser_functions.utf8fromidentifier( *member_identifier));856 857 if (!browser_functions.hasproperty(instance, parent_ptr, *member_identifier))858 { 859 printf("%s not found!\n", browser_functions.utf8fromidentifier( *member_identifier));860 } 861 ((AsyncCallThreadData*) data)->call_successful = browser_functions.getproperty(instance, parent_ptr, *member_identifier, member_ptr);815 PLUGIN_DEBUG("Looking for %p %p %p (%s)\n", instance, parent_ptr, member_identifier, browser_functions.utf8fromidentifier(member_identifier)); 816 817 if (!browser_functions.hasproperty(instance, parent_ptr, member_identifier)) 818 { 819 printf("%s not found!\n", browser_functions.utf8fromidentifier(member_identifier)); 820 } 821 ((AsyncCallThreadData*) data)->call_successful = browser_functions.getproperty(instance, parent_ptr, member_identifier, member_ptr); 862 822 863 823 IcedTeaPluginUtilities::printNPVariant(*member_ptr); … … 865 825 if (((AsyncCallThreadData*) data)->call_successful) 866 826 { 867 IcedTeaPluginUtilities::JSIDToString(member_ptr, &member_ptr_str);827 createJavaObjectFromVariant(instance, *member_ptr, &member_ptr_str); 868 828 ((AsyncCallThreadData*) data)->result.append(member_ptr_str); 829 869 830 } 870 831 ((AsyncCallThreadData*) data)->result_ready = true; … … 884 845 NPIdentifier script_identifier; 885 846 NPString script = NPString(); 886 NPVariant* eval_ result = new NPVariant();887 std::string eval_ result_ptr_str = std::string();847 NPVariant* eval_variant = new NPVariant(); 848 std::string eval_variant_str = std::string(); 888 849 889 850 PLUGIN_DEBUG("_eval called\n"); … … 899 860 script.utf8length = script_str->size(); 900 861 901 PLUGIN_DEBUG("Evaluating: %s\n", script .utf8characters);862 PLUGIN_DEBUG("Evaluating: %s\n", script_str->c_str()); 902 863 #else 903 864 script.UTF8Characters = script_str->c_str(); 904 865 script.UTF8Length = script_str->size(); 905 866 906 PLUGIN_DEBUG("Evaluating: %s\n", script .UTF8Characters);867 PLUGIN_DEBUG("Evaluating: %s\n", script_str->c_str()); 907 868 #endif 908 869 909 ((AsyncCallThreadData*) data)->call_successful = browser_functions.evaluate(instance, window_ptr, &script, eval_ result);910 IcedTeaPluginUtilities::printNPVariant(*eval_ result);870 ((AsyncCallThreadData*) data)->call_successful = browser_functions.evaluate(instance, window_ptr, &script, eval_variant); 871 IcedTeaPluginUtilities::printNPVariant(*eval_variant); 911 872 912 873 if (((AsyncCallThreadData*) data)->call_successful) 913 874 { 914 IcedTeaPluginUtilities::JSIDToString(eval_result, &eval_result_ptr_str); 915 ((AsyncCallThreadData*) data)->result.append(eval_result_ptr_str); 916 } 875 if (eval_variant) 876 { 877 createJavaObjectFromVariant(instance, *eval_variant, &eval_variant_str); 878 } else 879 { 880 eval_variant_str = "0"; 881 } 882 } else 883 { 884 eval_variant_str = "0"; 885 } 886 887 ((AsyncCallThreadData*) data)->result.append(eval_variant_str); 917 888 ((AsyncCallThreadData*) data)->result_ready = true; 918 889 … … 957 928 if (((AsyncCallThreadData*) data)->call_successful) 958 929 { 959 IcedTeaPluginUtilities::JSIDToString(call_result, &call_result_ptr_str); 960 ((AsyncCallThreadData*) data)->result.append(call_result_ptr_str); 961 } 962 930 931 if (call_result) 932 { 933 createJavaObjectFromVariant(instance, *call_result, &call_result_ptr_str); 934 } else 935 { 936 call_result_ptr_str = "0"; 937 } 938 } else 939 { 940 call_result_ptr_str = "0"; 941 } 942 943 ((AsyncCallThreadData*) data)->result.append(call_result_ptr_str); 963 944 ((AsyncCallThreadData*) data)->result_ready = true; 964 945 … … 1031 1012 ((AsyncCallThreadData*) data)->result_ready = true; 1032 1013 1033 g_free(decoded_url);1014 free(decoded_url); 1034 1015 decoded_url = NULL; 1035 1016
Note:
See TracChangeset
for help on using the changeset viewer.