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

Side by Side Diff: goopdate/google_update.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months 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
« no previous file with comments | « goopdate/google_update.h ('k') | goopdate/google_update3.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2009-2010 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 // ========================================================================
15 //
16 // Contains the ATL exe server registration.
17
18 #include "omaha/goopdate/google_update.h"
19 #include "goopdate/omaha3_idl.h"
20 #include "omaha/base/debug.h"
21 #include "omaha/base/error.h"
22 #include "omaha/base/logging.h"
23 #include "omaha/common/goopdate_utils.h"
24 #include "omaha/core/google_update_core.h"
25 #include "omaha/goopdate/broker_class_factory.h"
26 #include "omaha/goopdate/cocreate_async.h"
27 #include "omaha/goopdate/cred_dialog.h"
28 #include "omaha/goopdate/google_update3.h"
29 #include "omaha/goopdate/omaha3_idl_datax.h"
30 #include "omaha/goopdate/ondemand.h"
31 #include "omaha/goopdate/oneclick_process_launcher.h"
32 #include "omaha/goopdate/process_launcher.h"
33 #include "omaha/goopdate/update3web.h"
34 #include "omaha/goopdate/worker.h"
35
36 namespace omaha {
37
38 // Template arguments need to be non-const TCHAR arrays.
39 TCHAR kOnDemandMachineBrokerProgId[] = kProgIDOnDemandMachine;
40 TCHAR kUpdate3WebMachineBrokerProgId[] = kProgIDUpdate3WebMachine;
41 TCHAR kHKRootUser[] = _T("HKCU");
42 TCHAR kHKRootMachine[] = _T("HKLM");
43 TCHAR kProgIDUpdate3COMClassUserLocal[] = kProgIDUpdate3COMClassUser;
44
45 BEGIN_OBJECT_MAP(object_map_update3_user_mode)
46 OBJECT_ENTRY(__uuidof(GoogleUpdate3UserClass), Update3COMClassUser)
47 END_OBJECT_MAP()
48
49 BEGIN_OBJECT_MAP(object_map_broker_machine_mode)
50 OBJECT_ENTRY(__uuidof(OnDemandMachineAppsClass), OnDemandMachineBroker)
51 OBJECT_ENTRY(__uuidof(GoogleUpdate3WebMachineClass), Update3WebMachineBroker)
52 OBJECT_ENTRY(__uuidof(CoCreateAsyncClass), CoCreateAsync)
53 OBJECT_ENTRY(__uuidof(OneClickMachineProcessLauncherClass),
54 OneClickProcessLauncher)
55 END_OBJECT_MAP()
56
57 BEGIN_OBJECT_MAP(object_map_ondemand_user_mode)
58 OBJECT_ENTRY(__uuidof(GoogleUpdate3WebUserClass), Update3WebUser)
59 OBJECT_ENTRY(__uuidof(OnDemandUserAppsClass), OnDemandUser)
60 OBJECT_ENTRY(__uuidof(CredentialDialogUserClass), CredentialDialogUser)
61 OBJECT_ENTRY(__uuidof(OneClickUserProcessLauncherClass),
62 OneClickProcessLauncher)
63 END_OBJECT_MAP()
64
65 BEGIN_OBJECT_MAP(object_map_ondemand_machine_mode)
66 OBJECT_ENTRY(__uuidof(ProcessLauncherClass), ProcessLauncher)
67 OBJECT_ENTRY(__uuidof(GoogleUpdateCoreMachineClass), GoogleUpdateCoreMachine)
68 OBJECT_ENTRY(__uuidof(OnDemandMachineAppsFallbackClass),
69 OnDemandMachineFallback)
70 OBJECT_ENTRY(__uuidof(GoogleUpdate3WebMachineFallbackClass),
71 Update3WebMachineFallback)
72 OBJECT_ENTRY(__uuidof(CredentialDialogMachineClass), CredentialDialogMachine)
73 END_OBJECT_MAP()
74
75 _ATL_OBJMAP_ENTRY* GoogleUpdate::GetObjectMap() {
76 if (mode_ == kUpdate3Mode && !is_machine_) {
77 return object_map_update3_user_mode;
78 }
79
80 if (mode_ == kBrokerMode && is_machine_) {
81 return object_map_broker_machine_mode;
82 }
83
84 if (mode_ == kOnDemandMode && !is_machine_) {
85 return object_map_ondemand_user_mode;
86 }
87
88 if (mode_ == kOnDemandMode && is_machine_) {
89 return object_map_ondemand_machine_mode;
90 }
91
92 return NULL;
93 }
94
95 GoogleUpdate::GoogleUpdate(bool is_machine, ComServerMode mode)
96 : is_machine_(is_machine), mode_(mode) {
97 // Disable the delay on shutdown mechanism in CAtlExeModuleT.
98 m_bDelayShutdown = false;
99 }
100
101 GoogleUpdate::~GoogleUpdate() {
102 // GoogleUpdate is typically created on the stack. We reset the _pAtlModule
103 // here, to allow for cases such as /RegServer, where multiple instances of
104 // GoogleUpdate are created and destroyed serially.
105 _pAtlModule = NULL;
106 }
107
108 HRESULT GoogleUpdate::Main() {
109 HRESULT hr = E_FAIL;
110 if (!ParseCommandLine(::GetCommandLine(), &hr)) {
111 // This was either /RegServer or /UnregServer. Return early.
112 return hr;
113 }
114
115 hr = InitializeServerSecurity(is_machine_);
116 if (FAILED(hr)) {
117 return hr;
118 }
119
120 DisableCOMExceptionHandling();
121
122 // TODO(omaha3): We do not call worker_->Run() from anywhere. This means that
123 // the ThreadPool and the ShutdownHandler within the Worker are not
124 // initialized. We need to eventually fix this.
125
126 CORE_LOG(L2, (_T("[Calling CAtlExeModuleT<GoogleUpdate>::WinMain]")));
127 return CAtlExeModuleT<GoogleUpdate>::WinMain(0);
128 }
129
130 HRESULT GoogleUpdate::RegisterClassObjects(DWORD, DWORD) throw() {
131 CORE_LOG(L3, (_T("[RegisterClassObjects]")));
132
133 for (_ATL_OBJMAP_ENTRY* entry = GetObjectMap();
134 entry && entry->pclsid != NULL;
135 entry++) {
136 HRESULT hr = entry->RegisterClassObject(CLSCTX_LOCAL_SERVER,
137 REGCLS_MULTIPLEUSE |
138 REGCLS_SUSPENDED);
139 if (FAILED(hr)) {
140 CORE_LOG(LE, (_T("[RegisterClassObject failed][%s][0x%x]"),
141 GuidToString(*entry->pclsid), hr));
142 return hr;
143 }
144 }
145
146 return S_OK;
147 }
148
149 HRESULT GoogleUpdate::RevokeClassObjects() throw() {
150 CORE_LOG(L3, (_T("[RevokeClassObjects]")));
151
152 for (_ATL_OBJMAP_ENTRY* entry = GetObjectMap();
153 entry && entry->pclsid != NULL;
154 entry++) {
155 HRESULT hr = entry->RevokeClassObject();
156 if (FAILED(hr)) {
157 CORE_LOG(LE, (_T("[RevokeClassObject failed][%s][0x%x]"),
158 GuidToString(*entry->pclsid), hr));
159 return hr;
160 }
161 }
162
163 return S_OK;
164 }
165
166 HRESULT GoogleUpdate::RegisterOrUnregisterExe(bool is_register) {
167 CORE_LOG(L3, (_T("[RegisterOrUnregisterExe][%d]"), is_register));
168
169 for (_ATL_OBJMAP_ENTRY* entry = GetObjectMap();
170 entry && entry->pclsid != NULL;
171 entry++) {
172 HRESULT hr = entry->pfnUpdateRegistry(is_register);
173 if (FAILED(hr)) {
174 CORE_LOG(LE, (_T("[pfnUpdateRegistry failed][%d][0x%x][%s]"),
175 is_register, hr, GuidToString(*entry->pclsid)));
176 return hr;
177 }
178 }
179
180 return S_OK;
181 }
182
183 HRESULT GoogleUpdate::RegisterOrUnregisterExe(void* data,
184 bool is_register) {
185 ASSERT1(data);
186 return reinterpret_cast<GoogleUpdate*>(data)->RegisterOrUnregisterExe(
187 is_register);
188 }
189
190 HRESULT RegisterOrUnregisterProxies(void* data, bool is_register) {
191 ASSERT1(data);
192 bool is_machine = *reinterpret_cast<bool*>(data);
193 CORE_LOG(L3, (_T("[RegisterOrUnregisterProxies][%d][%d]"),
194 is_machine, is_register));
195
196 CPath ps_dll(app_util::GetCurrentModuleDirectory());
197 if (!ps_dll.Append(is_machine ? kPSFileNameMachine : kPSFileNameUser)) {
198 return HRESULTFromLastError();
199 }
200
201 ASSERT1(!is_register || ps_dll.FileExists());
202 HRESULT hr = is_register ? RegisterDll(ps_dll) : UnregisterDll(ps_dll);
203 CORE_LOG(L3, (_T("[ PS][%s][0x%x]"), ps_dll, hr));
204 if (FAILED(hr) && is_register) {
205 return hr;
206 }
207
208 return S_OK;
209 }
210
211 HRESULT GoogleUpdate::RegisterServer(BOOL, const CLSID*) throw() {
212 HRESULT hr = goopdate_utils::RegisterOrUnregisterModule(
213 is_machine_, true, &RegisterOrUnregisterProxies, &is_machine_);
214 if (FAILED(hr)) {
215 return hr;
216 }
217
218 return goopdate_utils::RegisterOrUnregisterModule(
219 is_machine_,
220 true,
221 &GoogleUpdate::RegisterOrUnregisterExe,
222 this);
223 }
224
225 HRESULT GoogleUpdate::UnregisterServer(BOOL, const CLSID*) throw() {
226 HRESULT hr = goopdate_utils::RegisterOrUnregisterModule(
227 is_machine_, false, &GoogleUpdate::RegisterOrUnregisterExe, this);
228 if (FAILED(hr)) {
229 return hr;
230 }
231
232 return goopdate_utils::RegisterOrUnregisterModule(
233 is_machine_, false, &RegisterOrUnregisterProxies, &is_machine_);
234 }
235
236 HRESULT GoogleUpdate::PreMessageLoop(int show_cmd) throw() {
237 return CAtlExeModuleT<GoogleUpdate>::PreMessageLoop(show_cmd);
238 }
239
240 HRESULT GoogleUpdate::PostMessageLoop() throw() {
241 return CAtlExeModuleT<GoogleUpdate>::PostMessageLoop();
242 }
243
244 } // namespace omaha
OLDNEW
« no previous file with comments | « goopdate/google_update.h ('k') | goopdate/google_update3.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698