Index: remoting/host/chromoting_host.cc |
diff --git a/remoting/host/chromoting_host.cc b/remoting/host/chromoting_host.cc |
index ef2ea19729cbfa0db13c4103320406a72189d06e..942e643e7c1dc35ea4bfaa15ae6b647bbcf69e19 100644 |
--- a/remoting/host/chromoting_host.cc |
+++ b/remoting/host/chromoting_host.cc |
@@ -141,6 +141,10 @@ void ChromotingHost::RemoveStatusObserver(HostStatusObserver* observer) { |
status_observers_.RemoveObserver(observer); |
} |
+void ChromotingHost::AddExtension(scoped_ptr<HostExtension> extension) { |
+ extensions_.push_back(extension.release()); |
+} |
+ |
void ChromotingHost::RejectAuthenticatingClient() { |
DCHECK(authenticating_client_); |
reject_authenticating_client_ = true; |
@@ -230,6 +234,19 @@ void ChromotingHost::OnSessionChannelsConnected(ClientSession* client) { |
OnClientConnected(client->client_jid())); |
} |
+void ChromotingHost::OnSessionClientCapabilities(ClientSession* client) { |
+ DCHECK(CalledOnValidThread()); |
+ |
+ // Create extension sessions from each registered extension for this client. |
+ for (HostExtensionList::iterator extension = extensions_.begin(); |
+ extension != extensions_.end(); ++extension) { |
+ scoped_ptr<HostExtensionSession> extension_session = |
+ (*extension)->CreateExtensionSession(client); |
+ if (extension_session) |
+ client->AddExtensionSession(extension_session.Pass()); |
+ } |
+} |
+ |
void ChromotingHost::OnSessionAuthenticationFailed(ClientSession* client) { |
DCHECK(CalledOnValidThread()); |
@@ -320,6 +337,13 @@ void ChromotingHost::OnIncomingSession( |
desktop_environment_factory_, |
max_session_duration_, |
pairing_registry_); |
+ |
+ // Registers capabilities provided by host extensions. |
+ for (HostExtensionList::iterator extension = extensions_.begin(); |
+ extension != extensions_.end(); ++extension) { |
+ client->AddHostCapabilities((*extension)->GetCapabilities()); |
+ } |
+ |
clients_.push_back(client); |
} |