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

Side by Side Diff: remoting/host/it2me/it2me_host.cc

Issue 2650443002: Webapp share dialog is not closed when client end of the connection is closed (Closed)
Patch Set: Comment tweaks Created 3 years, 9 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
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/host/it2me/it2me_host.h" 5 #include "remoting/host/it2me/it2me_host.h"
6 6
7 #include <cstdint> 7 #include <cstdint>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 } 68 }
69 69
70 return true; 70 return true;
71 } 71 }
72 72
73 } // namespace 73 } // namespace
74 74
75 It2MeHost::It2MeHost( 75 It2MeHost::It2MeHost(
76 std::unique_ptr<ChromotingHostContext> host_context, 76 std::unique_ptr<ChromotingHostContext> host_context,
77 std::unique_ptr<PolicyWatcher> policy_watcher, 77 std::unique_ptr<PolicyWatcher> policy_watcher,
78 std::unique_ptr<It2MeConfirmationDialog> confirmation_dialog, 78 std::unique_ptr<It2MeConfirmationDialogFactory> dialog_factory,
79 base::WeakPtr<It2MeHost::Observer> observer, 79 base::WeakPtr<It2MeHost::Observer> observer,
80 std::unique_ptr<SignalStrategy> signal_strategy, 80 std::unique_ptr<SignalStrategy> signal_strategy,
81 const std::string& username, 81 const std::string& username,
82 const std::string& directory_bot_jid) 82 const std::string& directory_bot_jid)
83 : host_context_(std::move(host_context)), 83 : host_context_(std::move(host_context)),
84 observer_(observer), 84 observer_(observer),
85 signal_strategy_(std::move(signal_strategy)), 85 signal_strategy_(std::move(signal_strategy)),
86 username_(username), 86 username_(username),
87 directory_bot_jid_(directory_bot_jid), 87 directory_bot_jid_(directory_bot_jid),
88 policy_watcher_(std::move(policy_watcher)), 88 policy_watcher_(std::move(policy_watcher)),
89 confirmation_dialog_(std::move(confirmation_dialog)) { 89 confirmation_dialog_factory_(std::move(dialog_factory)) {
90 DCHECK(host_context_->ui_task_runner()->BelongsToCurrentThread()); 90 DCHECK(host_context_->ui_task_runner()->BelongsToCurrentThread());
91 } 91 }
92 92
93 It2MeHost::~It2MeHost() { 93 It2MeHost::~It2MeHost() {
94 // Check that resources that need to be torn down on the UI thread are gone. 94 // Check that resources that need to be torn down on the UI thread are gone.
95 DCHECK(!desktop_environment_factory_.get()); 95 DCHECK(!desktop_environment_factory_.get());
96 DCHECK(!policy_watcher_.get()); 96 DCHECK(!policy_watcher_.get());
97 } 97 }
98 98
99 void It2MeHost::Connect() { 99 void It2MeHost::Connect() {
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 SetState(kRequestedAccessCode, ""); 266 SetState(kRequestedAccessCode, "");
267 return; 267 return;
268 } 268 }
269 269
270 void It2MeHost::OnAccessDenied(const std::string& jid) { 270 void It2MeHost::OnAccessDenied(const std::string& jid) {
271 DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); 271 DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread());
272 272
273 ++failed_login_attempts_; 273 ++failed_login_attempts_;
274 if (failed_login_attempts_ == kMaxLoginAttempts) { 274 if (failed_login_attempts_ == kMaxLoginAttempts) {
275 DisconnectOnNetworkThread(); 275 DisconnectOnNetworkThread();
276 } else if (connecting_jid_ == jid) {
277 DCHECK_EQ(state_, kConnecting);
278 confirmation_dialog_proxy_.reset();
279 SetState(kReceivedAccessCode, std::string());
276 } 280 }
277 } 281 }
278 282
279 void It2MeHost::OnClientConnected(const std::string& jid) { 283 void It2MeHost::OnClientConnected(const std::string& jid) {
280 DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); 284 DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread());
281 285
282 // ChromotingHost doesn't allow multiple concurrent connection and the 286 // ChromotingHost doesn't allow multiple concurrent connection and the
283 // host is destroyed in OnClientDisconnected() after the first connection. 287 // host is destroyed in OnClientDisconnected() after the first connection.
284 CHECK_NE(state_, kConnected); 288 CHECK_NE(state_, kConnected);
285 289
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 // If we receive valid connection details multiple times, then we don't know 549 // If we receive valid connection details multiple times, then we don't know
546 // which remote user (if either) is valid so disconnect everyone. 550 // which remote user (if either) is valid so disconnect everyone.
547 if (state_ != kReceivedAccessCode) { 551 if (state_ != kReceivedAccessCode) {
548 LOG(ERROR) << "Received too many connection requests."; 552 LOG(ERROR) << "Received too many connection requests.";
549 result_callback.Run(ValidationResult::ERROR_TOO_MANY_CONNECTIONS); 553 result_callback.Run(ValidationResult::ERROR_TOO_MANY_CONNECTIONS);
550 DisconnectOnNetworkThread(); 554 DisconnectOnNetworkThread();
551 return; 555 return;
552 } 556 }
553 557
554 HOST_LOG << "Client " << client_username << " connecting."; 558 HOST_LOG << "Client " << client_username << " connecting.";
559 connecting_jid_ = remote_jid;
555 SetState(kConnecting, std::string()); 560 SetState(kConnecting, std::string());
556 561
557 // Show a confirmation dialog to the user to allow them to confirm/reject it. 562 // Show a confirmation dialog to the user to allow them to confirm/reject it.
558 confirmation_dialog_proxy_.reset(new It2MeConfirmationDialogProxy( 563 confirmation_dialog_proxy_.reset(new It2MeConfirmationDialogProxy(
559 host_context_->ui_task_runner(), std::move(confirmation_dialog_))); 564 host_context_->ui_task_runner(), confirmation_dialog_factory_->Create()));
560 565
561 confirmation_dialog_proxy_->Show( 566 confirmation_dialog_proxy_->Show(
562 client_username, base::Bind(&It2MeHost::OnConfirmationResult, 567 client_username, base::Bind(&It2MeHost::OnConfirmationResult,
563 base::Unretained(this), result_callback)); 568 base::Unretained(this), result_callback));
564 } 569 }
565 570
566 void It2MeHost::OnConfirmationResult( 571 void It2MeHost::OnConfirmationResult(
567 const ValidationResultCallback& result_callback, 572 const ValidationResultCallback& result_callback,
568 It2MeConfirmationDialog::Result result) { 573 It2MeConfirmationDialog::Result result) {
569 DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); 574 DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread());
570 575
576 connecting_jid_.clear();
571 switch (result) { 577 switch (result) {
572 case It2MeConfirmationDialog::Result::OK: 578 case It2MeConfirmationDialog::Result::OK:
573 result_callback.Run(ValidationResult::SUCCESS); 579 result_callback.Run(ValidationResult::SUCCESS);
574 break; 580 break;
575 581
576 case It2MeConfirmationDialog::Result::CANCEL: 582 case It2MeConfirmationDialog::Result::CANCEL:
577 result_callback.Run(ValidationResult::ERROR_REJECTED_BY_USER); 583 result_callback.Run(ValidationResult::ERROR_REJECTED_BY_USER);
578 DisconnectOnNetworkThread(); 584 DisconnectOnNetworkThread();
579 break; 585 break;
580 } 586 }
581 } 587 }
582 588
583 It2MeHostFactory::It2MeHostFactory() {} 589 It2MeHostFactory::It2MeHostFactory() {}
584 590
585 It2MeHostFactory::~It2MeHostFactory() {} 591 It2MeHostFactory::~It2MeHostFactory() {}
586 592
587 scoped_refptr<It2MeHost> It2MeHostFactory::CreateIt2MeHost( 593 scoped_refptr<It2MeHost> It2MeHostFactory::CreateIt2MeHost(
588 std::unique_ptr<ChromotingHostContext> context, 594 std::unique_ptr<ChromotingHostContext> context,
589 policy::PolicyService* policy_service, 595 policy::PolicyService* policy_service,
590 base::WeakPtr<It2MeHost::Observer> observer, 596 base::WeakPtr<It2MeHost::Observer> observer,
591 std::unique_ptr<SignalStrategy> signal_strategy, 597 std::unique_ptr<SignalStrategy> signal_strategy,
592 const std::string& username, 598 const std::string& username,
593 const std::string& directory_bot_jid) { 599 const std::string& directory_bot_jid) {
594 DCHECK(context->ui_task_runner()->BelongsToCurrentThread()); 600 DCHECK(context->ui_task_runner()->BelongsToCurrentThread());
595 601
596 std::unique_ptr<PolicyWatcher> policy_watcher = 602 std::unique_ptr<PolicyWatcher> policy_watcher =
597 PolicyWatcher::Create(policy_service, context->file_task_runner()); 603 PolicyWatcher::Create(policy_service, context->file_task_runner());
598 return new It2MeHost(std::move(context), std::move(policy_watcher), 604 return new It2MeHost(std::move(context), std::move(policy_watcher),
599 It2MeConfirmationDialog::Create(), observer, 605 base::MakeUnique<It2MeConfirmationDialogFactory>(),
600 std::move(signal_strategy), username, directory_bot_jid); 606 observer, std::move(signal_strategy), username,
607 directory_bot_jid);
601 } 608 }
602 609
603 } // namespace remoting 610 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698