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

Side by Side Diff: goopdate/broker_class_factory.h

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/application_usage_data_unittest.cc ('k') | goopdate/broker_idl_datax.c » ('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 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 #ifndef OMAHA_GOOPDATE_BROKER_CLASS_FACTORY_H_
17 #define OMAHA_GOOPDATE_BROKER_CLASS_FACTORY_H_
18
19 #include <atlcom.h>
20 #include "base/basictypes.h"
21 #include "omaha/base/atlregmapex.h"
22 #include "omaha/base/scope_guard.h"
23 #include "omaha/base/system.h"
24 #include "omaha/base/vistautil.h"
25 #include "omaha/goopdate/elevation_moniker_resource.h"
26
27 namespace omaha {
28
29 // This class factory delegates CoCreation to the template "clsid" and returns
30 // the resulting interface to the caller. If unable to CoCreate "clsid",
31 // BrokerClassFactory attempts to CoCreateAsAdmin and return "clsid2" to the
32 // caller.
33 template <const CLSID& clsid, const CLSID& clsid2>
34 class BrokerClassFactory : public CComClassFactory {
35 public:
36 BrokerClassFactory() {}
37
38 virtual ~BrokerClassFactory() {}
39
40 STDMETHOD(CreateInstance)(LPUNKNOWN outer_unk, REFIID riid, void** instance) {
41 CORE_LOG(L3, (_T("[BrokerClassFactory CreateInstance][%s]"),
42 GuidToString(riid)));
43
44 // The LockServer combo is used to pulse the module count, which will
45 // shutdown the server after this CreateInstance() request completes,
46 // provided there are no other outstanding interface references being held
47 // by clients.
48 LockServer(TRUE);
49 ON_SCOPE_EXIT_OBJ(*this, &IClassFactory::LockServer, FALSE);
50
51 if (!instance) {
52 return E_POINTER;
53 }
54
55 *instance = NULL;
56
57 if (outer_unk) {
58 return CLASS_E_NOAGGREGATION;
59 }
60
61 HRESULT hr = ::CoCreateInstance(clsid,
62 outer_unk,
63 CLSCTX_ALL,
64 riid,
65 instance);
66 if (FAILED(hr)) {
67 CORE_LOG(LE, (_T("[Create failed][%s][0x%x]"), GuidToString(clsid), hr));
68
69 if (!vista_util::IsVistaOrLater() && !vista_util::IsUserAdmin()) {
70 return hr;
71 }
72
73 hr = System::CoCreateInstanceAsAdmin(NULL, clsid2, riid, instance);
74 if (FAILED(hr)) {
75 CORE_LOG(LE, (_T("[Create fail][%s][0x%x]"), GuidToString(clsid2), hr));
76 return hr;
77 }
78 }
79
80 return S_OK;
81 }
82 };
83
84 #pragma warning(push)
85 // Construction of local static object is not thread-safe
86 #pragma warning(disable:4640)
87
88 // This class is used for COM registration and class factory registration and
89 // instantiation of the delegate brokers. The class itself is not
90 // instantiated. target_clsid is the CLSID that BrokerClassFactory
91 // CoCreates and returns to the caller. If unable to CoCreate target_clsid,
92 // BrokerClassFactory attempts to CoCreateAsAdmin target_clsid2. broker_clsid is
93 // the CLSID that clients of the broker CoCreate.
94 template <const CLSID& target_clsid, const CLSID& target_clsid2,
95 const CLSID& broker_clsid, const TCHAR* const broker_progid>
96 class ATL_NO_VTABLE BrokerClassFactoryRegistrar
97 : public CComObjectRootEx<CComObjectThreadModel>,
98 public CComCoClass<BrokerClassFactoryRegistrar<target_clsid,
99 target_clsid2,
100 broker_clsid,
101 broker_progid> > {
102 public:
103 BrokerClassFactoryRegistrar() {
104 ASSERT1(false);
105 }
106
107 typedef BrokerClassFactory<target_clsid, target_clsid2> BrokerClassFactoryT;
108
109 DECLARE_CLASSFACTORY_EX(BrokerClassFactoryT);
110 DECLARE_NOT_AGGREGATABLE(BrokerClassFactoryRegistrar);
111 DECLARE_REGISTRY_RESOURCEID_EX(IDR_LOCAL_SERVER_ELEVATION_RGS)
112
113 BEGIN_REGISTRY_MAP()
114 REGMAP_ENTRY(_T("PROGID"), broker_progid)
115 REGMAP_ENTRY(_T("VERSION"), _T("1.0"))
116 REGMAP_ENTRY(L"DESCRIPTION", L"Google Update Broker Class Factory")
117 REGMAP_ENTRY(L"CLSID", broker_clsid)
118 REGMAP_ENTRY(L"ICONRESID", PP_STRINGIZE(IDI_ELEVATION_MONIKER_ICON))
119 REGMAP_ENTRY(L"STRINGRESID",
120 PP_STRINGIZE(IDS_ELEVATION_MONIKER_DISPLAYNAME))
121 REGMAP_MODULE2(L"MODULE", kOmahaBrokerFileName)
122 END_REGISTRY_MAP()
123
124 BEGIN_COM_MAP(BrokerClassFactoryRegistrar)
125 END_COM_MAP()
126
127 protected:
128 virtual ~BrokerClassFactoryRegistrar() {}
129
130 private:
131 DISALLOW_COPY_AND_ASSIGN(BrokerClassFactoryRegistrar);
132 };
133
134 #pragma warning(pop)
135
136 extern TCHAR kOnDemandMachineBrokerProgId[];
137 extern TCHAR kUpdate3WebMachineBrokerProgId[];
138
139 // An OnDemand client CoCreates OnDemandMachineAppsClass, which
140 // instantiates the class factory for the OnDemandMachineBroker typedef below.
141 // The class factory in turn passes the CreateInstance through to
142 // OnDemandMachineAppsServiceClass.
143 typedef BrokerClassFactoryRegistrar<__uuidof(OnDemandMachineAppsServiceClass),
144 __uuidof(OnDemandMachineAppsFallbackClass),
145 __uuidof(OnDemandMachineAppsClass),
146 kOnDemandMachineBrokerProgId>
147 OnDemandMachineBroker;
148
149 // The Pack web plugin client CoCreates GoogleUpdate3WebMachineClass, which
150 // instantiates the class factory for the Update3WebBroker typedef below. The
151 // class factory in turn passes the CreateInstance through to
152 // GoogleUpdate3WebServiceClass.
153 typedef BrokerClassFactoryRegistrar<
154 __uuidof(GoogleUpdate3WebServiceClass),
155 __uuidof(GoogleUpdate3WebMachineFallbackClass),
156 __uuidof(GoogleUpdate3WebMachineClass),
157 kUpdate3WebMachineBrokerProgId>
158 Update3WebMachineBroker;
159
160 } // namespace omaha
161
162 #endif // OMAHA_GOOPDATE_BROKER_CLASS_FACTORY_H_
OLDNEW
« no previous file with comments | « goopdate/application_usage_data_unittest.cc ('k') | goopdate/broker_idl_datax.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698