| Index: remoting/host/plugin/host_script_object.cc
|
| diff --git a/remoting/host/plugin/host_script_object.cc b/remoting/host/plugin/host_script_object.cc
|
| index 16888d38eb08b5520ef28a61adc88b3a4c07302b..39cd72da834d8b56278c7ecc5004de0d3e0f01a8 100644
|
| --- a/remoting/host/plugin/host_script_object.cc
|
| +++ b/remoting/host/plugin/host_script_object.cc
|
| @@ -1102,13 +1102,14 @@ bool HostNPScriptObject::ClearPairedClients(const NPVariant* args,
|
| return false;
|
| }
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0]));
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
|
| if (pairing_registry_) {
|
| pairing_registry_->ClearAllPairings(
|
| base::Bind(&HostNPScriptObject::InvokeBooleanCallback, weak_ptr_,
|
| - callback_obj));
|
| + base::Passed(&callback_obj)));
|
| } else {
|
| - InvokeBooleanCallback(callback_obj, false);
|
| + InvokeBooleanCallback(callback_obj.Pass(), false);
|
| }
|
|
|
| return true;
|
| @@ -1133,14 +1134,15 @@ bool HostNPScriptObject::DeletePairedClient(const NPVariant* args,
|
| }
|
|
|
| std::string client_id = StringFromNPVariant(args[0]);
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[1]));
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[1])));
|
| if (pairing_registry_) {
|
| pairing_registry_->DeletePairing(
|
| client_id,
|
| base::Bind(&HostNPScriptObject::InvokeBooleanCallback,
|
| - weak_ptr_, callback_obj));
|
| + weak_ptr_, base::Passed(&callback_obj)));
|
| } else {
|
| - InvokeBooleanCallback(callback_obj, false);
|
| + InvokeBooleanCallback(callback_obj.Pass(), false);
|
| }
|
|
|
| return true;
|
| @@ -1161,7 +1163,7 @@ bool HostNPScriptObject::GetHostName(const NPVariant* args,
|
| }
|
|
|
| NPVariant host_name_val = NPVariantFromString(net::GetHostName());
|
| - InvokeAndIgnoreResult(callback_obj.get(), &host_name_val, 1);
|
| + InvokeAndIgnoreResult(callback_obj, &host_name_val, 1);
|
| g_npnetscape_funcs->releasevariantvalue(&host_name_val);
|
|
|
| return true;
|
| @@ -1195,7 +1197,7 @@ bool HostNPScriptObject::GetPinHash(const NPVariant* args,
|
|
|
| NPVariant pin_hash_val = NPVariantFromString(
|
| remoting::MakeHostPinHash(host_id, pin));
|
| - InvokeAndIgnoreResult(callback_obj.get(), &pin_hash_val, 1);
|
| + InvokeAndIgnoreResult(callback_obj, &pin_hash_val, 1);
|
| g_npnetscape_funcs->releasevariantvalue(&pin_hash_val);
|
|
|
| return true;
|
| @@ -1209,18 +1211,20 @@ bool HostNPScriptObject::GenerateKeyPair(const NPVariant* args,
|
| return false;
|
| }
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0]));
|
| - if (!callback_obj.get()) {
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
|
| + if (!callback_obj->get()) {
|
| SetException("generateKeyPair: invalid callback parameter");
|
| return false;
|
| }
|
|
|
| - // TODO(wez): HostNPScriptObject needn't be touched on worker
|
| - // thread, so make DoGenerateKeyPair static and pass it a callback
|
| - // to run (crbug.com/156257).
|
| + base::Callback<void (const std::string&,
|
| + const std::string&)> wrapped_callback =
|
| + base::Bind(&HostNPScriptObject::InvokeGenerateKeyPairCallback, weak_ptr_,
|
| + base::Passed(&callback_obj));
|
| worker_thread_->PostTask(
|
| FROM_HERE, base::Bind(&HostNPScriptObject::DoGenerateKeyPair,
|
| - base::Unretained(this), callback_obj));
|
| + plugin_task_runner_, wrapped_callback));
|
| return true;
|
| }
|
|
|
| @@ -1243,8 +1247,9 @@ bool HostNPScriptObject::UpdateDaemonConfig(const NPVariant* args,
|
| scoped_ptr<base::DictionaryValue> config_dict(
|
| reinterpret_cast<base::DictionaryValue*>(config.release()));
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[1]));
|
| - if (!callback_obj.get()) {
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[1])));
|
| + if (!callback_obj->get()) {
|
| SetException("updateDaemonConfig: invalid callback parameter");
|
| return false;
|
| }
|
| @@ -1258,8 +1263,8 @@ bool HostNPScriptObject::UpdateDaemonConfig(const NPVariant* args,
|
|
|
| daemon_controller_->UpdateConfig(
|
| config_dict.Pass(),
|
| - base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback,
|
| - base::Unretained(this), callback_obj));
|
| + base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, weak_ptr_,
|
| + base::Passed(&callback_obj)));
|
| return true;
|
| }
|
|
|
| @@ -1271,16 +1276,16 @@ bool HostNPScriptObject::GetDaemonConfig(const NPVariant* args,
|
| return false;
|
| }
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0]));
|
| - if (!callback_obj.get()) {
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
|
| + if (!callback_obj->get()) {
|
| SetException("getDaemonConfig: invalid callback parameter");
|
| return false;
|
| }
|
|
|
| daemon_controller_->GetConfig(
|
| - base::Bind(&HostNPScriptObject::InvokeGetDaemonConfigCallback,
|
| - base::Unretained(this), callback_obj));
|
| -
|
| + base::Bind(&HostNPScriptObject::InvokeGetDaemonConfigCallback, weak_ptr_,
|
| + base::Passed(&callback_obj)));
|
| return true;
|
| }
|
|
|
| @@ -1292,15 +1297,16 @@ bool HostNPScriptObject::GetDaemonVersion(const NPVariant* args,
|
| return false;
|
| }
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0]));
|
| - if (!callback_obj.get()) {
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
|
| + if (!callback_obj->get()) {
|
| SetException("getDaemonVersion: invalid callback parameter");
|
| return false;
|
| }
|
|
|
| daemon_controller_->GetVersion(
|
| - base::Bind(&HostNPScriptObject::InvokeGetDaemonVersionCallback,
|
| - base::Unretained(this), callback_obj));
|
| + base::Bind(&HostNPScriptObject::InvokeGetDaemonVersionCallback, weak_ptr_,
|
| + base::Passed(&callback_obj)));
|
|
|
| return true;
|
| }
|
| @@ -1313,8 +1319,9 @@ bool HostNPScriptObject::GetPairedClients(const NPVariant* args,
|
| return false;
|
| }
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0]));
|
| - if (!callback_obj.get()) {
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
|
| + if (!callback_obj->get()) {
|
| SetException("getPairedClients: invalid callback parameter");
|
| return false;
|
| }
|
| @@ -1322,10 +1329,11 @@ bool HostNPScriptObject::GetPairedClients(const NPVariant* args,
|
| if (pairing_registry_) {
|
| pairing_registry_->GetAllPairings(
|
| base::Bind(&HostNPScriptObject::InvokeGetPairedClientsCallback,
|
| - weak_ptr_, callback_obj));
|
| + weak_ptr_, base::Passed(&callback_obj)));
|
| } else {
|
| scoped_ptr<base::ListValue> no_paired_clients(new base::ListValue);
|
| - InvokeGetPairedClientsCallback(callback_obj, no_paired_clients.Pass());
|
| + InvokeGetPairedClientsCallback(callback_obj.Pass(),
|
| + no_paired_clients.Pass());
|
| }
|
| return true;
|
| }
|
| @@ -1338,15 +1346,16 @@ bool HostNPScriptObject::GetUsageStatsConsent(const NPVariant* args,
|
| return false;
|
| }
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0]));
|
| - if (!callback_obj.get()) {
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
|
| + if (!callback_obj->get()) {
|
| SetException("getUsageStatsConsent: invalid callback parameter");
|
| return false;
|
| }
|
|
|
| daemon_controller_->GetUsageStatsConsent(
|
| base::Bind(&HostNPScriptObject::InvokeGetUsageStatsConsentCallback,
|
| - base::Unretained(this), callback_obj));
|
| + weak_ptr_, base::Passed(&callback_obj)));
|
| return true;
|
| }
|
|
|
| @@ -1376,8 +1385,9 @@ bool HostNPScriptObject::StartDaemon(const NPVariant* args,
|
| return false;
|
| }
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[2]));
|
| - if (!callback_obj.get()) {
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[2])));
|
| + if (!callback_obj->get()) {
|
| SetException("startDaemon: invalid callback parameter");
|
| return false;
|
| }
|
| @@ -1385,8 +1395,8 @@ bool HostNPScriptObject::StartDaemon(const NPVariant* args,
|
| daemon_controller_->SetConfigAndStart(
|
| config_dict.Pass(),
|
| NPVARIANT_TO_BOOLEAN(args[1]),
|
| - base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback,
|
| - base::Unretained(this), callback_obj));
|
| + base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, weak_ptr_,
|
| + base::Passed(&callback_obj)));
|
| return true;
|
| }
|
|
|
| @@ -1400,15 +1410,16 @@ bool HostNPScriptObject::StopDaemon(const NPVariant* args,
|
| return false;
|
| }
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0]));
|
| - if (!callback_obj.get()) {
|
| + scoped_ptr<ScopedRefNPObject> callback_obj(
|
| + new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
|
| + if (!callback_obj->get()) {
|
| SetException("stopDaemon: invalid callback parameter");
|
| return false;
|
| }
|
|
|
| daemon_controller_->Stop(
|
| - base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback,
|
| - base::Unretained(this), callback_obj));
|
| + base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, weak_ptr_,
|
| + base::Passed(&callback_obj)));
|
| return true;
|
| }
|
|
|
| @@ -1420,7 +1431,7 @@ void HostNPScriptObject::NotifyStateChanged(State state) {
|
| if (on_state_changed_func_.get()) {
|
| NPVariant state_var;
|
| INT32_TO_NPVARIANT(state, state_var);
|
| - InvokeAndIgnoreResult(on_state_changed_func_.get(), &state_var, 1);
|
| + InvokeAndIgnoreResult(on_state_changed_func_, &state_var, 1);
|
| }
|
| }
|
|
|
| @@ -1430,7 +1441,7 @@ void HostNPScriptObject::NotifyNatPolicyChanged(bool nat_traversal_enabled) {
|
| if (on_nat_traversal_policy_changed_func_.get()) {
|
| NPVariant policy;
|
| BOOLEAN_TO_NPVARIANT(nat_traversal_enabled, policy);
|
| - InvokeAndIgnoreResult(on_nat_traversal_policy_changed_func_.get(),
|
| + InvokeAndIgnoreResult(on_nat_traversal_policy_changed_func_,
|
| &policy, 1);
|
| }
|
| }
|
| @@ -1518,61 +1529,54 @@ bool HostNPScriptObject::LocalizeStringWithSubstitution(
|
| return true;
|
| }
|
|
|
| -void HostNPScriptObject::DoGenerateKeyPair(const ScopedRefNPObject& callback) {
|
| +// static
|
| +void HostNPScriptObject::DoGenerateKeyPair(
|
| + const scoped_refptr<AutoThreadTaskRunner>& plugin_task_runner,
|
| + const base::Callback<void (const std::string&,
|
| + const std::string&)>& callback) {
|
| scoped_refptr<RsaKeyPair> key_pair = RsaKeyPair::Generate();
|
| - InvokeGenerateKeyPairCallback(callback, key_pair->ToString(),
|
| - key_pair->GetPublicKey());
|
| + plugin_task_runner->PostTask(FROM_HERE,
|
| + base::Bind(callback, key_pair->ToString(),
|
| + key_pair->GetPublicKey()));
|
| }
|
|
|
| void HostNPScriptObject::InvokeGenerateKeyPairCallback(
|
| - const ScopedRefNPObject& callback,
|
| + scoped_ptr<ScopedRefNPObject> callback,
|
| const std::string& private_key,
|
| const std::string& public_key) {
|
| - if (!plugin_task_runner_->BelongsToCurrentThread()) {
|
| - plugin_task_runner_->PostTask(
|
| - FROM_HERE, base::Bind(
|
| - &HostNPScriptObject::InvokeGenerateKeyPairCallback,
|
| - weak_ptr_, callback, private_key, public_key));
|
| - return;
|
| - }
|
| + DCHECK(plugin_task_runner_->BelongsToCurrentThread());
|
|
|
| NPVariant params[2];
|
| params[0] = NPVariantFromString(private_key);
|
| params[1] = NPVariantFromString(public_key);
|
| - InvokeAndIgnoreResult(callback.get(), params, arraysize(params));
|
| + InvokeAndIgnoreResult(*callback, params, arraysize(params));
|
| g_npnetscape_funcs->releasevariantvalue(&(params[0]));
|
| g_npnetscape_funcs->releasevariantvalue(&(params[1]));
|
| }
|
|
|
| void HostNPScriptObject::InvokeAsyncResultCallback(
|
| - const ScopedRefNPObject& callback,
|
| + scoped_ptr<ScopedRefNPObject> callback,
|
| DaemonController::AsyncResult result) {
|
| DCHECK(plugin_task_runner_->BelongsToCurrentThread());
|
|
|
| NPVariant result_var;
|
| INT32_TO_NPVARIANT(static_cast<int32>(result), result_var);
|
| - InvokeAndIgnoreResult(callback.get(), &result_var, 1);
|
| + InvokeAndIgnoreResult(*callback, &result_var, 1);
|
| g_npnetscape_funcs->releasevariantvalue(&result_var);
|
| }
|
|
|
| void HostNPScriptObject::InvokeBooleanCallback(
|
| - const ScopedRefNPObject& callback, bool result) {
|
| - if (!plugin_task_runner_->BelongsToCurrentThread()) {
|
| - plugin_task_runner_->PostTask(
|
| - FROM_HERE, base::Bind(
|
| - &HostNPScriptObject::InvokeBooleanCallback,
|
| - weak_ptr_, callback, result));
|
| - return;
|
| - }
|
| + scoped_ptr<ScopedRefNPObject> callback, bool result) {
|
| + DCHECK(plugin_task_runner_->BelongsToCurrentThread());
|
|
|
| NPVariant result_var;
|
| BOOLEAN_TO_NPVARIANT(result, result_var);
|
| - InvokeAndIgnoreResult(callback.get(), &result_var, 1);
|
| + InvokeAndIgnoreResult(*callback, &result_var, 1);
|
| g_npnetscape_funcs->releasevariantvalue(&result_var);
|
| }
|
|
|
| void HostNPScriptObject::InvokeGetDaemonConfigCallback(
|
| - const ScopedRefNPObject& callback,
|
| + scoped_ptr<ScopedRefNPObject> callback,
|
| scoped_ptr<base::DictionaryValue> config) {
|
| DCHECK(plugin_task_runner_->BelongsToCurrentThread());
|
|
|
| @@ -1583,40 +1587,34 @@ void HostNPScriptObject::InvokeGetDaemonConfigCallback(
|
| base::JSONWriter::Write(config.get(), &config_str);
|
|
|
| NPVariant config_val = NPVariantFromString(config_str);
|
| - InvokeAndIgnoreResult(callback.get(), &config_val, 1);
|
| + InvokeAndIgnoreResult(*callback, &config_val, 1);
|
| g_npnetscape_funcs->releasevariantvalue(&config_val);
|
| }
|
|
|
| void HostNPScriptObject::InvokeGetDaemonVersionCallback(
|
| - const ScopedRefNPObject& callback, const std::string& version) {
|
| + scoped_ptr<ScopedRefNPObject> callback, const std::string& version) {
|
| DCHECK(plugin_task_runner_->BelongsToCurrentThread());
|
|
|
| NPVariant version_val = NPVariantFromString(version);
|
| - InvokeAndIgnoreResult(callback.get(), &version_val, 1);
|
| + InvokeAndIgnoreResult(*callback, &version_val, 1);
|
| g_npnetscape_funcs->releasevariantvalue(&version_val);
|
| }
|
|
|
| void HostNPScriptObject::InvokeGetPairedClientsCallback(
|
| - const ScopedRefNPObject& callback,
|
| + scoped_ptr<ScopedRefNPObject> callback,
|
| scoped_ptr<base::ListValue> paired_clients) {
|
| - if (!plugin_task_runner_->BelongsToCurrentThread()) {
|
| - plugin_task_runner_->PostTask(
|
| - FROM_HERE, base::Bind(
|
| - &HostNPScriptObject::InvokeGetPairedClientsCallback,
|
| - weak_ptr_, callback, base::Passed(&paired_clients)));
|
| - return;
|
| - }
|
| + DCHECK(plugin_task_runner_->BelongsToCurrentThread());
|
|
|
| std::string paired_clients_json;
|
| base::JSONWriter::Write(paired_clients.get(), &paired_clients_json);
|
|
|
| NPVariant paired_clients_val = NPVariantFromString(paired_clients_json);
|
| - InvokeAndIgnoreResult(callback.get(), &paired_clients_val, 1);
|
| + InvokeAndIgnoreResult(*callback, &paired_clients_val, 1);
|
| g_npnetscape_funcs->releasevariantvalue(&paired_clients_val);
|
| }
|
|
|
| void HostNPScriptObject::InvokeGetUsageStatsConsentCallback(
|
| - const ScopedRefNPObject& callback,
|
| + scoped_ptr<ScopedRefNPObject> callback,
|
| const DaemonController::UsageStatsConsent& consent) {
|
| DCHECK(plugin_task_runner_->BelongsToCurrentThread());
|
|
|
| @@ -1624,7 +1622,7 @@ void HostNPScriptObject::InvokeGetUsageStatsConsentCallback(
|
| BOOLEAN_TO_NPVARIANT(consent.supported, params[0]);
|
| BOOLEAN_TO_NPVARIANT(consent.allowed, params[1]);
|
| BOOLEAN_TO_NPVARIANT(consent.set_by_policy, params[2]);
|
| - InvokeAndIgnoreResult(callback.get(), params, arraysize(params));
|
| + InvokeAndIgnoreResult(*callback, params, arraysize(params));
|
| g_npnetscape_funcs->releasevariantvalue(&(params[0]));
|
| g_npnetscape_funcs->releasevariantvalue(&(params[1]));
|
| g_npnetscape_funcs->releasevariantvalue(&(params[2]));
|
| @@ -1637,7 +1635,7 @@ void HostNPScriptObject::LogDebugInfo(const std::string& message) {
|
| am_currently_logging_ = true;
|
| NPVariant log_message;
|
| STRINGZ_TO_NPVARIANT(message.c_str(), log_message);
|
| - bool is_good = InvokeAndIgnoreResult(log_debug_info_func_.get(),
|
| + bool is_good = InvokeAndIgnoreResult(log_debug_info_func_,
|
| &log_message, 1);
|
| if (!is_good) {
|
| LOG(ERROR) << "ERROR - LogDebugInfo failed\n";
|
| @@ -1646,13 +1644,13 @@ void HostNPScriptObject::LogDebugInfo(const std::string& message) {
|
| }
|
| }
|
|
|
| -bool HostNPScriptObject::InvokeAndIgnoreResult(NPObject* func,
|
| +bool HostNPScriptObject::InvokeAndIgnoreResult(const ScopedRefNPObject& func,
|
| const NPVariant* args,
|
| uint32_t arg_count) {
|
| DCHECK(plugin_task_runner_->BelongsToCurrentThread());
|
|
|
| NPVariant np_result;
|
| - bool is_good = g_npnetscape_funcs->invokeDefault(plugin_, func, args,
|
| + bool is_good = g_npnetscape_funcs->invokeDefault(plugin_, func.get(), args,
|
| arg_count, &np_result);
|
| if (is_good)
|
| g_npnetscape_funcs->releasevariantvalue(&np_result);
|
|
|