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

Side by Side Diff: chromeos/dbus/session_manager_client.cc

Issue 2774673004: Add stub implementations for state keys and VPD (Closed)
Patch Set: Rebase 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 unified diff | Download patch
« no previous file with comments | « chromeos/dbus/session_manager_client.h ('k') | chromeos/system/statistics_provider.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/dbus/session_manager_client.h" 5 #include "chromeos/dbus/session_manager_client.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <memory> 10 #include <memory>
(...skipping 24 matching lines...) Expand all
35 namespace chromeos { 35 namespace chromeos {
36 36
37 namespace { 37 namespace {
38 38
39 // TODO(hidehiko): Share the constant between Chrome and ChromeOS. 39 // TODO(hidehiko): Share the constant between Chrome and ChromeOS.
40 constexpr char kArcLowDiskError[] = 40 constexpr char kArcLowDiskError[] =
41 "org.chromium.SessionManagerInterface.LowFreeDisk"; 41 "org.chromium.SessionManagerInterface.LowFreeDisk";
42 42
43 constexpr char kStubPolicyFile[] = "stub_policy"; 43 constexpr char kStubPolicyFile[] = "stub_policy";
44 constexpr char kStubDevicePolicyFile[] = "stub_device_policy"; 44 constexpr char kStubDevicePolicyFile[] = "stub_device_policy";
45 constexpr char kStubStateKeysFile[] = "stub_state_keys";
45 46
46 // Returns a location for |file| that is specific to the given |cryptohome_id|. 47 // Returns a location for |file| that is specific to the given |cryptohome_id|.
47 // These paths will be relative to DIR_USER_POLICY_KEYS, and can be used only 48 // These paths will be relative to DIR_USER_POLICY_KEYS, and can be used only
48 // to store stub files. 49 // to store stub files.
49 base::FilePath GetUserFilePath(const cryptohome::Identification& cryptohome_id, 50 base::FilePath GetUserFilePath(const cryptohome::Identification& cryptohome_id,
50 const char* file) { 51 const char* file) {
51 base::FilePath keys_path; 52 base::FilePath keys_path;
52 if (!PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &keys_path)) 53 if (!PathService::Get(chromeos::DIR_USER_POLICY_KEYS, &keys_path))
53 return base::FilePath(); 54 return base::FilePath();
54 const std::string sanitized = 55 const std::string sanitized =
(...skipping 12 matching lines...) Expand all
67 // Helper to write a file in a background thread. 68 // Helper to write a file in a background thread.
68 void StoreFile(const base::FilePath& path, const std::string& data) { 69 void StoreFile(const base::FilePath& path, const std::string& data) {
69 const int size = static_cast<int>(data.size()); 70 const int size = static_cast<int>(data.size());
70 if (path.empty() || 71 if (path.empty() ||
71 !base::CreateDirectory(path.DirName()) || 72 !base::CreateDirectory(path.DirName()) ||
72 base::WriteFile(path, data.data(), size) != size) { 73 base::WriteFile(path, data.data(), size) != size) {
73 LOG(WARNING) << "Failed to write to " << path.value(); 74 LOG(WARNING) << "Failed to write to " << path.value();
74 } 75 }
75 } 76 }
76 77
78 // Helper to asynchronously read (or if missing create) state key stubs.
79 std::vector<std::string> ReadCreateStateKeysStub(const base::FilePath& path) {
80 std::string contents;
81 if (base::PathExists(path)) {
82 contents = GetFileContent(path);
83 } else {
84 // Create stub state keys on the fly.
85 for (int i = 0; i < 5; ++i) {
86 contents += crypto::SHA256HashString(
87 base::IntToString(i) +
88 base::Int64ToString(base::Time::Now().ToJavaTime()));
89 }
90 StoreFile(path, contents);
91 }
92
93 std::vector<std::string> state_keys;
94 for (size_t i = 0; i < contents.size() / 32; ++i) {
95 state_keys.push_back(contents.substr(i * 32, 32));
96 }
97 return state_keys;
98 }
99
100 // Turn pass-by-value into pass-by-reference as expected by StateKeysCallback.
101 void RunStateKeysCallbackStub(SessionManagerClient::StateKeysCallback callback,
102 std::vector<std::string> state_keys) {
103 callback.Run(state_keys);
104 }
105
77 } // namespace 106 } // namespace
78 107
79 // The SessionManagerClient implementation used in production. 108 // The SessionManagerClient implementation used in production.
80 class SessionManagerClientImpl : public SessionManagerClient { 109 class SessionManagerClientImpl : public SessionManagerClient {
81 public: 110 public:
82 SessionManagerClientImpl() 111 SessionManagerClientImpl()
83 : session_manager_proxy_(NULL), 112 : session_manager_proxy_(NULL),
84 screen_is_locked_(false), 113 screen_is_locked_(false),
85 weak_ptr_factory_(this) {} 114 weak_ptr_factory_(this) {}
86 115
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 StorePolicyForUser(cryptohome::Identification::FromString(account_id), 1013 StorePolicyForUser(cryptohome::Identification::FromString(account_id),
985 policy_blob, callback); 1014 policy_blob, callback);
986 } 1015 }
987 1016
988 bool SupportsRestartToApplyUserFlags() const override { return false; } 1017 bool SupportsRestartToApplyUserFlags() const override { return false; }
989 1018
990 void SetFlagsForUser(const cryptohome::Identification& cryptohome_id, 1019 void SetFlagsForUser(const cryptohome::Identification& cryptohome_id,
991 const std::vector<std::string>& flags) override {} 1020 const std::vector<std::string>& flags) override {}
992 1021
993 void GetServerBackedStateKeys(const StateKeysCallback& callback) override { 1022 void GetServerBackedStateKeys(const StateKeysCallback& callback) override {
994 std::vector<std::string> state_keys; 1023 base::FilePath owner_key_path;
995 for (int i = 0; i < 5; ++i) 1024 CHECK(PathService::Get(chromeos::FILE_OWNER_KEY, &owner_key_path));
996 state_keys.push_back(crypto::SHA256HashString(base::IntToString(i))); 1025 const base::FilePath state_keys_path =
997 1026 owner_key_path.DirName().AppendASCII(kStubStateKeysFile);
998 if (!callback.is_null()) 1027 base::PostTaskWithTraitsAndReplyWithResult(
999 callback.Run(state_keys); 1028 FROM_HERE,
1029 base::TaskTraits()
1030 .WithShutdownBehavior(
1031 base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN)
1032 .MayBlock(),
1033 base::Bind(&ReadCreateStateKeysStub, state_keys_path),
1034 base::Bind(&RunStateKeysCallbackStub, callback));
1000 } 1035 }
1001 1036
1002 void CheckArcAvailability(const ArcCallback& callback) override { 1037 void CheckArcAvailability(const ArcCallback& callback) override {
1003 callback.Run(false); 1038 callback.Run(false);
1004 } 1039 }
1005 1040
1006 void StartArcInstance(const cryptohome::Identification& cryptohome_id, 1041 void StartArcInstance(const cryptohome::Identification& cryptohome_id,
1007 bool disable_boot_completed_broadcast, 1042 bool disable_boot_completed_broadcast,
1008 const StartArcInstanceCallback& callback) override { 1043 const StartArcInstanceCallback& callback) override {
1009 callback.Run(StartArcInstanceResult::UNKNOWN_ERROR); 1044 callback.Run(StartArcInstanceResult::UNKNOWN_ERROR);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 1088
1054 SessionManagerClient* SessionManagerClient::Create( 1089 SessionManagerClient* SessionManagerClient::Create(
1055 DBusClientImplementationType type) { 1090 DBusClientImplementationType type) {
1056 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 1091 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
1057 return new SessionManagerClientImpl(); 1092 return new SessionManagerClientImpl();
1058 DCHECK_EQ(FAKE_DBUS_CLIENT_IMPLEMENTATION, type); 1093 DCHECK_EQ(FAKE_DBUS_CLIENT_IMPLEMENTATION, type);
1059 return new SessionManagerClientStubImpl(); 1094 return new SessionManagerClientStubImpl();
1060 } 1095 }
1061 1096
1062 } // namespace chromeos 1097 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/dbus/session_manager_client.h ('k') | chromeos/system/statistics_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698