Index: webkit/activex_shim/activex_util.h |
=================================================================== |
--- webkit/activex_shim/activex_util.h (revision 25626) |
+++ webkit/activex_shim/activex_util.h (working copy) |
@@ -1,167 +0,0 @@ |
-// Copyright (c) 2006-2008 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. |
- |
-#ifndef WEBKIT_ACTIVEX_SHIM_ACTIVEX_UTIL_H__ |
-#define WEBKIT_ACTIVEX_SHIM_ACTIVEX_UTIL_H__ |
- |
-#include <windows.h> |
-#include <comdef.h> |
-#include <string> |
-#include "base/logging.h" |
-#include "webkit/glue/plugins/nphostapi.h" |
- |
-namespace activex_shim { |
- |
-class DispatchObject; |
- |
-// Logging |
-#ifdef TRACK_INTERFACE |
-#define TRACK_METHOD() LOG(INFO) << "Called: " << __FUNCTION__ |
-#define TRACK_QUERY_INTERFACE(iid, succeeded) \ |
- TrackQueryInterface(iid, succeeded, __FUNCTION__) |
-#else |
-#define TRACK_METHOD() |
-#define TRACK_QUERY_INTERFACE(iid, succeeded) |
-#endif |
- |
-// Unfortunately this value is not defined in any Windows header. |
-const int kHimetricPerInch = 2540; |
- |
-// Used in macro to log which interface is queried and if it is successful. |
-void TrackQueryInterface(REFIID iid, bool succeeded, const char* from_function); |
- |
-// NP types conversions |
-bool NPIdentifierToWString(NPIdentifier name, std::wstring* ret); |
-bool VariantToNPVariant(DispatchObject* obj, const VARIANT* vt, NPVariant* npv); |
-bool NPVariantToVariant(const NPVariant* npv, VARIANT* vt); |
- |
-// Dispatch interface helpers |
-bool DispGetID(IDispatch* disp, const wchar_t* name, DISPID* dispid); |
-bool DispIsMethodOrProperty(IDispatch* disp, const wchar_t* name, |
- bool checkmethod); |
-// This is a general invoke function. Use this function to call methods or |
-// get properties. |
-// DO NOT use this function to set properties. Use DispSetProperty instead. |
-bool DispInvoke(IDispatch* disp, const wchar_t* name, VARIANT* args, |
- int arg_count, VARIANT* result); |
-// A special version for PROPERTYSET. |
-bool DispSetProperty(IDispatch* disp, const wchar_t* name, |
- const VARIANT& rvalue); |
- |
-// ActiveX object security |
-enum ActiveXSafety { |
- SAFE_FOR_SCRIPTING = 0x1, |
- SAFE_FOR_INITIALIZING = 0x2, |
-}; |
- |
-// Gets the IObjectSafety interface of the control and set its safe options. |
-unsigned long GetAndSetObjectSafetyOptions(IUnknown* control); |
-// Uses the StdComponentCategoriesMgr to determine the safety options the object |
-// registered. |
-unsigned long GetRegisteredObjectSafetyOptions(const CLSID& clsid); |
- |
-// Coord transformation |
-// Screen coord to Himetric coord. |
-long ScreenToHimetricX(long x); |
-long ScreenToHimetricY(long y); |
-void ScreenToHimetric(long cx, long cy, SIZE* size); |
- |
-// Create a copy of the string with memory allocated by CoTaskMemAlloc |
-wchar_t* CoTaskMemAllocString(const std::wstring& s); |
- |
-// Reference counted IUnknown implementation. |
-template <class Base> class IUnknownImpl : public Base { |
- public: |
- IUnknownImpl() : ref_(1) { |
- } |
- // IUnknown |
- virtual ULONG STDMETHODCALLTYPE AddRef() { return ++ref_; } |
- virtual ULONG STDMETHODCALLTYPE Release() { |
- --ref_; |
- if (ref_ == 0) { |
- delete this; |
- } |
- } |
- // We don't add QueryInterface here cause normally the subclass should |
- // have its own implementation. |
- |
- private: |
- ULONG ref_; |
-}; |
- |
-// The original CComObject does reference counting and delete object when |
-// reference count reaches 0. This is not desirable for us. If an ActiveX |
-// control incorrectly decrease our reference, then we will crash. Thus |
-// let's manage our own life! |
-template <class Base> class NoRefIUnknownImpl : public Base { |
- public: |
- ~NoRefIUnknownImpl() { |
- // Let the base class clean up before destruction. It's dangerous for base |
- // class to do cleanup in destructor, because we usually create the |
- // object as: NoRefIUnknownImpl<WebActiveXSite>. So when it |
- // destructs, the outer NoRefIUnknownImpl destructs first, then virtual |
- // table pointer of IUnknown interface is modified. At this time if we call |
- // control's code like IOleInPlaceObject::InPlaceDeactivate, and it calls |
- // back to IUnknown of myself, it will cause "pure function call" exception. |
- // |
- // Using a FinalRelease is what ATL does. I found the reason after getting |
- // the crashes in base class' destructor. |
- FinalRelease(); |
- } |
- // IUnknown |
- virtual ULONG STDMETHODCALLTYPE AddRef() { return 1; } |
- virtual ULONG STDMETHODCALLTYPE Release() { return 0; } |
- // We don't add QueryInterface here cause normally the subclass should |
- // have its own implementation. |
-}; |
- |
-// A Minimum IDispatch implementation. Used for other classes who need |
-// the interface but lazy to implement all the typeinfo etc. |
-class MinimumIDispatchImpl : public IDispatch { |
- public: |
- virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT* ctinfo) { |
- *ctinfo = 0; |
- return S_OK; |
- } |
- virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT itinfo, LCID lcid, |
- ITypeInfo** tinfo) { |
- return E_NOTIMPL; |
- } |
- virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames( |
- REFIID riid, |
- LPOLESTR* names, |
- UINT cnames, |
- LCID lcid, |
- DISPID* dispids) { |
- return E_NOTIMPL; |
- } |
- virtual HRESULT STDMETHODCALLTYPE Invoke( |
- DISPID dispid, |
- REFIID riid, |
- LCID lcid, |
- WORD flags, |
- DISPPARAMS* params, |
- VARIANT* result, |
- EXCEPINFO* except_info, |
- UINT* arg_error) { |
- return E_NOTIMPL; |
- } |
-}; |
- |
-// This struct is a simple wrap of VARIANT type, so that it could automatically |
-// initialize when constructed and clear when destructed. |
-// DO NOT add any virtual function or variable members to this struct, because |
-// it could be used in arrays. |
-struct ScopedVariant : public VARIANT { |
- ScopedVariant() { |
- VariantInit(this); |
- } |
- ~ScopedVariant() { |
- VariantClear(this); |
- } |
-}; |
- |
-} // namespace activex_shim |
- |
-#endif // #ifndef WEBKIT_ACTIVEX_SHIM_ACTIVEX_UTIL_H__ |