Index: chromeos/dbus/session_manager_client.cc |
diff --git a/chromeos/dbus/session_manager_client.cc b/chromeos/dbus/session_manager_client.cc |
index 1cf565de2ed1c2b590a2f0413629eaee308e37c5..90322ff80789326d2542afd306515200c97449c8 100644 |
--- a/chromeos/dbus/session_manager_client.cc |
+++ b/chromeos/dbus/session_manager_client.cc |
@@ -15,7 +15,6 @@ |
#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" |
@@ -31,15 +30,15 @@ |
#include "dbus/message.h" |
#include "dbus/object_path.h" |
#include "dbus/object_proxy.h" |
-#include "dbus/scoped_dbus_error.h" |
#include "third_party/cros_system_api/dbus/service_constants.h" |
namespace chromeos { |
namespace { |
-using RetrievePolicyResponseType = |
- SessionManagerClient::RetrievePolicyResponseType; |
+// TODO(hidehiko): Share the constant between Chrome and ChromeOS. |
+constexpr char kArcLowDiskError[] = |
+ "org.chromium.SessionManagerInterface.LowFreeDisk"; |
constexpr char kStubPolicyFile[] = "stub_policy"; |
constexpr char kStubDevicePolicyFile[] = "stub_device_policy"; |
@@ -104,48 +103,6 @@ void RunStateKeysCallbackStub(SessionManagerClient::StateKeysCallback callback, |
callback.Run(state_keys); |
} |
-// 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, RetrievePolicyResponseType::SUCCESS); |
-} |
- |
-// Helper to get the enum type of RetrievePolicyResponseType based on error |
-// name. |
-RetrievePolicyResponseType GetResponseTypeBasedOnError( |
- base::StringPiece error_name) { |
- if (error_name == login_manager::dbus_error::kNone) { |
- return RetrievePolicyResponseType::SUCCESS; |
- } else if (error_name == login_manager::dbus_error::kSessionDoesNotExist) { |
- return RetrievePolicyResponseType::SESSION_DOES_NOT_EXIST; |
- } else if (error_name == login_manager::dbus_error::kSigEncodeFail) { |
- return RetrievePolicyResponseType::POLICY_ENCODE_ERROR; |
- } |
- return RetrievePolicyResponseType::OTHER_ERROR; |
-} |
- |
-// Logs UMA stat for retrieve policy request, corresponding to D-Bus method name |
-// used. |
-void LogPolicyResponseUma(base::StringPiece method_name, |
- RetrievePolicyResponseType response) { |
- if (method_name == login_manager::kSessionManagerRetrievePolicy) { |
- UMA_HISTOGRAM_ENUMERATION("Enterprise.RetrievePolicyResponse.Device", |
- response, RetrievePolicyResponseType::COUNT); |
- } else if (method_name == |
- login_manager::kSessionManagerRetrieveDeviceLocalAccountPolicy) { |
- UMA_HISTOGRAM_ENUMERATION( |
- "Enterprise.RetrievePolicyResponse.DeviceLocalAccount", response, |
- RetrievePolicyResponseType::COUNT); |
- } else if (method_name == |
- login_manager::kSessionManagerRetrievePolicyForUser) { |
- UMA_HISTOGRAM_ENUMERATION("Enterprise.RetrievePolicyResponse.User", |
- response, RetrievePolicyResponseType::COUNT); |
- } else { |
- LOG(ERROR) << "Invalid method_name: " << method_name; |
- } |
-} |
- |
} // namespace |
// The SessionManagerClient implementation used in production. |
@@ -274,36 +231,24 @@ class SessionManagerClientImpl : public SessionManagerClient { |
void RetrieveDevicePolicy(const RetrievePolicyCallback& callback) override { |
dbus::MethodCall method_call(login_manager::kSessionManagerInterface, |
login_manager::kSessionManagerRetrievePolicy); |
- session_manager_proxy_->CallMethodWithErrorCallback( |
- &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
- base::Bind(&SessionManagerClientImpl::OnRetrievePolicySuccess, |
- weak_ptr_factory_.GetWeakPtr(), |
- login_manager::kSessionManagerRetrievePolicy, callback), |
- base::Bind(&SessionManagerClientImpl::OnRetrievePolicyError, |
+ session_manager_proxy_->CallMethod( |
+ &method_call, |
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
+ base::Bind(&SessionManagerClientImpl::OnRetrievePolicy, |
weak_ptr_factory_.GetWeakPtr(), |
- login_manager::kSessionManagerRetrievePolicy, callback)); |
+ login_manager::kSessionManagerRetrievePolicy, |
+ callback)); |
} |
- RetrievePolicyResponseType BlockingRetrieveDevicePolicy( |
- std::string* policy_out) override { |
+ std::string BlockingRetrieveDevicePolicy() override { |
dbus::MethodCall method_call(login_manager::kSessionManagerInterface, |
login_manager::kSessionManagerRetrievePolicy); |
- dbus::ScopedDBusError error; |
std::unique_ptr<dbus::Response> response = |
- blocking_method_caller_->CallMethodAndBlockWithError(&method_call, |
- &error); |
- RetrievePolicyResponseType result = RetrievePolicyResponseType::SUCCESS; |
- if (error.is_set() && error.name()) { |
- result = GetResponseTypeBasedOnError(error.name()); |
- } |
- if (result == RetrievePolicyResponseType::SUCCESS) { |
- ExtractString(login_manager::kSessionManagerRetrievePolicy, |
- response.get(), policy_out); |
- } else { |
- *policy_out = ""; |
- } |
- LogPolicyResponseUma(login_manager::kSessionManagerRetrievePolicy, result); |
- return result; |
+ blocking_method_caller_->CallMethodAndBlock(&method_call); |
+ std::string policy; |
+ ExtractString(login_manager::kSessionManagerRetrievePolicy, response.get(), |
+ &policy); |
+ return policy; |
} |
void RetrievePolicyForUser(const cryptohome::Identification& cryptohome_id, |
@@ -313,12 +258,20 @@ class SessionManagerClientImpl : public SessionManagerClient { |
callback); |
} |
- RetrievePolicyResponseType BlockingRetrievePolicyForUser( |
- const cryptohome::Identification& cryptohome_id, |
- std::string* policy_out) override { |
- return BlockingRetrievePolicyByUsername( |
- login_manager::kSessionManagerRetrievePolicyForUser, cryptohome_id.id(), |
- policy_out); |
+ std::string BlockingRetrievePolicyForUser( |
+ const cryptohome::Identification& cryptohome_id) override { |
+ dbus::MethodCall method_call( |
+ login_manager::kSessionManagerInterface, |
+ login_manager::kSessionManagerRetrievePolicyForUser); |
+ dbus::MessageWriter writer(&method_call); |
+ writer.AppendString(cryptohome_id.id()); |
+ std::unique_ptr<dbus::Response> response = |
+ blocking_method_caller_->CallMethodAndBlock(&method_call); |
+ std::string policy; |
+ ExtractString(login_manager::kSessionManagerRetrievePolicyForUser, |
+ response.get(), |
+ &policy); |
+ return policy; |
} |
void RetrieveDeviceLocalAccountPolicy( |
@@ -326,15 +279,24 @@ class SessionManagerClientImpl : public SessionManagerClient { |
const RetrievePolicyCallback& callback) override { |
CallRetrievePolicyByUsername( |
login_manager::kSessionManagerRetrieveDeviceLocalAccountPolicy, |
- account_name, callback); |
+ account_name, |
+ callback); |
} |
- RetrievePolicyResponseType BlockingRetrieveDeviceLocalAccountPolicy( |
- const std::string& account_name, |
- std::string* policy_out) override { |
- return BlockingRetrievePolicyByUsername( |
+ std::string BlockingRetrieveDeviceLocalAccountPolicy( |
+ const std::string& account_name) override { |
+ dbus::MethodCall method_call( |
+ login_manager::kSessionManagerInterface, |
+ login_manager::kSessionManagerRetrieveDeviceLocalAccountPolicy); |
+ dbus::MessageWriter writer(&method_call); |
+ writer.AppendString(account_name); |
+ std::unique_ptr<dbus::Response> response = |
+ blocking_method_caller_->CallMethodAndBlock(&method_call); |
+ std::string policy; |
+ ExtractString( |
login_manager::kSessionManagerRetrieveDeviceLocalAccountPolicy, |
- account_name, policy_out); |
+ response.get(), &policy); |
+ return policy; |
} |
void StoreDevicePolicy(const std::string& policy_blob, |
@@ -562,39 +524,14 @@ class SessionManagerClientImpl : public SessionManagerClient { |
method_name); |
dbus::MessageWriter writer(&method_call); |
writer.AppendString(account_id); |
- 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(), method_name, callback)); |
- } |
- |
- // Helper for blocking RetrievePolicyForUser and |
- // RetrieveDeviceLocalAccountPolicy. |
- RetrievePolicyResponseType BlockingRetrievePolicyByUsername( |
- const std::string& method_name, |
- const std::string& account_name, |
- std::string* policy_out) { |
- dbus::MethodCall method_call(login_manager::kSessionManagerInterface, |
- method_name); |
- dbus::MessageWriter writer(&method_call); |
- writer.AppendString(account_name); |
- dbus::ScopedDBusError error; |
- std::unique_ptr<dbus::Response> response = |
- blocking_method_caller_->CallMethodAndBlockWithError(&method_call, |
- &error); |
- RetrievePolicyResponseType result = RetrievePolicyResponseType::SUCCESS; |
- if (error.is_set() && error.name()) { |
- result = GetResponseTypeBasedOnError(error.name()); |
- } |
- if (result == RetrievePolicyResponseType::SUCCESS) { |
- ExtractString(method_name, response.get(), policy_out); |
- } else { |
- *policy_out = ""; |
- } |
- LogPolicyResponseUma(method_name, result); |
- return result; |
+ session_manager_proxy_->CallMethod( |
+ &method_call, |
+ dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
+ base::Bind( |
+ &SessionManagerClientImpl::OnRetrievePolicy, |
+ weak_ptr_factory_.GetWeakPtr(), |
+ method_name, |
+ callback)); |
} |
void CallStorePolicyByUsername(const std::string& method_name, |
@@ -706,27 +643,13 @@ class SessionManagerClientImpl : public SessionManagerClient { |
} |
// Called when kSessionManagerRetrievePolicy or |
- // kSessionManagerRetrievePolicyForUser method is successfully complete. |
- void OnRetrievePolicySuccess(const std::string& method_name, |
- const RetrievePolicyCallback& callback, |
- dbus::Response* response) { |
+ // kSessionManagerRetrievePolicyForUser method is complete. |
+ void OnRetrievePolicy(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, RetrievePolicyResponseType::SUCCESS); |
- |
- LogPolicyResponseUma(method_name, RetrievePolicyResponseType::SUCCESS); |
- } |
- |
- // Called when kSessionManagerRetrievePolicy or |
- // kSessionManagerRetrievePolicyForUser method fails. |
- void OnRetrievePolicyError(const std::string& method_name, |
- const RetrievePolicyCallback& callback, |
- dbus::ErrorResponse* response) { |
- RetrievePolicyResponseType response_type = |
- GetResponseTypeBasedOnError(response->GetErrorName()); |
- callback.Run(std::string(), response_type); |
- |
- LogPolicyResponseUma(method_name, response_type); |
+ callback.Run(serialized_proto); |
} |
// Called when kSessionManagerStorePolicy or kSessionManagerStorePolicyForUser |
@@ -897,12 +820,10 @@ class SessionManagerClientImpl : public SessionManagerClient { |
dbus::ErrorResponse* response) { |
LOG(ERROR) << "Failed to call StartArcInstance: " |
<< (response ? response->ToString() : "(null)"); |
- if (!callback.is_null()) { |
- callback.Run(response && response->GetErrorName() == |
- login_manager::dbus_error::kLowFreeDisk |
+ if (!callback.is_null()) |
+ callback.Run(response && response->GetErrorName() == kArcLowDiskError |
? StartArcInstanceResult::LOW_FREE_DISK_SPACE |
: StartArcInstanceResult::UNKNOWN_ERROR); |
- } |
} |
dbus::ObjectProxy* session_manager_proxy_; |
@@ -969,31 +890,26 @@ 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("", RetrievePolicyResponseType::SUCCESS); |
+ callback.Run(""); |
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), |
- base::Bind(&NotifyOnRetrievePolicySuccess, callback)); |
+ FROM_HERE, base::TaskTraits() |
+ .WithShutdownBehavior( |
+ base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN) |
+ .MayBlock(), |
+ base::Bind(&GetFileContent, device_policy_path), callback); |
} |
- RetrievePolicyResponseType BlockingRetrieveDevicePolicy( |
- std::string* policy_out) override { |
+ std::string BlockingRetrieveDevicePolicy() override { |
base::FilePath owner_key_path; |
if (!PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path)) { |
- *policy_out = ""; |
- return RetrievePolicyResponseType::SUCCESS; |
+ return ""; |
} |
base::FilePath device_policy_path = |
owner_key_path.DirName().AppendASCII(kStubDevicePolicyFile); |
- *policy_out = GetFileContent(device_policy_path); |
- return RetrievePolicyResponseType::SUCCESS; |
+ return GetFileContent(device_policy_path); |
} |
void RetrievePolicyForUser(const cryptohome::Identification& cryptohome_id, |
const RetrievePolicyCallback& callback) override { |
@@ -1005,14 +921,11 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
.MayBlock(), |
base::Bind(&GetFileContent, |
GetUserFilePath(cryptohome_id, kStubPolicyFile)), |
- base::Bind(&NotifyOnRetrievePolicySuccess, callback)); |
+ callback); |
} |
- RetrievePolicyResponseType BlockingRetrievePolicyForUser( |
- const cryptohome::Identification& cryptohome_id, |
- std::string* policy_out) override { |
- *policy_out = |
- GetFileContent(GetUserFilePath(cryptohome_id, kStubPolicyFile)); |
- return RetrievePolicyResponseType::SUCCESS; |
+ std::string BlockingRetrievePolicyForUser( |
+ const cryptohome::Identification& cryptohome_id) override { |
+ return GetFileContent(GetUserFilePath(cryptohome_id, kStubPolicyFile)); |
} |
void RetrieveDeviceLocalAccountPolicy( |
const std::string& account_id, |
@@ -1020,11 +933,10 @@ class SessionManagerClientStubImpl : public SessionManagerClient { |
RetrievePolicyForUser(cryptohome::Identification::FromString(account_id), |
callback); |
} |
- RetrievePolicyResponseType BlockingRetrieveDeviceLocalAccountPolicy( |
- const std::string& account_id, |
- std::string* policy_out) override { |
+ std::string BlockingRetrieveDeviceLocalAccountPolicy( |
+ const std::string& account_id) override { |
return BlockingRetrievePolicyForUser( |
- cryptohome::Identification::FromString(account_id), policy_out); |
+ cryptohome::Identification::FromString(account_id)); |
} |
void StoreDevicePolicy(const std::string& policy_blob, |
const StorePolicyCallback& callback) override { |