Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4515)

Unified Diff: chrome/installer/test/resource_loader.cc

Issue 5236002: Add infrastructure enabling tests of installer upgrade scenarios.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/installer/test/resource_loader.cc
===================================================================
--- chrome/installer/test/resource_loader.cc (revision 0)
+++ chrome/installer/test/resource_loader.cc (revision 0)
@@ -0,0 +1,91 @@
+// Copyright (c) 2010 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.
+
+#include "chrome/installer/test/resource_loader.h"
+
+#include <windows.h>
+
+#include "base/file_path.h"
+#include "base/logging.h"
+
+namespace {
+
+// Populates |resource_data| with the address and size of the resource in
+// |module| identified by |name_or_id| of type |type_name_or_id|, returning
+// true on success.
+bool DoLoad(HMODULE module, const wchar_t* name_or_id,
+ const wchar_t* type_name_or_id,
+ std::pair<const uint8*, DWORD>* resource_data) {
+ bool loaded = false;
+ HRSRC resource_info;
+
+ resource_info = FindResource(module, name_or_id, type_name_or_id);
+ if (resource_info != NULL) {
+ HGLOBAL loaded_resource;
+
+ loaded_resource = LoadResource(module, resource_info);
+ if (loaded_resource != NULL) {
+ resource_data->first =
+ static_cast<const uint8*>(LockResource(loaded_resource));
+ if (resource_data->first != NULL) {
+ resource_data->second = SizeofResource(module, resource_info);
+ DPCHECK(resource_data->second != 0);
+ loaded = true;
+ } else {
+ DPCHECK(false) << "LockResource failed";
+ }
+ } else {
+ DPCHECK(false) << "LoadResource failed";
+ }
+ } else {
+ DPLOG(INFO) << "FindResource failed";
+ }
+
+ return loaded;
+}
+
+} // namespace
+
+namespace upgrade_test {
+
+ResourceLoader::ResourceLoader() : module_(NULL) {
+}
+
+ResourceLoader::~ResourceLoader() {
+ if (module_ != NULL) {
+ BOOL result = FreeLibrary(module_);
+ DPCHECK(result != 0) << "FreeLibrary failed";
+ }
+}
+
+bool ResourceLoader::Initialize(const FilePath& pe_image_path) {
+ DCHECK(module_ == NULL);
+ module_ = LoadLibraryEx(pe_image_path.value().c_str(), NULL,
+ (LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE |
+ LOAD_LIBRARY_AS_IMAGE_RESOURCE));
+ DPLOG_IF(INFO, module_ == NULL)
+ << "Failed loading \"" << pe_image_path.value() << "\"";
+ return module_ != NULL;
+}
+
+bool ResourceLoader::Load(const std::wstring& name,
+ const std::wstring& type,
+ std::pair<const uint8*, DWORD>* resource_data) {
+ DCHECK(resource_data != NULL);
+ DCHECK(module_ != NULL);
+
+ return DoLoad(module_, name.c_str(), type.c_str(), resource_data);
+}
+
+bool ResourceLoader::Load(WORD id,
+ WORD type,
+ std::pair<const uint8*, DWORD>* resource_data) {
+ DCHECK(resource_data != NULL);
+ DCHECK(module_ != NULL);
+
+ return DoLoad(module_, MAKEINTRESOURCE(id), MAKEINTRESOURCE(type),
+ resource_data);
+}
+
+} // namespace upgrade_test
Property changes on: chrome\installer\test\resource_loader.cc
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698