| // Copyright (c) 2012 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. |
| |
| #ifndef CHROME_BROWSER_EXTENSIONS_EXTERNAL_REGISTRY_LOADER_WIN_H_ |
| #define CHROME_BROWSER_EXTENSIONS_EXTERNAL_REGISTRY_LOADER_WIN_H_ |
| |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| #include "base/win/registry.h" |
| #include "chrome/browser/extensions/external_loader.h" |
| |
| namespace extensions { |
| |
| class ExternalRegistryLoader : public ExternalLoader { |
| public: |
| ExternalRegistryLoader(); |
| |
| protected: |
| ~ExternalRegistryLoader() override; // protected for unit test. |
| |
| void StartLoading() override; |
| |
| // Overridden to mock registry reading in unit tests. |
| virtual std::unique_ptr<base::DictionaryValue> LoadPrefsOnBlockingThread(); |
| |
| private: |
| friend class base::RefCountedThreadSafe<ExternalLoader>; |
| |
| void LoadOnBlockingThread(); |
| void CompleteLoadAndStartWatchingRegistry( |
| std::unique_ptr<base::DictionaryValue> prefs); |
| void UpatePrefsOnBlockingThread(); |
| void OnRegistryKeyChanged(base::win::RegKey* key); |
| |
| scoped_refptr<base::SequencedTaskRunner> GetOrCreateTaskRunner(); |
| |
| // Whether or not we attempted to observe registry. |
| bool attempted_watching_registry_; |
| |
| base::win::RegKey hklm_key_; |
| base::win::RegKey hkcu_key_; |
| |
| // Task runner where registry keys are read. |
| scoped_refptr<base::SequencedTaskRunner> task_runner_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ExternalRegistryLoader); |
| }; |
| |
| } // namespace extensions |
| |
| #endif // CHROME_BROWSER_EXTENSIONS_EXTERNAL_REGISTRY_LOADER_WIN_H_ |