Clears the reference to a InputMethodFactory before the termination.
[chromium-blink-merge.git] / chrome_frame / bind_status_callback_impl.h
blob57245e4718cc27b795b1a28a546cca65819a2dac
1 // Copyright (c) 2011 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.
5 #ifndef CHROME_FRAME_BIND_STATUS_CALLBACK_IMPL_H_
6 #define CHROME_FRAME_BIND_STATUS_CALLBACK_IMPL_H_
8 #include <atlbase.h>
9 #include <atlcom.h>
10 #include <string>
11 #include <urlmon.h>
13 #include "base/win/scoped_comptr.h"
14 #include "chrome_frame/utils.h"
16 // A generic base class for IBindStatus callback implementation.
17 // If initialized with delegate, it will hand over all the calls
18 // to the delegate. This can also be used as a base class to
19 // provide the base implementation by not providing any delegate.
20 class BSCBImpl
21 : public CComObjectRootEx<CComMultiThreadModel>,
22 public IBindStatusCallbackEx,
23 public IHttpNegotiate3,
24 public IServiceProvider {
25 public:
26 BSCBImpl();
27 ~BSCBImpl();
29 BEGIN_COM_MAP(BSCBImpl)
30 COM_INTERFACE_ENTRY(IBindStatusCallback)
31 COM_INTERFACE_ENTRY(IHttpNegotiate)
32 COM_INTERFACE_ENTRY_IF_DELEGATE_SUPPORTS(IBindStatusCallbackEx)
33 COM_INTERFACE_ENTRY_IF_DELEGATE_SUPPORTS(IHttpNegotiate2)
34 COM_INTERFACE_ENTRY_IF_DELEGATE_SUPPORTS(IHttpNegotiate3)
35 COM_INTERFACE_ENTRY_IF_DELEGATE_SUPPORTS(IServiceProvider)
36 COM_INTERFACE_ENTRY_FUNC_BLIND(0, DelegateQI)
37 END_COM_MAP()
39 static STDMETHODIMP DelegateQI(void* obj, REFIID iid, void** ret,
40 DWORD cookie);
42 void Initialize(IBindStatusCallback* original);
43 HRESULT AttachToBind(IBindCtx* original);
44 HRESULT ReleaseBind();
46 // For the COM_INTERFACE_ENTRY_IF_DELEGATE_SUPPORTS macro.
47 IBindStatusCallback* delegate() const {
48 return delegate_;
51 IBindCtx* bind_ctx() const {
52 return bind_ctx_;
55 // IServiceProvider
56 STDMETHOD(QueryService)(REFGUID service, REFIID iid, void** object);
58 // IBindStatusCallback
59 STDMETHOD(OnStartBinding)(DWORD reserved, IBinding* binding);
60 STDMETHOD(GetPriority)(LONG* priority);
61 STDMETHOD(OnLowResource)(DWORD reserved);
62 STDMETHOD(OnProgress)(ULONG progress, ULONG progress_max, ULONG status_code,
63 LPCWSTR status_text);
64 STDMETHOD(OnStopBinding)(HRESULT hresult, LPCWSTR error);
65 STDMETHOD(GetBindInfo)(DWORD* bindf, BINDINFO* bind_info);
66 STDMETHOD(OnDataAvailable)(DWORD bscf, DWORD size, FORMATETC* format_etc,
67 STGMEDIUM* stgmed);
68 STDMETHOD(OnObjectAvailable)(REFIID iid, IUnknown* unk);
70 // IBindStatusCallbackEx
71 STDMETHOD(GetBindInfoEx)(DWORD* bindf, BINDINFO* bind_info, DWORD* bindf2,
72 DWORD* reserved);
74 // IHttpNegotiate
75 STDMETHOD(BeginningTransaction)(LPCWSTR url, LPCWSTR headers, DWORD reserved,
76 LPWSTR* additional_headers);
77 STDMETHOD(OnResponse)(DWORD response_code, LPCWSTR response_headers,
78 LPCWSTR request_headers, LPWSTR* additional_headers);
80 // IHttpNegotiate2
81 STDMETHOD(GetRootSecurityId)(BYTE* security_id, DWORD* security_id_size,
82 DWORD_PTR reserved);
84 // IHttpNegotiate3
85 STDMETHOD(GetSerializedClientCertContext)(BYTE** cert, DWORD* cert_size);
87 protected:
88 // used for logging.
89 std::string me();
91 base::win::ScopedComPtr<IBindStatusCallback> delegate_;
92 base::win::ScopedComPtr<IBindCtx> bind_ctx_;
94 private:
95 DISALLOW_COPY_AND_ASSIGN(BSCBImpl);
98 #endif // CHROME_FRAME_BIND_STATUS_CALLBACK_IMPL_H_