| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "remoting/host/pairing_registry_delegate_win.h" | 5 #include "remoting/host/pairing_registry_delegate_win.h" |
| 6 | 6 |
| 7 #include "base/json/json_string_value_serializer.h" | 7 #include "base/json/json_string_value_serializer.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 // presubmit: allow wstring | 41 // presubmit: allow wstring |
| 42 std::wstring value_json; | 42 std::wstring value_json; |
| 43 LONG result = key.ReadValue(value_name, &value_json); | 43 LONG result = key.ReadValue(value_name, &value_json); |
| 44 if (result != ERROR_SUCCESS) { | 44 if (result != ERROR_SUCCESS) { |
| 45 SetLastError(result); | 45 SetLastError(result); |
| 46 PLOG(ERROR) << "Cannot read value '" << value_name << "'"; | 46 PLOG(ERROR) << "Cannot read value '" << value_name << "'"; |
| 47 return scoped_ptr<base::DictionaryValue>(); | 47 return scoped_ptr<base::DictionaryValue>(); |
| 48 } | 48 } |
| 49 | 49 |
| 50 // Parse the value. | 50 // Parse the value. |
| 51 std::string value_json_utf8 = WideToUTF8(value_json); | 51 std::string value_json_utf8 = base::WideToUTF8(value_json); |
| 52 JSONStringValueSerializer serializer(&value_json_utf8); | 52 JSONStringValueSerializer serializer(&value_json_utf8); |
| 53 int error_code; | 53 int error_code; |
| 54 std::string error_message; | 54 std::string error_message; |
| 55 scoped_ptr<base::Value> value(serializer.Deserialize(&error_code, | 55 scoped_ptr<base::Value> value(serializer.Deserialize(&error_code, |
| 56 &error_message)); | 56 &error_message)); |
| 57 if (!value) { | 57 if (!value) { |
| 58 LOG(ERROR) << "Failed to parse '" << value_name << "': " << error_message | 58 LOG(ERROR) << "Failed to parse '" << value_name << "': " << error_message |
| 59 << " (" << error_code << ")."; | 59 << " (" << error_code << ")."; |
| 60 return scoped_ptr<base::DictionaryValue>(); | 60 return scoped_ptr<base::DictionaryValue>(); |
| 61 } | 61 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 75 const wchar_t* value_name, | 75 const wchar_t* value_name, |
| 76 scoped_ptr<base::DictionaryValue> value) { | 76 scoped_ptr<base::DictionaryValue> value) { |
| 77 std::string value_json_utf8; | 77 std::string value_json_utf8; |
| 78 JSONStringValueSerializer serializer(&value_json_utf8); | 78 JSONStringValueSerializer serializer(&value_json_utf8); |
| 79 if (!serializer.Serialize(*value)) { | 79 if (!serializer.Serialize(*value)) { |
| 80 LOG(ERROR) << "Failed to serialize '" << value_name << "'"; | 80 LOG(ERROR) << "Failed to serialize '" << value_name << "'"; |
| 81 return false; | 81 return false; |
| 82 } | 82 } |
| 83 | 83 |
| 84 // presubmit: allow wstring | 84 // presubmit: allow wstring |
| 85 std::wstring value_json = UTF8ToWide(value_json_utf8); | 85 std::wstring value_json = base::UTF8ToWide(value_json_utf8); |
| 86 LONG result = key.WriteValue(value_name, value_json.c_str()); | 86 LONG result = key.WriteValue(value_name, value_json.c_str()); |
| 87 if (result != ERROR_SUCCESS) { | 87 if (result != ERROR_SUCCESS) { |
| 88 SetLastError(result); | 88 SetLastError(result); |
| 89 PLOG(ERROR) << "Cannot write value '" << value_name << "'"; | 89 PLOG(ERROR) << "Cannot write value '" << value_name << "'"; |
| 90 return false; | 90 return false; |
| 91 } | 91 } |
| 92 | 92 |
| 93 return true; | 93 return true; |
| 94 } | 94 } |
| 95 | 95 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 for (DWORD index = 0; index < count; ++index) { | 128 for (DWORD index = 0; index < count; ++index) { |
| 129 // presubmit: allow wstring | 129 // presubmit: allow wstring |
| 130 std::wstring value_name; | 130 std::wstring value_name; |
| 131 LONG result = unprivileged_.GetValueNameAt(index, &value_name); | 131 LONG result = unprivileged_.GetValueNameAt(index, &value_name); |
| 132 if (result != ERROR_SUCCESS) { | 132 if (result != ERROR_SUCCESS) { |
| 133 SetLastError(result); | 133 SetLastError(result); |
| 134 PLOG(ERROR) << "Cannot get the name of value " << index; | 134 PLOG(ERROR) << "Cannot get the name of value " << index; |
| 135 continue; | 135 continue; |
| 136 } | 136 } |
| 137 | 137 |
| 138 PairingRegistry::Pairing pairing = Load(WideToUTF8(value_name)); | 138 PairingRegistry::Pairing pairing = Load(base::WideToUTF8(value_name)); |
| 139 if (pairing.is_valid()) | 139 if (pairing.is_valid()) |
| 140 pairings->Append(pairing.ToValue().release()); | 140 pairings->Append(pairing.ToValue().release()); |
| 141 } | 141 } |
| 142 | 142 |
| 143 return pairings.Pass(); | 143 return pairings.Pass(); |
| 144 } | 144 } |
| 145 | 145 |
| 146 bool PairingRegistryDelegateWin::DeleteAll() { | 146 bool PairingRegistryDelegateWin::DeleteAll() { |
| 147 if (!privileged_.Valid()) { | 147 if (!privileged_.Valid()) { |
| 148 LOG(ERROR) << "Cannot delete pairings: the delegate is read-only."; | 148 LOG(ERROR) << "Cannot delete pairings: the delegate is read-only."; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 161 success = success && (result == ERROR_SUCCESS); | 161 success = success && (result == ERROR_SUCCESS); |
| 162 count = unprivileged_.GetValueCount(); | 162 count = unprivileged_.GetValueCount(); |
| 163 } | 163 } |
| 164 | 164 |
| 165 return success; | 165 return success; |
| 166 } | 166 } |
| 167 | 167 |
| 168 PairingRegistry::Pairing PairingRegistryDelegateWin::Load( | 168 PairingRegistry::Pairing PairingRegistryDelegateWin::Load( |
| 169 const std::string& client_id) { | 169 const std::string& client_id) { |
| 170 // presubmit: allow wstring | 170 // presubmit: allow wstring |
| 171 std::wstring value_name = UTF8ToWide(client_id); | 171 std::wstring value_name = base::UTF8ToWide(client_id); |
| 172 | 172 |
| 173 // Read unprivileged fields first. | 173 // Read unprivileged fields first. |
| 174 scoped_ptr<base::DictionaryValue> pairing = ReadValue(unprivileged_, | 174 scoped_ptr<base::DictionaryValue> pairing = ReadValue(unprivileged_, |
| 175 value_name.c_str()); | 175 value_name.c_str()); |
| 176 if (!pairing) | 176 if (!pairing) |
| 177 return PairingRegistry::Pairing(); | 177 return PairingRegistry::Pairing(); |
| 178 | 178 |
| 179 // Read the shared secret. | 179 // Read the shared secret. |
| 180 if (privileged_.Valid()) { | 180 if (privileged_.Valid()) { |
| 181 scoped_ptr<base::DictionaryValue> secret = ReadValue(privileged_, | 181 scoped_ptr<base::DictionaryValue> secret = ReadValue(privileged_, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 200 // Convert pairing to JSON. | 200 // Convert pairing to JSON. |
| 201 scoped_ptr<base::DictionaryValue> pairing_json = pairing.ToValue(); | 201 scoped_ptr<base::DictionaryValue> pairing_json = pairing.ToValue(); |
| 202 | 202 |
| 203 // Extract the shared secret to a separate dictionary. | 203 // Extract the shared secret to a separate dictionary. |
| 204 scoped_ptr<base::Value> secret_key; | 204 scoped_ptr<base::Value> secret_key; |
| 205 CHECK(pairing_json->Remove(PairingRegistry::kSharedSecretKey, &secret_key)); | 205 CHECK(pairing_json->Remove(PairingRegistry::kSharedSecretKey, &secret_key)); |
| 206 scoped_ptr<base::DictionaryValue> secret_json(new base::DictionaryValue()); | 206 scoped_ptr<base::DictionaryValue> secret_json(new base::DictionaryValue()); |
| 207 secret_json->Set(PairingRegistry::kSharedSecretKey, secret_key.release()); | 207 secret_json->Set(PairingRegistry::kSharedSecretKey, secret_key.release()); |
| 208 | 208 |
| 209 // presubmit: allow wstring | 209 // presubmit: allow wstring |
| 210 std::wstring value_name = UTF8ToWide(pairing.client_id()); | 210 std::wstring value_name = base::UTF8ToWide(pairing.client_id()); |
| 211 | 211 |
| 212 // Write pairing to the registry. | 212 // Write pairing to the registry. |
| 213 if (!WriteValue(privileged_, value_name.c_str(), secret_json.Pass()) || | 213 if (!WriteValue(privileged_, value_name.c_str(), secret_json.Pass()) || |
| 214 !WriteValue(unprivileged_, value_name.c_str(), pairing_json.Pass())) { | 214 !WriteValue(unprivileged_, value_name.c_str(), pairing_json.Pass())) { |
| 215 return false; | 215 return false; |
| 216 } | 216 } |
| 217 | 217 |
| 218 return true; | 218 return true; |
| 219 } | 219 } |
| 220 | 220 |
| 221 bool PairingRegistryDelegateWin::Delete(const std::string& client_id) { | 221 bool PairingRegistryDelegateWin::Delete(const std::string& client_id) { |
| 222 if (!privileged_.Valid()) { | 222 if (!privileged_.Valid()) { |
| 223 LOG(ERROR) << "Cannot delete pairing entry '" << client_id | 223 LOG(ERROR) << "Cannot delete pairing entry '" << client_id |
| 224 << "': the delegate is read-only."; | 224 << "': the delegate is read-only."; |
| 225 return false; | 225 return false; |
| 226 } | 226 } |
| 227 | 227 |
| 228 // presubmit: allow wstring | 228 // presubmit: allow wstring |
| 229 std::wstring value_name = UTF8ToWide(client_id); | 229 std::wstring value_name = base::UTF8ToWide(client_id); |
| 230 LONG result = privileged_.DeleteValue(value_name.c_str()); | 230 LONG result = privileged_.DeleteValue(value_name.c_str()); |
| 231 if (result != ERROR_SUCCESS && | 231 if (result != ERROR_SUCCESS && |
| 232 result != ERROR_FILE_NOT_FOUND && | 232 result != ERROR_FILE_NOT_FOUND && |
| 233 result != ERROR_PATH_NOT_FOUND) { | 233 result != ERROR_PATH_NOT_FOUND) { |
| 234 SetLastError(result); | 234 SetLastError(result); |
| 235 PLOG(ERROR) << "Cannot delete pairing entry '" << client_id << "'"; | 235 PLOG(ERROR) << "Cannot delete pairing entry '" << client_id << "'"; |
| 236 return false; | 236 return false; |
| 237 } | 237 } |
| 238 | 238 |
| 239 result = unprivileged_.DeleteValue(value_name.c_str()); | 239 result = unprivileged_.DeleteValue(value_name.c_str()); |
| 240 if (result != ERROR_SUCCESS && | 240 if (result != ERROR_SUCCESS && |
| 241 result != ERROR_FILE_NOT_FOUND && | 241 result != ERROR_FILE_NOT_FOUND && |
| 242 result != ERROR_PATH_NOT_FOUND) { | 242 result != ERROR_PATH_NOT_FOUND) { |
| 243 SetLastError(result); | 243 SetLastError(result); |
| 244 PLOG(ERROR) << "Cannot delete pairing entry '" << client_id << "'"; | 244 PLOG(ERROR) << "Cannot delete pairing entry '" << client_id << "'"; |
| 245 return false; | 245 return false; |
| 246 } | 246 } |
| 247 | 247 |
| 248 return true; | 248 return true; |
| 249 } | 249 } |
| 250 | 250 |
| 251 scoped_ptr<PairingRegistry::Delegate> CreatePairingRegistryDelegate() { | 251 scoped_ptr<PairingRegistry::Delegate> CreatePairingRegistryDelegate() { |
| 252 return scoped_ptr<PairingRegistry::Delegate>(); | 252 return scoped_ptr<PairingRegistry::Delegate>(); |
| 253 } | 253 } |
| 254 | 254 |
| 255 } // namespace remoting | 255 } // namespace remoting |
| OLD | NEW |