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

Unified Diff: chrome/browser/ui/ash/session_controller_client.h

Issue 2878723002: Merge "cros: Update ash when prefs related to lock are changed" (Closed)
Patch Set: Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/ash/session_controller_client.h
diff --git a/chrome/browser/ui/ash/session_controller_client.h b/chrome/browser/ui/ash/session_controller_client.h
index 484c2c18e06e0bf3a01782f7ded4789a66e5e404..d41a2c85480b031dd0ad97c7b65ed26863ee35bf 100644
--- a/chrome/browser/ui/ash/session_controller_client.h
+++ b/chrome/browser/ui/ash/session_controller_client.h
@@ -5,13 +5,22 @@
#ifndef CHROME_BROWSER_UI_ASH_SESSION_CONTROLLER_CLIENT_H_
#define CHROME_BROWSER_UI_ASH_SESSION_CONTROLLER_CLIENT_H_
+#include <vector>
+
#include "ash/public/interfaces/session_controller.mojom.h"
#include "base/callback_forward.h"
+#include "base/gtest_prod_util.h"
#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
#include "components/session_manager/core/session_manager_observer.h"
#include "components/user_manager/user_manager.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
#include "mojo/public/cpp/bindings/binding.h"
+class Profile;
+class PrefChangeRegistrar;
+
namespace ash {
enum class AddUserSessionPolicy;
}
@@ -27,11 +36,14 @@ class SessionControllerClient
: public ash::mojom::SessionControllerClient,
public user_manager::UserManager::UserSessionStateObserver,
public user_manager::UserManager::Observer,
- public session_manager::SessionManagerObserver {
+ public session_manager::SessionManagerObserver,
+ public content::NotificationObserver {
public:
SessionControllerClient();
~SessionControllerClient() override;
+ void Init();
+
static SessionControllerClient* Get();
// Calls ash SessionController to run unlock animation.
@@ -54,6 +66,11 @@ class SessionControllerClient
// session_manager::SessionManagerObserver:
void OnSessionStateChanged() override;
+ // content::NotificationObserver:
+ void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) override;
+
// TODO(xiyuan): Remove after SessionStateDelegateChromeOS is gone.
static bool CanLockScreen();
static bool ShouldLockScreenAutomatically();
@@ -66,9 +83,15 @@ class SessionControllerClient
static void FlushForTesting();
private:
- // Connects or reconnects to the |session_controller_| interface and set
- // this object as its client.
- void ConnectToSessionControllerAndSetClient();
+ FRIEND_TEST_ALL_PREFIXES(SessionControllerClientTest, SendUserSession);
+ FRIEND_TEST_ALL_PREFIXES(SessionControllerClientTest, SupervisedUser);
+ FRIEND_TEST_ALL_PREFIXES(SessionControllerClientTest, UserPrefsChange);
+
+ // Called when the login profile is ready.
+ void OnLoginUserProfilePrepared(Profile* profile);
+
+ // Connects to the |session_controller_| interface.
+ void ConnectToSessionController();
// Sends session info to ash.
void SendSessionInfoIfChanged();
@@ -88,8 +111,18 @@ class SessionControllerClient
// Whether the primary user session info is sent to ash.
bool primary_user_session_sent_ = false;
+ content::NotificationRegistrar registrar_;
+
+ // Pref change observers to update session info when a relevant user pref
+ // changes. There is one observer per user and they have no particular order,
+ // i.e. they don't much the user session order.
+ std::vector<std::unique_ptr<PrefChangeRegistrar>> pref_change_registrars_;
+
+ // Used to suppress duplicate IPCs to ash.
ash::mojom::SessionInfoPtr last_sent_session_info_;
+ base::WeakPtrFactory<SessionControllerClient> weak_ptr_factory_;
+
DISALLOW_COPY_AND_ASSIGN(SessionControllerClient);
};
« no previous file with comments | « chrome/browser/chromeos/login/users/fake_chrome_user_manager.cc ('k') | chrome/browser/ui/ash/session_controller_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698