Index: chrome_frame/protocol_sink_wrap.h |
diff --git a/chrome_frame/protocol_sink_wrap.h b/chrome_frame/protocol_sink_wrap.h |
deleted file mode 100644 |
index 38b5ac4aecae9bdd3592279802f0db1247a88cc5..0000000000000000000000000000000000000000 |
--- a/chrome_frame/protocol_sink_wrap.h |
+++ /dev/null |
@@ -1,184 +0,0 @@ |
-// 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_PROTOCOL_SINK_WRAP_H_ |
-#define CHROME_FRAME_PROTOCOL_SINK_WRAP_H_ |
- |
-#include <exdisp.h> |
-#include <urlmon.h> |
-#include <atlbase.h> |
-#include <atlcom.h> |
- |
-#include <map> |
-#include <string> |
- |
-#include "base/basictypes.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/win/scoped_comptr.h" |
-#include "base/win/scoped_bstr.h" |
-#include "chrome_frame/chrome_frame_delegate.h" |
-#include "chrome_frame/http_negotiate.h" |
-#include "chrome_frame/ie8_types.h" |
-#include "chrome_frame/utils.h" |
-#include "chrome_frame/vtable_patch_manager.h" |
- |
-// Typedefs for IInternetProtocol and related methods that we patch. |
-typedef HRESULT (STDMETHODCALLTYPE* InternetProtocol_Start_Fn)( |
- IInternetProtocol* this_object, LPCWSTR url, |
- IInternetProtocolSink* prot_sink, IInternetBindInfo* bind_info, |
- DWORD flags, HANDLE_PTR reserved); |
-typedef HRESULT (STDMETHODCALLTYPE* InternetProtocol_Read_Fn)( |
- IInternetProtocol* this_object, void* buffer, ULONG size, |
- ULONG* size_read); |
-typedef HRESULT (STDMETHODCALLTYPE* InternetProtocol_StartEx_Fn)( |
- IInternetProtocolEx* this_object, IUri* uri, |
- IInternetProtocolSink* prot_sink, IInternetBindInfo* bind_info, |
- DWORD flags, HANDLE_PTR reserved); |
-typedef HRESULT (STDMETHODCALLTYPE* InternetProtocol_LockRequest_Fn)( |
- IInternetProtocol* this_object, DWORD options); |
-typedef HRESULT (STDMETHODCALLTYPE* InternetProtocol_UnlockRequest_Fn)( |
- IInternetProtocol* this_object); |
-typedef HRESULT (STDMETHODCALLTYPE* InternetProtocol_Abort_Fn)( |
- IInternetProtocol* this_object, HRESULT hr, DWORD options); |
-typedef HRESULT (STDMETHODCALLTYPE* InternetProtocol_Terminate_Fn)( |
- IInternetProtocol* this_object, DWORD options); |
- |
-class ProtData; |
- |
-// A class to wrap protocol sink in IInternetProtocol::Start[Ex] for |
-// HTTP and HTTPS protocols. |
-// |
-// This is an alternative to a mime filter and we have to do this in order |
-// to inspect initial portion of HTML for 'chrome' meta tag and report |
-// a different mime type in that case. |
-// |
-// We implement several documented interfaces |
-// supported by the original sink provided by urlmon. There are a few |
-// undocumented interfaces that we have chosen not to implement |
-// but delegate simply the QI. |
-class ProtocolSinkWrap |
- : public CComObjectRootEx<CComMultiThreadModel>, |
- public IInternetProtocolSink { |
- public: |
-BEGIN_COM_MAP(ProtocolSinkWrap) |
- COM_INTERFACE_ENTRY(IInternetProtocolSink) |
- COM_INTERFACE_BLIND_DELEGATE() |
-END_COM_MAP() |
- |
- static base::win::ScopedComPtr<IInternetProtocolSink> CreateNewSink( |
- IInternetProtocolSink* sink, ProtData* prot_data); |
- |
- // Enables or disables activation of Chrome Frame via the X-UA-Compatible |
- // header or meta tag. The tag/header is respected by default. |
- static void set_ignore_xua(bool ignore_xua) { ignore_xua_ = ignore_xua; } |
- static bool ignore_xua() { return ignore_xua_; } |
- |
- // Apparently this has to be public, to satisfy COM_INTERFACE_BLIND_DELEGATE |
- IInternetProtocolSink* delegate() { |
- return delegate_; |
- } |
- |
- protected: |
- ProtocolSinkWrap(); |
- ~ProtocolSinkWrap(); |
- |
- private: |
- static bool ignore_xua_; |
- |
- // IInternetProtocolSink methods |
- STDMETHOD(Switch)(PROTOCOLDATA* protocol_data); |
- STDMETHOD(ReportProgress)(ULONG status_code, LPCWSTR status_text); |
- STDMETHOD(ReportData)(DWORD flags, ULONG progress, ULONG max_progress); |
- STDMETHOD(ReportResult)(HRESULT result, DWORD error, LPCWSTR result_text); |
- |
- // Remember original sink |
- base::win::ScopedComPtr<IInternetProtocolSink> delegate_; |
- base::win::ScopedComPtr<IServiceProvider> delegate_service_provider_; |
- scoped_refptr<ProtData> prot_data_; |
- DISALLOW_COPY_AND_ASSIGN(ProtocolSinkWrap); |
-}; |
- |
-class ProtData : public base::RefCounted<ProtData> { |
- public: |
- ProtData(IInternetProtocol* protocol, InternetProtocol_Read_Fn read_fun, |
- const wchar_t* url); |
- ~ProtData(); |
- HRESULT Read(void* buffer, ULONG size, ULONG* size_read); |
- HRESULT ReportProgress(IInternetProtocolSink* delegate, |
- ULONG status_code, |
- LPCWSTR status_text); |
- HRESULT ReportData(IInternetProtocolSink* delegate, |
- DWORD flags, ULONG progress, ULONG max_progress); |
- HRESULT ReportResult(IInternetProtocolSink* delegate, HRESULT result, |
- DWORD error, LPCWSTR result_text); |
- void UpdateUrl(const wchar_t* url); |
- static scoped_refptr<ProtData> DataFromProtocol(IInternetProtocol* protocol); |
- |
- RendererType renderer_type() { |
- return renderer_type_; |
- } |
- |
- // Valid only if renderer_type_ is CHROME. |
- const std::string& referrer() const { |
- return referrer_; |
- } |
- |
- bool is_attach_external_tab_request() const { |
- return read_fun_ == NULL; |
- } |
- |
- // Removes the mapping between the protocol and the ProtData. |
- void Invalidate(); |
- |
- const std::wstring& url() const { |
- return url_; |
- } |
- |
- private: |
- typedef std::map<IInternetProtocol*, ProtData*> ProtocolDataMap; |
- static ProtocolDataMap datamap_; |
- static base::Lock datamap_lock_; |
- |
- // Url we are retrieving. Used for RendererTypeForUrl() only. |
- std::wstring url_; |
- // HTTP "Referrer" header if we detect are going to switch. |
- // We have to save and pass it to Chrome, so scripts can read it via DOM. |
- std::string referrer_; |
- |
- // Our gate to IInternetProtocol::Read() |
- IInternetProtocol* protocol_; |
- InternetProtocol_Read_Fn read_fun_; |
- |
- // What BINDSTATUS_MIMETYPEAVAILABLE and Co. tells us. |
- base::win::ScopedBstr suggested_mime_type_; |
- // At least one of the following has been received: |
- // BINDSTATUS_MIMETYPEAVAILABLE, |
- // MIMESTATUS_VERIFIEDMIMETYPEAVAILABLE |
- // BINDSTATUS_SERVER_MIMETYPEAVAILABLE |
- bool has_suggested_mime_type_; |
- // BINDSTATUS_SERVER_MIMETYPEAVAILABLE received, so we shall fire one. |
- bool has_server_mime_type_; |
- |
- RendererType renderer_type_; |
- |
- // Buffer for accumulated data including 1 extra for NULL-terminator |
- static const size_t kMaxContentSniffLength = 2 * 1024; |
- char buffer_[kMaxContentSniffLength + 1]; |
- unsigned long buffer_size_; // NOLINT |
- unsigned long buffer_pos_; // NOLINT |
- |
- HRESULT FillBuffer(); |
- void SaveSuggestedMimeType(LPCWSTR status_text); |
- void FireSuggestedMimeType(IInternetProtocolSink* delegate); |
- void SaveReferrer(IInternetProtocolSink* delegate); |
-}; |
- |
-struct TransactionHooks { |
- void InstallHooks(); |
- void RevertHooks(); |
-}; |
- |
-DECLSPEC_SELECTANY struct TransactionHooks g_trans_hooks; |
- |
-#endif // CHROME_FRAME_PROTOCOL_SINK_WRAP_H_ |