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

Side by Side Diff: remoting/host/host_plugin.cc

Issue 7004046: Fix use of SupportAccessVerifier in Host plugin. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Pick nits. 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
« no previous file with comments | « no previous file | no next file » | 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) 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 <stdio.h> 5 #include <stdio.h>
6 #include <string.h> 6 #include <string.h>
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 int state_; 304 int state_;
305 std::string access_code_; 305 std::string access_code_;
306 NPObject* on_state_changed_func_; 306 NPObject* on_state_changed_func_;
307 base::AtExitManager exit_manager_; 307 base::AtExitManager exit_manager_;
308 base::PlatformThreadId np_thread_id_; 308 base::PlatformThreadId np_thread_id_;
309 309
310 scoped_refptr<remoting::RegisterSupportHostRequest> register_request_; 310 scoped_refptr<remoting::RegisterSupportHostRequest> register_request_;
311 scoped_refptr<remoting::ChromotingHost> host_; 311 scoped_refptr<remoting::ChromotingHost> host_;
312 scoped_refptr<remoting::MutableHostConfig> host_config_; 312 scoped_refptr<remoting::MutableHostConfig> host_config_;
313 remoting::ChromotingHostContext host_context_; 313 remoting::ChromotingHostContext host_context_;
314 std::string host_secret_;
315 314
316 // Start connection. args are: 315 // Start connection. args are:
317 // string uid, string auth_token 316 // string uid, string auth_token
318 // No result. 317 // No result.
319 bool Connect(const NPVariant* args, uint32_t argCount, NPVariant* result); 318 bool Connect(const NPVariant* args, uint32_t argCount, NPVariant* result);
320 319
321 // Disconnect. No arguments or result. 320 // Disconnect. No arguments or result.
322 bool Disconnect(const NPVariant* args, uint32_t argCount, NPVariant* result); 321 bool Disconnect(const NPVariant* args, uint32_t argCount, NPVariant* result);
323 322
324 // Call OnStateChanged handler if there is one. 323 // Call OnStateChanged handler if there is one.
325 void OnStateChanged(State state); 324 void OnStateChanged(State state);
326 325
327 // Currently just mock methods to verify that everything is working 326 // Callbacks invoked during session setup.
328 void OnReceivedSupportID(bool success, const std::string& support_id); 327 void OnReceivedSupportID(remoting::SupportAccessVerifier* access_verifier,
328 bool success,
329 const std::string& support_id);
329 void OnConnected(); 330 void OnConnected();
330 void OnHostShutdown(); 331 void OnHostShutdown();
331 332
332 // Call a JavaScript function wrapped as an NPObject. 333 // Call a JavaScript function wrapped as an NPObject.
333 // If result is non-null, the result of the call will be stored in it. 334 // If result is non-null, the result of the call will be stored in it.
334 // Caller is responsible for releasing result if they ask for it. 335 // Caller is responsible for releasing result if they ask for it.
335 static bool CallJSFunction(NPObject* func, 336 static bool CallJSFunction(NPObject* func,
336 const NPVariant* args, 337 const NPVariant* args,
337 uint32_t argCount, 338 uint32_t argCount,
338 NPVariant* result); 339 NPVariant* result);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 host_config->SetString(remoting::kXmppLoginConfigPath, uid); 393 host_config->SetString(remoting::kXmppLoginConfigPath, uid);
393 host_config->SetString(remoting::kXmppAuthTokenConfigPath, auth_token); 394 host_config->SetString(remoting::kXmppAuthTokenConfigPath, auth_token);
394 395
395 // Create an access verifier and fetch the host secret. 396 // Create an access verifier and fetch the host secret.
396 scoped_ptr<remoting::SupportAccessVerifier> access_verifier; 397 scoped_ptr<remoting::SupportAccessVerifier> access_verifier;
397 access_verifier.reset(new remoting::SupportAccessVerifier); 398 access_verifier.reset(new remoting::SupportAccessVerifier);
398 if (!access_verifier->Init()) { 399 if (!access_verifier->Init()) {
399 SetException("connect: SupportAccessVerifier::Init failed"); 400 SetException("connect: SupportAccessVerifier::Init failed");
400 return false; 401 return false;
401 } 402 }
402 host_secret_ = access_verifier->host_secret();
403 403
404 // Generate a key pair for the Host to use. 404 // Generate a key pair for the Host to use.
405 // TODO(wez): Move this to the worker thread. 405 // TODO(wez): Move this to the worker thread.
406 remoting::HostKeyPair host_key_pair; 406 remoting::HostKeyPair host_key_pair;
407 host_key_pair.Generate(); 407 host_key_pair.Generate();
408 host_key_pair.Save(host_config); 408 host_key_pair.Save(host_config);
409 409
410 // Create the Host.
411 scoped_refptr<remoting::ChromotingHost> host =
412 remoting::ChromotingHost::Create(&host_context_, host_config,
413 access_verifier.release());
414
415 // Request registration of the host for support. 410 // Request registration of the host for support.
416 scoped_refptr<remoting::RegisterSupportHostRequest> register_request = 411 scoped_refptr<remoting::RegisterSupportHostRequest> register_request =
417 new remoting::RegisterSupportHostRequest(); 412 new remoting::RegisterSupportHostRequest();
418 if (!register_request->Init( 413 if (!register_request->Init(
419 host_config.get(), 414 host_config.get(),
420 base::Bind(&HostNPScriptObject::OnReceivedSupportID, 415 base::Bind(&HostNPScriptObject::OnReceivedSupportID,
421 base::Unretained(this)))) { 416 base::Unretained(this),
417 access_verifier.get()))) {
422 SetException("connect: RegisterSupportHostRequest::Init failed"); 418 SetException("connect: RegisterSupportHostRequest::Init failed");
423 return false; 419 return false;
424 } 420 }
421
422 // Create the Host.
423 scoped_refptr<remoting::ChromotingHost> host =
424 remoting::ChromotingHost::Create(&host_context_, host_config,
425 access_verifier.release());
425 host->AddStatusObserver(register_request); 426 host->AddStatusObserver(register_request);
426 427
428 // TODO(wez): Improve our authentication framework.
429 host->set_preauthenticated(true);
430
427 // Nothing went wrong, so lets save the host, config and request. 431 // Nothing went wrong, so lets save the host, config and request.
428 host_ = host; 432 host_ = host;
429 host_config_ = host_config; 433 host_config_ = host_config;
430 register_request_ = register_request; 434 register_request_ = register_request;
431 435
432 // Start the Host. 436 // Start the Host.
433 // TODO(wez): Attach to the Host for notifications of state changes. 437 // TODO(wez): Attach to the Host for notifications of state changes.
434 // It currently has no interface for that, though. 438 // It currently has no interface for that, though.
435 host_->Start(NewRunnableMethod(this, &HostNPScriptObject::OnHostShutdown)); 439 host_->Start(NewRunnableMethod(this, &HostNPScriptObject::OnHostShutdown));
436 440
437 OnStateChanged(kRequestedAccessCode); 441 OnStateChanged(kRequestedAccessCode);
438 return true; 442 return true;
439 } 443 }
440 444
441 bool HostNPScriptObject::Disconnect(const NPVariant* args, 445 bool HostNPScriptObject::Disconnect(const NPVariant* args,
442 uint32_t arg_count, 446 uint32_t arg_count,
443 NPVariant* result) { 447 NPVariant* result) {
444 CHECK_EQ(base::PlatformThread::CurrentId(), np_thread_id_); 448 CHECK_EQ(base::PlatformThread::CurrentId(), np_thread_id_);
445 if (arg_count != 0) { 449 if (arg_count != 0) {
446 SetException("disconnect: bad number of arguments"); 450 SetException("disconnect: bad number of arguments");
447 return false; 451 return false;
448 } 452 }
449 453
450 if (host_.get()) { 454 if (host_.get()) {
451 host_->Shutdown(); 455 host_->Shutdown();
452 host_ = NULL; 456 host_ = NULL;
453 } 457 }
454 register_request_ = NULL; 458 register_request_ = NULL;
455 host_config_ = NULL; 459 host_config_ = NULL;
456 host_secret_.clear();
457 460
458 OnStateChanged(kDisconnected); 461 OnStateChanged(kDisconnected);
459 return true; 462 return true;
460 } 463 }
461 464
462 void HostNPScriptObject::OnReceivedSupportID(bool success, 465 void HostNPScriptObject::OnReceivedSupportID(
463 const std::string& support_id) { 466 remoting::SupportAccessVerifier* access_verifier,
467 bool success,
468 const std::string& support_id) {
464 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_); 469 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_);
465 470
466 if (!success) { 471 if (!success) {
467 // TODO(wez): Replace the success/fail flag with full error reporting. 472 // TODO(wez): Replace the success/fail flag with full error reporting.
468 OnHostShutdown(); 473 OnHostShutdown();
469 return; 474 return;
470 } 475 }
471 476
472 // Combine the Support Id with the Host Id to make the Access Code 477 // Inform the AccessVerifier of our Support-Id, for authentication.
478 access_verifier->OnMe2MomHostRegistered(success, support_id);
479
480 // Combine the Support Id with the Host Id to make the Access Code.
473 // TODO(wez): Locking, anyone? 481 // TODO(wez): Locking, anyone?
474 access_code_ = support_id + "-" + host_secret_; 482 access_code_ = support_id + "-" + access_verifier->host_secret();
475 host_secret_ = std::string();
476 483
477 // Let the caller know that life is good. 484 // Let the caller know that life is good.
478 OnStateChanged(kReceivedAccessCode); 485 OnStateChanged(kReceivedAccessCode);
479 } 486 }
480 487
481 void HostNPScriptObject::OnConnected() { 488 void HostNPScriptObject::OnConnected() {
482 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_); 489 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_);
483 OnStateChanged(kConnected); 490 OnStateChanged(kConnected);
484 } 491 }
485 492
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 return STRINGIZE(HOST_PLUGIN_MIME_TYPE) ":" 871 return STRINGIZE(HOST_PLUGIN_MIME_TYPE) ":"
865 HOST_PLUGIN_NAME ":" 872 HOST_PLUGIN_NAME ":"
866 HOST_PLUGIN_DESCRIPTION; 873 HOST_PLUGIN_DESCRIPTION;
867 } 874 }
868 875
869 OSCALL NPError NP_GetValue(void* npp, NPPVariable variable, void* value) { 876 OSCALL NPError NP_GetValue(void* npp, NPPVariable variable, void* value) {
870 return GetValue((NPP)npp, variable, value); 877 return GetValue((NPP)npp, variable, value);
871 } 878 }
872 879
873 } // extern "C" 880 } // extern "C"
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698