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 |