| Index: chromeos/dbus/fake_auth_policy_client.cc
|
| diff --git a/chromeos/dbus/fake_auth_policy_client.cc b/chromeos/dbus/fake_auth_policy_client.cc
|
| index 02a9b5bea6e7a75c0810cf9f73d8544e487fa73f..c4a584768703731cc01f7ec1e367996d7747e7f9 100644
|
| --- a/chromeos/dbus/fake_auth_policy_client.cc
|
| +++ b/chromeos/dbus/fake_auth_policy_client.cc
|
| @@ -1,4 +1,4 @@
|
| -// Copyright (c) 2016 The Chromium Authors. All rights reserved.
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| @@ -14,38 +14,38 @@
|
| #include "base/threading/worker_pool.h"
|
| #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
|
| #include "chromeos/chromeos_paths.h"
|
| +#include "chromeos/cryptohome/cryptohome_parameters.h"
|
| +#include "chromeos/dbus/cryptohome_client.h"
|
| +#include "components/policy/proto/cloud_policy.pb.h"
|
| #include "components/policy/proto/device_management_backend.pb.h"
|
| +#include "components/signin/core/account_id/account_id.h"
|
|
|
| namespace em = enterprise_management;
|
|
|
| namespace {
|
|
|
| -// Create minimal stub device policy file and drop it at the place where
|
| -// SessionManagerClientStubImpl is looking for it.
|
| -bool WriteDevicePolicyFile() {
|
| - em::ChromeDeviceSettingsProto policy;
|
| +// Drop stub policy file of |policy_type| at |policy_path| containing
|
| +// |serialized_payload|.
|
| +bool WritePolicyFile(const base::FilePath& policy_path,
|
| + const std::string& serialized_payload,
|
| + const std::string& policy_type) {
|
| em::PolicyData data;
|
| - policy.SerializeToString(data.mutable_policy_value());
|
| - data.set_policy_type("google/chromeos/device");
|
| + data.set_policy_value(serialized_payload);
|
| + data.set_policy_type(policy_type);
|
|
|
| em::PolicyFetchResponse response;
|
| - data.SerializeToString(response.mutable_policy_data());
|
| + CHECK(data.SerializeToString(response.mutable_policy_data()));
|
| std::string serialized_response;
|
| - response.SerializeToString(&serialized_response);
|
| + CHECK(response.SerializeToString(&serialized_response));
|
|
|
| - base::FilePath owner_key_path;
|
| - if (!PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path))
|
| + if (!base::CreateDirectory(policy_path.DirName()))
|
| return false;
|
|
|
| - const base::FilePath device_policy_path =
|
| - owner_key_path.DirName().AppendASCII("stub_device_policy");
|
| -
|
| // Note that in theory there could be a short time window in which a
|
| // concurrent reader sees a partial (and thus invalid) file, but given the
|
| // small file size that seems very unlikely in practice.
|
| - const int bytes_written =
|
| - base::WriteFile(device_policy_path, serialized_response.c_str(),
|
| - serialized_response.size());
|
| + const int bytes_written = base::WriteFile(
|
| + policy_path, serialized_response.c_str(), serialized_response.size());
|
| if (bytes_written < 0)
|
| return false;
|
| return bytes_written == static_cast<int>(serialized_response.size());
|
| @@ -78,17 +78,54 @@ void FakeAuthPolicyClient::AuthenticateUser(
|
|
|
| void FakeAuthPolicyClient::RefreshDevicePolicy(
|
| const RefreshPolicyCallback& callback) {
|
| + base::FilePath policy_path;
|
| + if (!PathService::Get(chromeos::FILE_OWNER_KEY, &policy_path)) {
|
| + callback.Run(false);
|
| + return;
|
| + }
|
| + policy_path = policy_path.DirName().AppendASCII("stub_device_policy");
|
| +
|
| + em::ChromeDeviceSettingsProto policy;
|
| + std::string payload;
|
| + CHECK(policy.SerializeToString(&payload));
|
| +
|
| + // Drop file for SessionManagerClientStubImpl to read.
|
| if (!base::PostTaskAndReplyWithResult(
|
| base::WorkerPool::GetTaskRunner(false /* task_is_slow */).get(),
|
| - FROM_HERE, base::Bind(&WriteDevicePolicyFile), callback)) {
|
| + FROM_HERE, base::Bind(&WritePolicyFile, policy_path, payload,
|
| + "google/chromeos/device"),
|
| + callback)) {
|
| callback.Run(false);
|
| }
|
| }
|
|
|
| void FakeAuthPolicyClient::RefreshUserPolicy(
|
| - const std::string& account_id,
|
| + const AccountId& account_id,
|
| const RefreshPolicyCallback& callback) {
|
| - callback.Run(true);
|
| + base::FilePath policy_path;
|
| + if (!PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &policy_path)) {
|
| + callback.Run(false);
|
| + return;
|
| + }
|
| + const cryptohome::Identification cryptohome_identification(account_id);
|
| + const std::string sanitized_username =
|
| + chromeos::CryptohomeClient::GetStubSanitizedUsername(
|
| + cryptohome_identification);
|
| + policy_path = policy_path.AppendASCII(sanitized_username);
|
| + policy_path = policy_path.AppendASCII("stub_policy");
|
| +
|
| + em::CloudPolicySettings policy;
|
| + std::string payload;
|
| + CHECK(policy.SerializeToString(&payload));
|
| +
|
| + // Drop file for SessionManagerClientStubImpl to read.
|
| + if (!base::PostTaskAndReplyWithResult(
|
| + base::WorkerPool::GetTaskRunner(false /* task_is_slow */).get(),
|
| + FROM_HERE, base::Bind(&WritePolicyFile, policy_path, payload,
|
| + "google/chromeos/user"),
|
| + callback)) {
|
| + callback.Run(false);
|
| + }
|
| }
|
|
|
| } // namespace chromeos
|
|
|