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

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

Issue 7134023: Notify calling web-app when Host plugin becomes connected to a client. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Stop accepting connections once there is one active in Me2Mom. Created 9 years, 6 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 <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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 } 124 }
125 125
126 // Convert an NPVariant into an NSPObject. 126 // Convert an NPVariant into an NSPObject.
127 NPObject* ObjectFromNPVariant(const NPVariant& variant) { 127 NPObject* ObjectFromNPVariant(const NPVariant& variant) {
128 if (!NPVARIANT_IS_OBJECT(variant)) 128 if (!NPVARIANT_IS_OBJECT(variant))
129 return NULL; 129 return NULL;
130 return NPVARIANT_TO_OBJECT(variant); 130 return NPVARIANT_TO_OBJECT(variant);
131 } 131 }
132 132
133 // NPAPI plugin implementation for remoting host script object. 133 // NPAPI plugin implementation for remoting host script object.
134 class HostNPScriptObject { 134 class HostNPScriptObject : remoting::HostStatusObserver {
135 public: 135 public:
136 HostNPScriptObject(NPP plugin, NPObject* parent) 136 HostNPScriptObject(NPP plugin, NPObject* parent)
137 : plugin_(plugin), 137 : plugin_(plugin),
138 parent_(parent), 138 parent_(parent),
139 state_(kDisconnected), 139 state_(kDisconnected),
140 on_state_changed_func_(NULL), 140 on_state_changed_func_(NULL),
141 np_thread_id_(base::PlatformThread::CurrentId()) { 141 np_thread_id_(base::PlatformThread::CurrentId()) {
142 LOG(INFO) << "HostNPScriptObject"; 142 LOG(INFO) << "HostNPScriptObject";
143 } 143 }
144 144
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 // Disconnect. No arguments or result. 345 // Disconnect. No arguments or result.
346 bool Disconnect(const NPVariant* args, uint32_t argCount, NPVariant* result); 346 bool Disconnect(const NPVariant* args, uint32_t argCount, NPVariant* result);
347 347
348 // Call OnStateChanged handler if there is one. 348 // Call OnStateChanged handler if there is one.
349 void OnStateChanged(State state); 349 void OnStateChanged(State state);
350 350
351 // Callbacks invoked during session setup. 351 // Callbacks invoked during session setup.
352 void OnReceivedSupportID(remoting::SupportAccessVerifier* access_verifier, 352 void OnReceivedSupportID(remoting::SupportAccessVerifier* access_verifier,
353 bool success, 353 bool success,
354 const std::string& support_id); 354 const std::string& support_id);
355 void OnConnected();
356 void OnHostShutdown(); 355 void OnHostShutdown();
357 356
357 // HostStatusObserver interface.
358 virtual void OnSignallingConnected(remoting::SignalStrategy* signal_strategy,
359 const std::string& full_jid) {}
360 virtual void OnSignallingDisconnected() {}
361 virtual void OnAuthenticatedClientsChanged(int clients_connected);
362 virtual void OnShutdown() {}
363
358 // Call a JavaScript function wrapped as an NPObject. 364 // Call a JavaScript function wrapped as an NPObject.
359 // If result is non-null, the result of the call will be stored in it. 365 // If result is non-null, the result of the call will be stored in it.
360 // Caller is responsible for releasing result if they ask for it. 366 // Caller is responsible for releasing result if they ask for it.
361 static bool CallJSFunction(NPObject* func, 367 static bool CallJSFunction(NPObject* func,
362 const NPVariant* args, 368 const NPVariant* args,
363 uint32_t argCount, 369 uint32_t argCount,
364 NPVariant* result); 370 NPVariant* result);
365 371
366 // Posts a task on the main NP thread. 372 // Posts a task on the main NP thread.
367 void PostTaskToNPThread(Task* task); 373 void PostTaskToNPThread(Task* task);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 access_verifier.get()))) { 453 access_verifier.get()))) {
448 SetException("connect: RegisterSupportHostRequest::Init failed"); 454 SetException("connect: RegisterSupportHostRequest::Init failed");
449 return false; 455 return false;
450 } 456 }
451 457
452 // Create the Host. 458 // Create the Host.
453 scoped_refptr<remoting::ChromotingHost> host = 459 scoped_refptr<remoting::ChromotingHost> host =
454 remoting::ChromotingHost::Create(&host_context_, host_config, 460 remoting::ChromotingHost::Create(&host_context_, host_config,
455 access_verifier.release()); 461 access_verifier.release());
456 host->AddStatusObserver(register_request); 462 host->AddStatusObserver(register_request);
463 host->AddStatusObserver(this);
457 host->set_me2mom(true); 464 host->set_me2mom(true);
458 465
459 // Nothing went wrong, so lets save the host, config and request. 466 // Nothing went wrong, so lets save the host, config and request.
460 host_ = host; 467 host_ = host;
461 host_config_ = host_config; 468 host_config_ = host_config;
462 register_request_ = register_request; 469 register_request_ = register_request;
463 470
464 // Start the Host. 471 // Start the Host.
465 // TODO(wez): Attach to the Host for notifications of state changes. 472 // TODO(wez): Attach to the Host for notifications of state changes.
466 // It currently has no interface for that, though. 473 // It currently has no interface for that, though.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 access_verifier->OnMe2MomHostRegistered(success, support_id); 513 access_verifier->OnMe2MomHostRegistered(success, support_id);
507 514
508 // Combine the Support Id with the Host Id to make the Access Code. 515 // Combine the Support Id with the Host Id to make the Access Code.
509 // TODO(wez): Locking, anyone? 516 // TODO(wez): Locking, anyone?
510 access_code_ = support_id + "-" + access_verifier->host_secret(); 517 access_code_ = support_id + "-" + access_verifier->host_secret();
511 518
512 // Let the caller know that life is good. 519 // Let the caller know that life is good.
513 OnStateChanged(kReceivedAccessCode); 520 OnStateChanged(kReceivedAccessCode);
514 } 521 }
515 522
516 void HostNPScriptObject::OnConnected() {
517 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_);
518 OnStateChanged(kConnected);
519 }
520
521 void HostNPScriptObject::OnHostShutdown() { 523 void HostNPScriptObject::OnHostShutdown() {
522 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_); 524 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_);
523 OnStateChanged(kDisconnected); 525 OnStateChanged(kDisconnected);
524 } 526 }
525 527
528 void HostNPScriptObject::OnAuthenticatedClientsChanged(int clients_connected) {
529 CHECK_NE(base::PlatformThread::CurrentId(), np_thread_id_);
530 OnStateChanged(clients_connected ? kConnected : kDisconnected);
531 }
532
526 void HostNPScriptObject::OnStateChanged(State state) { 533 void HostNPScriptObject::OnStateChanged(State state) {
527 if (base::PlatformThread::CurrentId() != np_thread_id_) { 534 if (base::PlatformThread::CurrentId() != np_thread_id_) {
528 PostTaskToNPThread(NewRunnableMethod(this, 535 PostTaskToNPThread(NewRunnableMethod(this,
529 &HostNPScriptObject::OnStateChanged, 536 &HostNPScriptObject::OnStateChanged,
530 state)); 537 state));
531 return; 538 return;
532 } 539 }
533 state_ = state; 540 state_ = state;
534 if (on_state_changed_func_) { 541 if (on_state_changed_func_) {
535 LOG(INFO) << "Calling state changed " << state; 542 LOG(INFO) << "Calling state changed " << state;
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
947 } 954 }
948 955
949 EXPORT NPError API_CALL NP_GetValue(void* npp, 956 EXPORT NPError API_CALL NP_GetValue(void* npp,
950 NPPVariable variable, 957 NPPVariable variable,
951 void* value) { 958 void* value) {
952 return GetValue((NPP)npp, variable, value); 959 return GetValue((NPP)npp, variable, value);
953 } 960 }
954 #endif 961 #endif
955 962
956 } // extern "C" 963 } // extern "C"
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698