| 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 |