OLD | NEW |
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 "chromeos/dbus/session_manager_client.h" | 5 #include "chromeos/dbus/session_manager_client.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback.h" | 8 #include "base/callback.h" |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 } | 59 } |
60 } | 60 } |
61 | 61 |
62 } // namespace | 62 } // namespace |
63 | 63 |
64 // The SessionManagerClient implementation used in production. | 64 // The SessionManagerClient implementation used in production. |
65 class SessionManagerClientImpl : public SessionManagerClient { | 65 class SessionManagerClientImpl : public SessionManagerClient { |
66 public: | 66 public: |
67 SessionManagerClientImpl() | 67 SessionManagerClientImpl() |
68 : session_manager_proxy_(NULL), | 68 : session_manager_proxy_(NULL), |
| 69 screen_is_locked_(false), |
69 weak_ptr_factory_(this) {} | 70 weak_ptr_factory_(this) {} |
70 | 71 |
71 virtual ~SessionManagerClientImpl() { | 72 virtual ~SessionManagerClientImpl() { |
72 } | 73 } |
73 | 74 |
74 // SessionManagerClient overrides: | 75 // SessionManagerClient overrides: |
75 virtual void SetStubDelegate(StubDelegate* delegate) override { | 76 virtual void SetStubDelegate(StubDelegate* delegate) override { |
76 // Do nothing; this isn't a stub implementation. | 77 // Do nothing; this isn't a stub implementation. |
77 } | 78 } |
78 | 79 |
79 virtual void AddObserver(Observer* observer) override { | 80 virtual void AddObserver(Observer* observer) override { |
80 observers_.AddObserver(observer); | 81 observers_.AddObserver(observer); |
81 } | 82 } |
82 | 83 |
83 virtual void RemoveObserver(Observer* observer) override { | 84 virtual void RemoveObserver(Observer* observer) override { |
84 observers_.RemoveObserver(observer); | 85 observers_.RemoveObserver(observer); |
85 } | 86 } |
86 | 87 |
87 virtual bool HasObserver(const Observer* observer) const override { | 88 virtual bool HasObserver(const Observer* observer) const override { |
88 return observers_.HasObserver(observer); | 89 return observers_.HasObserver(observer); |
89 } | 90 } |
90 | 91 |
| 92 virtual bool IsScreenLocked() const override { return screen_is_locked_; } |
| 93 |
91 virtual void EmitLoginPromptVisible() override { | 94 virtual void EmitLoginPromptVisible() override { |
92 SimpleMethodCallToSessionManager( | 95 SimpleMethodCallToSessionManager( |
93 login_manager::kSessionManagerEmitLoginPromptVisible); | 96 login_manager::kSessionManagerEmitLoginPromptVisible); |
94 FOR_EACH_OBSERVER(Observer, observers_, EmitLoginPromptVisibleCalled()); | 97 FOR_EACH_OBSERVER(Observer, observers_, EmitLoginPromptVisibleCalled()); |
95 } | 98 } |
96 | 99 |
97 virtual void RestartJob(int pid, const std::string& command_line) override { | 100 virtual void RestartJob(int pid, const std::string& command_line) override { |
98 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, | 101 dbus::MethodCall method_call(login_manager::kSessionManagerInterface, |
99 login_manager::kSessionManagerRestartJob); | 102 login_manager::kSessionManagerRestartJob); |
100 dbus::MessageWriter writer(&method_call); | 103 dbus::MessageWriter writer(&method_call); |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 std::string result_string; | 513 std::string result_string; |
511 if (!reader.PopString(&result_string)) { | 514 if (!reader.PopString(&result_string)) { |
512 LOG(ERROR) << "Invalid signal: " << signal->ToString(); | 515 LOG(ERROR) << "Invalid signal: " << signal->ToString(); |
513 return; | 516 return; |
514 } | 517 } |
515 const bool success = StartsWithASCII(result_string, "success", false); | 518 const bool success = StartsWithASCII(result_string, "success", false); |
516 FOR_EACH_OBSERVER(Observer, observers_, PropertyChangeComplete(success)); | 519 FOR_EACH_OBSERVER(Observer, observers_, PropertyChangeComplete(success)); |
517 } | 520 } |
518 | 521 |
519 void ScreenIsLockedReceived(dbus::Signal* signal) { | 522 void ScreenIsLockedReceived(dbus::Signal* signal) { |
| 523 screen_is_locked_ = true; |
520 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsLocked()); | 524 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsLocked()); |
521 } | 525 } |
522 | 526 |
523 void ScreenIsUnlockedReceived(dbus::Signal* signal) { | 527 void ScreenIsUnlockedReceived(dbus::Signal* signal) { |
| 528 screen_is_locked_ = false; |
524 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsUnlocked()); | 529 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsUnlocked()); |
525 } | 530 } |
526 | 531 |
527 // Called when the object is connected to the signal. | 532 // Called when the object is connected to the signal. |
528 void SignalConnected(const std::string& interface_name, | 533 void SignalConnected(const std::string& interface_name, |
529 const std::string& signal_name, | 534 const std::string& signal_name, |
530 bool success) { | 535 bool success) { |
531 LOG_IF(ERROR, !success) << "Failed to connect to " << signal_name; | 536 LOG_IF(ERROR, !success) << "Failed to connect to " << signal_name; |
532 } | 537 } |
533 | 538 |
(...skipping 27 matching lines...) Expand all Loading... |
561 | 566 |
562 if (!callback.is_null()) | 567 if (!callback.is_null()) |
563 callback.Run(state_keys); | 568 callback.Run(state_keys); |
564 } | 569 } |
565 | 570 |
566 | 571 |
567 dbus::ObjectProxy* session_manager_proxy_; | 572 dbus::ObjectProxy* session_manager_proxy_; |
568 scoped_ptr<BlockingMethodCaller> blocking_method_caller_; | 573 scoped_ptr<BlockingMethodCaller> blocking_method_caller_; |
569 ObserverList<Observer> observers_; | 574 ObserverList<Observer> observers_; |
570 | 575 |
| 576 // Most recent screen-lock state received from session_manager. |
| 577 bool screen_is_locked_; |
| 578 |
571 // Note: This should remain the last member so it'll be destroyed and | 579 // Note: This should remain the last member so it'll be destroyed and |
572 // invalidate its weak pointers before any other members are destroyed. | 580 // invalidate its weak pointers before any other members are destroyed. |
573 base::WeakPtrFactory<SessionManagerClientImpl> weak_ptr_factory_; | 581 base::WeakPtrFactory<SessionManagerClientImpl> weak_ptr_factory_; |
574 | 582 |
575 DISALLOW_COPY_AND_ASSIGN(SessionManagerClientImpl); | 583 DISALLOW_COPY_AND_ASSIGN(SessionManagerClientImpl); |
576 }; | 584 }; |
577 | 585 |
578 // The SessionManagerClient implementation used on Linux desktop, | 586 // The SessionManagerClient implementation used on Linux desktop, |
579 // which does nothing. | 587 // which does nothing. |
580 class SessionManagerClientStubImpl : public SessionManagerClient { | 588 class SessionManagerClientStubImpl : public SessionManagerClient { |
581 public: | 589 public: |
582 SessionManagerClientStubImpl() : delegate_(NULL) {} | 590 SessionManagerClientStubImpl() : delegate_(NULL), screen_is_locked_(false) {} |
583 virtual ~SessionManagerClientStubImpl() {} | 591 virtual ~SessionManagerClientStubImpl() {} |
584 | 592 |
585 // SessionManagerClient overrides | 593 // SessionManagerClient overrides |
586 virtual void Init(dbus::Bus* bus) override {} | 594 virtual void Init(dbus::Bus* bus) override {} |
587 virtual void SetStubDelegate(StubDelegate* delegate) override { | 595 virtual void SetStubDelegate(StubDelegate* delegate) override { |
588 delegate_ = delegate; | 596 delegate_ = delegate; |
589 } | 597 } |
590 virtual void AddObserver(Observer* observer) override { | 598 virtual void AddObserver(Observer* observer) override { |
591 observers_.AddObserver(observer); | 599 observers_.AddObserver(observer); |
592 } | 600 } |
593 virtual void RemoveObserver(Observer* observer) override { | 601 virtual void RemoveObserver(Observer* observer) override { |
594 observers_.RemoveObserver(observer); | 602 observers_.RemoveObserver(observer); |
595 } | 603 } |
596 virtual bool HasObserver(const Observer* observer) const override { | 604 virtual bool HasObserver(const Observer* observer) const override { |
597 return observers_.HasObserver(observer); | 605 return observers_.HasObserver(observer); |
598 } | 606 } |
| 607 virtual bool IsScreenLocked() const override { return screen_is_locked_; } |
599 virtual void EmitLoginPromptVisible() override {} | 608 virtual void EmitLoginPromptVisible() override {} |
600 virtual void RestartJob(int pid, const std::string& command_line) override {} | 609 virtual void RestartJob(int pid, const std::string& command_line) override {} |
601 virtual void StartSession(const std::string& user_email) override {} | 610 virtual void StartSession(const std::string& user_email) override {} |
602 virtual void StopSession() override {} | 611 virtual void StopSession() override {} |
603 virtual void NotifySupervisedUserCreationStarted() override {} | 612 virtual void NotifySupervisedUserCreationStarted() override {} |
604 virtual void NotifySupervisedUserCreationFinished() override {} | 613 virtual void NotifySupervisedUserCreationFinished() override {} |
605 virtual void StartDeviceWipe() override {} | 614 virtual void StartDeviceWipe() override {} |
606 virtual void RequestLockScreen() override { | 615 virtual void RequestLockScreen() override { |
607 if (delegate_) | 616 if (delegate_) |
608 delegate_->LockScreenForStub(); | 617 delegate_->LockScreenForStub(); |
609 } | 618 } |
610 virtual void NotifyLockScreenShown() override { | 619 virtual void NotifyLockScreenShown() override { |
| 620 screen_is_locked_ = true; |
611 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsLocked()); | 621 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsLocked()); |
612 } | 622 } |
613 virtual void NotifyLockScreenDismissed() override { | 623 virtual void NotifyLockScreenDismissed() override { |
| 624 screen_is_locked_ = false; |
614 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsUnlocked()); | 625 FOR_EACH_OBSERVER(Observer, observers_, ScreenIsUnlocked()); |
615 } | 626 } |
616 virtual void RetrieveActiveSessions( | 627 virtual void RetrieveActiveSessions( |
617 const ActiveSessionsCallback& callback) override {} | 628 const ActiveSessionsCallback& callback) override {} |
618 virtual void RetrieveDevicePolicy( | 629 virtual void RetrieveDevicePolicy( |
619 const RetrievePolicyCallback& callback) override { | 630 const RetrievePolicyCallback& callback) override { |
620 base::FilePath owner_key_path; | 631 base::FilePath owner_key_path; |
621 if (!PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path)) { | 632 if (!PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path)) { |
622 callback.Run(""); | 633 callback.Run(""); |
623 return; | 634 return; |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
725 state_keys.push_back(crypto::SHA256HashString(base::IntToString(i))); | 736 state_keys.push_back(crypto::SHA256HashString(base::IntToString(i))); |
726 | 737 |
727 if (!callback.is_null()) | 738 if (!callback.is_null()) |
728 callback.Run(state_keys); | 739 callback.Run(state_keys); |
729 } | 740 } |
730 | 741 |
731 private: | 742 private: |
732 StubDelegate* delegate_; // Weak pointer; may be NULL. | 743 StubDelegate* delegate_; // Weak pointer; may be NULL. |
733 ObserverList<Observer> observers_; | 744 ObserverList<Observer> observers_; |
734 std::string device_policy_; | 745 std::string device_policy_; |
| 746 bool screen_is_locked_; |
735 | 747 |
736 DISALLOW_COPY_AND_ASSIGN(SessionManagerClientStubImpl); | 748 DISALLOW_COPY_AND_ASSIGN(SessionManagerClientStubImpl); |
737 }; | 749 }; |
738 | 750 |
739 SessionManagerClient::SessionManagerClient() { | 751 SessionManagerClient::SessionManagerClient() { |
740 } | 752 } |
741 | 753 |
742 SessionManagerClient::~SessionManagerClient() { | 754 SessionManagerClient::~SessionManagerClient() { |
743 } | 755 } |
744 | 756 |
745 SessionManagerClient* SessionManagerClient::Create( | 757 SessionManagerClient* SessionManagerClient::Create( |
746 DBusClientImplementationType type) { | 758 DBusClientImplementationType type) { |
747 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 759 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) |
748 return new SessionManagerClientImpl(); | 760 return new SessionManagerClientImpl(); |
749 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 761 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); |
750 return new SessionManagerClientStubImpl(); | 762 return new SessionManagerClientStubImpl(); |
751 } | 763 } |
752 | 764 |
753 } // namespace chromeos | 765 } // namespace chromeos |
OLD | NEW |