| 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 |