Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9659)

Unified Diff: chrome_frame/protocol_sink_wrap.h

Issue 2824057: Chromeframe user-agent without need of HttpNegotiate patch. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_frame/http_negotiate.cc ('k') | chrome_frame/protocol_sink_wrap.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/protocol_sink_wrap.h
===================================================================
--- chrome_frame/protocol_sink_wrap.h (revision 52337)
+++ chrome_frame/protocol_sink_wrap.h (working copy)
@@ -19,6 +19,7 @@
#include "base/scoped_bstr_win.h"
#include "googleurl/src/gurl.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"
@@ -60,10 +61,13 @@
// but delegate simply the QI.
class ProtocolSinkWrap
: public CComObjectRootEx<CComMultiThreadModel>,
+ public IServiceProvider,
+ public UserAgentAddOn, // implements IHttpNegotiate
public IInternetProtocolSink {
public:
BEGIN_COM_MAP(ProtocolSinkWrap)
+ COM_INTERFACE_ENTRY(IServiceProvider)
COM_INTERFACE_ENTRY(IInternetProtocolSink)
COM_INTERFACE_BLIND_DELEGATE()
END_COM_MAP()
@@ -87,8 +91,16 @@
STDMETHOD(ReportData)(DWORD flags, ULONG progress, ULONG max_progress);
STDMETHOD(ReportResult)(HRESULT result, DWORD error, LPCWSTR result_text);
+ // IServiceProvider - return our HttpNegotiate or forward to delegate
+ STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void** ppvObject);
+
+ // Helpers.
+ HRESULT ObtainHttpNegotiate();
+ HRESULT ObtainServiceProvider();
+
// Remember original sink
ScopedComPtr<IInternetProtocolSink> delegate_;
+ ScopedComPtr<IServiceProvider> delegate_service_provider_;
scoped_refptr<ProtData> prot_data_;
DISALLOW_COPY_AND_ASSIGN(ProtocolSinkWrap);
};
@@ -113,6 +125,11 @@
return renderer_type_;
}
+ // Valid only if renderer_type_ is CHROME.
+ const std::string& referrer() const {
+ return referrer_;
+ }
+
private:
typedef std::map<IInternetProtocol*, ProtData*> ProtocolDataMap;
static ProtocolDataMap datamap_;
@@ -120,6 +137,10 @@
// Url we are retrieving. Used for IsOptInUrl() 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_;
@@ -145,6 +166,7 @@
HRESULT FillBuffer();
void SaveSuggestedMimeType(LPCWSTR status_text);
void FireSugestedMimeType(IInternetProtocolSink* delegate);
+ void SaveReferrer(IInternetProtocolSink* delegate);
};
struct TransactionHooks {
« no previous file with comments | « chrome_frame/http_negotiate.cc ('k') | chrome_frame/protocol_sink_wrap.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698