| 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 a74f498118b72f22b739dffb1d6bd453be248e1e..dc6c450e4baa688c5aabb34204c7a367ecb7f863 100644
|
| --- a/remoting/host/plugin/host_script_object.cc
|
| +++ b/remoting/host/plugin/host_script_object.cc
|
| @@ -54,6 +54,7 @@ const char* kFuncNameGenerateKeyPair = "generateKeyPair";
|
| const char* kFuncNameUpdateDaemonConfig = "updateDaemonConfig";
|
| const char* kFuncNameGetDaemonConfig = "getDaemonConfig";
|
| const char* kFuncNameGetDaemonVersion = "getDaemonVersion";
|
| +const char* kFuncNameGetUsageStatsConsent = "getUsageStatsConsent";
|
| const char* kFuncNameStartDaemon = "startDaemon";
|
| const char* kFuncNameStopDaemon = "stopDaemon";
|
|
|
| @@ -163,6 +164,7 @@ bool HostNPScriptObject::HasMethod(const std::string& method_name) {
|
| method_name == kFuncNameUpdateDaemonConfig ||
|
| method_name == kFuncNameGetDaemonConfig ||
|
| method_name == kFuncNameGetDaemonVersion ||
|
| + method_name == kFuncNameGetUsageStatsConsent ||
|
| method_name == kFuncNameStartDaemon ||
|
| method_name == kFuncNameStopDaemon);
|
| }
|
| @@ -200,6 +202,8 @@ bool HostNPScriptObject::Invoke(const std::string& method_name,
|
| return GetDaemonConfig(args, arg_count, result);
|
| } else if (method_name == kFuncNameGetDaemonVersion) {
|
| return GetDaemonVersion(args, arg_count, result);
|
| + } else if (method_name == kFuncNameGetUsageStatsConsent) {
|
| + return GetUsageStatsConsent(args, arg_count, result);
|
| } else if (method_name == kFuncNameStartDaemon) {
|
| return StartDaemon(args, arg_count, result);
|
| } else if (method_name == kFuncNameStopDaemon) {
|
| @@ -373,6 +377,7 @@ bool HostNPScriptObject::Enumerate(std::vector<std::string>* values) {
|
| kFuncNameUpdateDaemonConfig,
|
| kFuncNameGetDaemonConfig,
|
| kFuncNameGetDaemonVersion,
|
| + kFuncNameGetUsageStatsConsent,
|
| kFuncNameStartDaemon,
|
| kFuncNameStopDaemon
|
| };
|
| @@ -762,10 +767,32 @@ bool HostNPScriptObject::GetDaemonVersion(const NPVariant* args,
|
| return true;
|
| }
|
|
|
| +bool HostNPScriptObject::GetUsageStatsConsent(const NPVariant* args,
|
| + uint32_t arg_count,
|
| + NPVariant* result) {
|
| + if (arg_count != 1) {
|
| + SetException("getUsageStatsConsent: bad number of arguments");
|
| + return false;
|
| + }
|
| +
|
| + ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0]));
|
| + if (!callback_obj.get()) {
|
| + SetException("getUsageStatsConsent: invalid callback parameter");
|
| + return false;
|
| + }
|
| +
|
| + // We control lifetime of the |daemon_controller_| so it's safe to
|
| + // use base::Unretained() here.
|
| + daemon_controller_->GetUsageStatsConsent(
|
| + base::Bind(&HostNPScriptObject::InvokeGetUsageStatsConsentCallback,
|
| + base::Unretained(this), callback_obj));
|
| + return true;
|
| +}
|
| +
|
| bool HostNPScriptObject::StartDaemon(const NPVariant* args,
|
| uint32_t arg_count,
|
| NPVariant* result) {
|
| - if (arg_count != 2) {
|
| + if (arg_count != 3) {
|
| SetException("startDaemon: bad number of arguments");
|
| return false;
|
| }
|
| @@ -775,13 +802,18 @@ bool HostNPScriptObject::StartDaemon(const NPVariant* args,
|
| base::JSONReader::Read(config_str, base::JSON_ALLOW_TRAILING_COMMAS));
|
| if (config_str.empty() || !config.get() ||
|
| !config->IsType(base::Value::TYPE_DICTIONARY)) {
|
| - SetException("updateDaemonConfig: bad config parameter");
|
| + SetException("startDaemon: bad config parameter");
|
| return false;
|
| }
|
| scoped_ptr<base::DictionaryValue> config_dict(
|
| reinterpret_cast<base::DictionaryValue*>(config.release()));
|
|
|
| - ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[1]));
|
| + if (!NPVARIANT_IS_BOOLEAN(args[1])) {
|
| + SetException("startDaemon: invalid consent parameter");
|
| + return false;
|
| + }
|
| +
|
| + ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[2]));
|
| if (!callback_obj.get()) {
|
| SetException("startDaemon: invalid callback parameter");
|
| return false;
|
| @@ -789,6 +821,7 @@ 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));
|
| return true;
|
| @@ -1142,6 +1175,30 @@ void HostNPScriptObject::InvokeGetDaemonVersionCallback(
|
| g_npnetscape_funcs->releasevariantvalue(&version_val);
|
| }
|
|
|
| +void HostNPScriptObject::InvokeGetUsageStatsConsentCallback(
|
| + const ScopedRefNPObject& callback,
|
| + bool supported,
|
| + bool allowed,
|
| + bool set_by_policy) {
|
| + if (!plugin_message_loop_proxy_->BelongsToCurrentThread()) {
|
| + plugin_message_loop_proxy_->PostTask(
|
| + FROM_HERE, base::Bind(
|
| + &HostNPScriptObject::InvokeGetUsageStatsConsentCallback,
|
| + base::Unretained(this), callback, supported, allowed,
|
| + set_by_policy));
|
| + return;
|
| + }
|
| +
|
| + NPVariant params[3];
|
| + BOOLEAN_TO_NPVARIANT(supported, params[0]);
|
| + BOOLEAN_TO_NPVARIANT(allowed, params[1]);
|
| + BOOLEAN_TO_NPVARIANT(set_by_policy, params[2]);
|
| + InvokeAndIgnoreResult(callback.get(), params, arraysize(params));
|
| + g_npnetscape_funcs->releasevariantvalue(&(params[0]));
|
| + g_npnetscape_funcs->releasevariantvalue(&(params[1]));
|
| + g_npnetscape_funcs->releasevariantvalue(&(params[2]));
|
| +}
|
| +
|
| void HostNPScriptObject::LogDebugInfo(const std::string& message) {
|
| DCHECK(plugin_message_loop_proxy_->BelongsToCurrentThread());
|
| if (log_debug_info_func_.get()) {
|
|
|