| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CHROME_FRAME_BIND_CONTEXT_INFO_H_ | |
| 6 #define CHROME_FRAME_BIND_CONTEXT_INFO_H_ | |
| 7 | |
| 8 #include <atlbase.h> | |
| 9 #include <atlcom.h> | |
| 10 | |
| 11 #include "base/win/scoped_comptr.h" | |
| 12 #include "chrome_frame/protocol_sink_wrap.h" | |
| 13 | |
| 14 class __declspec(uuid("71CC3EC7-7E8A-457f-93BC-1090CF31CC18")) | |
| 15 IBindContextInfoInternal : public IUnknown { | |
| 16 public: | |
| 17 STDMETHOD(GetCppObject)(void** me) = 0; | |
| 18 }; | |
| 19 | |
| 20 // This class maintains contextual information used by ChromeFrame. | |
| 21 // This information is maintained in the bind context. | |
| 22 // Association with GUID_NULL is for convenience. | |
| 23 class __declspec(uuid("00000000-0000-0000-0000-000000000000")) BindContextInfo | |
| 24 : public CComObjectRootEx<CComMultiThreadModel>, | |
| 25 public IBindContextInfoInternal { | |
| 26 public: | |
| 27 BindContextInfo(); | |
| 28 ~BindContextInfo(); | |
| 29 | |
| 30 BEGIN_COM_MAP(BindContextInfo) | |
| 31 COM_INTERFACE_ENTRY(IBindContextInfoInternal) | |
| 32 COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, ftm_) | |
| 33 END_COM_MAP() | |
| 34 | |
| 35 // Returns the BindContextInfo instance associated with the bind | |
| 36 // context. Creates it if needed. | |
| 37 // The returned info object will be AddRef-ed on return, so use | |
| 38 // base::win::ScopedComPtr<>::Receive() to receive this pointer. | |
| 39 static HRESULT FromBindContext(IBindCtx* bind_context, | |
| 40 BindContextInfo** info); | |
| 41 | |
| 42 void set_chrome_request(bool chrome_request) { | |
| 43 chrome_request_ = chrome_request; | |
| 44 } | |
| 45 | |
| 46 bool chrome_request() const { | |
| 47 return chrome_request_; | |
| 48 } | |
| 49 | |
| 50 void set_no_cache(bool no_cache) { | |
| 51 no_cache_ = no_cache; | |
| 52 } | |
| 53 | |
| 54 bool no_cache() const { | |
| 55 return no_cache_; | |
| 56 } | |
| 57 | |
| 58 bool is_switching() const { | |
| 59 return is_switching_; | |
| 60 } | |
| 61 | |
| 62 void SetToSwitch(IStream* cache); | |
| 63 | |
| 64 IStream* cache() { | |
| 65 return cache_; | |
| 66 } | |
| 67 | |
| 68 void set_prot_data(ProtData* data) { | |
| 69 prot_data_ = data; | |
| 70 } | |
| 71 | |
| 72 scoped_refptr<ProtData> get_prot_data() { | |
| 73 return prot_data_; | |
| 74 } | |
| 75 | |
| 76 bool has_prot_data() const { | |
| 77 return prot_data_.get() != NULL; | |
| 78 } | |
| 79 | |
| 80 void set_protocol(IInternetProtocol* protocol) { | |
| 81 protocol_ = protocol; | |
| 82 } | |
| 83 | |
| 84 IInternetProtocol* protocol() { | |
| 85 return protocol_.get(); | |
| 86 } | |
| 87 | |
| 88 // Returns the url being navigated to. We retrieve the url from the ProtData | |
| 89 // instance which wraps the underlying protocol sink. | |
| 90 std::wstring GetUrl(); | |
| 91 | |
| 92 protected: | |
| 93 STDMETHOD(GetCppObject)(void** me) { | |
| 94 DCHECK(me); | |
| 95 AddRef(); | |
| 96 *me = static_cast<BindContextInfo*>(this); | |
| 97 return S_OK; | |
| 98 } | |
| 99 | |
| 100 HRESULT Initialize(IBindCtx* bind_ctx); | |
| 101 | |
| 102 private: | |
| 103 base::win::ScopedComPtr<IStream> cache_; | |
| 104 bool no_cache_; | |
| 105 bool chrome_request_; | |
| 106 bool is_switching_; | |
| 107 base::win::ScopedComPtr<IUnknown> ftm_; | |
| 108 scoped_refptr<ProtData> prot_data_; | |
| 109 base::win::ScopedComPtr<IInternetProtocol> protocol_; | |
| 110 | |
| 111 DISALLOW_COPY_AND_ASSIGN(BindContextInfo); | |
| 112 }; | |
| 113 | |
| 114 #endif // CHROME_FRAME_BIND_CONTEXT_INFO_H_ | |
| OLD | NEW |