summaryrefslogtreecommitdiffstats
path: root/chrome/browser/profile_resetter
diff options
context:
space:
mode:
authorerikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-13 22:44:18 +0000
committererikwright@chromium.org <erikwright@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-13 22:44:18 +0000
commit8f685f685995b53b1c8ea3ddec8e347b28d8a092 (patch)
treeba276329d816e932db35390ad0fa7e760fba0966 /chrome/browser/profile_resetter
parent74c9eee98d0744ff8cc3387918ec3f80bf0151ab (diff)
downloadchromium_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.cc41
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();
}