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

Side by Side Diff: remoting/client/plugin/chromoting_scriptable_object.cc

Issue 7042022: Add separate nonce version of connect call. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: combine connect calls Created 9 years, 7 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/client/plugin/chromoting_scriptable_object.h" 5 #include "remoting/client/plugin/chromoting_scriptable_object.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/stringprintf.h" 8 #include "base/stringprintf.h"
9 #include "ppapi/cpp/var.h" 9 #include "ppapi/cpp/var.h"
10 #include "remoting/client/client_config.h" 10 #include "remoting/client/client_config.h"
11 #include "remoting/client/chromoting_stats.h" 11 #include "remoting/client/chromoting_stats.h"
12 #include "remoting/client/plugin/chromoting_instance.h" 12 #include "remoting/client/plugin/chromoting_instance.h"
13 #include "remoting/client/plugin/pepper_xmpp_proxy.h" 13 #include "remoting/client/plugin/pepper_xmpp_proxy.h"
14 14
15 using pp::Var; 15 using pp::Var;
16 16
17 namespace remoting { 17 namespace remoting {
18 18
19 namespace { 19 namespace {
20 20
21 const char kConnectionInfoUpdate[] = "connectionInfoUpdate"; 21 const char kConnectionInfoUpdate[] = "connectionInfoUpdate";
22 const char kDebugInfo[] = "debugInfo"; 22 const char kDebugInfo[] = "debugInfo";
23 const char kDesktopHeight[] = "desktopHeight"; 23 const char kDesktopHeight[] = "desktopHeight";
24 const char kDesktopWidth[] = "desktopWidth"; 24 const char kDesktopWidth[] = "desktopWidth";
25 const char kDesktopSizeUpdate[] = "desktopSizeUpdate"; 25 const char kDesktopSizeUpdate[] = "desktopSizeUpdate";
26 const char kLoginChallenge[] = "loginChallenge"; 26 const char kLoginChallenge[] = "loginChallenge";
27 const char kSandboxedAttribute[] = "sandboxed";
27 const char kSendIq[] = "sendIq"; 28 const char kSendIq[] = "sendIq";
28 const char kQualityAttribute[] = "quality"; 29 const char kQualityAttribute[] = "quality";
29 const char kStatusAttribute[] = "status"; 30 const char kStatusAttribute[] = "status";
30 const char kVideoBandwidthAttribute[] = "videoBandwidth"; 31 const char kVideoBandwidthAttribute[] = "videoBandwidth";
31 const char kVideoCaptureLatencyAttribute[] = "videoCaptureLatency"; 32 const char kVideoCaptureLatencyAttribute[] = "videoCaptureLatency";
32 const char kVideoEncodeLatencyAttribute[] = "videoEncodeLatency"; 33 const char kVideoEncodeLatencyAttribute[] = "videoEncodeLatency";
33 const char kVideoDecodeLatencyAttribute[] = "videoDecodeLatency"; 34 const char kVideoDecodeLatencyAttribute[] = "videoDecodeLatency";
34 const char kVideoRenderLatencyAttribute[] = "videoRenderLatency"; 35 const char kVideoRenderLatencyAttribute[] = "videoRenderLatency";
35 const char kRoundTripLatencyAttribute[] = "roundTripLatency"; 36 const char kRoundTripLatencyAttribute[] = "roundTripLatency";
36 37
37 } // namespace 38 } // namespace
38 39
39 ChromotingScriptableObject::ChromotingScriptableObject( 40 ChromotingScriptableObject::ChromotingScriptableObject(
40 ChromotingInstance* instance) 41 ChromotingInstance* instance)
41 : instance_(instance) { 42 : instance_(instance) {
42 } 43 }
43 44
44 ChromotingScriptableObject::~ChromotingScriptableObject() { 45 ChromotingScriptableObject::~ChromotingScriptableObject() {
45 } 46 }
46 47
47 void ChromotingScriptableObject::Init() { 48 void ChromotingScriptableObject::Init() {
48 // Property addition order should match the interface description at the 49 // Property addition order should match the interface description at the
49 // top of chromoting_scriptable_object.h. 50 // top of chromoting_scriptable_object.h.
50 51
51 // Connection status. 52 // Connection status.
52 AddAttribute(kStatusAttribute, Var(STATUS_UNKNOWN)); 53 AddAttribute(kStatusAttribute, Var(STATUS_UNKNOWN));
53 54
55 // Sandbox status.
56 AddAttribute(kSandboxedAttribute, Var(true));
57
54 // Connection status values. 58 // Connection status values.
55 AddAttribute("STATUS_UNKNOWN", Var(STATUS_UNKNOWN)); 59 AddAttribute("STATUS_UNKNOWN", Var(STATUS_UNKNOWN));
56 AddAttribute("STATUS_CONNECTING", Var(STATUS_CONNECTING)); 60 AddAttribute("STATUS_CONNECTING", Var(STATUS_CONNECTING));
57 AddAttribute("STATUS_INITIALIZING", Var(STATUS_INITIALIZING)); 61 AddAttribute("STATUS_INITIALIZING", Var(STATUS_INITIALIZING));
58 AddAttribute("STATUS_CONNECTED", Var(STATUS_CONNECTED)); 62 AddAttribute("STATUS_CONNECTED", Var(STATUS_CONNECTED));
59 AddAttribute("STATUS_CLOSED", Var(STATUS_CLOSED)); 63 AddAttribute("STATUS_CLOSED", Var(STATUS_CLOSED));
60 AddAttribute("STATUS_FAILED", Var(STATUS_FAILED)); 64 AddAttribute("STATUS_FAILED", Var(STATUS_FAILED));
61 65
62 // Connection quality. 66 // Connection quality.
63 AddAttribute(kQualityAttribute, Var(QUALITY_UNKNOWN)); 67 AddAttribute(kQualityAttribute, Var(QUALITY_UNKNOWN));
(...skipping 14 matching lines...) Expand all
78 82
79 // Statistics. 83 // Statistics.
80 AddAttribute(kVideoBandwidthAttribute, Var()); 84 AddAttribute(kVideoBandwidthAttribute, Var());
81 AddAttribute(kVideoCaptureLatencyAttribute, Var()); 85 AddAttribute(kVideoCaptureLatencyAttribute, Var());
82 AddAttribute(kVideoEncodeLatencyAttribute, Var()); 86 AddAttribute(kVideoEncodeLatencyAttribute, Var());
83 AddAttribute(kVideoDecodeLatencyAttribute, Var()); 87 AddAttribute(kVideoDecodeLatencyAttribute, Var());
84 AddAttribute(kVideoRenderLatencyAttribute, Var()); 88 AddAttribute(kVideoRenderLatencyAttribute, Var());
85 AddAttribute(kRoundTripLatencyAttribute, Var()); 89 AddAttribute(kRoundTripLatencyAttribute, Var());
86 90
87 AddMethod("connect", &ChromotingScriptableObject::DoConnect); 91 AddMethod("connect", &ChromotingScriptableObject::DoConnect);
88 AddMethod("connectSandboxed",
89 &ChromotingScriptableObject::DoConnectSandboxed);
90 AddMethod("disconnect", &ChromotingScriptableObject::DoDisconnect); 92 AddMethod("disconnect", &ChromotingScriptableObject::DoDisconnect);
91 AddMethod("submitLoginInfo", &ChromotingScriptableObject::DoSubmitLogin); 93 AddMethod("submitLoginInfo", &ChromotingScriptableObject::DoSubmitLogin);
92 AddMethod("setScaleToFit", &ChromotingScriptableObject::DoSetScaleToFit); 94 AddMethod("setScaleToFit", &ChromotingScriptableObject::DoSetScaleToFit);
95 AddMethod("setSandboxed", &ChromotingScriptableObject::DoSetSandboxed);
93 AddMethod("onIq", &ChromotingScriptableObject::DoOnIq); 96 AddMethod("onIq", &ChromotingScriptableObject::DoOnIq);
94 } 97 }
95 98
96 bool ChromotingScriptableObject::HasProperty(const Var& name, Var* exception) { 99 bool ChromotingScriptableObject::HasProperty(const Var& name, Var* exception) {
97 // TODO(ajwong): Check if all these name.is_string() sentinels are required. 100 // TODO(ajwong): Check if all these name.is_string() sentinels are required.
98 if (!name.is_string()) { 101 if (!name.is_string()) {
99 *exception = Var("HasProperty expects a string for the name."); 102 *exception = Var("HasProperty expects a string for the name.");
100 return false; 103 return false;
101 } 104 }
102 105
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 323
321 void ChromotingScriptableObject::SendIq(const std::string& message_xml) { 324 void ChromotingScriptableObject::SendIq(const std::string& message_xml) {
322 Var exception; 325 Var exception;
323 Var cb = GetProperty(Var(kSendIq), &exception); 326 Var cb = GetProperty(Var(kSendIq), &exception);
324 327
325 // Var() means call the object directly as a function rather than calling 328 // Var() means call the object directly as a function rather than calling
326 // a method in the object. 329 // a method in the object.
327 cb.Call(Var(), Var(message_xml), &exception); 330 cb.Call(Var(), Var(message_xml), &exception);
328 331
329 if (!exception.is_undefined()) 332 if (!exception.is_undefined())
330 LogDebugInfo("Exception when invoking loginChallenge JS callback."); 333 LogDebugInfo("Exception when invoking sendiq JS callback.");
331 } 334 }
332 335
333 Var ChromotingScriptableObject::DoConnect(const std::vector<Var>& args, 336 Var ChromotingScriptableObject::DoConnect(const std::vector<Var>& args,
334 Var* exception) { 337 Var* exception) {
335 if (args.size() != 4) { 338 int sandboxed_index = property_names_[kSandboxedAttribute];
336 *exception = Var("Usage: connect(username, host_jid, auth_token)"); 339 bool sandboxed = properties_[sandboxed_index].attribute.AsBool();
340
341 // Parameter order is:
342 // host_jid
343 // auth_type: ACCESS_CODE or AUTHENTICATE
344 // if sandboxed:
345 // client_jid
346 // else:
347 // username (TODO remove support for non-sandboxed)
348 // xmpp_auth_token
349 // if ACCESS_CODE:
350 // access_code
351 unsigned int arg = 0;
352 if (!args[arg].is_string()) {
353 *exception = Var("The host_jid must be a string.");
354 return Var();
355 }
356 std::string host_jid = args[arg++].AsString();
357
358 if (!args[arg].is_string()) {
359 *exception = Var("The authentication type must be a string.");
360 return Var();
361 }
362 std::string auth_type = args[arg++].AsString();
363 bool use_access_code = (auth_type == "ACCESS_CODE");
364
365 std::string client_jid;
366 std::string username;
367 std::string auth_token;
368 if (sandboxed) {
369 if (!args[arg].is_string()) {
370 *exception = Var("The client_jid must be a string.");
371 return Var();
372 }
373 client_jid = args[arg++].AsString();
374 } else {
375 // TODO(garykac): Remove support for non-sandboxed connections.
376 if (!args[arg].is_string()) {
377 *exception = Var("The username must be a string.");
378 return Var();
379 }
380 username = args[arg++].AsString();
381
382 if (!args[arg].is_string()) {
383 *exception = Var("The auth_token must be a string.");
384 return Var();
385 }
386 auth_token = args[arg++].AsString();
387 }
388
389 std::string access_code;
390 if (use_access_code) {
391 if (!args[arg].is_string()) {
392 *exception = Var("The access code must be a string.");
393 return Var();
394 }
395 access_code = args[arg++].AsString();
396 }
397
398 if (args.size() != arg) {
399 *exception = Var("Too many agruments passed to connect().");
337 return Var(); 400 return Var();
338 } 401 }
339 402
340 ClientConfig config; 403 LogDebugInfo("Connecting to host.");
341 404 if (sandboxed) {
342 if (!args[0].is_string()) { 405 VLOG(1) << "client_jid: " << client_jid << ", host_jid: " << host_jid
343 *exception = Var("The username must be a string."); 406 << ", access_code: " << access_code;
344 return Var(); 407 instance_->ConnectSandboxed(client_jid, host_jid, access_code);
408 } else {
409 ClientConfig config;
410 config.host_jid = host_jid;
411 config.username = username;
412 config.auth_token = auth_token;
413 config.nonce = access_code;
414 VLOG(1) << "host_jid: " << host_jid << ", username: " << username
415 << ", access_code: " << access_code;
416 instance_->Connect(config);
345 } 417 }
346 config.username = args[0].AsString();
347
348 if (!args[1].is_string()) {
349 *exception = Var("The host_jid must be a string.");
350 return Var();
351 }
352 config.host_jid = args[1].AsString();
353
354 if (!args[2].is_string()) {
355 *exception = Var("The auth_token must be a string.");
356 return Var();
357 }
358 config.auth_token = args[2].AsString();
359
360 if (!args[3].is_string()) {
361 *exception = Var("nonce must be a string.");
362 return Var();
363 }
364 config.nonce = args[3].AsString();
365
366 LogDebugInfo("Connecting to host.");
367 instance_->Connect(config);
368 418
369 return Var(); 419 return Var();
370 } 420 }
371
372 Var ChromotingScriptableObject::DoConnectSandboxed(
373 const std::vector<Var>& args, Var* exception) {
374 if (args.size() != 3) {
375 *exception = Var("Usage: connectSandboxed(your_jid, host_jid, nonce)");
376 return Var();
377 }
378
379 std::string your_jid;
380 if (!args[0].is_string()) {
381 *exception = Var("your_jid must be a string.");
382 return Var();
383 }
384 your_jid = args[0].AsString();
385
386 std::string host_jid;
387 if (!args[1].is_string()) {
388 *exception = Var("host_jid must be a string.");
389 return Var();
390 }
391 host_jid = args[1].AsString();
392
393 std::string nonce;
394 if (!args[2].is_string()) {
395 *exception = Var("nonce must be a string.");
396 return Var();
397 }
398 nonce = args[2].AsString();
399
400 VLOG(1) << "your_jid: " << your_jid << ", host_jid: " << host_jid
401 << ", nonce: " << nonce;
402 instance_->ConnectSandboxed(your_jid, host_jid, nonce);
403
404 return Var();
405 }
406 421
407 Var ChromotingScriptableObject::DoDisconnect(const std::vector<Var>& args, 422 Var ChromotingScriptableObject::DoDisconnect(const std::vector<Var>& args,
408 Var* exception) { 423 Var* exception) {
409 LogDebugInfo("Disconnecting from host."); 424 LogDebugInfo("Disconnecting from host.");
410 425
411 instance_->Disconnect(); 426 instance_->Disconnect();
412 return Var(); 427 return Var();
413 } 428 }
414 429
415 Var ChromotingScriptableObject::DoSubmitLogin(const std::vector<Var>& args, 430 Var ChromotingScriptableObject::DoSubmitLogin(const std::vector<Var>& args,
(...skipping 30 matching lines...) Expand all
446 if (!args[0].is_bool()) { 461 if (!args[0].is_bool()) {
447 *exception = Var("scale_to_fit must be a boolean."); 462 *exception = Var("scale_to_fit must be a boolean.");
448 return Var(); 463 return Var();
449 } 464 }
450 465
451 LogDebugInfo("Setting scale-to-fit."); 466 LogDebugInfo("Setting scale-to-fit.");
452 instance_->SetScaleToFit(args[0].AsBool()); 467 instance_->SetScaleToFit(args[0].AsBool());
453 return Var(); 468 return Var();
454 } 469 }
455 470
471 Var ChromotingScriptableObject::DoSetSandboxed(const std::vector<Var>& args,
472 Var* exception) {
473 if (args.size() != 1) {
474 *exception = Var("Usage: setSandboxed(sandboxed)");
Wez 2011/05/20 22:38:59 Why do we have a method for this, rather than sett
475 return Var();
476 }
477
478 if (!args[0].is_bool()) {
479 *exception = Var("sandboxed must be a boolean.");
480 return Var();
481 }
482
483 LogDebugInfo("Setting sandboxed.");
484 int sandboxed_index = property_names_[kSandboxedAttribute];
485 properties_[sandboxed_index].attribute = args[0].AsBool();
486 return Var();
487 }
488
456 Var ChromotingScriptableObject::DoOnIq(const std::vector<Var>& args, 489 Var ChromotingScriptableObject::DoOnIq(const std::vector<Var>& args,
457 Var* exception) { 490 Var* exception) {
458 if (args.size() != 1) { 491 if (args.size() != 1) {
459 *exception = Var("Usage: onIq(response_xml)"); 492 *exception = Var("Usage: onIq(response_xml)");
460 return Var(); 493 return Var();
461 } 494 }
462 495
463 if (!args[0].is_string()) { 496 if (!args[0].is_string()) {
464 *exception = Var("response_xml must be a string."); 497 *exception = Var("response_xml must be a string.");
465 return Var(); 498 return Var();
466 } 499 }
467 500
468 xmpp_proxy_->OnIq(args[0].AsString()); 501 xmpp_proxy_->OnIq(args[0].AsString());
469 502
470 return Var(); 503 return Var();
471 } 504 }
472 505
473 } // namespace remoting 506 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698