| 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
|
|
|
|
|