Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(315)

Side by Side Diff: remoting/host/plugin/host_script_object.cc

Issue 23578017: Follow up cleanups for r222162. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « remoting/host/plugin/host_script_object.h ('k') | remoting/host/setup/daemon_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 1084 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 if (arg_count != 1) { 1095 if (arg_count != 1) {
1096 SetException("clearPairedClients: bad number of arguments"); 1096 SetException("clearPairedClients: bad number of arguments");
1097 return false; 1097 return false;
1098 } 1098 }
1099 1099
1100 if (!NPVARIANT_IS_OBJECT(args[0])) { 1100 if (!NPVARIANT_IS_OBJECT(args[0])) {
1101 SetException("clearPairedClients: invalid callback parameter"); 1101 SetException("clearPairedClients: invalid callback parameter");
1102 return false; 1102 return false;
1103 } 1103 }
1104 1104
1105 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0])); 1105 scoped_ptr<ScopedRefNPObject> callback_obj(
1106 new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
1106 if (pairing_registry_) { 1107 if (pairing_registry_) {
1107 pairing_registry_->ClearAllPairings( 1108 pairing_registry_->ClearAllPairings(
1108 base::Bind(&HostNPScriptObject::InvokeBooleanCallback, weak_ptr_, 1109 base::Bind(&HostNPScriptObject::InvokeBooleanCallback, weak_ptr_,
1109 callback_obj)); 1110 base::Passed(&callback_obj)));
1110 } else { 1111 } else {
1111 InvokeBooleanCallback(callback_obj, false); 1112 InvokeBooleanCallback(callback_obj.Pass(), false);
1112 } 1113 }
1113 1114
1114 return true; 1115 return true;
1115 } 1116 }
1116 1117
1117 bool HostNPScriptObject::DeletePairedClient(const NPVariant* args, 1118 bool HostNPScriptObject::DeletePairedClient(const NPVariant* args,
1118 uint32_t arg_count, 1119 uint32_t arg_count,
1119 NPVariant* result) { 1120 NPVariant* result) {
1120 if (arg_count != 2) { 1121 if (arg_count != 2) {
1121 SetException("deletePairedClient: bad number of arguments"); 1122 SetException("deletePairedClient: bad number of arguments");
1122 return false; 1123 return false;
1123 } 1124 }
1124 1125
1125 if (!NPVARIANT_IS_STRING(args[0])) { 1126 if (!NPVARIANT_IS_STRING(args[0])) {
1126 SetException("deletePairedClient: bad clientId parameter"); 1127 SetException("deletePairedClient: bad clientId parameter");
1127 return false; 1128 return false;
1128 } 1129 }
1129 1130
1130 if (!NPVARIANT_IS_OBJECT(args[1])) { 1131 if (!NPVARIANT_IS_OBJECT(args[1])) {
1131 SetException("deletePairedClient: invalid callback parameter"); 1132 SetException("deletePairedClient: invalid callback parameter");
1132 return false; 1133 return false;
1133 } 1134 }
1134 1135
1135 std::string client_id = StringFromNPVariant(args[0]); 1136 std::string client_id = StringFromNPVariant(args[0]);
1136 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[1])); 1137 scoped_ptr<ScopedRefNPObject> callback_obj(
1138 new ScopedRefNPObject(ObjectFromNPVariant(args[1])));
1137 if (pairing_registry_) { 1139 if (pairing_registry_) {
1138 pairing_registry_->DeletePairing( 1140 pairing_registry_->DeletePairing(
1139 client_id, 1141 client_id,
1140 base::Bind(&HostNPScriptObject::InvokeBooleanCallback, 1142 base::Bind(&HostNPScriptObject::InvokeBooleanCallback,
1141 weak_ptr_, callback_obj)); 1143 weak_ptr_, base::Passed(&callback_obj)));
1142 } else { 1144 } else {
1143 InvokeBooleanCallback(callback_obj, false); 1145 InvokeBooleanCallback(callback_obj.Pass(), false);
1144 } 1146 }
1145 1147
1146 return true; 1148 return true;
1147 } 1149 }
1148 1150
1149 bool HostNPScriptObject::GetHostName(const NPVariant* args, 1151 bool HostNPScriptObject::GetHostName(const NPVariant* args,
1150 uint32_t arg_count, 1152 uint32_t arg_count,
1151 NPVariant* result) { 1153 NPVariant* result) {
1152 if (arg_count != 1) { 1154 if (arg_count != 1) {
1153 SetException("getHostName: bad number of arguments"); 1155 SetException("getHostName: bad number of arguments");
1154 return false; 1156 return false;
1155 } 1157 }
1156 1158
1157 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0])); 1159 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0]));
1158 if (!callback_obj.get()) { 1160 if (!callback_obj.get()) {
1159 SetException("getHostName: invalid callback parameter"); 1161 SetException("getHostName: invalid callback parameter");
1160 return false; 1162 return false;
1161 } 1163 }
1162 1164
1163 NPVariant host_name_val = NPVariantFromString(net::GetHostName()); 1165 NPVariant host_name_val = NPVariantFromString(net::GetHostName());
1164 InvokeAndIgnoreResult(callback_obj.get(), &host_name_val, 1); 1166 InvokeAndIgnoreResult(callback_obj, &host_name_val, 1);
1165 g_npnetscape_funcs->releasevariantvalue(&host_name_val); 1167 g_npnetscape_funcs->releasevariantvalue(&host_name_val);
1166 1168
1167 return true; 1169 return true;
1168 } 1170 }
1169 1171
1170 bool HostNPScriptObject::GetPinHash(const NPVariant* args, 1172 bool HostNPScriptObject::GetPinHash(const NPVariant* args,
1171 uint32_t arg_count, 1173 uint32_t arg_count,
1172 NPVariant* result) { 1174 NPVariant* result) {
1173 if (arg_count != 3) { 1175 if (arg_count != 3) {
1174 SetException("getPinHash: bad number of arguments"); 1176 SetException("getPinHash: bad number of arguments");
(...skipping 13 matching lines...) Expand all
1188 std::string pin = StringFromNPVariant(args[1]); 1190 std::string pin = StringFromNPVariant(args[1]);
1189 1191
1190 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[2])); 1192 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[2]));
1191 if (!callback_obj.get()) { 1193 if (!callback_obj.get()) {
1192 SetException("getPinHash: invalid callback parameter"); 1194 SetException("getPinHash: invalid callback parameter");
1193 return false; 1195 return false;
1194 } 1196 }
1195 1197
1196 NPVariant pin_hash_val = NPVariantFromString( 1198 NPVariant pin_hash_val = NPVariantFromString(
1197 remoting::MakeHostPinHash(host_id, pin)); 1199 remoting::MakeHostPinHash(host_id, pin));
1198 InvokeAndIgnoreResult(callback_obj.get(), &pin_hash_val, 1); 1200 InvokeAndIgnoreResult(callback_obj, &pin_hash_val, 1);
1199 g_npnetscape_funcs->releasevariantvalue(&pin_hash_val); 1201 g_npnetscape_funcs->releasevariantvalue(&pin_hash_val);
1200 1202
1201 return true; 1203 return true;
1202 } 1204 }
1203 1205
1204 bool HostNPScriptObject::GenerateKeyPair(const NPVariant* args, 1206 bool HostNPScriptObject::GenerateKeyPair(const NPVariant* args,
1205 uint32_t arg_count, 1207 uint32_t arg_count,
1206 NPVariant* result) { 1208 NPVariant* result) {
1207 if (arg_count != 1) { 1209 if (arg_count != 1) {
1208 SetException("generateKeyPair: bad number of arguments"); 1210 SetException("generateKeyPair: bad number of arguments");
1209 return false; 1211 return false;
1210 } 1212 }
1211 1213
1212 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0])); 1214 scoped_ptr<ScopedRefNPObject> callback_obj(
1213 if (!callback_obj.get()) { 1215 new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
1216 if (!callback_obj->get()) {
1214 SetException("generateKeyPair: invalid callback parameter"); 1217 SetException("generateKeyPair: invalid callback parameter");
1215 return false; 1218 return false;
1216 } 1219 }
1217 1220
1218 // TODO(wez): HostNPScriptObject needn't be touched on worker 1221 base::Callback<void (const std::string&,
1219 // thread, so make DoGenerateKeyPair static and pass it a callback 1222 const std::string&)> wrapped_callback =
1220 // to run (crbug.com/156257). 1223 base::Bind(&HostNPScriptObject::InvokeGenerateKeyPairCallback, weak_ptr_,
1224 base::Passed(&callback_obj));
1221 worker_thread_->PostTask( 1225 worker_thread_->PostTask(
1222 FROM_HERE, base::Bind(&HostNPScriptObject::DoGenerateKeyPair, 1226 FROM_HERE, base::Bind(&HostNPScriptObject::DoGenerateKeyPair,
1223 base::Unretained(this), callback_obj)); 1227 plugin_task_runner_, wrapped_callback));
1224 return true; 1228 return true;
1225 } 1229 }
1226 1230
1227 bool HostNPScriptObject::UpdateDaemonConfig(const NPVariant* args, 1231 bool HostNPScriptObject::UpdateDaemonConfig(const NPVariant* args,
1228 uint32_t arg_count, 1232 uint32_t arg_count,
1229 NPVariant* result) { 1233 NPVariant* result) {
1230 if (arg_count != 2) { 1234 if (arg_count != 2) {
1231 SetException("updateDaemonConfig: bad number of arguments"); 1235 SetException("updateDaemonConfig: bad number of arguments");
1232 return false; 1236 return false;
1233 } 1237 }
1234 1238
1235 std::string config_str = StringFromNPVariant(args[0]); 1239 std::string config_str = StringFromNPVariant(args[0]);
1236 scoped_ptr<base::Value> config( 1240 scoped_ptr<base::Value> config(
1237 base::JSONReader::Read(config_str, base::JSON_ALLOW_TRAILING_COMMAS)); 1241 base::JSONReader::Read(config_str, base::JSON_ALLOW_TRAILING_COMMAS));
1238 if (config_str.empty() || !config.get() || 1242 if (config_str.empty() || !config.get() ||
1239 !config->IsType(base::Value::TYPE_DICTIONARY)) { 1243 !config->IsType(base::Value::TYPE_DICTIONARY)) {
1240 SetException("updateDaemonConfig: bad config parameter"); 1244 SetException("updateDaemonConfig: bad config parameter");
1241 return false; 1245 return false;
1242 } 1246 }
1243 scoped_ptr<base::DictionaryValue> config_dict( 1247 scoped_ptr<base::DictionaryValue> config_dict(
1244 reinterpret_cast<base::DictionaryValue*>(config.release())); 1248 reinterpret_cast<base::DictionaryValue*>(config.release()));
1245 1249
1246 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[1])); 1250 scoped_ptr<ScopedRefNPObject> callback_obj(
1247 if (!callback_obj.get()) { 1251 new ScopedRefNPObject(ObjectFromNPVariant(args[1])));
1252 if (!callback_obj->get()) {
1248 SetException("updateDaemonConfig: invalid callback parameter"); 1253 SetException("updateDaemonConfig: invalid callback parameter");
1249 return false; 1254 return false;
1250 } 1255 }
1251 1256
1252 if (config_dict->HasKey(kHostIdConfigPath) || 1257 if (config_dict->HasKey(kHostIdConfigPath) ||
1253 config_dict->HasKey(kXmppLoginConfigPath)) { 1258 config_dict->HasKey(kXmppLoginConfigPath)) {
1254 SetException("updateDaemonConfig: trying to update immutable config " 1259 SetException("updateDaemonConfig: trying to update immutable config "
1255 "parameters"); 1260 "parameters");
1256 return false; 1261 return false;
1257 } 1262 }
1258 1263
1259 daemon_controller_->UpdateConfig( 1264 daemon_controller_->UpdateConfig(
1260 config_dict.Pass(), 1265 config_dict.Pass(),
1261 base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, 1266 base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, weak_ptr_,
1262 base::Unretained(this), callback_obj)); 1267 base::Passed(&callback_obj)));
1263 return true; 1268 return true;
1264 } 1269 }
1265 1270
1266 bool HostNPScriptObject::GetDaemonConfig(const NPVariant* args, 1271 bool HostNPScriptObject::GetDaemonConfig(const NPVariant* args,
1267 uint32_t arg_count, 1272 uint32_t arg_count,
1268 NPVariant* result) { 1273 NPVariant* result) {
1269 if (arg_count != 1) { 1274 if (arg_count != 1) {
1270 SetException("getDaemonConfig: bad number of arguments"); 1275 SetException("getDaemonConfig: bad number of arguments");
1271 return false; 1276 return false;
1272 } 1277 }
1273 1278
1274 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0])); 1279 scoped_ptr<ScopedRefNPObject> callback_obj(
1275 if (!callback_obj.get()) { 1280 new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
1281 if (!callback_obj->get()) {
1276 SetException("getDaemonConfig: invalid callback parameter"); 1282 SetException("getDaemonConfig: invalid callback parameter");
1277 return false; 1283 return false;
1278 } 1284 }
1279 1285
1280 daemon_controller_->GetConfig( 1286 daemon_controller_->GetConfig(
1281 base::Bind(&HostNPScriptObject::InvokeGetDaemonConfigCallback, 1287 base::Bind(&HostNPScriptObject::InvokeGetDaemonConfigCallback, weak_ptr_,
1282 base::Unretained(this), callback_obj)); 1288 base::Passed(&callback_obj)));
1283
1284 return true; 1289 return true;
1285 } 1290 }
1286 1291
1287 bool HostNPScriptObject::GetDaemonVersion(const NPVariant* args, 1292 bool HostNPScriptObject::GetDaemonVersion(const NPVariant* args,
1288 uint32_t arg_count, 1293 uint32_t arg_count,
1289 NPVariant* result) { 1294 NPVariant* result) {
1290 if (arg_count != 1) { 1295 if (arg_count != 1) {
1291 SetException("getDaemonVersion: bad number of arguments"); 1296 SetException("getDaemonVersion: bad number of arguments");
1292 return false; 1297 return false;
1293 } 1298 }
1294 1299
1295 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0])); 1300 scoped_ptr<ScopedRefNPObject> callback_obj(
1296 if (!callback_obj.get()) { 1301 new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
1302 if (!callback_obj->get()) {
1297 SetException("getDaemonVersion: invalid callback parameter"); 1303 SetException("getDaemonVersion: invalid callback parameter");
1298 return false; 1304 return false;
1299 } 1305 }
1300 1306
1301 daemon_controller_->GetVersion( 1307 daemon_controller_->GetVersion(
1302 base::Bind(&HostNPScriptObject::InvokeGetDaemonVersionCallback, 1308 base::Bind(&HostNPScriptObject::InvokeGetDaemonVersionCallback, weak_ptr_,
1303 base::Unretained(this), callback_obj)); 1309 base::Passed(&callback_obj)));
1304 1310
1305 return true; 1311 return true;
1306 } 1312 }
1307 1313
1308 bool HostNPScriptObject::GetPairedClients(const NPVariant* args, 1314 bool HostNPScriptObject::GetPairedClients(const NPVariant* args,
1309 uint32_t arg_count, 1315 uint32_t arg_count,
1310 NPVariant* result) { 1316 NPVariant* result) {
1311 if (arg_count != 1) { 1317 if (arg_count != 1) {
1312 SetException("getPairedClients: bad number of arguments"); 1318 SetException("getPairedClients: bad number of arguments");
1313 return false; 1319 return false;
1314 } 1320 }
1315 1321
1316 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0])); 1322 scoped_ptr<ScopedRefNPObject> callback_obj(
1317 if (!callback_obj.get()) { 1323 new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
1324 if (!callback_obj->get()) {
1318 SetException("getPairedClients: invalid callback parameter"); 1325 SetException("getPairedClients: invalid callback parameter");
1319 return false; 1326 return false;
1320 } 1327 }
1321 1328
1322 if (pairing_registry_) { 1329 if (pairing_registry_) {
1323 pairing_registry_->GetAllPairings( 1330 pairing_registry_->GetAllPairings(
1324 base::Bind(&HostNPScriptObject::InvokeGetPairedClientsCallback, 1331 base::Bind(&HostNPScriptObject::InvokeGetPairedClientsCallback,
1325 weak_ptr_, callback_obj)); 1332 weak_ptr_, base::Passed(&callback_obj)));
1326 } else { 1333 } else {
1327 scoped_ptr<base::ListValue> no_paired_clients(new base::ListValue); 1334 scoped_ptr<base::ListValue> no_paired_clients(new base::ListValue);
1328 InvokeGetPairedClientsCallback(callback_obj, no_paired_clients.Pass()); 1335 InvokeGetPairedClientsCallback(callback_obj.Pass(),
1336 no_paired_clients.Pass());
1329 } 1337 }
1330 return true; 1338 return true;
1331 } 1339 }
1332 1340
1333 bool HostNPScriptObject::GetUsageStatsConsent(const NPVariant* args, 1341 bool HostNPScriptObject::GetUsageStatsConsent(const NPVariant* args,
1334 uint32_t arg_count, 1342 uint32_t arg_count,
1335 NPVariant* result) { 1343 NPVariant* result) {
1336 if (arg_count != 1) { 1344 if (arg_count != 1) {
1337 SetException("getUsageStatsConsent: bad number of arguments"); 1345 SetException("getUsageStatsConsent: bad number of arguments");
1338 return false; 1346 return false;
1339 } 1347 }
1340 1348
1341 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0])); 1349 scoped_ptr<ScopedRefNPObject> callback_obj(
1342 if (!callback_obj.get()) { 1350 new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
1351 if (!callback_obj->get()) {
1343 SetException("getUsageStatsConsent: invalid callback parameter"); 1352 SetException("getUsageStatsConsent: invalid callback parameter");
1344 return false; 1353 return false;
1345 } 1354 }
1346 1355
1347 daemon_controller_->GetUsageStatsConsent( 1356 daemon_controller_->GetUsageStatsConsent(
1348 base::Bind(&HostNPScriptObject::InvokeGetUsageStatsConsentCallback, 1357 base::Bind(&HostNPScriptObject::InvokeGetUsageStatsConsentCallback,
1349 base::Unretained(this), callback_obj)); 1358 weak_ptr_, base::Passed(&callback_obj)));
1350 return true; 1359 return true;
1351 } 1360 }
1352 1361
1353 bool HostNPScriptObject::StartDaemon(const NPVariant* args, 1362 bool HostNPScriptObject::StartDaemon(const NPVariant* args,
1354 uint32_t arg_count, 1363 uint32_t arg_count,
1355 NPVariant* result) { 1364 NPVariant* result) {
1356 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1365 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1357 1366
1358 if (arg_count != 3) { 1367 if (arg_count != 3) {
1359 SetException("startDaemon: bad number of arguments"); 1368 SetException("startDaemon: bad number of arguments");
1360 return false; 1369 return false;
1361 } 1370 }
1362 1371
1363 std::string config_str = StringFromNPVariant(args[0]); 1372 std::string config_str = StringFromNPVariant(args[0]);
1364 scoped_ptr<base::Value> config( 1373 scoped_ptr<base::Value> config(
1365 base::JSONReader::Read(config_str, base::JSON_ALLOW_TRAILING_COMMAS)); 1374 base::JSONReader::Read(config_str, base::JSON_ALLOW_TRAILING_COMMAS));
1366 if (config_str.empty() || !config.get() || 1375 if (config_str.empty() || !config.get() ||
1367 !config->IsType(base::Value::TYPE_DICTIONARY)) { 1376 !config->IsType(base::Value::TYPE_DICTIONARY)) {
1368 SetException("startDaemon: bad config parameter"); 1377 SetException("startDaemon: bad config parameter");
1369 return false; 1378 return false;
1370 } 1379 }
1371 scoped_ptr<base::DictionaryValue> config_dict( 1380 scoped_ptr<base::DictionaryValue> config_dict(
1372 reinterpret_cast<base::DictionaryValue*>(config.release())); 1381 reinterpret_cast<base::DictionaryValue*>(config.release()));
1373 1382
1374 if (!NPVARIANT_IS_BOOLEAN(args[1])) { 1383 if (!NPVARIANT_IS_BOOLEAN(args[1])) {
1375 SetException("startDaemon: invalid consent parameter"); 1384 SetException("startDaemon: invalid consent parameter");
1376 return false; 1385 return false;
1377 } 1386 }
1378 1387
1379 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[2])); 1388 scoped_ptr<ScopedRefNPObject> callback_obj(
1380 if (!callback_obj.get()) { 1389 new ScopedRefNPObject(ObjectFromNPVariant(args[2])));
1390 if (!callback_obj->get()) {
1381 SetException("startDaemon: invalid callback parameter"); 1391 SetException("startDaemon: invalid callback parameter");
1382 return false; 1392 return false;
1383 } 1393 }
1384 1394
1385 daemon_controller_->SetConfigAndStart( 1395 daemon_controller_->SetConfigAndStart(
1386 config_dict.Pass(), 1396 config_dict.Pass(),
1387 NPVARIANT_TO_BOOLEAN(args[1]), 1397 NPVARIANT_TO_BOOLEAN(args[1]),
1388 base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, 1398 base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, weak_ptr_,
1389 base::Unretained(this), callback_obj)); 1399 base::Passed(&callback_obj)));
1390 return true; 1400 return true;
1391 } 1401 }
1392 1402
1393 bool HostNPScriptObject::StopDaemon(const NPVariant* args, 1403 bool HostNPScriptObject::StopDaemon(const NPVariant* args,
1394 uint32_t arg_count, 1404 uint32_t arg_count,
1395 NPVariant* result) { 1405 NPVariant* result) {
1396 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1406 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1397 1407
1398 if (arg_count != 1) { 1408 if (arg_count != 1) {
1399 SetException("stopDaemon: bad number of arguments"); 1409 SetException("stopDaemon: bad number of arguments");
1400 return false; 1410 return false;
1401 } 1411 }
1402 1412
1403 ScopedRefNPObject callback_obj(ObjectFromNPVariant(args[0])); 1413 scoped_ptr<ScopedRefNPObject> callback_obj(
1404 if (!callback_obj.get()) { 1414 new ScopedRefNPObject(ObjectFromNPVariant(args[0])));
1415 if (!callback_obj->get()) {
1405 SetException("stopDaemon: invalid callback parameter"); 1416 SetException("stopDaemon: invalid callback parameter");
1406 return false; 1417 return false;
1407 } 1418 }
1408 1419
1409 daemon_controller_->Stop( 1420 daemon_controller_->Stop(
1410 base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, 1421 base::Bind(&HostNPScriptObject::InvokeAsyncResultCallback, weak_ptr_,
1411 base::Unretained(this), callback_obj)); 1422 base::Passed(&callback_obj)));
1412 return true; 1423 return true;
1413 } 1424 }
1414 1425
1415 void HostNPScriptObject::NotifyStateChanged(State state) { 1426 void HostNPScriptObject::NotifyStateChanged(State state) {
1416 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1427 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1417 1428
1418 state_ = state; 1429 state_ = state;
1419 1430
1420 if (on_state_changed_func_.get()) { 1431 if (on_state_changed_func_.get()) {
1421 NPVariant state_var; 1432 NPVariant state_var;
1422 INT32_TO_NPVARIANT(state, state_var); 1433 INT32_TO_NPVARIANT(state, state_var);
1423 InvokeAndIgnoreResult(on_state_changed_func_.get(), &state_var, 1); 1434 InvokeAndIgnoreResult(on_state_changed_func_, &state_var, 1);
1424 } 1435 }
1425 } 1436 }
1426 1437
1427 void HostNPScriptObject::NotifyNatPolicyChanged(bool nat_traversal_enabled) { 1438 void HostNPScriptObject::NotifyNatPolicyChanged(bool nat_traversal_enabled) {
1428 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1439 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1429 1440
1430 if (on_nat_traversal_policy_changed_func_.get()) { 1441 if (on_nat_traversal_policy_changed_func_.get()) {
1431 NPVariant policy; 1442 NPVariant policy;
1432 BOOLEAN_TO_NPVARIANT(nat_traversal_enabled, policy); 1443 BOOLEAN_TO_NPVARIANT(nat_traversal_enabled, policy);
1433 InvokeAndIgnoreResult(on_nat_traversal_policy_changed_func_.get(), 1444 InvokeAndIgnoreResult(on_nat_traversal_policy_changed_func_,
1434 &policy, 1); 1445 &policy, 1);
1435 } 1446 }
1436 } 1447 }
1437 1448
1438 // Stores the Access Code for the web-app to query. 1449 // Stores the Access Code for the web-app to query.
1439 void HostNPScriptObject::StoreAccessCode(const std::string& access_code, 1450 void HostNPScriptObject::StoreAccessCode(const std::string& access_code,
1440 base::TimeDelta access_code_lifetime) { 1451 base::TimeDelta access_code_lifetime) {
1441 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1452 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1442 1453
1443 access_code_ = access_code; 1454 access_code_ = access_code;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1511 std::string translation = StringFromNPVariant(np_result); 1522 std::string translation = StringFromNPVariant(np_result);
1512 g_npnetscape_funcs->releasevariantvalue(&np_result); 1523 g_npnetscape_funcs->releasevariantvalue(&np_result);
1513 if (translation.empty()) { 1524 if (translation.empty()) {
1514 LOG(ERROR) << "Missing translation for " << tag; 1525 LOG(ERROR) << "Missing translation for " << tag;
1515 return false; 1526 return false;
1516 } 1527 }
1517 *result = UTF8ToUTF16(translation); 1528 *result = UTF8ToUTF16(translation);
1518 return true; 1529 return true;
1519 } 1530 }
1520 1531
1521 void HostNPScriptObject::DoGenerateKeyPair(const ScopedRefNPObject& callback) { 1532 // static
1533 void HostNPScriptObject::DoGenerateKeyPair(
1534 const scoped_refptr<AutoThreadTaskRunner>& plugin_task_runner,
1535 const base::Callback<void (const std::string&,
1536 const std::string&)>& callback) {
1522 scoped_refptr<RsaKeyPair> key_pair = RsaKeyPair::Generate(); 1537 scoped_refptr<RsaKeyPair> key_pair = RsaKeyPair::Generate();
1523 InvokeGenerateKeyPairCallback(callback, key_pair->ToString(), 1538 plugin_task_runner->PostTask(FROM_HERE,
1524 key_pair->GetPublicKey()); 1539 base::Bind(callback, key_pair->ToString(),
1540 key_pair->GetPublicKey()));
1525 } 1541 }
1526 1542
1527 void HostNPScriptObject::InvokeGenerateKeyPairCallback( 1543 void HostNPScriptObject::InvokeGenerateKeyPairCallback(
1528 const ScopedRefNPObject& callback, 1544 scoped_ptr<ScopedRefNPObject> callback,
1529 const std::string& private_key, 1545 const std::string& private_key,
1530 const std::string& public_key) { 1546 const std::string& public_key) {
1531 if (!plugin_task_runner_->BelongsToCurrentThread()) { 1547 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1532 plugin_task_runner_->PostTask(
1533 FROM_HERE, base::Bind(
1534 &HostNPScriptObject::InvokeGenerateKeyPairCallback,
1535 weak_ptr_, callback, private_key, public_key));
1536 return;
1537 }
1538 1548
1539 NPVariant params[2]; 1549 NPVariant params[2];
1540 params[0] = NPVariantFromString(private_key); 1550 params[0] = NPVariantFromString(private_key);
1541 params[1] = NPVariantFromString(public_key); 1551 params[1] = NPVariantFromString(public_key);
1542 InvokeAndIgnoreResult(callback.get(), params, arraysize(params)); 1552 InvokeAndIgnoreResult(*callback, params, arraysize(params));
1543 g_npnetscape_funcs->releasevariantvalue(&(params[0])); 1553 g_npnetscape_funcs->releasevariantvalue(&(params[0]));
1544 g_npnetscape_funcs->releasevariantvalue(&(params[1])); 1554 g_npnetscape_funcs->releasevariantvalue(&(params[1]));
1545 } 1555 }
1546 1556
1547 void HostNPScriptObject::InvokeAsyncResultCallback( 1557 void HostNPScriptObject::InvokeAsyncResultCallback(
1548 const ScopedRefNPObject& callback, 1558 scoped_ptr<ScopedRefNPObject> callback,
1549 DaemonController::AsyncResult result) { 1559 DaemonController::AsyncResult result) {
1550 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1560 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1551 1561
1552 NPVariant result_var; 1562 NPVariant result_var;
1553 INT32_TO_NPVARIANT(static_cast<int32>(result), result_var); 1563 INT32_TO_NPVARIANT(static_cast<int32>(result), result_var);
1554 InvokeAndIgnoreResult(callback.get(), &result_var, 1); 1564 InvokeAndIgnoreResult(*callback, &result_var, 1);
1555 g_npnetscape_funcs->releasevariantvalue(&result_var); 1565 g_npnetscape_funcs->releasevariantvalue(&result_var);
1556 } 1566 }
1557 1567
1558 void HostNPScriptObject::InvokeBooleanCallback( 1568 void HostNPScriptObject::InvokeBooleanCallback(
1559 const ScopedRefNPObject& callback, bool result) { 1569 scoped_ptr<ScopedRefNPObject> callback, bool result) {
1560 if (!plugin_task_runner_->BelongsToCurrentThread()) { 1570 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1561 plugin_task_runner_->PostTask(
1562 FROM_HERE, base::Bind(
1563 &HostNPScriptObject::InvokeBooleanCallback,
1564 weak_ptr_, callback, result));
1565 return;
1566 }
1567 1571
1568 NPVariant result_var; 1572 NPVariant result_var;
1569 BOOLEAN_TO_NPVARIANT(result, result_var); 1573 BOOLEAN_TO_NPVARIANT(result, result_var);
1570 InvokeAndIgnoreResult(callback.get(), &result_var, 1); 1574 InvokeAndIgnoreResult(*callback, &result_var, 1);
1571 g_npnetscape_funcs->releasevariantvalue(&result_var); 1575 g_npnetscape_funcs->releasevariantvalue(&result_var);
1572 } 1576 }
1573 1577
1574 void HostNPScriptObject::InvokeGetDaemonConfigCallback( 1578 void HostNPScriptObject::InvokeGetDaemonConfigCallback(
1575 const ScopedRefNPObject& callback, 1579 scoped_ptr<ScopedRefNPObject> callback,
1576 scoped_ptr<base::DictionaryValue> config) { 1580 scoped_ptr<base::DictionaryValue> config) {
1577 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1581 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1578 1582
1579 // There is no easy way to create a dictionary from an NPAPI plugin 1583 // There is no easy way to create a dictionary from an NPAPI plugin
1580 // so we have to serialize the dictionary to pass it to JavaScript. 1584 // so we have to serialize the dictionary to pass it to JavaScript.
1581 std::string config_str; 1585 std::string config_str;
1582 if (config.get()) 1586 if (config.get())
1583 base::JSONWriter::Write(config.get(), &config_str); 1587 base::JSONWriter::Write(config.get(), &config_str);
1584 1588
1585 NPVariant config_val = NPVariantFromString(config_str); 1589 NPVariant config_val = NPVariantFromString(config_str);
1586 InvokeAndIgnoreResult(callback.get(), &config_val, 1); 1590 InvokeAndIgnoreResult(*callback, &config_val, 1);
1587 g_npnetscape_funcs->releasevariantvalue(&config_val); 1591 g_npnetscape_funcs->releasevariantvalue(&config_val);
1588 } 1592 }
1589 1593
1590 void HostNPScriptObject::InvokeGetDaemonVersionCallback( 1594 void HostNPScriptObject::InvokeGetDaemonVersionCallback(
1591 const ScopedRefNPObject& callback, const std::string& version) { 1595 scoped_ptr<ScopedRefNPObject> callback, const std::string& version) {
1592 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1596 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1593 1597
1594 NPVariant version_val = NPVariantFromString(version); 1598 NPVariant version_val = NPVariantFromString(version);
1595 InvokeAndIgnoreResult(callback.get(), &version_val, 1); 1599 InvokeAndIgnoreResult(*callback, &version_val, 1);
1596 g_npnetscape_funcs->releasevariantvalue(&version_val); 1600 g_npnetscape_funcs->releasevariantvalue(&version_val);
1597 } 1601 }
1598 1602
1599 void HostNPScriptObject::InvokeGetPairedClientsCallback( 1603 void HostNPScriptObject::InvokeGetPairedClientsCallback(
1600 const ScopedRefNPObject& callback, 1604 scoped_ptr<ScopedRefNPObject> callback,
1601 scoped_ptr<base::ListValue> paired_clients) { 1605 scoped_ptr<base::ListValue> paired_clients) {
1602 if (!plugin_task_runner_->BelongsToCurrentThread()) { 1606 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1603 plugin_task_runner_->PostTask(
1604 FROM_HERE, base::Bind(
1605 &HostNPScriptObject::InvokeGetPairedClientsCallback,
1606 weak_ptr_, callback, base::Passed(&paired_clients)));
1607 return;
1608 }
1609 1607
1610 std::string paired_clients_json; 1608 std::string paired_clients_json;
1611 base::JSONWriter::Write(paired_clients.get(), &paired_clients_json); 1609 base::JSONWriter::Write(paired_clients.get(), &paired_clients_json);
1612 1610
1613 NPVariant paired_clients_val = NPVariantFromString(paired_clients_json); 1611 NPVariant paired_clients_val = NPVariantFromString(paired_clients_json);
1614 InvokeAndIgnoreResult(callback.get(), &paired_clients_val, 1); 1612 InvokeAndIgnoreResult(*callback, &paired_clients_val, 1);
1615 g_npnetscape_funcs->releasevariantvalue(&paired_clients_val); 1613 g_npnetscape_funcs->releasevariantvalue(&paired_clients_val);
1616 } 1614 }
1617 1615
1618 void HostNPScriptObject::InvokeGetUsageStatsConsentCallback( 1616 void HostNPScriptObject::InvokeGetUsageStatsConsentCallback(
1619 const ScopedRefNPObject& callback, 1617 scoped_ptr<ScopedRefNPObject> callback,
1620 const DaemonController::UsageStatsConsent& consent) { 1618 const DaemonController::UsageStatsConsent& consent) {
1621 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1619 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1622 1620
1623 NPVariant params[3]; 1621 NPVariant params[3];
1624 BOOLEAN_TO_NPVARIANT(consent.supported, params[0]); 1622 BOOLEAN_TO_NPVARIANT(consent.supported, params[0]);
1625 BOOLEAN_TO_NPVARIANT(consent.allowed, params[1]); 1623 BOOLEAN_TO_NPVARIANT(consent.allowed, params[1]);
1626 BOOLEAN_TO_NPVARIANT(consent.set_by_policy, params[2]); 1624 BOOLEAN_TO_NPVARIANT(consent.set_by_policy, params[2]);
1627 InvokeAndIgnoreResult(callback.get(), params, arraysize(params)); 1625 InvokeAndIgnoreResult(*callback, params, arraysize(params));
1628 g_npnetscape_funcs->releasevariantvalue(&(params[0])); 1626 g_npnetscape_funcs->releasevariantvalue(&(params[0]));
1629 g_npnetscape_funcs->releasevariantvalue(&(params[1])); 1627 g_npnetscape_funcs->releasevariantvalue(&(params[1]));
1630 g_npnetscape_funcs->releasevariantvalue(&(params[2])); 1628 g_npnetscape_funcs->releasevariantvalue(&(params[2]));
1631 } 1629 }
1632 1630
1633 void HostNPScriptObject::LogDebugInfo(const std::string& message) { 1631 void HostNPScriptObject::LogDebugInfo(const std::string& message) {
1634 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1632 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1635 1633
1636 if (log_debug_info_func_.get()) { 1634 if (log_debug_info_func_.get()) {
1637 am_currently_logging_ = true; 1635 am_currently_logging_ = true;
1638 NPVariant log_message; 1636 NPVariant log_message;
1639 STRINGZ_TO_NPVARIANT(message.c_str(), log_message); 1637 STRINGZ_TO_NPVARIANT(message.c_str(), log_message);
1640 bool is_good = InvokeAndIgnoreResult(log_debug_info_func_.get(), 1638 bool is_good = InvokeAndIgnoreResult(log_debug_info_func_,
1641 &log_message, 1); 1639 &log_message, 1);
1642 if (!is_good) { 1640 if (!is_good) {
1643 LOG(ERROR) << "ERROR - LogDebugInfo failed\n"; 1641 LOG(ERROR) << "ERROR - LogDebugInfo failed\n";
1644 } 1642 }
1645 am_currently_logging_ = false; 1643 am_currently_logging_ = false;
1646 } 1644 }
1647 } 1645 }
1648 1646
1649 bool HostNPScriptObject::InvokeAndIgnoreResult(NPObject* func, 1647 bool HostNPScriptObject::InvokeAndIgnoreResult(const ScopedRefNPObject& func,
1650 const NPVariant* args, 1648 const NPVariant* args,
1651 uint32_t arg_count) { 1649 uint32_t arg_count) {
1652 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1650 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1653 1651
1654 NPVariant np_result; 1652 NPVariant np_result;
1655 bool is_good = g_npnetscape_funcs->invokeDefault(plugin_, func, args, 1653 bool is_good = g_npnetscape_funcs->invokeDefault(plugin_, func.get(), args,
1656 arg_count, &np_result); 1654 arg_count, &np_result);
1657 if (is_good) 1655 if (is_good)
1658 g_npnetscape_funcs->releasevariantvalue(&np_result); 1656 g_npnetscape_funcs->releasevariantvalue(&np_result);
1659 1657
1660 return is_good; 1658 return is_good;
1661 } 1659 }
1662 1660
1663 void HostNPScriptObject::SetException(const std::string& exception_string) { 1661 void HostNPScriptObject::SetException(const std::string& exception_string) {
1664 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 1662 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
1665 1663
1666 g_npnetscape_funcs->setexception(parent_, exception_string.c_str()); 1664 g_npnetscape_funcs->setexception(parent_, exception_string.c_str());
1667 LOG(INFO) << exception_string; 1665 LOG(INFO) << exception_string;
1668 } 1666 }
1669 1667
1670 } // namespace remoting 1668 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/plugin/host_script_object.h ('k') | remoting/host/setup/daemon_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698