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

Unified Diff: chromeos/dbus/session_manager_client.cc

Issue 2801993002: Abandon user sign in when policy is retrieved before session started (Closed)
Patch Set: Nit Created 3 years, 8 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: chromeos/dbus/session_manager_client.cc
diff --git a/chromeos/dbus/session_manager_client.cc b/chromeos/dbus/session_manager_client.cc
index 9e87be84e0a371296c29620fa4930b9e484d6049..e890fa1d41e2f7c206071ce352c585357dc93468 100644
--- a/chromeos/dbus/session_manager_client.cc
+++ b/chromeos/dbus/session_manager_client.cc
@@ -15,6 +15,7 @@
#include "base/files/file_util.h"
#include "base/location.h"
#include "base/macros.h"
+#include "base/metrics/histogram_macros.h"
#include "base/path_service.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
@@ -74,6 +75,13 @@ void StoreFile(const base::FilePath& path, const std::string& data) {
}
}
+// Helper to notify the callback with SUCCESS, to be used by the stub.
+void NotifyOnRetrievePolicySuccess(
+ const SessionManagerClient::RetrievePolicyCallback& callback,
+ const std::string& protobuf) {
+ callback.Run(protobuf, SessionManagerClient::SUCCESS);
+}
+
} // namespace
// The SessionManagerClient implementation used in production.
@@ -202,13 +210,13 @@ class SessionManagerClientImpl : public SessionManagerClient {
void RetrieveDevicePolicy(const RetrievePolicyCallback& callback) override {
dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
login_manager::kSessionManagerRetrievePolicy);
- session_manager_proxy_->CallMethod(
- &method_call,
- dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
- base::Bind(&SessionManagerClientImpl::OnRetrievePolicy,
+ session_manager_proxy_->CallMethodWithErrorCallback(
+ &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ base::Bind(&SessionManagerClientImpl::OnRetrievePolicySuccess,
weak_ptr_factory_.GetWeakPtr(),
- login_manager::kSessionManagerRetrievePolicy,
- callback));
+ login_manager::kSessionManagerRetrievePolicy, callback),
+ base::Bind(&SessionManagerClientImpl::OnRetrievePolicyError,
+ weak_ptr_factory_.GetWeakPtr(), callback));
}
std::string BlockingRetrieveDevicePolicy() override {
@@ -250,8 +258,7 @@ class SessionManagerClientImpl : public SessionManagerClient {
const RetrievePolicyCallback& callback) override {
CallRetrievePolicyByUsername(
login_manager::kSessionManagerRetrieveDeviceLocalAccountPolicy,
- account_name,
- callback);
+ account_name, callback);
}
std::string BlockingRetrieveDeviceLocalAccountPolicy(
@@ -495,14 +502,12 @@ class SessionManagerClientImpl : public SessionManagerClient {
method_name);
dbus::MessageWriter writer(&method_call);
writer.AppendString(account_id);
- session_manager_proxy_->CallMethod(
- &method_call,
- dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
- base::Bind(
- &SessionManagerClientImpl::OnRetrievePolicy,
- weak_ptr_factory_.GetWeakPtr(),
- method_name,
- callback));
+ session_manager_proxy_->CallMethodWithErrorCallback(
+ &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
+ base::Bind(&SessionManagerClientImpl::OnRetrievePolicySuccess,
+ weak_ptr_factory_.GetWeakPtr(), method_name, callback),
+ base::Bind(&SessionManagerClientImpl::OnRetrievePolicyError,
+ weak_ptr_factory_.GetWeakPtr(), callback));
}
void CallStorePolicyByUsername(const std::string& method_name,
@@ -615,12 +620,29 @@ class SessionManagerClientImpl : public SessionManagerClient {
// Called when kSessionManagerRetrievePolicy or
// kSessionManagerRetrievePolicyForUser method is complete.
emaxx 2017/04/18 15:03:17 nit: Maybe change "complete" to "successfully comp
igorcov 2017/04/20 14:52:29 Done.
- void OnRetrievePolicy(const std::string& method_name,
- const RetrievePolicyCallback& callback,
- dbus::Response* response) {
+ void OnRetrievePolicySuccess(const std::string& method_name,
+ const RetrievePolicyCallback& callback,
+ dbus::Response* response) {
std::string serialized_proto;
ExtractString(method_name, response, &serialized_proto);
- callback.Run(serialized_proto);
+ callback.Run(serialized_proto, SUCCESS);
+
+ UMA_HISTOGRAM_ENUMERATION("Enterprise.RetrievePolicyResponse", SUCCESS,
+ RETRIEVE_POLICY_RESPONSE_TYPE_COUNT);
+ }
+
+ void OnRetrievePolicyError(const RetrievePolicyCallback& callback,
emaxx 2017/04/18 15:03:17 nit: Please add a comment for this method.
igorcov 2017/04/20 14:52:29 Done.
+ dbus::ErrorResponse* response) {
+ RetrievePolicyResponseType response_type = OTHER_ERROR;
+ if (response->GetErrorName() ==
+ login_manager::dbus_error::kSessionDoesNotExist) {
+ response_type = SESSION_DOES_NOT_EXIST;
+ }
+ callback.Run(std::string(), response_type);
+
+ UMA_HISTOGRAM_ENUMERATION("Enterprise.RetrievePolicyResponse",
+ response_type,
+ RETRIEVE_POLICY_RESPONSE_TYPE_COUNT);
}
// Called when kSessionManagerStorePolicy or kSessionManagerStorePolicyForUser
@@ -861,17 +883,19 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
void RetrieveDevicePolicy(const RetrievePolicyCallback& callback) override {
base::FilePath owner_key_path;
if (!PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path)) {
- callback.Run("");
+ callback.Run("", SUCCESS);
return;
}
base::FilePath device_policy_path =
owner_key_path.DirName().AppendASCII(kStubDevicePolicyFile);
base::PostTaskWithTraitsAndReplyWithResult(
- FROM_HERE, base::TaskTraits()
- .WithShutdownBehavior(
- base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)
- .MayBlock(),
- base::Bind(&GetFileContent, device_policy_path), callback);
+ FROM_HERE,
+ base::TaskTraits()
+ .WithShutdownBehavior(
+ base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)
+ .MayBlock(),
+ base::Bind(&GetFileContent, device_policy_path),
+ base::Bind(&NotifyOnRetrievePolicySuccess, callback));
}
std::string BlockingRetrieveDevicePolicy() override {
base::FilePath owner_key_path;
@@ -892,7 +916,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
.MayBlock(),
base::Bind(&GetFileContent,
GetUserFilePath(cryptohome_id, kStubPolicyFile)),
- callback);
+ base::Bind(&NotifyOnRetrievePolicySuccess, callback));
}
std::string BlockingRetrievePolicyForUser(
const cryptohome::Identification& cryptohome_id) override {

Powered by Google App Engine
This is Rietveld 408576698