| OLD | NEW |
| 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 "base/win/registry.h" | 5 #include "base/win/registry.h" |
| 6 | 6 |
| 7 #include <shlwapi.h> | 7 #include <shlwapi.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 } | 32 } |
| 33 | 33 |
| 34 // Mask to pull WOW64 access flags out of REGSAM access. | 34 // Mask to pull WOW64 access flags out of REGSAM access. |
| 35 const REGSAM kWow64AccessMask = KEY_WOW64_32KEY | KEY_WOW64_64KEY; | 35 const REGSAM kWow64AccessMask = KEY_WOW64_32KEY | KEY_WOW64_64KEY; |
| 36 | 36 |
| 37 } // namespace | 37 } // namespace |
| 38 | 38 |
| 39 // Watches for modifications to a key. | 39 // Watches for modifications to a key. |
| 40 class RegKey::Watcher : public ObjectWatcher::Delegate { | 40 class RegKey::Watcher : public ObjectWatcher::Delegate { |
| 41 public: | 41 public: |
| 42 explicit Watcher(RegKey* owner) : owner_(owner) {} | 42 Watcher() {} |
| 43 ~Watcher() override {} | 43 ~Watcher() override {} |
| 44 | 44 |
| 45 bool StartWatching(HKEY key, const ChangeCallback& callback); | 45 bool StartWatching(HKEY key, const ChangeCallback& callback); |
| 46 | 46 |
| 47 // Implementation of ObjectWatcher::Delegate. | 47 // Implementation of ObjectWatcher::Delegate. |
| 48 void OnObjectSignaled(HANDLE object) override { | 48 void OnObjectSignaled(HANDLE object) override { |
| 49 DCHECK(watch_event_.IsValid() && watch_event_.Get() == object); | 49 DCHECK(watch_event_.IsValid() && watch_event_.Get() == object); |
| 50 ChangeCallback callback = callback_; | 50 ChangeCallback callback = callback_; |
| 51 callback_.Reset(); | 51 callback_.Reset(); |
| 52 callback.Run(); | 52 callback.Run(); |
| 53 } | 53 } |
| 54 | 54 |
| 55 private: | 55 private: |
| 56 RegKey* owner_; | |
| 57 ScopedHandle watch_event_; | 56 ScopedHandle watch_event_; |
| 58 ObjectWatcher object_watcher_; | 57 ObjectWatcher object_watcher_; |
| 59 ChangeCallback callback_; | 58 ChangeCallback callback_; |
| 60 DISALLOW_COPY_AND_ASSIGN(Watcher); | 59 DISALLOW_COPY_AND_ASSIGN(Watcher); |
| 61 }; | 60 }; |
| 62 | 61 |
| 63 bool RegKey::Watcher::StartWatching(HKEY key, const ChangeCallback& callback) { | 62 bool RegKey::Watcher::StartWatching(HKEY key, const ChangeCallback& callback) { |
| 64 DCHECK(key); | 63 DCHECK(key); |
| 65 DCHECK(callback_.is_null()); | 64 DCHECK(callback_.is_null()); |
| 66 | 65 |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 406 DWORD dtype) { | 405 DWORD dtype) { |
| 407 DCHECK(data || !dsize); | 406 DCHECK(data || !dsize); |
| 408 | 407 |
| 409 LONG result = RegSetValueEx(key_, name, 0, dtype, | 408 LONG result = RegSetValueEx(key_, name, 0, dtype, |
| 410 reinterpret_cast<LPBYTE>(const_cast<void*>(data)), dsize); | 409 reinterpret_cast<LPBYTE>(const_cast<void*>(data)), dsize); |
| 411 return result; | 410 return result; |
| 412 } | 411 } |
| 413 | 412 |
| 414 bool RegKey::StartWatching(const ChangeCallback& callback) { | 413 bool RegKey::StartWatching(const ChangeCallback& callback) { |
| 415 if (!key_watcher_) | 414 if (!key_watcher_) |
| 416 key_watcher_.reset(new Watcher(this)); | 415 key_watcher_.reset(new Watcher()); |
| 417 | 416 |
| 418 if (!key_watcher_->StartWatching(key_, callback)) | 417 if (!key_watcher_->StartWatching(key_, callback)) |
| 419 return false; | 418 return false; |
| 420 | 419 |
| 421 return true; | 420 return true; |
| 422 } | 421 } |
| 423 | 422 |
| 424 // static | 423 // static |
| 425 LONG RegKey::RegDeleteKeyExWrapper(HKEY hKey, | 424 LONG RegKey::RegDeleteKeyExWrapper(HKEY hKey, |
| 426 const wchar_t* lpSubKey, | 425 const wchar_t* lpSubKey, |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 } else { | 672 } else { |
| 674 index_ = count - 1; | 673 index_ = count - 1; |
| 675 } | 674 } |
| 676 } | 675 } |
| 677 | 676 |
| 678 Read(); | 677 Read(); |
| 679 } | 678 } |
| 680 | 679 |
| 681 } // namespace win | 680 } // namespace win |
| 682 } // namespace base | 681 } // namespace base |
| OLD | NEW |