Ignore:
Timestamp:
Feb 11, 2013, 8:53:47 PM (13 years ago)
Author:
dmik
Message:

Merge icedtea-web v1.3 to trunk.

Location:
trunk/icedtea-web
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/icedtea-web

  • trunk/icedtea-web/plugin/icedteanp/IcedTeaPluginRequestProcessor.cc

    r369 r418  
    124124            this->sendWindow(message_parts);
    125125            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;
    126132        } else if (!command->find("GetMember") ||
    127133                   !command->find("SetMember") ||
     
    131137                   !command->find("SetSlot") ||
    132138                   !command->find("Eval") ||
    133                    !command->find("Finalize") ||
    134139                   !command->find("LoadURL"))
    135140        {
     
    242247    IcedTeaPluginUtilities::callAndWaitForResult(instance, &_eval, &thread_data);
    243248
    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 
    248249    IcedTeaPluginUtilities::constructMessagePrefix(0, reference, &response);
    249250    response += " JavaScriptEval ";
    250     response += result_variant_jniid;
     251    response += thread_data.result;
    251252
    252253    plugin_to_java_bus->post(response.c_str());
     
    275276    NPVariant* result_variant;
    276277    std::string result_variant_jniid = std::string();
    277     NPVariant* args_array;
     278    NPVariant* args_array = NULL;
    278279    AsyncCallThreadData thread_data = AsyncCallThreadData();
    279280
     
    331332    IcedTeaPluginUtilities::callAndWaitForResult(instance, &_call, &thread_data);
    332333
    333     result_variant = (NPVariant*) IcedTeaPluginUtilities::stringToJSID(thread_data.result);
    334 
    335     if (result_variant)
    336     {
    337         createJavaObjectFromVariant(instance, *result_variant, &result_variant_jniid);
    338     } else
    339     {
    340         result_variant_jniid = "0";
    341     }
    342 
    343334    IcedTeaPluginUtilities::constructMessagePrefix(0, reference, &response);
    344335    response += " JavaScriptCall ";
    345     response += result_variant_jniid;
     336    response += thread_data.result;
    346337
    347338    plugin_to_java_bus->post(response.c_str());
     
    410401    NPP instance;
    411402    NPVariant* member;
    412     NPIdentifier property_identifier;
     403    std::string property_id = std::string();
     404    bool int_identifier;
    413405
    414406    JavaRequestProcessor java_request = JavaRequestProcessor();
     
    440432    if (*(message_parts->at(4)) == "SetSlot")
    441433    {
    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;
    443436    } else
    444437    {
     
    452445        }
    453446
    454         property_identifier = browser_functions.getstringidentifier(java_result->return_string->c_str());
     447        property_id.append(*(java_result->return_string));
     448        int_identifier = false;
    455449    }
    456450
     
    462456    thread_data.parameters.push_back(instance);
    463457    thread_data.parameters.push_back(NPVARIANT_TO_OBJECT(*member));
    464     thread_data.parameters.push_back(&property_identifier);
     458    thread_data.parameters.push_back(&property_id);
    465459    thread_data.parameters.push_back(&value);
     460    thread_data.parameters.push_back(&int_identifier);
    466461
    467462    IcedTeaPluginUtilities::callAndWaitForResult(instance, &_setMember, &thread_data);
     
    478473 * can only be requested from the main thread in Mozilla, this function
    479474 * 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.
    481476 *
    482477 * @param message_parts The request message
     
    491486    JavaResultData* java_result;
    492487    NPVariant* parent_ptr;
     488    NPVariant* member_ptr;
    493489
    494490    //int reference;
    495491    std::string member_id = std::string();
    496     std::string jsObjectClassID = std::string();
    497     std::string jsObjectConstructorID = std::string();
    498492    std::string response = std::string();
     493    std::string result_id = std::string();
    499494
    500495    NPIdentifier member_identifier;
     
    503498    int instance_id;
    504499    int reference;
     500    bool int_identifier;
    505501
    506502    // debug printout of parent thread data
     
    517513    if (*(message_parts->at(4)) == "GetSlot")
    518514    {
    519         member_identifier = browser_functions.getintidentifier(atoi(member_id.c_str()));
     515        int_identifier=true;
    520516    } else
    521517    {
     
    530526        }
    531527
    532         member_identifier = browser_functions.getstringidentifier(java_result->return_string->c_str());
     528        member_id.assign(*(java_result->return_string));
     529        int_identifier=false;
    533530    }
    534531
     
    546543    thread_data.parameters.push_back(instance);
    547544    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);
    549547
    550548    IcedTeaPluginUtilities::callAndWaitForResult(instance, &_getMember, &thread_data);
    551549
    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 
    599550    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 {
    602555        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);
    607558    plugin_to_java_bus->post(response.c_str());
    608559}
     
    764715                processor->setMember(message_parts);
    765716                pthread_mutex_unlock(&syn_write_mutex);
    766             } else if (command == "Finalize")
    767             {
    768                 // write methods are synchronized
    769                 pthread_mutex_lock(&syn_write_mutex);
    770                 processor->finalize(message_parts);
    771                 pthread_mutex_unlock(&syn_write_mutex);
    772717            } else if (command == "LoadURL") // For instance X url <url> <target>
    773718            {
     
    821766    NPVariant value_variant = NPVariant();
    822767    NPObject* member;
    823     NPIdentifier* property;
     768    NPIdentifier property_identifier;
     769
    824770
    825771    std::vector<void*> parameters = ((AsyncCallThreadData*) data)->parameters;
    826772    instance = (NPP) parameters.at(0);
    827773    member = (NPObject*) parameters.at(1);
    828     property = (NPIdentifier*) parameters.at(2);
     774    std::string*  property_id = (std::string*) parameters.at(2);
    829775    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());
    832784
    833785    IcedTeaPluginUtilities::javaResultToNPVariant(instance, value, &value_variant);
    834786
    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);
    836788
    837789    ((AsyncCallThreadData*) data)->result_ready = true;
     
    850802    instance = (NPP) parameters.at(0);
    851803    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());
    853813
    854814    // 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);
    862822
    863823    IcedTeaPluginUtilities::printNPVariant(*member_ptr);
     
    865825    if (((AsyncCallThreadData*) data)->call_successful)
    866826    {
    867         IcedTeaPluginUtilities::JSIDToString(member_ptr, &member_ptr_str);
     827        createJavaObjectFromVariant(instance, *member_ptr, &member_ptr_str);
    868828        ((AsyncCallThreadData*) data)->result.append(member_ptr_str);
     829
    869830    }
    870831    ((AsyncCallThreadData*) data)->result_ready = true;
     
    884845    NPIdentifier script_identifier;
    885846    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();
    888849
    889850    PLUGIN_DEBUG("_eval called\n");
     
    899860    script.utf8length = script_str->size();
    900861
    901     PLUGIN_DEBUG("Evaluating: %s\n", script.utf8characters);
     862    PLUGIN_DEBUG("Evaluating: %s\n", script_str->c_str());
    902863#else
    903864    script.UTF8Characters = script_str->c_str();
    904865    script.UTF8Length = script_str->size();
    905866
    906     PLUGIN_DEBUG("Evaluating: %s\n", script.UTF8Characters);
     867    PLUGIN_DEBUG("Evaluating: %s\n", script_str->c_str());
    907868#endif
    908869
    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);
    911872
    912873    if (((AsyncCallThreadData*) data)->call_successful)
    913874    {
    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);
    917888    ((AsyncCallThreadData*) data)->result_ready = true;
    918889
     
    957928    if (((AsyncCallThreadData*) data)->call_successful)
    958929    {
    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);
    963944    ((AsyncCallThreadData*) data)->result_ready = true;
    964945
     
    10311012    ((AsyncCallThreadData*) data)->result_ready = true;
    10321013
    1033     g_free(decoded_url);
     1014    free(decoded_url);
    10341015    decoded_url = NULL;
    10351016
Note: See TracChangeset for help on using the changeset viewer.