diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-28 21:15:15 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-28 21:15:15 +0000 |
commit | c4e45b3be08a8cefa237b25096f8a18fb5a5051d (patch) | |
tree | c6cb1e682bfde672b293406f8c6ea508694f3979 /chrome_frame/protocol_sink_wrap.h | |
parent | 437d1c7f6cf70dbdc3d008745d974714db7dd68a (diff) | |
download | chromium_src-c4e45b3be08a8cefa237b25096f8a18fb5a5051d.zip chromium_src-c4e45b3be08a8cefa237b25096f8a18fb5a5051d.tar.gz chromium_src-c4e45b3be08a8cefa237b25096f8a18fb5a5051d.tar.bz2 |
Ensure that window.open requests issued by ChromeFrame carry the correct cookies in the outgoing HTTP requests.
To achieve this we no longer issue navigations with the gcf:attach* prefix. We now issue a navigation to the current
page URL with the attach external tab suffix, which indicates that the page is forced into ChromeFrame without making
an actual HTTP request. This ensures that the new IE8 process has access to all HTTP cookies.
We need to patch IInternetProtocol::LockRequest and UnlockRequest to not call the underlying implementations for our
dummy request as this crashes in IE8 in the prebinding code path.
Fixes bug http://b/issue?id=2277519
Added tests for the CanNavigateFullTabMode helper function.
Bug=2277519
Review URL: http://codereview.chromium.org/3051018
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@54019 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/protocol_sink_wrap.h')
-rw-r--r-- | chrome_frame/protocol_sink_wrap.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/chrome_frame/protocol_sink_wrap.h b/chrome_frame/protocol_sink_wrap.h index c441adc..e0795e3 100644 --- a/chrome_frame/protocol_sink_wrap.h +++ b/chrome_frame/protocol_sink_wrap.h @@ -36,8 +36,10 @@ 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* InternetProtocolRoot_Continue_Fn)( - IInternetProtocolRoot* me, PROTOCOLDATA* data); +typedef HRESULT (STDMETHODCALLTYPE* InternetProtocol_LockRequest_Fn)( + IInternetProtocol* this_object, DWORD options); +typedef HRESULT (STDMETHODCALLTYPE* InternetProtocol_UnlockRequest_Fn)( + IInternetProtocol* this_object); enum RendererType { @@ -130,6 +132,10 @@ class ProtData : public base::RefCounted<ProtData> { return referrer_; } + bool is_attach_external_tab_request() const { + return read_fun_ == NULL; + } + private: typedef std::map<IInternetProtocol*, ProtData*> ProtocolDataMap; static ProtocolDataMap datamap_; |