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

Side by Side Diff: webkit/activex_shim/activex_util.h

Issue 200031: Take out the activex control. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « webkit/activex_shim/activex_shim.gyp ('k') | webkit/activex_shim/activex_util.cc » ('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 (c) 2006-2008 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 #ifndef WEBKIT_ACTIVEX_SHIM_ACTIVEX_UTIL_H__
6 #define WEBKIT_ACTIVEX_SHIM_ACTIVEX_UTIL_H__
7
8 #include <windows.h>
9 #include <comdef.h>
10 #include <string>
11 #include "base/logging.h"
12 #include "webkit/glue/plugins/nphostapi.h"
13
14 namespace activex_shim {
15
16 class DispatchObject;
17
18 // Logging
19 #ifdef TRACK_INTERFACE
20 #define TRACK_METHOD() LOG(INFO) << "Called: " << __FUNCTION__
21 #define TRACK_QUERY_INTERFACE(iid, succeeded) \
22 TrackQueryInterface(iid, succeeded, __FUNCTION__)
23 #else
24 #define TRACK_METHOD()
25 #define TRACK_QUERY_INTERFACE(iid, succeeded)
26 #endif
27
28 // Unfortunately this value is not defined in any Windows header.
29 const int kHimetricPerInch = 2540;
30
31 // Used in macro to log which interface is queried and if it is successful.
32 void TrackQueryInterface(REFIID iid, bool succeeded, const char* from_function);
33
34 // NP types conversions
35 bool NPIdentifierToWString(NPIdentifier name, std::wstring* ret);
36 bool VariantToNPVariant(DispatchObject* obj, const VARIANT* vt, NPVariant* npv);
37 bool NPVariantToVariant(const NPVariant* npv, VARIANT* vt);
38
39 // Dispatch interface helpers
40 bool DispGetID(IDispatch* disp, const wchar_t* name, DISPID* dispid);
41 bool DispIsMethodOrProperty(IDispatch* disp, const wchar_t* name,
42 bool checkmethod);
43 // This is a general invoke function. Use this function to call methods or
44 // get properties.
45 // DO NOT use this function to set properties. Use DispSetProperty instead.
46 bool DispInvoke(IDispatch* disp, const wchar_t* name, VARIANT* args,
47 int arg_count, VARIANT* result);
48 // A special version for PROPERTYSET.
49 bool DispSetProperty(IDispatch* disp, const wchar_t* name,
50 const VARIANT& rvalue);
51
52 // ActiveX object security
53 enum ActiveXSafety {
54 SAFE_FOR_SCRIPTING = 0x1,
55 SAFE_FOR_INITIALIZING = 0x2,
56 };
57
58 // Gets the IObjectSafety interface of the control and set its safe options.
59 unsigned long GetAndSetObjectSafetyOptions(IUnknown* control);
60 // Uses the StdComponentCategoriesMgr to determine the safety options the object
61 // registered.
62 unsigned long GetRegisteredObjectSafetyOptions(const CLSID& clsid);
63
64 // Coord transformation
65 // Screen coord to Himetric coord.
66 long ScreenToHimetricX(long x);
67 long ScreenToHimetricY(long y);
68 void ScreenToHimetric(long cx, long cy, SIZE* size);
69
70 // Create a copy of the string with memory allocated by CoTaskMemAlloc
71 wchar_t* CoTaskMemAllocString(const std::wstring& s);
72
73 // Reference counted IUnknown implementation.
74 template <class Base> class IUnknownImpl : public Base {
75 public:
76 IUnknownImpl() : ref_(1) {
77 }
78 // IUnknown
79 virtual ULONG STDMETHODCALLTYPE AddRef() { return ++ref_; }
80 virtual ULONG STDMETHODCALLTYPE Release() {
81 --ref_;
82 if (ref_ == 0) {
83 delete this;
84 }
85 }
86 // We don't add QueryInterface here cause normally the subclass should
87 // have its own implementation.
88
89 private:
90 ULONG ref_;
91 };
92
93 // The original CComObject does reference counting and delete object when
94 // reference count reaches 0. This is not desirable for us. If an ActiveX
95 // control incorrectly decrease our reference, then we will crash. Thus
96 // let's manage our own life!
97 template <class Base> class NoRefIUnknownImpl : public Base {
98 public:
99 ~NoRefIUnknownImpl() {
100 // Let the base class clean up before destruction. It's dangerous for base
101 // class to do cleanup in destructor, because we usually create the
102 // object as: NoRefIUnknownImpl<WebActiveXSite>. So when it
103 // destructs, the outer NoRefIUnknownImpl destructs first, then virtual
104 // table pointer of IUnknown interface is modified. At this time if we call
105 // control's code like IOleInPlaceObject::InPlaceDeactivate, and it calls
106 // back to IUnknown of myself, it will cause "pure function call" exception.
107 //
108 // Using a FinalRelease is what ATL does. I found the reason after getting
109 // the crashes in base class' destructor.
110 FinalRelease();
111 }
112 // IUnknown
113 virtual ULONG STDMETHODCALLTYPE AddRef() { return 1; }
114 virtual ULONG STDMETHODCALLTYPE Release() { return 0; }
115 // We don't add QueryInterface here cause normally the subclass should
116 // have its own implementation.
117 };
118
119 // A Minimum IDispatch implementation. Used for other classes who need
120 // the interface but lazy to implement all the typeinfo etc.
121 class MinimumIDispatchImpl : public IDispatch {
122 public:
123 virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT* ctinfo) {
124 *ctinfo = 0;
125 return S_OK;
126 }
127 virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT itinfo, LCID lcid,
128 ITypeInfo** tinfo) {
129 return E_NOTIMPL;
130 }
131 virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(
132 REFIID riid,
133 LPOLESTR* names,
134 UINT cnames,
135 LCID lcid,
136 DISPID* dispids) {
137 return E_NOTIMPL;
138 }
139 virtual HRESULT STDMETHODCALLTYPE Invoke(
140 DISPID dispid,
141 REFIID riid,
142 LCID lcid,
143 WORD flags,
144 DISPPARAMS* params,
145 VARIANT* result,
146 EXCEPINFO* except_info,
147 UINT* arg_error) {
148 return E_NOTIMPL;
149 }
150 };
151
152 // This struct is a simple wrap of VARIANT type, so that it could automatically
153 // initialize when constructed and clear when destructed.
154 // DO NOT add any virtual function or variable members to this struct, because
155 // it could be used in arrays.
156 struct ScopedVariant : public VARIANT {
157 ScopedVariant() {
158 VariantInit(this);
159 }
160 ~ScopedVariant() {
161 VariantClear(this);
162 }
163 };
164
165 } // namespace activex_shim
166
167 #endif // #ifndef WEBKIT_ACTIVEX_SHIM_ACTIVEX_UTIL_H__
OLDNEW
« no previous file with comments | « webkit/activex_shim/activex_shim.gyp ('k') | webkit/activex_shim/activex_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698