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

Side by Side Diff: remoting/client/jni/chromoting_jni_instance.cc

Issue 384523003: Cleanups in ChromotingClient (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/jni/chromoting_jni_instance.h" 5 #include "remoting/client/jni/chromoting_jni_instance.h"
6 6
7 #include <android/log.h> 7 #include <android/log.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "jingle/glue/thread_wrapper.h" 11 #include "jingle/glue/thread_wrapper.h"
12 #include "net/socket/client_socket_factory.h" 12 #include "net/socket/client_socket_factory.h"
13 #include "remoting/base/service_urls.h" 13 #include "remoting/base/service_urls.h"
14 #include "remoting/client/audio_player.h" 14 #include "remoting/client/audio_player.h"
15 #include "remoting/client/client_status_logger.h" 15 #include "remoting/client/client_status_logger.h"
16 #include "remoting/client/jni/android_keymap.h" 16 #include "remoting/client/jni/android_keymap.h"
17 #include "remoting/client/jni/chromoting_jni_runtime.h" 17 #include "remoting/client/jni/chromoting_jni_runtime.h"
18 #include "remoting/client/software_video_renderer.h" 18 #include "remoting/client/software_video_renderer.h"
19 #include "remoting/client/token_fetcher_proxy.h" 19 #include "remoting/client/token_fetcher_proxy.h"
20 #include "remoting/jingle_glue/chromium_port_allocator.h" 20 #include "remoting/jingle_glue/chromium_port_allocator.h"
21 #include "remoting/jingle_glue/chromium_socket_factory.h" 21 #include "remoting/jingle_glue/chromium_socket_factory.h"
22 #include "remoting/jingle_glue/network_settings.h" 22 #include "remoting/jingle_glue/network_settings.h"
23 #include "remoting/jingle_glue/server_log_entry.h" 23 #include "remoting/jingle_glue/server_log_entry.h"
24 #include "remoting/protocol/host_stub.h" 24 #include "remoting/protocol/host_stub.h"
25 #include "remoting/protocol/libjingle_transport_factory.h" 25 #include "remoting/protocol/libjingle_transport_factory.h"
26 #include "remoting/protocol/negotiating_client_authenticator.h"
26 27
27 namespace remoting { 28 namespace remoting {
28 29
29 namespace { 30 namespace {
30 31
31 // TODO(solb) Move into location shared with client plugin. 32 // TODO(solb) Move into location shared with client plugin.
32 const char* const kXmppServer = "talk.google.com"; 33 const char* const kXmppServer = "talk.google.com";
33 const int kXmppPort = 5222; 34 const int kXmppPort = 5222;
34 const bool kXmppUseTls = true; 35 const bool kXmppUseTls = true;
35 36
36 // Interval at which to log performance statistics, if enabled. 37 // Interval at which to log performance statistics, if enabled.
37 const int kPerfStatsIntervalMs = 60000; 38 const int kPerfStatsIntervalMs = 60000;
38 39
39 } 40 }
40 41
41 ChromotingJniInstance::ChromotingJniInstance(ChromotingJniRuntime* jni_runtime, 42 ChromotingJniInstance::ChromotingJniInstance(ChromotingJniRuntime* jni_runtime,
42 const char* username, 43 const char* username,
43 const char* auth_token, 44 const char* auth_token,
44 const char* host_jid, 45 const char* host_jid,
45 const char* host_id, 46 const char* host_id,
46 const char* host_pubkey, 47 const char* host_pubkey,
47 const char* pairing_id, 48 const char* pairing_id,
48 const char* pairing_secret) 49 const char* pairing_secret)
49 : jni_runtime_(jni_runtime), 50 : jni_runtime_(jni_runtime),
50 host_id_(host_id), 51 host_id_(host_id),
52 host_jid_(host_jid),
51 create_pairing_(false), 53 create_pairing_(false),
52 stats_logging_enabled_(false), 54 stats_logging_enabled_(false),
53 weak_factory_(this) { 55 weak_factory_(this) {
54 DCHECK(jni_runtime_->ui_task_runner()->BelongsToCurrentThread()); 56 DCHECK(jni_runtime_->ui_task_runner()->BelongsToCurrentThread());
55 57
56 // Intialize XMPP config. 58 // Intialize XMPP config.
57 xmpp_config_.host = kXmppServer; 59 xmpp_config_.host = kXmppServer;
58 xmpp_config_.port = kXmppPort; 60 xmpp_config_.port = kXmppPort;
59 xmpp_config_.use_tls = kXmppUseTls; 61 xmpp_config_.use_tls = kXmppUseTls;
60 xmpp_config_.username = username; 62 xmpp_config_.username = username;
61 xmpp_config_.auth_token = auth_token; 63 xmpp_config_.auth_token = auth_token;
62 xmpp_config_.auth_service = "oauth2"; 64 xmpp_config_.auth_service = "oauth2";
63 65
64 // Initialize ClientConfig. 66 // Initialize |authenticator_|.
65 client_config_.host_jid = host_jid; 67 scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher>
66 client_config_.host_public_key = host_pubkey; 68 token_fetcher(new TokenFetcherProxy(
69 base::Bind(&ChromotingJniInstance::FetchThirdPartyToken,
70 weak_factory_.GetWeakPtr()),
71 host_pubkey));
67 72
68 client_config_.fetch_secret_callback = 73 std::vector<protocol::AuthenticationMethod> auth_methods;
69 base::Bind(&ChromotingJniInstance::FetchSecret, this); 74 auth_methods.push_back(protocol::AuthenticationMethod::Spake2Pair());
70 client_config_.authentication_tag = host_id_; 75 auth_methods.push_back(protocol::AuthenticationMethod::Spake2(
76 protocol::AuthenticationMethod::HMAC_SHA256));
77 auth_methods.push_back(protocol::AuthenticationMethod::Spake2(
78 protocol::AuthenticationMethod::NONE));
71 79
72 client_config_.client_pairing_id = pairing_id; 80 authenticator_.reset(new protocol::NegotiatingClientAuthenticator(
73 client_config_.client_paired_secret = pairing_secret; 81 pairing_id, pairing_secret, host_id_,
74 82 base::Bind(&ChromotingJniInstance::FetchSecret, this),
75 client_config_.authentication_methods.push_back( 83 token_fetcher.Pass(), auth_methods));
76 protocol::AuthenticationMethod::FromString("spake2_pair"));
77 client_config_.authentication_methods.push_back(
78 protocol::AuthenticationMethod::FromString("spake2_hmac"));
79 client_config_.authentication_methods.push_back(
80 protocol::AuthenticationMethod::FromString("spake2_plain"));
81 84
82 // Post a task to start connection 85 // Post a task to start connection
83 jni_runtime_->display_task_runner()->PostTask( 86 jni_runtime_->display_task_runner()->PostTask(
84 FROM_HERE, 87 FROM_HERE,
85 base::Bind(&ChromotingJniInstance::ConnectToHostOnDisplayThread, 88 base::Bind(&ChromotingJniInstance::ConnectToHostOnDisplayThread,
86 this)); 89 this));
87 } 90 }
88 91
89 ChromotingJniInstance::~ChromotingJniInstance() {} 92 ChromotingJniInstance::~ChromotingJniInstance() {}
90 93
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 return; 189 return;
187 } 190 }
188 191
189 protocol::MouseEvent event; 192 protocol::MouseEvent event;
190 event.set_x(x); 193 event.set_x(x);
191 event.set_y(y); 194 event.set_y(y);
192 event.set_button(button); 195 event.set_button(button);
193 if (button != protocol::MouseEvent::BUTTON_UNDEFINED) 196 if (button != protocol::MouseEvent::BUTTON_UNDEFINED)
194 event.set_button_down(button_down); 197 event.set_button_down(button_down);
195 198
196 connection_->input_stub()->InjectMouseEvent(event); 199 client_->input_stub()->InjectMouseEvent(event);
197 } 200 }
198 201
199 void ChromotingJniInstance::SendMouseWheelEvent(int delta_x, int delta_y) { 202 void ChromotingJniInstance::SendMouseWheelEvent(int delta_x, int delta_y) {
200 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) { 203 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) {
201 jni_runtime_->network_task_runner()->PostTask( 204 jni_runtime_->network_task_runner()->PostTask(
202 FROM_HERE, 205 FROM_HERE,
203 base::Bind(&ChromotingJniInstance::SendMouseWheelEvent, this, 206 base::Bind(&ChromotingJniInstance::SendMouseWheelEvent, this,
204 delta_x, delta_y)); 207 delta_x, delta_y));
205 return; 208 return;
206 } 209 }
207 210
208 protocol::MouseEvent event; 211 protocol::MouseEvent event;
209 event.set_wheel_delta_x(delta_x); 212 event.set_wheel_delta_x(delta_x);
210 event.set_wheel_delta_y(delta_y); 213 event.set_wheel_delta_y(delta_y);
211 connection_->input_stub()->InjectMouseEvent(event); 214 client_->input_stub()->InjectMouseEvent(event);
212 } 215 }
213 216
214 bool ChromotingJniInstance::SendKeyEvent(int key_code, bool key_down) { 217 bool ChromotingJniInstance::SendKeyEvent(int key_code, bool key_down) {
215 uint32 usb_key_code = AndroidKeycodeToUsbKeycode(key_code); 218 uint32 usb_key_code = AndroidKeycodeToUsbKeycode(key_code);
216 if (!usb_key_code) { 219 if (!usb_key_code) {
217 LOG(WARNING) << "Ignoring unknown keycode: " << key_code; 220 LOG(WARNING) << "Ignoring unknown keycode: " << key_code;
218 return false; 221 return false;
219 } 222 }
220 223
221 SendKeyEventInternal(usb_key_code, key_down); 224 SendKeyEventInternal(usb_key_code, key_down);
222 return true; 225 return true;
223 } 226 }
224 227
225 void ChromotingJniInstance::SendTextEvent(const std::string& text) { 228 void ChromotingJniInstance::SendTextEvent(const std::string& text) {
226 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) { 229 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) {
227 jni_runtime_->network_task_runner()->PostTask( 230 jni_runtime_->network_task_runner()->PostTask(
228 FROM_HERE, 231 FROM_HERE,
229 base::Bind(&ChromotingJniInstance::SendTextEvent, this, text)); 232 base::Bind(&ChromotingJniInstance::SendTextEvent, this, text));
230 return; 233 return;
231 } 234 }
232 235
233 protocol::TextEvent event; 236 protocol::TextEvent event;
234 event.set_text(text); 237 event.set_text(text);
235 connection_->input_stub()->InjectTextEvent(event); 238 client_->input_stub()->InjectTextEvent(event);
236 } 239 }
237 240
238 void ChromotingJniInstance::RecordPaintTime(int64 paint_time_ms) { 241 void ChromotingJniInstance::RecordPaintTime(int64 paint_time_ms) {
239 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) { 242 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) {
240 jni_runtime_->network_task_runner()->PostTask( 243 jni_runtime_->network_task_runner()->PostTask(
241 FROM_HERE, base::Bind(&ChromotingJniInstance::RecordPaintTime, this, 244 FROM_HERE, base::Bind(&ChromotingJniInstance::RecordPaintTime, this,
242 paint_time_ms)); 245 paint_time_ms));
243 return; 246 return;
244 } 247 }
245 248
246 if (stats_logging_enabled_) 249 if (stats_logging_enabled_)
247 video_renderer_->GetStats()->video_paint_ms()->Record(paint_time_ms); 250 video_renderer_->GetStats()->video_paint_ms()->Record(paint_time_ms);
248 } 251 }
249 252
250 void ChromotingJniInstance::OnConnectionState( 253 void ChromotingJniInstance::OnConnectionState(
251 protocol::ConnectionToHost::State state, 254 protocol::ConnectionToHost::State state,
252 protocol::ErrorCode error) { 255 protocol::ErrorCode error) {
253 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread()); 256 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread());
254 257
255 EnableStatsLogging(state == protocol::ConnectionToHost::CONNECTED); 258 EnableStatsLogging(state == protocol::ConnectionToHost::CONNECTED);
256 259
257 client_status_logger_->LogSessionStateChange(state, error); 260 client_status_logger_->LogSessionStateChange(state, error);
258 261
259 if (create_pairing_ && state == protocol::ConnectionToHost::CONNECTED) { 262 if (create_pairing_ && state == protocol::ConnectionToHost::CONNECTED) {
260 protocol::PairingRequest request; 263 protocol::PairingRequest request;
261 DCHECK(!device_name_.empty()); 264 DCHECK(!device_name_.empty());
262 request.set_client_name(device_name_); 265 request.set_client_name(device_name_);
263 connection_->host_stub()->RequestPairing(request); 266 client_->host_stub()->RequestPairing(request);
264 } 267 }
265 268
266 jni_runtime_->ui_task_runner()->PostTask( 269 jni_runtime_->ui_task_runner()->PostTask(
267 FROM_HERE, 270 FROM_HERE,
268 base::Bind(&ChromotingJniRuntime::ReportConnectionStatus, 271 base::Bind(&ChromotingJniRuntime::ReportConnectionStatus,
269 base::Unretained(jni_runtime_), 272 base::Unretained(jni_runtime_),
270 state, 273 state,
271 error)); 274 error));
272 } 275 }
273 276
(...skipping 29 matching lines...) Expand all
303 } 306 }
304 307
305 protocol::ClipboardStub* ChromotingJniInstance::GetClipboardStub() { 308 protocol::ClipboardStub* ChromotingJniInstance::GetClipboardStub() {
306 return this; 309 return this;
307 } 310 }
308 311
309 protocol::CursorShapeStub* ChromotingJniInstance::GetCursorShapeStub() { 312 protocol::CursorShapeStub* ChromotingJniInstance::GetCursorShapeStub() {
310 return this; 313 return this;
311 } 314 }
312 315
313 scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher>
314 ChromotingJniInstance::GetTokenFetcher(const std::string& host_public_key) {
315 return scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher>(
316 new TokenFetcherProxy(
317 base::Bind(&ChromotingJniInstance::FetchThirdPartyToken,
318 weak_factory_.GetWeakPtr()),
319 host_public_key));
320 }
321
322 void ChromotingJniInstance::InjectClipboardEvent( 316 void ChromotingJniInstance::InjectClipboardEvent(
323 const protocol::ClipboardEvent& event) { 317 const protocol::ClipboardEvent& event) {
324 NOTIMPLEMENTED(); 318 NOTIMPLEMENTED();
325 } 319 }
326 320
327 void ChromotingJniInstance::SetCursorShape( 321 void ChromotingJniInstance::SetCursorShape(
328 const protocol::CursorShapeInfo& shape) { 322 const protocol::CursorShapeInfo& shape) {
329 if (!jni_runtime_->display_task_runner()->BelongsToCurrentThread()) { 323 if (!jni_runtime_->display_task_runner()->BelongsToCurrentThread()) {
330 jni_runtime_->display_task_runner()->PostTask( 324 jni_runtime_->display_task_runner()->PostTask(
331 FROM_HERE, 325 FROM_HERE,
(...skipping 21 matching lines...) Expand all
353 347
354 void ChromotingJniInstance::ConnectToHostOnNetworkThread() { 348 void ChromotingJniInstance::ConnectToHostOnNetworkThread() {
355 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread()); 349 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread());
356 350
357 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); 351 jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
358 352
359 client_context_.reset(new ClientContext( 353 client_context_.reset(new ClientContext(
360 jni_runtime_->network_task_runner().get())); 354 jni_runtime_->network_task_runner().get()));
361 client_context_->Start(); 355 client_context_->Start();
362 356
363 connection_.reset(new protocol::ConnectionToHost(true));
364
365 SoftwareVideoRenderer* renderer = 357 SoftwareVideoRenderer* renderer =
366 new SoftwareVideoRenderer(client_context_->main_task_runner(), 358 new SoftwareVideoRenderer(client_context_->main_task_runner(),
367 client_context_->decode_task_runner(), 359 client_context_->decode_task_runner(),
368 frame_consumer_); 360 frame_consumer_);
369 view_->set_frame_producer(renderer); 361 view_->set_frame_producer(renderer);
370 video_renderer_.reset(renderer); 362 video_renderer_.reset(renderer);
371 363
372 client_.reset(new ChromotingClient( 364 client_.reset(new ChromotingClient(client_context_.get(),
373 client_config_, client_context_.get(), connection_.get(), 365 this,
374 this, video_renderer_.get(), scoped_ptr<AudioPlayer>())); 366 video_renderer_.get(),
375 367 scoped_ptr<AudioPlayer>()));
376 368
377 signaling_.reset(new XmppSignalStrategy( 369 signaling_.reset(new XmppSignalStrategy(
378 net::ClientSocketFactory::GetDefaultFactory(), 370 net::ClientSocketFactory::GetDefaultFactory(),
379 jni_runtime_->url_requester(), xmpp_config_)); 371 jni_runtime_->url_requester(), xmpp_config_));
380 372
381 client_status_logger_.reset( 373 client_status_logger_.reset(
382 new ClientStatusLogger(ServerLogEntry::ME2ME, 374 new ClientStatusLogger(ServerLogEntry::ME2ME,
383 signaling_.get(), 375 signaling_.get(),
384 ServiceUrls::GetInstance()->directory_bot_jid())); 376 ServiceUrls::GetInstance()->directory_bot_jid()));
385 377
386 NetworkSettings network_settings(NetworkSettings::NAT_TRAVERSAL_FULL); 378 NetworkSettings network_settings(NetworkSettings::NAT_TRAVERSAL_FULL);
387 379
388 // Use Chrome's network stack to allocate ports for peer-to-peer channels. 380 // Use Chrome's network stack to allocate ports for peer-to-peer channels.
389 scoped_ptr<ChromiumPortAllocator> port_allocator( 381 scoped_ptr<ChromiumPortAllocator> port_allocator(
390 ChromiumPortAllocator::Create(jni_runtime_->url_requester(), 382 ChromiumPortAllocator::Create(jni_runtime_->url_requester(),
391 network_settings)); 383 network_settings));
392 384
393 scoped_ptr<protocol::TransportFactory> transport_factory( 385 scoped_ptr<protocol::TransportFactory> transport_factory(
394 new protocol::LibjingleTransportFactory( 386 new protocol::LibjingleTransportFactory(
395 signaling_.get(), 387 signaling_.get(),
396 port_allocator.PassAs<cricket::HttpPortAllocatorBase>(), 388 port_allocator.PassAs<cricket::HttpPortAllocatorBase>(),
397 network_settings)); 389 network_settings));
398 390
399 client_->Start(signaling_.get(), transport_factory.Pass()); 391 client_->Start(signaling_.get(), authenticator_.Pass(),
392 transport_factory.Pass(), host_jid_, std::string());
400 } 393 }
401 394
402 void ChromotingJniInstance::DisconnectFromHostOnNetworkThread() { 395 void ChromotingJniInstance::DisconnectFromHostOnNetworkThread() {
403 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread()); 396 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread());
404 397
405 host_id_.clear(); 398 host_id_.clear();
406 399
407 stats_logging_enabled_ = false; 400 stats_logging_enabled_ = false;
408 401
409 // |client_| must be torn down before |signaling_|. 402 // |client_| must be torn down before |signaling_|.
410 connection_.reset(); 403 client_.reset();
411 client_.reset(); 404 client_.reset();
412 client_status_logger_.reset(); 405 client_status_logger_.reset();
413 } 406 }
414 407
415 void ChromotingJniInstance::FetchSecret( 408 void ChromotingJniInstance::FetchSecret(
416 bool pairable, 409 bool pairable,
417 const protocol::SecretFetchedCallback& callback) { 410 const protocol::SecretFetchedCallback& callback) {
418 if (!jni_runtime_->ui_task_runner()->BelongsToCurrentThread()) { 411 if (!jni_runtime_->ui_task_runner()->BelongsToCurrentThread()) {
419 jni_runtime_->ui_task_runner()->PostTask( 412 jni_runtime_->ui_task_runner()->PostTask(
420 FROM_HERE, base::Bind(&ChromotingJniInstance::FetchSecret, 413 FROM_HERE, base::Bind(&ChromotingJniInstance::FetchSecret,
421 this, pairable, callback)); 414 this, pairable, callback));
422 return; 415 return;
423 } 416 }
424 417
425 if (!client_config_.client_pairing_id.empty()) { 418 // Delete pairing credentials if they exist.
426 // We attempted to connect using an existing pairing that was rejected. 419 jni_runtime_->CommitPairingCredentials(host_id_, "", "");
427 // Unless we forget about the stale credentials, we'll continue trying them.
428 jni_runtime_->CommitPairingCredentials(host_id_, "", "");
429 }
430 420
431 pin_callback_ = callback; 421 pin_callback_ = callback;
432 jni_runtime_->DisplayAuthenticationPrompt(pairable); 422 jni_runtime_->DisplayAuthenticationPrompt(pairable);
433 } 423 }
434 424
435 void ChromotingJniInstance::SetDeviceName(const std::string& device_name) { 425 void ChromotingJniInstance::SetDeviceName(const std::string& device_name) {
436 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) { 426 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) {
437 jni_runtime_->network_task_runner()->PostTask( 427 jni_runtime_->network_task_runner()->PostTask(
438 FROM_HERE, base::Bind(&ChromotingJniInstance::SetDeviceName, this, 428 FROM_HERE, base::Bind(&ChromotingJniInstance::SetDeviceName, this,
439 device_name)); 429 device_name));
440 return; 430 return;
441 } 431 }
442 432
443 device_name_ = device_name; 433 device_name_ = device_name;
444 } 434 }
445 435
446 void ChromotingJniInstance::SendKeyEventInternal(int usb_key_code, 436 void ChromotingJniInstance::SendKeyEventInternal(int usb_key_code,
447 bool key_down) { 437 bool key_down) {
448 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) { 438 if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) {
449 jni_runtime_->network_task_runner()->PostTask( 439 jni_runtime_->network_task_runner()->PostTask(
450 FROM_HERE, base::Bind(&ChromotingJniInstance::SendKeyEventInternal, 440 FROM_HERE, base::Bind(&ChromotingJniInstance::SendKeyEventInternal,
451 this, usb_key_code, key_down)); 441 this, usb_key_code, key_down));
452 return; 442 return;
453 } 443 }
454 444
455 445
456 protocol::KeyEvent event; 446 protocol::KeyEvent event;
457 event.set_usb_keycode(usb_key_code); 447 event.set_usb_keycode(usb_key_code);
458 event.set_pressed(key_down); 448 event.set_pressed(key_down);
459 connection_->input_stub()->InjectKeyEvent(event); 449 client_->input_stub()->InjectKeyEvent(event);
460 } 450 }
461 451
462 void ChromotingJniInstance::EnableStatsLogging(bool enabled) { 452 void ChromotingJniInstance::EnableStatsLogging(bool enabled) {
463 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread()); 453 DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread());
464 454
465 if (enabled && !stats_logging_enabled_) { 455 if (enabled && !stats_logging_enabled_) {
466 jni_runtime_->network_task_runner()->PostDelayedTask( 456 jni_runtime_->network_task_runner()->PostDelayedTask(
467 FROM_HERE, base::Bind(&ChromotingJniInstance::LogPerfStats, this), 457 FROM_HERE, base::Bind(&ChromotingJniInstance::LogPerfStats, this),
468 base::TimeDelta::FromMilliseconds(kPerfStatsIntervalMs)); 458 base::TimeDelta::FromMilliseconds(kPerfStatsIntervalMs));
469 } 459 }
(...skipping 19 matching lines...) Expand all
489 stats->round_trip_ms()->Average()); 479 stats->round_trip_ms()->Average());
490 480
491 client_status_logger_->LogStatistics(stats); 481 client_status_logger_->LogStatistics(stats);
492 482
493 jni_runtime_->network_task_runner()->PostDelayedTask( 483 jni_runtime_->network_task_runner()->PostDelayedTask(
494 FROM_HERE, base::Bind(&ChromotingJniInstance::LogPerfStats, this), 484 FROM_HERE, base::Bind(&ChromotingJniInstance::LogPerfStats, this),
495 base::TimeDelta::FromMilliseconds(kPerfStatsIntervalMs)); 485 base::TimeDelta::FromMilliseconds(kPerfStatsIntervalMs));
496 } 486 }
497 487
498 } // namespace remoting 488 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/client/jni/chromoting_jni_instance.h ('k') | remoting/client/jni/chromoting_jni_runtime.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698