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 |