| Index: remoting/client/plugin/chromoting_instance.cc
|
| diff --git a/remoting/client/plugin/chromoting_instance.cc b/remoting/client/plugin/chromoting_instance.cc
|
| index 1b44d8b300af3da94b8b4f0485b9dd336b95dfbd..e63da8a967f83fcd30b3da5b567969e2f5a87514 100644
|
| --- a/remoting/client/plugin/chromoting_instance.cc
|
| +++ b/remoting/client/plugin/chromoting_instance.cc
|
| @@ -38,7 +38,6 @@
|
| #include "remoting/base/constants.h"
|
| #include "remoting/base/util.h"
|
| #include "remoting/client/chromoting_client.h"
|
| -#include "remoting/client/client_config.h"
|
| #include "remoting/client/frame_consumer_proxy.h"
|
| #include "remoting/client/plugin/delegating_signal_strategy.h"
|
| #include "remoting/client/plugin/media_source_video_renderer.h"
|
| @@ -163,6 +162,26 @@ bool IsVisibleRow(const uint32_t* begin, const uint32_t* end) {
|
| return std::find_if(begin, end, &IsVisiblePixel) != end;
|
| }
|
|
|
| +bool ParseAuthMethods(
|
| + const std::string& auth_methods_str,
|
| + std::vector<protocol::AuthenticationMethod>* auth_methods) {
|
| + std::vector<std::string> parts;
|
| + base::SplitString(auth_methods_str, ',', &parts);
|
| + for (std::vector<std::string>::iterator it = parts.begin();
|
| + it != parts.end(); ++it) {
|
| + protocol::AuthenticationMethod authentication_method =
|
| + protocol::AuthenticationMethod::FromString(*it);
|
| + if (authentication_method.is_valid())
|
| + auth_methods->push_back(authentication_method);
|
| + }
|
| + if (auth_methods->empty()) {
|
| + LOG(ERROR) << "No valid authentication methods specified.";
|
| + return false;
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| // This flag blocks LOGs to the UI if we're already in the middle of logging
|
| // to the UI. This prevents a potential infinite loop if we encounter an error
|
| // while sending the log message to the UI.
|
| @@ -188,25 +207,6 @@ const char ChromotingInstance::kApiFeatures[] =
|
| const char ChromotingInstance::kRequestedCapabilities[] = "";
|
| const char ChromotingInstance::kSupportedCapabilities[] = "desktopShape";
|
|
|
| -bool ChromotingInstance::ParseAuthMethods(const std::string& auth_methods_str,
|
| - ClientConfig* config) {
|
| - std::vector<std::string> auth_methods;
|
| - base::SplitString(auth_methods_str, ',', &auth_methods);
|
| - for (std::vector<std::string>::iterator it = auth_methods.begin();
|
| - it != auth_methods.end(); ++it) {
|
| - protocol::AuthenticationMethod authentication_method =
|
| - protocol::AuthenticationMethod::FromString(*it);
|
| - if (authentication_method.is_valid())
|
| - config->authentication_methods.push_back(authentication_method);
|
| - }
|
| - if (config->authentication_methods.empty()) {
|
| - LOG(ERROR) << "No valid authentication methods specified.";
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| ChromotingInstance::ChromotingInstance(PP_Instance pp_instance)
|
| : pp::Instance(pp_instance),
|
| initialized_(false),
|
| @@ -537,15 +537,6 @@ protocol::CursorShapeStub* ChromotingInstance::GetCursorShapeStub() {
|
| return this;
|
| }
|
|
|
| -scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher>
|
| -ChromotingInstance::GetTokenFetcher(const std::string& host_public_key) {
|
| - return scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher>(
|
| - new TokenFetcherProxy(
|
| - base::Bind(&ChromotingInstance::FetchThirdPartyToken,
|
| - weak_factory_.GetWeakPtr()),
|
| - host_public_key));
|
| -}
|
| -
|
| void ChromotingInstance::InjectClipboardEvent(
|
| const protocol::ClipboardEvent& event) {
|
| scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue());
|
| @@ -646,42 +637,53 @@ void ChromotingInstance::OnFirstFrameReceived() {
|
| }
|
|
|
| void ChromotingInstance::HandleConnect(const base::DictionaryValue& data) {
|
| - ClientConfig config;
|
| std::string local_jid;
|
| - std::string auth_methods;
|
| - if (!data.GetString("hostJid", &config.host_jid) ||
|
| - !data.GetString("hostPublicKey", &config.host_public_key) ||
|
| + std::string host_jid;
|
| + std::string host_public_key;
|
| + std::string auth_methods_str;
|
| + std::string authentication_tag;
|
| + std::vector<protocol::AuthenticationMethod> auth_methods;
|
| + if (!data.GetString("hostJid", &host_jid) ||
|
| + !data.GetString("hostPublicKey", &host_public_key) ||
|
| !data.GetString("localJid", &local_jid) ||
|
| - !data.GetString("authenticationMethods", &auth_methods) ||
|
| - !ParseAuthMethods(auth_methods, &config) ||
|
| - !data.GetString("authenticationTag", &config.authentication_tag)) {
|
| + !data.GetString("authenticationMethods", &auth_methods_str) ||
|
| + !ParseAuthMethods(auth_methods_str, &auth_methods) ||
|
| + !data.GetString("authenticationTag", &authentication_tag)) {
|
| LOG(ERROR) << "Invalid connect() data.";
|
| return;
|
| }
|
| - data.GetString("clientPairingId", &config.client_pairing_id);
|
| - data.GetString("clientPairedSecret", &config.client_paired_secret);
|
| +
|
| + std::string client_pairing_id;
|
| + data.GetString("clientPairingId", &client_pairing_id);
|
| + std::string client_paired_secret;
|
| + data.GetString("clientPairedSecret", &client_paired_secret);
|
| +
|
| + protocol::FetchSecretCallback fetch_secret_callback;
|
| if (use_async_pin_dialog_) {
|
| - config.fetch_secret_callback =
|
| - base::Bind(&ChromotingInstance::FetchSecretFromDialog,
|
| - weak_factory_.GetWeakPtr());
|
| + fetch_secret_callback = base::Bind(
|
| + &ChromotingInstance::FetchSecretFromDialog, weak_factory_.GetWeakPtr());
|
| } else {
|
| std::string shared_secret;
|
| if (!data.GetString("sharedSecret", &shared_secret)) {
|
| LOG(ERROR) << "sharedSecret not specified in connect().";
|
| return;
|
| }
|
| - config.fetch_secret_callback =
|
| + fetch_secret_callback =
|
| base::Bind(&ChromotingInstance::FetchSecretFromString, shared_secret);
|
| }
|
|
|
| // Read the list of capabilities, if any.
|
| + std::string capabilities;
|
| if (data.HasKey("capabilities")) {
|
| - if (!data.GetString("capabilities", &config.capabilities)) {
|
| + if (!data.GetString("capabilities", &capabilities)) {
|
| LOG(ERROR) << "Invalid connect() data.";
|
| return;
|
| }
|
| }
|
|
|
| + VLOG(0) << "Connecting to " << host_jid
|
| + << ". Local jid: " << local_jid << ".";
|
| +
|
| #if defined(OS_NACL)
|
| std::string key_filter;
|
| if (!data.GetString("keyFilter", &key_filter)) {
|
| @@ -706,13 +708,6 @@ void ChromotingInstance::HandleConnect(const base::DictionaryValue& data) {
|
| #endif
|
| input_handler_.set_input_stub(normalizing_input_filter_.get());
|
|
|
| - ConnectWithConfig(config, local_jid);
|
| -}
|
| -
|
| -void ChromotingInstance::ConnectWithConfig(const ClientConfig& config,
|
| - const std::string& local_jid) {
|
| - DCHECK(plugin_task_runner_->BelongsToCurrentThread());
|
| -
|
| if (use_media_source_rendering_) {
|
| video_renderer_.reset(new MediaSourceVideoRenderer(this));
|
| } else {
|
| @@ -736,36 +731,44 @@ void ChromotingInstance::ConnectWithConfig(const ClientConfig& config,
|
| video_renderer_.reset(renderer);
|
| }
|
|
|
| - host_connection_.reset(new protocol::ConnectionToHost(true));
|
| scoped_ptr<AudioPlayer> audio_player(new PepperAudioPlayer(this));
|
| - client_.reset(new ChromotingClient(config, &context_, host_connection_.get(),
|
| - this, video_renderer_.get(),
|
| + client_.reset(new ChromotingClient(&context_, this, video_renderer_.get(),
|
| audio_player.Pass()));
|
|
|
| // Connect the input pipeline to the protocol stub & initialize components.
|
| - mouse_input_filter_.set_input_stub(host_connection_->input_stub());
|
| + mouse_input_filter_.set_input_stub(client_->input_stub());
|
| if (!plugin_view_.is_null()) {
|
| mouse_input_filter_.set_input_size(webrtc::DesktopSize(
|
| plugin_view_.GetRect().width(), plugin_view_.GetRect().height()));
|
| }
|
|
|
| - VLOG(0) << "Connecting to " << config.host_jid
|
| - << ". Local jid: " << local_jid << ".";
|
| -
|
| // Setup the signal strategy.
|
| signal_strategy_.reset(new DelegatingSignalStrategy(
|
| local_jid, base::Bind(&ChromotingInstance::SendOutgoingIq,
|
| weak_factory_.GetWeakPtr())));
|
|
|
| - scoped_ptr<cricket::HttpPortAllocatorBase> port_allocator(
|
| - PepperPortAllocator::Create(this));
|
| + // Create TransportFactory.
|
| scoped_ptr<protocol::TransportFactory> transport_factory(
|
| new protocol::LibjingleTransportFactory(
|
| - signal_strategy_.get(), port_allocator.Pass(),
|
| + signal_strategy_.get(),
|
| + PepperPortAllocator::Create(this)
|
| + .PassAs<cricket::HttpPortAllocatorBase>(),
|
| NetworkSettings(NetworkSettings::NAT_TRAVERSAL_FULL)));
|
|
|
| + // Create Authenticator.
|
| + scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher>
|
| + token_fetcher(new TokenFetcherProxy(
|
| + base::Bind(&ChromotingInstance::FetchThirdPartyToken,
|
| + weak_factory_.GetWeakPtr()),
|
| + host_public_key));
|
| + scoped_ptr<protocol::Authenticator> authenticator(
|
| + new protocol::NegotiatingClientAuthenticator(
|
| + client_pairing_id, client_paired_secret, authentication_tag,
|
| + fetch_secret_callback, token_fetcher.Pass(), auth_methods));
|
| +
|
| // Kick off the connection.
|
| - client_->Start(signal_strategy_.get(), transport_factory.Pass());
|
| + client_->Start(signal_strategy_.get(), authenticator.Pass(),
|
| + transport_factory.Pass(), host_jid, capabilities);
|
|
|
| // Start timer that periodically sends perf stats.
|
| plugin_task_runner_->PostDelayedTask(
|
| @@ -783,11 +786,9 @@ void ChromotingInstance::HandleDisconnect(const base::DictionaryValue& data) {
|
|
|
| VLOG(0) << "Disconnecting from host.";
|
|
|
| - client_.reset();
|
| -
|
| // Disconnect the input pipeline and teardown the connection.
|
| mouse_input_filter_.set_input_stub(NULL);
|
| - host_connection_.reset();
|
| + client_.reset();
|
| }
|
|
|
| void ChromotingInstance::HandleOnIncomingIq(const base::DictionaryValue& data) {
|
| @@ -867,7 +868,7 @@ void ChromotingInstance::HandleSendClipboardItem(
|
| protocol::ClipboardEvent event;
|
| event.set_mime_type(mime_type);
|
| event.set_data(item);
|
| - host_connection_->clipboard_forwarder()->InjectClipboardEvent(event);
|
| + client_->clipboard_forwarder()->InjectClipboardEvent(event);
|
| }
|
|
|
| void ChromotingInstance::HandleNotifyClientResolution(
|
| @@ -900,7 +901,7 @@ void ChromotingInstance::HandleNotifyClientResolution(
|
| client_resolution.set_dips_width((width * kDefaultDPI) / x_dpi);
|
| client_resolution.set_dips_height((height * kDefaultDPI) / y_dpi);
|
|
|
| - host_connection_->host_stub()->NotifyClientResolution(client_resolution);
|
| + client_->host_stub()->NotifyClientResolution(client_resolution);
|
| }
|
|
|
| void ChromotingInstance::HandlePauseVideo(const base::DictionaryValue& data) {
|
| @@ -928,7 +929,7 @@ void ChromotingInstance::HandleVideoControl(const base::DictionaryValue& data) {
|
| if (!IsConnected()) {
|
| return;
|
| }
|
| - host_connection_->host_stub()->ControlVideo(video_control);
|
| + client_->host_stub()->ControlVideo(video_control);
|
| }
|
|
|
| void ChromotingInstance::HandlePauseAudio(const base::DictionaryValue& data) {
|
| @@ -942,7 +943,7 @@ void ChromotingInstance::HandlePauseAudio(const base::DictionaryValue& data) {
|
| }
|
| protocol::AudioControl audio_control;
|
| audio_control.set_enable(!pause);
|
| - host_connection_->host_stub()->ControlAudio(audio_control);
|
| + client_->host_stub()->ControlAudio(audio_control);
|
| }
|
| void ChromotingInstance::HandleOnPinFetched(const base::DictionaryValue& data) {
|
| std::string pin;
|
| @@ -987,7 +988,7 @@ void ChromotingInstance::HandleRequestPairing(
|
| }
|
| protocol::PairingRequest pairing_request;
|
| pairing_request.set_client_name(client_name);
|
| - host_connection_->host_stub()->RequestPairing(pairing_request);
|
| + client_->host_stub()->RequestPairing(pairing_request);
|
| }
|
|
|
| void ChromotingInstance::HandleExtensionMessage(
|
| @@ -1005,7 +1006,7 @@ void ChromotingInstance::HandleExtensionMessage(
|
| protocol::ExtensionMessage message;
|
| message.set_type(type);
|
| message.set_data(message_data);
|
| - host_connection_->host_stub()->DeliverClientMessage(message);
|
| + client_->host_stub()->DeliverClientMessage(message);
|
| }
|
|
|
| void ChromotingInstance::HandleAllowMouseLockMessage() {
|
| @@ -1204,8 +1205,8 @@ bool ChromotingInstance::IsCallerAppOrExtension() {
|
| }
|
|
|
| bool ChromotingInstance::IsConnected() {
|
| - return host_connection_.get() &&
|
| - (host_connection_->state() == protocol::ConnectionToHost::CONNECTED);
|
| + return client_ &&
|
| + (client_->connection_state() == protocol::ConnectionToHost::CONNECTED);
|
| }
|
|
|
| void ChromotingInstance::OnMediaSourceSize(const webrtc::DesktopSize& size,
|
|
|