| Index: chromeos/dbus/session_manager_client.cc
 | 
| diff --git a/chromeos/dbus/session_manager_client.cc b/chromeos/dbus/session_manager_client.cc
 | 
| index dd5c642a9b2fa1548a9358e1137be26f35e37b5c..9e87be84e0a371296c29620fa4930b9e484d6049 100644
 | 
| --- a/chromeos/dbus/session_manager_client.cc
 | 
| +++ b/chromeos/dbus/session_manager_client.cc
 | 
| @@ -40,6 +40,9 @@ namespace {
 | 
|  constexpr char kArcLowDiskError[] =
 | 
|      "org.chromium.SessionManagerInterface.LowFreeDisk";
 | 
|  
 | 
| +constexpr char kStubPolicyFile[] = "stub_policy";
 | 
| +constexpr char kStubDevicePolicyFile[] = "stub_device_policy";
 | 
| +
 | 
|  // Returns a location for |file| that is specific to the given |cryptohome_id|.
 | 
|  // These paths will be relative to DIR_USER_POLICY_KEYS, and can be used only
 | 
|  // to store stub files.
 | 
| @@ -208,6 +211,17 @@ class SessionManagerClientImpl : public SessionManagerClient {
 | 
|                     callback));
 | 
|    }
 | 
|  
 | 
| +  std::string BlockingRetrieveDevicePolicy() override {
 | 
| +    dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
 | 
| +                                 login_manager::kSessionManagerRetrievePolicy);
 | 
| +    std::unique_ptr<dbus::Response> response =
 | 
| +        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,
 | 
|                               const RetrievePolicyCallback& callback) override {
 | 
|      CallRetrievePolicyByUsername(
 | 
| @@ -240,6 +254,22 @@ class SessionManagerClientImpl : public SessionManagerClient {
 | 
|          callback);
 | 
|    }
 | 
|  
 | 
| +  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,
 | 
| +        response.get(), &policy);
 | 
| +    return policy;
 | 
| +  }
 | 
| +
 | 
|    void StoreDevicePolicy(const std::string& policy_blob,
 | 
|                           const StorePolicyCallback& callback) override {
 | 
|      dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
 | 
| @@ -835,7 +865,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
 | 
|        return;
 | 
|      }
 | 
|      base::FilePath device_policy_path =
 | 
| -        owner_key_path.DirName().AppendASCII("stub_device_policy");
 | 
| +        owner_key_path.DirName().AppendASCII(kStubDevicePolicyFile);
 | 
|      base::PostTaskWithTraitsAndReplyWithResult(
 | 
|          FROM_HERE, base::TaskTraits()
 | 
|                         .WithShutdownBehavior(
 | 
| @@ -843,20 +873,30 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
 | 
|                         .MayBlock(),
 | 
|          base::Bind(&GetFileContent, device_policy_path), callback);
 | 
|    }
 | 
| +  std::string BlockingRetrieveDevicePolicy() override {
 | 
| +    base::FilePath owner_key_path;
 | 
| +    if (!PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path)) {
 | 
| +      return "";
 | 
| +    }
 | 
| +    base::FilePath device_policy_path =
 | 
| +        owner_key_path.DirName().AppendASCII(kStubDevicePolicyFile);
 | 
| +    return GetFileContent(device_policy_path);
 | 
| +  }
 | 
|    void RetrievePolicyForUser(const cryptohome::Identification& cryptohome_id,
 | 
|                               const RetrievePolicyCallback& callback) override {
 | 
|      base::PostTaskWithTraitsAndReplyWithResult(
 | 
| -        FROM_HERE, base::TaskTraits()
 | 
| -                       .WithShutdownBehavior(
 | 
| -                           base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)
 | 
| -                       .MayBlock(),
 | 
| +        FROM_HERE,
 | 
| +        base::TaskTraits()
 | 
| +            .WithShutdownBehavior(
 | 
| +                base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)
 | 
| +            .MayBlock(),
 | 
|          base::Bind(&GetFileContent,
 | 
| -                   GetUserFilePath(cryptohome_id, "stub_policy")),
 | 
| +                   GetUserFilePath(cryptohome_id, kStubPolicyFile)),
 | 
|          callback);
 | 
|    }
 | 
|    std::string BlockingRetrievePolicyForUser(
 | 
|        const cryptohome::Identification& cryptohome_id) override {
 | 
| -    return GetFileContent(GetUserFilePath(cryptohome_id, "stub_policy"));
 | 
| +    return GetFileContent(GetUserFilePath(cryptohome_id, kStubPolicyFile));
 | 
|    }
 | 
|    void RetrieveDeviceLocalAccountPolicy(
 | 
|        const std::string& account_id,
 | 
| @@ -864,6 +904,11 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
 | 
|      RetrievePolicyForUser(cryptohome::Identification::FromString(account_id),
 | 
|                            callback);
 | 
|    }
 | 
| +  std::string BlockingRetrieveDeviceLocalAccountPolicy(
 | 
| +      const std::string& account_id) override {
 | 
| +    return BlockingRetrievePolicyForUser(
 | 
| +        cryptohome::Identification::FromString(account_id));
 | 
| +  }
 | 
|    void StoreDevicePolicy(const std::string& policy_blob,
 | 
|                           const StorePolicyCallback& callback) override {
 | 
|      enterprise_management::PolicyFetchResponse response;
 | 
| @@ -889,7 +934,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
 | 
|      // Note also that the owner key will be written before the device policy,
 | 
|      // if it was present in the blob.
 | 
|      base::FilePath device_policy_path =
 | 
| -        owner_key_path.DirName().AppendASCII("stub_device_policy");
 | 
| +        owner_key_path.DirName().AppendASCII(kStubDevicePolicyFile);
 | 
|      base::PostTaskWithTraitsAndReply(
 | 
|          FROM_HERE, base::TaskTraits()
 | 
|                         .WithShutdownBehavior(
 | 
| @@ -923,7 +968,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
 | 
|      // This file isn't read directly by Chrome, but is used by this class to
 | 
|      // reload the user policy across restarts.
 | 
|      base::FilePath stub_policy_path =
 | 
| -        GetUserFilePath(cryptohome_id, "stub_policy");
 | 
| +        GetUserFilePath(cryptohome_id, kStubPolicyFile);
 | 
|      base::PostTaskWithTraitsAndReply(
 | 
|          FROM_HERE, base::TaskTraits()
 | 
|                         .WithShutdownBehavior(
 | 
| 
 |