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

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

Issue 13932020: Set the initial resolution of an RDP session to the client screen resolution if it is available. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed remoting_unittests Created 7 years, 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_instance.h" 5 #include "remoting/client/plugin/chromoting_instance.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 base::LazyInstance<scoped_refptr<base::SingleThreadTaskRunner> >::Leaky 126 base::LazyInstance<scoped_refptr<base::SingleThreadTaskRunner> >::Leaky
127 g_logging_task_runner = LAZY_INSTANCE_INITIALIZER; 127 g_logging_task_runner = LAZY_INSTANCE_INITIALIZER;
128 base::LazyInstance<base::WeakPtr<ChromotingInstance> >::Leaky 128 base::LazyInstance<base::WeakPtr<ChromotingInstance> >::Leaky
129 g_logging_instance = LAZY_INSTANCE_INITIALIZER; 129 g_logging_instance = LAZY_INSTANCE_INITIALIZER;
130 base::LazyInstance<base::Lock>::Leaky 130 base::LazyInstance<base::Lock>::Leaky
131 g_logging_lock = LAZY_INSTANCE_INITIALIZER; 131 g_logging_lock = LAZY_INSTANCE_INITIALIZER;
132 logging::LogMessageHandlerFunction g_logging_old_handler = NULL; 132 logging::LogMessageHandlerFunction g_logging_old_handler = NULL;
133 133
134 } // namespace 134 } // namespace
135 135
136 // String sent in the "hello" message to the plugin to describe features. 136 // String sent in the "hello" message to the webapp to describe features.
137 const char ChromotingInstance::kApiFeatures[] = 137 const char ChromotingInstance::kApiFeatures[] =
138 "highQualityScaling injectKeyEvent sendClipboardItem remapKey trapKey " 138 "highQualityScaling injectKeyEvent sendClipboardItem remapKey trapKey "
139 "notifyClientDimensions notifyClientResolution pauseVideo pauseAudio " 139 "notifyClientDimensions notifyClientResolution pauseVideo pauseAudio "
140 "asyncPin thirdPartyAuth"; 140 "asyncPin thirdPartyAuth";
141 141
142 const char ChromotingInstance::kRequestedCapabilities[] = "";
143 const char ChromotingInstance::kSupportedCapabilities[] = "";
144
142 bool ChromotingInstance::ParseAuthMethods(const std::string& auth_methods_str, 145 bool ChromotingInstance::ParseAuthMethods(const std::string& auth_methods_str,
143 ClientConfig* config) { 146 ClientConfig* config) {
144 std::vector<std::string> auth_methods; 147 std::vector<std::string> auth_methods;
145 base::SplitString(auth_methods_str, ',', &auth_methods); 148 base::SplitString(auth_methods_str, ',', &auth_methods);
146 for (std::vector<std::string>::iterator it = auth_methods.begin(); 149 for (std::vector<std::string>::iterator it = auth_methods.begin();
147 it != auth_methods.end(); ++it) { 150 it != auth_methods.end(); ++it) {
148 protocol::AuthenticationMethod authentication_method = 151 protocol::AuthenticationMethod authentication_method =
149 protocol::AuthenticationMethod::FromString(*it); 152 protocol::AuthenticationMethod::FromString(*it);
150 if (authentication_method.is_valid()) 153 if (authentication_method.is_valid())
151 config->authentication_methods.push_back(authentication_method); 154 config->authentication_methods.push_back(authentication_method);
(...skipping 28 matching lines...) Expand all
180 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); 183 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD);
181 184
182 // Resister this instance to handle debug log messsages. 185 // Resister this instance to handle debug log messsages.
183 RegisterLoggingInstance(); 186 RegisterLoggingInstance();
184 187
185 // Send hello message. 188 // Send hello message.
186 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue()); 189 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue());
187 data->SetInteger("apiVersion", kApiVersion); 190 data->SetInteger("apiVersion", kApiVersion);
188 data->SetString("apiFeatures", kApiFeatures); 191 data->SetString("apiFeatures", kApiFeatures);
189 data->SetInteger("apiMinVersion", kApiMinMessagingVersion); 192 data->SetInteger("apiMinVersion", kApiMinMessagingVersion);
193 data->SetString("requestedCapabilities", kRequestedCapabilities);
194 data->SetString("supportedCapabilities", kSupportedCapabilities);
195
190 PostChromotingMessage("hello", data.Pass()); 196 PostChromotingMessage("hello", data.Pass());
191 } 197 }
192 198
193 ChromotingInstance::~ChromotingInstance() { 199 ChromotingInstance::~ChromotingInstance() {
194 DCHECK(plugin_task_runner_->BelongsToCurrentThread()); 200 DCHECK(plugin_task_runner_->BelongsToCurrentThread());
195 201
196 // Unregister this instance so that debug log messages will no longer be sent 202 // Unregister this instance so that debug log messages will no longer be sent
197 // to it. This will stop all logging in all Chromoting instances. 203 // to it. This will stop all logging in all Chromoting instances.
198 UnregisterLoggingInstance(); 204 UnregisterLoggingInstance();
199 205
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 this->AsWeakPtr()); 292 this->AsWeakPtr());
287 } else { 293 } else {
288 std::string shared_secret; 294 std::string shared_secret;
289 if (!data->GetString("sharedSecret", &shared_secret)) { 295 if (!data->GetString("sharedSecret", &shared_secret)) {
290 LOG(ERROR) << "sharedSecret not specified in connect()."; 296 LOG(ERROR) << "sharedSecret not specified in connect().";
291 return; 297 return;
292 } 298 }
293 config.fetch_secret_callback = 299 config.fetch_secret_callback =
294 base::Bind(&ChromotingInstance::FetchSecretFromString, shared_secret); 300 base::Bind(&ChromotingInstance::FetchSecretFromString, shared_secret);
295 } 301 }
302
303 // Read the list of capabilities, if any.
304 if (data->HasKey("capabilities")) {
Sergey Ulanov 2013/04/18 00:34:53 Don't need this. GetString() will return false if
alexeypa (please no reviews) 2013/04/18 18:56:36 This is needed to detect the case when "capabiliti
305 if (!data->GetString("capabilities", &config.capabilities)) {
306 LOG(ERROR) << "Invalid connect() data.";
307 return;
308 }
309 }
310
296 Connect(config); 311 Connect(config);
297 } else if (method == "disconnect") { 312 } else if (method == "disconnect") {
298 Disconnect(); 313 Disconnect();
299 } else if (method == "incomingIq") { 314 } else if (method == "incomingIq") {
300 std::string iq; 315 std::string iq;
301 if (!data->GetString("iq", &iq)) { 316 if (!data->GetString("iq", &iq)) {
302 LOG(ERROR) << "Invalid onIq() data."; 317 LOG(ERROR) << "Invalid onIq() data.";
303 return; 318 return;
304 } 319 }
305 OnIncomingIq(iq); 320 OnIncomingIq(iq);
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 data->SetString("scope", scope); 482 data->SetString("scope", scope);
468 PostChromotingMessage("fetchThirdPartyToken", data.Pass()); 483 PostChromotingMessage("fetchThirdPartyToken", data.Pass());
469 } 484 }
470 485
471 void ChromotingInstance::OnConnectionReady(bool ready) { 486 void ChromotingInstance::OnConnectionReady(bool ready) {
472 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue()); 487 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue());
473 data->SetBoolean("ready", ready); 488 data->SetBoolean("ready", ready);
474 PostChromotingMessage("onConnectionReady", data.Pass()); 489 PostChromotingMessage("onConnectionReady", data.Pass());
475 } 490 }
476 491
492 void ChromotingInstance::SetCapabilities(const std::string& capabilities) {
493 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue());
494 data->SetString("capabilities", capabilities);
495 PostChromotingMessage("setCapabilities", data.Pass());
496 }
497
477 void ChromotingInstance::FetchSecretFromDialog( 498 void ChromotingInstance::FetchSecretFromDialog(
478 const protocol::SecretFetchedCallback& secret_fetched_callback) { 499 const protocol::SecretFetchedCallback& secret_fetched_callback) {
479 // Once the Session object calls this function, it won't continue the 500 // Once the Session object calls this function, it won't continue the
480 // authentication until the callback is called (or connection is canceled). 501 // authentication until the callback is called (or connection is canceled).
481 // So, it's impossible to reach this with a callback already registered. 502 // So, it's impossible to reach this with a callback already registered.
482 DCHECK(secret_fetched_callback_.is_null()); 503 DCHECK(secret_fetched_callback_.is_null());
483 secret_fetched_callback_ = secret_fetched_callback; 504 secret_fetched_callback_ = secret_fetched_callback;
484 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue()); 505 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue());
485 PostChromotingMessage("fetchPin", data.Pass()); 506 PostChromotingMessage("fetchPin", data.Pass());
486 } 507 }
(...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after
914 url_components.scheme.len); 935 url_components.scheme.len);
915 return url_scheme == kChromeExtensionUrlScheme; 936 return url_scheme == kChromeExtensionUrlScheme;
916 } 937 }
917 938
918 bool ChromotingInstance::IsConnected() { 939 bool ChromotingInstance::IsConnected() {
919 return host_connection_.get() && 940 return host_connection_.get() &&
920 (host_connection_->state() == protocol::ConnectionToHost::CONNECTED); 941 (host_connection_->state() == protocol::ConnectionToHost::CONNECTED);
921 } 942 }
922 943
923 } // namespace remoting 944 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698