diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-17 22:39:03 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-17 22:39:03 +0000 |
commit | fe522afac00dfb9b736cea828df64ac713d1052a (patch) | |
tree | 2998233cc33a080b46ce63cb93760c24a4eceeb7 /chrome_frame/http_negotiate.h | |
parent | 541af713a1aee523a8870f3291ec06c19d24c2e3 (diff) | |
download | chromium_src-fe522afac00dfb9b736cea828df64ac713d1052a.zip chromium_src-fe522afac00dfb9b736cea828df64ac713d1052a.tar.gz chromium_src-fe522afac00dfb9b736cea828df64ac713d1052a.tar.bz2 |
Restore the IHttpNegotiate patch in ChromeFrame for IE9 which sends the short UA string
by default without the Post Platform values which we rely on. This reverts back to the
old behavior for IE9 with the bug that certain top level requests like Refresh on a page
rendered in IE will be sent out with the UA string without the chrome frame suffix.
BUG=45087
TEST=Covered by old http negotiate unit test.
Review URL: http://codereview.chromium.org/5957001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69586 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/http_negotiate.h')
-rw-r--r-- | chrome_frame/http_negotiate.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/chrome_frame/http_negotiate.h b/chrome_frame/http_negotiate.h index 151ad23..eb17c7f 100644 --- a/chrome_frame/http_negotiate.h +++ b/chrome_frame/http_negotiate.h @@ -12,6 +12,53 @@ #include "base/basictypes.h" #include "base/scoped_comptr_win.h" +// Typedefs for IHttpNegotiate methods. +typedef HRESULT (STDMETHODCALLTYPE* IHttpNegotiate_BeginningTransaction_Fn)( + IHttpNegotiate* me, LPCWSTR url, LPCWSTR headers, DWORD reserved, + LPWSTR* additional_headers); +typedef HRESULT (STDMETHODCALLTYPE* IHttpNegotiate_OnResponse_Fn)( + IHttpNegotiate* me, DWORD response_code, LPCWSTR response_header, + LPCWSTR request_header, LPWSTR* additional_request_headers); + +// Typedefs for IBindStatusCallback methods. +typedef HRESULT (STDMETHODCALLTYPE* IBindStatusCallback_StartBinding_Fn)( + IBindStatusCallback* me, DWORD reserved, IBinding *binding); + +// Typedefs for IInternetProtocolSink methods. +typedef HRESULT (STDMETHODCALLTYPE* IInternetProtocolSink_ReportProgress_Fn)( + IInternetProtocolSink* me, ULONG status_code, LPCWSTR status_text); + +// Patches methods of urlmon's IHttpNegotiate implementation for the purposes +// of adding to the http user agent header. + +// Also patches one of the IBindStatusCallback implementations in urlmon to pick +// up an IBinding during the StartBinding call. The IBinding implementor then +// gets a patch applied to its IInternetProtocolSink's ReportProgress method. +// The patched is there so that the reporting of the MIME type to the IBinding +// implementor can be changed if an X-Chrome-Frame HTTP header is present +// in the response headers. If anyone can suggest a more straightforward way of +// doing this, I would be eternally grateful. +class HttpNegotiatePatch { + // class is not to be instantiated atm. + HttpNegotiatePatch(); + ~HttpNegotiatePatch(); + + public: + static bool Initialize(); + static void Uninitialize(); + + // IHttpNegotiate patch methods + static STDMETHODIMP BeginningTransaction( + IHttpNegotiate_BeginningTransaction_Fn original, IHttpNegotiate* me, + LPCWSTR url, LPCWSTR headers, DWORD reserved, LPWSTR* additional_headers); + + protected: + static HRESULT PatchHttpNegotiate(IUnknown* to_patch); + + private: + DISALLOW_COPY_AND_ASSIGN(HttpNegotiatePatch); +}; + // From the latest urlmon.h. Symbol name prepended with LOCAL_ to // avoid conflict (and therefore build errors) for those building with // a newer Windows SDK. |