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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/installer/test/resource_loader.h"
6
7 #include <windows.h>
8
9 #include "base/file_path.h"
10 #include "base/logging.h"
11
12 namespace {
13
14 // Populates |resource_data| with the address and size of the resource in
15 // |module| identified by |name_or_id| of type |type_name_or_id|, returning
16 // true on success.
17 bool DoLoad(HMODULE module, const wchar_t* name_or_id,
18 const wchar_t* type_name_or_id,
19 std::pair<const uint8*, DWORD>* resource_data) {
20 bool loaded = false;
21 HRSRC resource_info;
22
23 resource_info = FindResource(module, name_or_id, type_name_or_id);
24 if (resource_info != NULL) {
25 HGLOBAL loaded_resource;
26
27 loaded_resource = LoadResource(module, resource_info);
28 if (loaded_resource != NULL) {
29 resource_data->first =
30 static_cast<const uint8*>(LockResource(loaded_resource));
31 if (resource_data->first != NULL) {
32 resource_data->second = SizeofResource(module, resource_info);
33 DPCHECK(resource_data->second != 0);
34 loaded = true;
35 } else {
36 DPCHECK(false) << "LockResource failed";
37 }
38 } else {
39 DPCHECK(false) << "LoadResource failed";
40 }
41 } else {
42 DPLOG(INFO) << "FindResource failed";
43 }
44
45 return loaded;
46 }
47
48 } // namespace
49
50 namespace upgrade_test {
51
52 ResourceLoader::ResourceLoader() : module_(NULL) {
53 }
54
55 ResourceLoader::~ResourceLoader() {
56 if (module_ != NULL) {
57 BOOL result = FreeLibrary(module_);
58 DPCHECK(result != 0) << "FreeLibrary failed";
59 }
60 }
61
62 bool ResourceLoader::Initialize(const FilePath& pe_image_path) {
63 DCHECK(module_ == NULL);
64 module_ = LoadLibraryEx(pe_image_path.value().c_str(), NULL,
65 (LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE |
66 LOAD_LIBRARY_AS_IMAGE_RESOURCE));
67 DPLOG_IF(INFO, module_ == NULL)
68 << "Failed loading \"" << pe_image_path.value() << "\"";
69 return module_ != NULL;
70 }
71
72 bool ResourceLoader::Load(const std::wstring& name,
73 const std::wstring& type,
74 std::pair<const uint8*, DWORD>* resource_data) {
75 DCHECK(resource_data != NULL);
76 DCHECK(module_ != NULL);
77
78 return DoLoad(module_, name.c_str(), type.c_str(), resource_data);
79 }
80
81 bool ResourceLoader::Load(WORD id,
82 WORD type,
83 std::pair<const uint8*, DWORD>* resource_data) {
84 DCHECK(resource_data != NULL);
85 DCHECK(module_ != NULL);
86
87 return DoLoad(module_, MAKEINTRESOURCE(id), MAKEINTRESOURCE(type),
88 resource_data);
89 }
90
91 } // namespace upgrade_test
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698