// Copyright (c) 2011 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 CHROME_FRAME_CHROME_PROTOCOL_H_ #define CHROME_FRAME_CHROME_PROTOCOL_H_ #include <atlbase.h> #include <atlcom.h> #include "chrome_frame/chrome_tab.h" #include "chrome_frame/resource.h" #include "grit/chrome_frame_resources.h" // ChromeProtocol class ATL_NO_VTABLE ChromeProtocol : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<ChromeProtocol, &CLSID_ChromeProtocol>, public IInternetProtocol { public: ChromeProtocol() { } DECLARE_REGISTRY_RESOURCEID(IDR_CHROMEPROTOCOL) BEGIN_COM_MAP(ChromeProtocol) COM_INTERFACE_ENTRY(IInternetProtocol) COM_INTERFACE_ENTRY(IInternetProtocolRoot) END_COM_MAP() DECLARE_PROTECT_FINAL_CONSTRUCT() HRESULT FinalConstruct() { return S_OK; } void FinalRelease() { } public: // IInternetProtocolRoot STDMETHOD(Start)(LPCWSTR url, IInternetProtocolSink* prot_sink, IInternetBindInfo* bind_info, DWORD flags, DWORD reserved); STDMETHOD(Continue)(PROTOCOLDATA* protocol_data); STDMETHOD(Abort)(HRESULT reason, DWORD options); STDMETHOD(Terminate)(DWORD options); STDMETHOD(Suspend)(); STDMETHOD(Resume)(); // IInternetProtocol based on IInternetProtocolRoot STDMETHOD(Read)(void* buffer, ULONG buffer_size_in_bytes, ULONG* bytes_read); STDMETHOD(Seek)(LARGE_INTEGER move_by, DWORD origin, ULARGE_INTEGER* new_position); STDMETHOD(LockRequest)(DWORD options); STDMETHOD(UnlockRequest)(void); }; #endif // CHROME_FRAME_CHROME_PROTOCOL_H_