| OLD | NEW | 
|     1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |     1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|     2 // Use of this source code is governed by a BSD-style license that can be |     2 // Use of this source code is governed by a BSD-style license that can be | 
|     3 // found in the LICENSE file. |     3 // found in the LICENSE file. | 
|     4  |     4  | 
|     5 #include "remoting/host/plugin/host_script_object.h" |     5 #include "remoting/host/plugin/host_script_object.h" | 
|     6  |     6  | 
|     7 #include "base/bind.h" |     7 #include "base/bind.h" | 
|     8 #include "base/json/json_reader.h" |     8 #include "base/json/json_reader.h" | 
|     9 #include "base/json/json_writer.h" |     9 #include "base/json/json_writer.h" | 
|    10 #include "base/message_loop.h" |    10 #include "base/message_loop.h" | 
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    47 const char* kAttrNameOnStateChanged = "onStateChanged"; |    47 const char* kAttrNameOnStateChanged = "onStateChanged"; | 
|    48 const char* kFuncNameConnect = "connect"; |    48 const char* kFuncNameConnect = "connect"; | 
|    49 const char* kFuncNameDisconnect = "disconnect"; |    49 const char* kFuncNameDisconnect = "disconnect"; | 
|    50 const char* kFuncNameLocalize = "localize"; |    50 const char* kFuncNameLocalize = "localize"; | 
|    51 const char* kFuncNameGetHostName = "getHostName"; |    51 const char* kFuncNameGetHostName = "getHostName"; | 
|    52 const char* kFuncNameGetPinHash = "getPinHash"; |    52 const char* kFuncNameGetPinHash = "getPinHash"; | 
|    53 const char* kFuncNameGenerateKeyPair = "generateKeyPair"; |    53 const char* kFuncNameGenerateKeyPair = "generateKeyPair"; | 
|    54 const char* kFuncNameUpdateDaemonConfig = "updateDaemonConfig"; |    54 const char* kFuncNameUpdateDaemonConfig = "updateDaemonConfig"; | 
|    55 const char* kFuncNameGetDaemonConfig = "getDaemonConfig"; |    55 const char* kFuncNameGetDaemonConfig = "getDaemonConfig"; | 
|    56 const char* kFuncNameGetDaemonVersion = "getDaemonVersion"; |    56 const char* kFuncNameGetDaemonVersion = "getDaemonVersion"; | 
 |    57 const char* kFuncNameGetUsageStatsConsent = "getUsageStatsConsent"; | 
|    57 const char* kFuncNameStartDaemon = "startDaemon"; |    58 const char* kFuncNameStartDaemon = "startDaemon"; | 
|    58 const char* kFuncNameStopDaemon = "stopDaemon"; |    59 const char* kFuncNameStopDaemon = "stopDaemon"; | 
|    59  |    60  | 
|    60 // States. |    61 // States. | 
|    61 const char* kAttrNameDisconnected = "DISCONNECTED"; |    62 const char* kAttrNameDisconnected = "DISCONNECTED"; | 
|    62 const char* kAttrNameStarting = "STARTING"; |    63 const char* kAttrNameStarting = "STARTING"; | 
|    63 const char* kAttrNameRequestedAccessCode = "REQUESTED_ACCESS_CODE"; |    64 const char* kAttrNameRequestedAccessCode = "REQUESTED_ACCESS_CODE"; | 
|    64 const char* kAttrNameReceivedAccessCode = "RECEIVED_ACCESS_CODE"; |    65 const char* kAttrNameReceivedAccessCode = "RECEIVED_ACCESS_CODE"; | 
|    65 const char* kAttrNameConnected = "CONNECTED"; |    66 const char* kAttrNameConnected = "CONNECTED"; | 
|    66 const char* kAttrNameDisconnecting = "DISCONNECTING"; |    67 const char* kAttrNameDisconnecting = "DISCONNECTING"; | 
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   156   CHECK_EQ(base::PlatformThread::CurrentId(), np_thread_id_); |   157   CHECK_EQ(base::PlatformThread::CurrentId(), np_thread_id_); | 
|   157   return (method_name == kFuncNameConnect || |   158   return (method_name == kFuncNameConnect || | 
|   158           method_name == kFuncNameDisconnect || |   159           method_name == kFuncNameDisconnect || | 
|   159           method_name == kFuncNameLocalize || |   160           method_name == kFuncNameLocalize || | 
|   160           method_name == kFuncNameGetHostName || |   161           method_name == kFuncNameGetHostName || | 
|   161           method_name == kFuncNameGetPinHash || |   162           method_name == kFuncNameGetPinHash || | 
|   162           method_name == kFuncNameGenerateKeyPair || |   163           method_name == kFuncNameGenerateKeyPair || | 
|   163           method_name == kFuncNameUpdateDaemonConfig || |   164           method_name == kFuncNameUpdateDaemonConfig || | 
|   164           method_name == kFuncNameGetDaemonConfig || |   165           method_name == kFuncNameGetDaemonConfig || | 
|   165           method_name == kFuncNameGetDaemonVersion || |   166           method_name == kFuncNameGetDaemonVersion || | 
 |   167           method_name == kFuncNameGetUsageStatsConsent || | 
|   166           method_name == kFuncNameStartDaemon || |   168           method_name == kFuncNameStartDaemon || | 
|   167           method_name == kFuncNameStopDaemon); |   169           method_name == kFuncNameStopDaemon); | 
|   168 } |   170 } | 
|   169  |   171  | 
|   170 bool HostNPScriptObject::InvokeDefault(const NPVariant* args, |   172 bool HostNPScriptObject::InvokeDefault(const NPVariant* args, | 
|   171                                        uint32_t arg_count, |   173                                        uint32_t arg_count, | 
|   172                                        NPVariant* result) { |   174                                        NPVariant* result) { | 
|   173   VLOG(2) << "InvokeDefault"; |   175   VLOG(2) << "InvokeDefault"; | 
|   174   CHECK_EQ(base::PlatformThread::CurrentId(), np_thread_id_); |   176   CHECK_EQ(base::PlatformThread::CurrentId(), np_thread_id_); | 
|   175   SetException("exception during default invocation"); |   177   SetException("exception during default invocation"); | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
|   193   } else if (method_name == kFuncNameGetPinHash) { |   195   } else if (method_name == kFuncNameGetPinHash) { | 
|   194     return GetPinHash(args, arg_count, result); |   196     return GetPinHash(args, arg_count, result); | 
|   195   } else if (method_name == kFuncNameGenerateKeyPair) { |   197   } else if (method_name == kFuncNameGenerateKeyPair) { | 
|   196     return GenerateKeyPair(args, arg_count, result); |   198     return GenerateKeyPair(args, arg_count, result); | 
|   197   } else if (method_name == kFuncNameUpdateDaemonConfig) { |   199   } else if (method_name == kFuncNameUpdateDaemonConfig) { | 
|   198     return UpdateDaemonConfig(args, arg_count, result); |   200     return UpdateDaemonConfig(args, arg_count, result); | 
|   199   } else if (method_name == kFuncNameGetDaemonConfig) { |   201   } else if (method_name == kFuncNameGetDaemonConfig) { | 
|   200     return GetDaemonConfig(args, arg_count, result); |   202     return GetDaemonConfig(args, arg_count, result); | 
|   201   } else if (method_name == kFuncNameGetDaemonVersion) { |   203   } else if (method_name == kFuncNameGetDaemonVersion) { | 
|   202     return GetDaemonVersion(args, arg_count, result); |   204     return GetDaemonVersion(args, arg_count, result); | 
 |   205   } else if (method_name == kFuncNameGetUsageStatsConsent) { | 
 |   206     return GetUsageStatsConsent(args, arg_count, result); | 
|   203   } else if (method_name == kFuncNameStartDaemon) { |   207   } else if (method_name == kFuncNameStartDaemon) { | 
|   204     return StartDaemon(args, arg_count, result); |   208     return StartDaemon(args, arg_count, result); | 
|   205   } else if (method_name == kFuncNameStopDaemon) { |   209   } else if (method_name == kFuncNameStopDaemon) { | 
|   206     return StopDaemon(args, arg_count, result); |   210     return StopDaemon(args, arg_count, result); | 
|   207   } else { |   211   } else { | 
|   208     SetException("Invoke: unknown method " + method_name); |   212     SetException("Invoke: unknown method " + method_name); | 
|   209     return false; |   213     return false; | 
|   210   } |   214   } | 
|   211 } |   215 } | 
|   212  |   216  | 
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   366     kAttrNameError, |   370     kAttrNameError, | 
|   367     kFuncNameConnect, |   371     kFuncNameConnect, | 
|   368     kFuncNameDisconnect, |   372     kFuncNameDisconnect, | 
|   369     kFuncNameLocalize, |   373     kFuncNameLocalize, | 
|   370     kFuncNameGetHostName, |   374     kFuncNameGetHostName, | 
|   371     kFuncNameGetPinHash, |   375     kFuncNameGetPinHash, | 
|   372     kFuncNameGenerateKeyPair, |   376     kFuncNameGenerateKeyPair, | 
|   373     kFuncNameUpdateDaemonConfig, |   377     kFuncNameUpdateDaemonConfig, | 
|   374     kFuncNameGetDaemonConfig, |   378     kFuncNameGetDaemonConfig, | 
|   375     kFuncNameGetDaemonVersion, |   379     kFuncNameGetDaemonVersion, | 
 |   380     kFuncNameGetUsageStatsConsent, | 
|   376     kFuncNameStartDaemon, |   381     kFuncNameStartDaemon, | 
|   377     kFuncNameStopDaemon |   382     kFuncNameStopDaemon | 
|   378   }; |   383   }; | 
|   379   for (size_t i = 0; i < arraysize(entries); ++i) { |   384   for (size_t i = 0; i < arraysize(entries); ++i) { | 
|   380     values->push_back(entries[i]); |   385     values->push_back(entries[i]); | 
|   381   } |   386   } | 
|   382   return true; |   387   return true; | 
|   383 } |   388 } | 
|   384  |   389  | 
|   385 void HostNPScriptObject::OnAccessDenied(const std::string& jid) { |   390 void HostNPScriptObject::OnAccessDenied(const std::string& jid) { | 
| (...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   755  |   760  | 
|   756   // We control lifetime of the |daemon_controller_| so it's safe to |   761   // We control lifetime of the |daemon_controller_| so it's safe to | 
|   757   // use base::Unretained() here. |   762   // use base::Unretained() here. | 
|   758   daemon_controller_->GetVersion( |   763   daemon_controller_->GetVersion( | 
|   759       base::Bind(&HostNPScriptObject::InvokeGetDaemonVersionCallback, |   764       base::Bind(&HostNPScriptObject::InvokeGetDaemonVersionCallback, | 
|   760                  base::Unretained(this), callback_obj)); |   765                  base::Unretained(this), callback_obj)); | 
|   761  |   766  | 
|   762   return true; |   767   return true; | 
|   763 } |   768 } | 
|   764  |   769  | 
 |   770 bool HostNPScriptObject::GetUsageStatsConsent(const NPVariant* args, | 
 |   771                                               uint32_t arg_count, | 
 |   772                                               NPVariant* result) { | 
 |   773   if (arg_count != 1) { | 
 |   774     SetException("getUsageStatsConsent: bad number of arguments"); | 
 |   775     return false; | 
 |   776   } | 
 |   777  | 
 |   778   ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0])); | 
 |   779   if (!callback_obj.get()) { | 
 |   780     SetException("getUsageStatsConsent: invalid callback parameter"); | 
 |   781     return false; | 
 |   782   } | 
 |   783  | 
 |   784   // We control lifetime of the |daemon_controller_| so it's safe to | 
 |   785   // use base::Unretained() here. | 
 |   786   daemon_controller_->GetUsageStatsConsent( | 
 |   787       base::Bind(&HostNPScriptObject::InvokeGetUsageStatsConsentCallback, | 
 |   788                  base::Unretained(this), callback_obj)); | 
 |   789   return true; | 
 |   790 } | 
 |   791  | 
|   765 bool HostNPScriptObject::StartDaemon(const NPVariant* args, |   792 bool HostNPScriptObject::StartDaemon(const NPVariant* args, | 
|   766                                      uint32_t arg_count, |   793                                      uint32_t arg_count, | 
|   767                                      NPVariant* result) { |   794                                      NPVariant* result) { | 
|   768   if (arg_count != 2) { |   795   if (arg_count != 3) { | 
|   769     SetException("startDaemon: bad number of arguments"); |   796     SetException("startDaemon: bad number of arguments"); | 
|   770     return false; |   797     return false; | 
|   771   } |   798   } | 
|   772  |   799  | 
|   773   std::string config_str = StringFromNPVariant(args[0]); |   800   std::string config_str = StringFromNPVariant(args[0]); | 
|   774   scoped_ptr<base::Value> config( |   801   scoped_ptr<base::Value> config( | 
|   775       base::JSONReader::Read(config_str, base::JSON_ALLOW_TRAILING_COMMAS)); |   802       base::JSONReader::Read(config_str, base::JSON_ALLOW_TRAILING_COMMAS)); | 
|   776   if (config_str.empty() || !config.get() || |   803   if (config_str.empty() || !config.get() || | 
|   777       !config->IsType(base::Value::TYPE_DICTIONARY)) { |   804       !config->IsType(base::Value::TYPE_DICTIONARY)) { | 
|   778     SetException("updateDaemonConfig: bad config parameter"); |   805     SetException("startDaemon: bad config parameter"); | 
|   779     return false; |   806     return false; | 
|   780   } |   807   } | 
|   781   scoped_ptr<base::DictionaryValue> config_dict( |   808   scoped_ptr<base::DictionaryValue> config_dict( | 
|   782       reinterpret_cast<base::DictionaryValue*>(config.release())); |   809       reinterpret_cast<base::DictionaryValue*>(config.release())); | 
|   783  |   810  | 
|   784   ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[1])); |   811   if (!NPVARIANT_IS_BOOLEAN(args[1])) { | 
 |   812     SetException("startDaemon: invalid consent parameter"); | 
 |   813     return false; | 
 |   814   } | 
 |   815  | 
 |   816   ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[2])); | 
|   785   if (!callback_obj.get()) { |   817   if (!callback_obj.get()) { | 
|   786     SetException("startDaemon: invalid callback parameter"); |   818     SetException("startDaemon: invalid callback parameter"); | 
|   787     return false; |   819     return false; | 
|   788   } |   820   } | 
|   789  |   821  | 
|   790   daemon_controller_->SetConfigAndStart( |   822   daemon_controller_->SetConfigAndStart( | 
|   791       config_dict.Pass(), |   823       config_dict.Pass(), | 
 |   824       NPVARIANT_TO_BOOLEAN(args[1]), | 
|   792       base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, |   825       base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, | 
|   793                  base::Unretained(this), callback_obj)); |   826                  base::Unretained(this), callback_obj)); | 
|   794   return true; |   827   return true; | 
|   795 } |   828 } | 
|   796  |   829  | 
|   797 bool HostNPScriptObject::StopDaemon(const NPVariant* args, |   830 bool HostNPScriptObject::StopDaemon(const NPVariant* args, | 
|   798                                     uint32_t arg_count, |   831                                     uint32_t arg_count, | 
|   799                                     NPVariant* result) { |   832                                     NPVariant* result) { | 
|   800   if (arg_count != 1) { |   833   if (arg_count != 1) { | 
|   801     SetException("stopDaemon: bad number of arguments"); |   834     SetException("stopDaemon: bad number of arguments"); | 
| (...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1135             &HostNPScriptObject::InvokeGetDaemonVersionCallback, |  1168             &HostNPScriptObject::InvokeGetDaemonVersionCallback, | 
|  1136             base::Unretained(this), callback, version)); |  1169             base::Unretained(this), callback, version)); | 
|  1137     return; |  1170     return; | 
|  1138   } |  1171   } | 
|  1139  |  1172  | 
|  1140   NPVariant version_val = NPVariantFromString(version); |  1173   NPVariant version_val = NPVariantFromString(version); | 
|  1141   InvokeAndIgnoreResult(callback.get(), &version_val, 1); |  1174   InvokeAndIgnoreResult(callback.get(), &version_val, 1); | 
|  1142   g_npnetscape_funcs->releasevariantvalue(&version_val); |  1175   g_npnetscape_funcs->releasevariantvalue(&version_val); | 
|  1143 } |  1176 } | 
|  1144  |  1177  | 
 |  1178 void HostNPScriptObject::InvokeGetUsageStatsConsentCallback( | 
 |  1179     const ScopedRefNPObject& callback, | 
 |  1180     bool supported, | 
 |  1181     bool allowed, | 
 |  1182     bool set_by_policy) { | 
 |  1183   if (!plugin_message_loop_proxy_->BelongsToCurrentThread()) { | 
 |  1184     plugin_message_loop_proxy_->PostTask( | 
 |  1185         FROM_HERE, base::Bind( | 
 |  1186             &HostNPScriptObject::InvokeGetUsageStatsConsentCallback, | 
 |  1187             base::Unretained(this), callback, supported, allowed, | 
 |  1188             set_by_policy)); | 
 |  1189     return; | 
 |  1190   } | 
 |  1191  | 
 |  1192   NPVariant params[3]; | 
 |  1193   BOOLEAN_TO_NPVARIANT(supported, params[0]); | 
 |  1194   BOOLEAN_TO_NPVARIANT(allowed, params[1]); | 
 |  1195   BOOLEAN_TO_NPVARIANT(set_by_policy, params[2]); | 
 |  1196   InvokeAndIgnoreResult(callback.get(), params, arraysize(params)); | 
 |  1197   g_npnetscape_funcs->releasevariantvalue(&(params[0])); | 
 |  1198   g_npnetscape_funcs->releasevariantvalue(&(params[1])); | 
 |  1199   g_npnetscape_funcs->releasevariantvalue(&(params[2])); | 
 |  1200 } | 
 |  1201  | 
|  1145 void HostNPScriptObject::LogDebugInfo(const std::string& message) { |  1202 void HostNPScriptObject::LogDebugInfo(const std::string& message) { | 
|  1146   DCHECK(plugin_message_loop_proxy_->BelongsToCurrentThread()); |  1203   DCHECK(plugin_message_loop_proxy_->BelongsToCurrentThread()); | 
|  1147   if (log_debug_info_func_.get()) { |  1204   if (log_debug_info_func_.get()) { | 
|  1148     am_currently_logging_ = true; |  1205     am_currently_logging_ = true; | 
|  1149     NPVariant log_message; |  1206     NPVariant log_message; | 
|  1150     STRINGZ_TO_NPVARIANT(message.c_str(), log_message); |  1207     STRINGZ_TO_NPVARIANT(message.c_str(), log_message); | 
|  1151     bool is_good = InvokeAndIgnoreResult(log_debug_info_func_.get(), |  1208     bool is_good = InvokeAndIgnoreResult(log_debug_info_func_.get(), | 
|  1152                                          &log_message, 1); |  1209                                          &log_message, 1); | 
|  1153     if (!is_good) { |  1210     if (!is_good) { | 
|  1154       LOG(ERROR) << "ERROR - LogDebugInfo failed\n"; |  1211       LOG(ERROR) << "ERROR - LogDebugInfo failed\n"; | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
|  1169   return is_good; |  1226   return is_good; | 
|  1170 } |  1227 } | 
|  1171  |  1228  | 
|  1172 void HostNPScriptObject::SetException(const std::string& exception_string) { |  1229 void HostNPScriptObject::SetException(const std::string& exception_string) { | 
|  1173   DCHECK(plugin_message_loop_proxy_->BelongsToCurrentThread()); |  1230   DCHECK(plugin_message_loop_proxy_->BelongsToCurrentThread()); | 
|  1174   g_npnetscape_funcs->setexception(parent_, exception_string.c_str()); |  1231   g_npnetscape_funcs->setexception(parent_, exception_string.c_str()); | 
|  1175   LOG(INFO) << exception_string; |  1232   LOG(INFO) << exception_string; | 
|  1176 } |  1233 } | 
|  1177  |  1234  | 
|  1178 }  // namespace remoting |  1235 }  // namespace remoting | 
| OLD | NEW |