Index: chrome_frame/registry_watcher.cc |
diff --git a/chrome_frame/registry_watcher.cc b/chrome_frame/registry_watcher.cc |
deleted file mode 100644 |
index dcbf8b91497f49a93744251cd31f5805efc6ff9c..0000000000000000000000000000000000000000 |
--- a/chrome_frame/registry_watcher.cc |
+++ /dev/null |
@@ -1,101 +0,0 @@ |
-// Copyright (c) 2011 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. |
-// |
-// A utility class that makes it easy to register for registry change |
-// notifications. |
-// |
- |
-#include "chrome_frame/registry_watcher.h" |
- |
-#include "chrome_frame/chrome_frame_helper_util.h" |
- |
-namespace { |
-const wchar_t kRegistryWatcherEventName[] = L"chrome_registry_watcher_event"; |
-} // namespace |
- |
-RegistryWatcher::RegistryWatcher(HKEY hive, |
- const wchar_t* path, |
- NotifyFunc callback) |
- : callback_(callback), |
- wait_event_(NULL), |
- wait_handle_(NULL), |
- stopping_(false) { |
- // Enforce that we can open the given registry path with the KEY_NOTIFY |
- // permission. |
- LONG result = RegOpenKeyEx(hive, path, 0, KEY_NOTIFY, ®istry_key_); |
- if (result != ERROR_SUCCESS) { |
- registry_key_ = NULL; |
- } |
-} |
- |
-RegistryWatcher::~RegistryWatcher() { |
- StopWatching(); |
- if (registry_key_) { |
- RegCloseKey(registry_key_); |
- registry_key_ = NULL; |
- } |
-} |
- |
-bool RegistryWatcher::StartWatching() { |
- if (!registry_key_ || wait_event_ || !callback_) { |
- return false; |
- } |
- |
- bool result = false; |
- wait_event_ = CreateEvent(NULL, |
- FALSE, // Auto-resets |
- FALSE, // Initially non-signalled |
- kRegistryWatcherEventName); |
- if (wait_event_ != NULL) { |
- LONG notify_result = RegNotifyChangeKeyValue( |
- registry_key_, |
- TRUE, // Watch subtree |
- REG_NOTIFY_CHANGE_NAME, // Notifies if a subkey is added. |
- wait_event_, |
- TRUE); // Asynchronous, signal the event when a change occurs. |
- |
- if (notify_result == ERROR_SUCCESS) { |
- if (RegisterWaitForSingleObject(&wait_handle_, |
- wait_event_, |
- &RegistryWatcher::WaitCallback, |
- reinterpret_cast<void*>(this), |
- INFINITE, |
- WT_EXECUTEDEFAULT)) { |
- stopping_ = false; |
- result = true; |
- } |
- } |
- } |
- |
- // If we're not good to go we don't need to hold onto the event. |
- if (!result && wait_event_) { |
- CloseHandle(wait_event_); |
- wait_event_ = NULL; |
- } |
- |
- return result; |
-} |
- |
-void RegistryWatcher::StopWatching() { |
- stopping_ = true; |
- if (wait_handle_) { |
- // Unregister the wait and block until any current handlers have returned. |
- UnregisterWaitEx(wait_handle_, INVALID_HANDLE_VALUE); |
- wait_handle_ = NULL; |
- } |
- if (wait_event_) { |
- CloseHandle(wait_event_); |
- wait_event_ = NULL; |
- } |
-} |
- |
-void CALLBACK RegistryWatcher::WaitCallback(void* param, BOOLEAN wait_fired) { |
- RegistryWatcher* watcher = reinterpret_cast<RegistryWatcher*>(param); |
- if (watcher->stopping_) |
- return; |
- |
- if (watcher->callback_) { |
- watcher->callback_(); |
- } |
-} |