Index: chrome_frame/bind_context_info.h |
=================================================================== |
--- chrome_frame/bind_context_info.h (revision 47036) |
+++ chrome_frame/bind_context_info.h (working copy) |
@@ -11,15 +11,24 @@ |
#include "base/scoped_bstr_win.h" |
#include "base/scoped_comptr_win.h" |
+class __declspec(uuid("71CC3EC7-7E8A-457f-93BC-1090CF31CC18")) |
+IBindContextInfoInternal : public IUnknown { |
+ public: |
+ STDMETHOD(GetCppObject)(void** me) = 0; |
+}; |
+ |
// This class maintains contextual information used by ChromeFrame. |
// This information is maintained in the bind context. |
-class BindContextInfo : public IUnknown, public CComObjectRoot { |
+class BindContextInfo |
+ : public IBindContextInfoInternal, |
+ public CComObjectRoot { |
public: |
BindContextInfo(); |
- virtual ~BindContextInfo() {} |
+ ~BindContextInfo(); |
BEGIN_COM_MAP(BindContextInfo) |
- COM_INTERFACE_ENTRY(IUnknown) |
+ COM_INTERFACE_ENTRY(IBindContextInfoInternal) |
+ COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, ftm_) |
END_COM_MAP() |
// Returns the BindContextInfo instance associated with the bind |
@@ -52,20 +61,35 @@ |
return cache_; |
} |
- void set_url(const std::wstring& url) { |
- url_ = url; |
+ // Accept a const wchar_t* to ensure that we don't have a reference |
+ // to someone else's buffer. |
+ void set_url(const wchar_t* url) { |
+ DCHECK(url); |
+ if (url) { |
+ url_ = url; |
+ } else { |
+ url_.clear(); |
+ } |
} |
- const std::wstring url() const { |
+ const std::wstring& url() const { |
return url_; |
} |
private: |
+ STDMETHOD(GetCppObject)(void** me) { |
+ DCHECK(me); |
+ *me = static_cast<BindContextInfo*>(this); |
+ return S_OK; |
+ } |
+ |
+ private: |
ScopedComPtr<IStream> cache_; |
bool no_cache_; |
bool chrome_request_; |
bool is_switching_; |
std::wstring url_; |
+ ScopedComPtr<IUnknown> ftm_; |
DISALLOW_COPY_AND_ASSIGN(BindContextInfo); |
}; |