diff options
author | erikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-13 22:44:18 +0000 |
---|---|---|
committer | erikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-13 22:44:18 +0000 |
commit | 8f685f685995b53b1c8ea3ddec8e347b28d8a092 (patch) | |
tree | ba276329d816e932db35390ad0fa7e760fba0966 /chrome/browser/profile_resetter | |
parent | 74c9eee98d0744ff8cc3387918ec3f80bf0151ab (diff) | |
download | chromium_src-8f685f685995b53b1c8ea3ddec8e347b28d8a092.zip chromium_src-8f685f685995b53b1c8ea3ddec8e347b28d8a092.tar.gz chromium_src-8f685f685995b53b1c8ea3ddec8e347b28d8a092.tar.bz2 |
Refactor module loading verification.
BUG=
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=232525
Review URL: https://codereview.chromium.org/27507010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@234936 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/profile_resetter')
-rw-r--r-- | chrome/browser/profile_resetter/automatic_profile_resetter_delegate.cc | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/chrome/browser/profile_resetter/automatic_profile_resetter_delegate.cc b/chrome/browser/profile_resetter/automatic_profile_resetter_delegate.cc index 45441d1..e793669 100644 --- a/chrome/browser/profile_resetter/automatic_profile_resetter_delegate.cc +++ b/chrome/browser/profile_resetter/automatic_profile_resetter_delegate.cc @@ -4,8 +4,11 @@ #include "chrome/browser/profile_resetter/automatic_profile_resetter_delegate.h" +#include <string> + #include "base/callback.h" #include "base/logging.h" +#include "base/md5.h" #include "base/memory/scoped_vector.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" @@ -20,7 +23,6 @@ #if defined(OS_WIN) #include "chrome/browser/enumerate_modules_model_win.h" -#include "chrome/browser/install_module_verifier_win.h" #endif namespace { @@ -58,6 +60,35 @@ scoped_ptr<base::DictionaryValue> BuildSubTreeFromTemplateURL( return tree.Pass(); } +#if defined(OS_WIN) +void ExtractLoadedModuleNameDigests( + const base::ListValue& module_list, + base::ListValue* module_name_digests) { + DCHECK(module_name_digests); + + // EnumerateModulesModel produces a list of dictionaries. + // Each dictionary corresponds to a module and exposes a number of properties. + // We care only about 'type' and 'name'. + for (size_t i = 0; i < module_list.GetSize(); ++i) { + const base::DictionaryValue* module_dictionary = NULL; + if (!module_list.GetDictionary(i, &module_dictionary)) + continue; + ModuleEnumerator::ModuleType module_type = + ModuleEnumerator::LOADED_MODULE; + if (!module_dictionary->GetInteger( + "type", reinterpret_cast<int*>(&module_type)) || + module_type != ModuleEnumerator::LOADED_MODULE) { + continue; + } + std::string module_name; + if (!module_dictionary->GetString("name", &module_name)) + continue; + StringToLowerASCII(&module_name); + module_name_digests->AppendString(base::MD5String(module_name)); + } +} +#endif + } // namespace @@ -123,15 +154,11 @@ void AutomaticProfileResetterDelegateImpl:: scoped_ptr<base::ListValue> AutomaticProfileResetterDelegateImpl:: GetLoadedModuleNameDigests() const { DCHECK(modules_have_been_enumerated_event_.is_signaled()); - std::set<std::string> module_name_digests; + scoped_ptr<base::ListValue> result(new base::ListValue); #if defined(OS_WIN) if (module_list_) - ExtractLoadedModuleNameDigests(*module_list_, &module_name_digests); + ExtractLoadedModuleNameDigests(*module_list_, result.get()); #endif - scoped_ptr<base::ListValue> result(new base::ListValue); - for (std::set<std::string>::const_iterator it = module_name_digests.begin(); - it != module_name_digests.end(); ++it) - result->AppendString(*it); return result.Pass(); } |