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

Side by Side Diff: chrome_frame/protocol_sink_wrap.cc

Issue 259025: Add the chromeframe tag to the user agent header at runtime instead of static... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome_frame/protocol_sink_wrap.h ('k') | chrome_frame/test/html_util_unittests.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <htiframe.h> 5 #include <htiframe.h>
6 6
7 #include "chrome_frame/protocol_sink_wrap.h" 7 #include "chrome_frame/protocol_sink_wrap.h"
8 8
9 #include "base/scoped_bstr_win.h"
10 #include "base/logging.h" 9 #include "base/logging.h"
11 #include "base/registry.h" 10 #include "base/registry.h"
12 #include "base/scoped_bstr_win.h" 11 #include "base/scoped_bstr_win.h"
13 #include "base/singleton.h" 12 #include "base/singleton.h"
14 #include "base/string_util.h" 13 #include "base/string_util.h"
15 14
16 #include "chrome_frame/utils.h" 15 #include "chrome_frame/utils.h"
17 16
18 // BINDSTATUS_SERVER_MIMETYPEAVAILABLE == 54. Introduced in IE 8, so 17 // BINDSTATUS_SERVER_MIMETYPEAVAILABLE == 54. Introduced in IE 8, so
19 // not in everyone's headers yet. See: 18 // not in everyone's headers yet. See:
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 if (url) 225 if (url)
227 url_ = url; 226 url_ = url;
228 227
229 CComCritSecLock<CComAutoCriticalSection> lock(sink_map_lock_); 228 CComCritSecLock<CComAutoCriticalSection> lock(sink_map_lock_);
230 DCHECK(sink_map_.end() == sink_map_.find(protocol)); 229 DCHECK(sink_map_.end() == sink_map_.find(protocol));
231 sink_map_[protocol] = this; 230 sink_map_[protocol] = this;
232 DLOG(INFO) << "ProtocolSinkWrap: active sinks: " << sink_map_.size(); 231 DLOG(INFO) << "ProtocolSinkWrap: active sinks: " << sink_map_.size();
233 return true; 232 return true;
234 } 233 }
235 234
236 HRESULT WINAPI ProtocolSinkWrap::CheckOutgoingInterface(void* obj,
237 REFIID iid, LPVOID* ret, DWORD cookie) {
238 ProtocolSinkWrap* instance = reinterpret_cast<ProtocolSinkWrap*>(obj);
239 HRESULT hr = E_NOINTERFACE;
240 if (instance && instance->delegate_)
241 hr = instance->delegate_->QueryInterface(iid, ret);
242
243 #ifndef NDEBUG
244 if (SUCCEEDED(hr)) {
245 wchar_t iid_string[64] = {0};
246 StringFromGUID2(iid, iid_string, arraysize(iid_string));
247 DLOG(INFO) << "Giving out wrapped interface: " << iid_string;
248 }
249 #endif
250
251 return hr;
252 }
253
254 HRESULT WINAPI ProtocolSinkWrap::IfDelegateSupports(void* obj,
255 REFIID iid, LPVOID* ret, DWORD cookie) {
256 HRESULT hr = E_NOINTERFACE;
257 ProtocolSinkWrap* instance = reinterpret_cast<ProtocolSinkWrap*>(obj);
258 if (instance && instance->delegate_) {
259 ScopedComPtr<IUnknown> original;
260 hr = instance->delegate_->QueryInterface(iid,
261 reinterpret_cast<void**>(original.Receive()));
262 if (original) {
263 IUnknown* supported_interface = reinterpret_cast<IUnknown*>(
264 reinterpret_cast<DWORD_PTR>(obj) + cookie);
265 supported_interface->AddRef();
266 *ret = supported_interface;
267 hr = S_OK;
268 }
269 }
270
271 return hr;
272 }
273
274 // IInternetProtocolSink methods 235 // IInternetProtocolSink methods
275 STDMETHODIMP ProtocolSinkWrap::Switch(PROTOCOLDATA* protocol_data) { 236 STDMETHODIMP ProtocolSinkWrap::Switch(PROTOCOLDATA* protocol_data) {
276 HRESULT hr = E_FAIL; 237 HRESULT hr = E_FAIL;
277 if (delegate_) 238 if (delegate_)
278 hr = delegate_->Switch(protocol_data); 239 hr = delegate_->Switch(protocol_data);
279 return hr; 240 return hr;
280 } 241 }
281 242
282 STDMETHODIMP ProtocolSinkWrap::ReportProgress(ULONG status_code, 243 STDMETHODIMP ProtocolSinkWrap::ReportProgress(ULONG status_code,
283 LPCWSTR status_text) { 244 LPCWSTR status_text) {
284 DLOG(INFO) << "ProtocolSinkWrap::ReportProgress: Code:" << status_code << 245 DLOG(INFO) << "ProtocolSinkWrap::ReportProgress: Code:" << status_code <<
285 " Text: " << (status_text ? status_text : L""); 246 " Text: " << (status_text ? status_text : L"");
286 if ((BINDSTATUS_MIMETYPEAVAILABLE == status_code) || 247 if ((BINDSTATUS_MIMETYPEAVAILABLE == status_code) ||
287 (BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE == status_code)) { 248 (BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE == status_code)) {
288 // If we have a MIMETYPE and that MIMETYPE is not "text/html". we don't 249 // If we have a MIMETYPE and that MIMETYPE is not "text/html". we don't
289 // want to do anything with this. 250 // want to do anything with this.
290 if (status_text) { 251 if (status_text) {
291 size_t status_text_length = lstrlenW(status_text); 252 size_t status_text_length = lstrlenW(status_text);
292 const wchar_t* status_text_end = status_text + std::min( 253 const wchar_t* status_text_end = status_text + std::min(
293 status_text_length, arraysize(kTextHtmlMimeType) - 1); 254 status_text_length, arraysize(kTextHtmlMimeType) - 1);
294 if (!LowerCaseEqualsASCII(status_text, status_text_end, 255 if (!LowerCaseEqualsASCII(status_text, status_text_end,
295 kTextHtmlMimeType)) { 256 kTextHtmlMimeType)) {
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 366 }
406 367
407 HRESULT hr = E_FAIL; 368 HRESULT hr = E_FAIL;
408 if (delegate_) 369 if (delegate_)
409 hr = delegate_->ReportResult(result, error, result_text); 370 hr = delegate_->ReportResult(result, error, result_text);
410 371
411 return hr; 372 return hr;
412 } 373 }
413 374
414 // IInternetBindInfoEx 375 // IInternetBindInfoEx
415 STDMETHODIMP ProtocolSinkWrap::GetBindInfo( 376 STDMETHODIMP ProtocolSinkWrap::GetBindInfo(DWORD* flags,
416 DWORD* flags, BINDINFO* bind_info_ret) { 377 BINDINFO* bind_info_ret) {
417 ScopedComPtr<IInternetBindInfo> bind_info; 378 ScopedComPtr<IInternetBindInfo> bind_info;
418 HRESULT hr = bind_info.QueryFrom(delegate_); 379 HRESULT hr = bind_info.QueryFrom(delegate_);
419 if (bind_info) 380 if (bind_info)
420 hr = bind_info->GetBindInfo(flags, bind_info_ret); 381 hr = bind_info->GetBindInfo(flags, bind_info_ret);
421 return hr; 382 return hr;
422 } 383 }
423 384
424 STDMETHODIMP ProtocolSinkWrap::GetBindString(ULONG string_type, 385 STDMETHODIMP ProtocolSinkWrap::GetBindString(ULONG string_type,
425 LPOLESTR* string_array, ULONG array_size, ULONG* size_returned) { 386 LPOLESTR* string_array, ULONG array_size, ULONG* size_returned) {
426 ScopedComPtr<IInternetBindInfo> bind_info; 387 ScopedComPtr<IInternetBindInfo> bind_info;
427 HRESULT hr = bind_info.QueryFrom(delegate_); 388 HRESULT hr = bind_info.QueryFrom(delegate_);
428 if (bind_info) 389 if (bind_info)
429 hr = bind_info->GetBindString(string_type, string_array, 390 hr = bind_info->GetBindString(string_type, string_array,
430 array_size, size_returned); 391 array_size, size_returned);
431 return hr; 392 return hr;
432 } 393 }
433 394
434 STDMETHODIMP ProtocolSinkWrap::GetBindInfoEx(DWORD *flags, BINDINFO* bind_info, 395 STDMETHODIMP ProtocolSinkWrap::GetBindInfoEx(DWORD* flags, BINDINFO* bind_info,
435 DWORD* bindf2, DWORD *reserved) { 396 DWORD* bindf2, DWORD* reserved) {
436 ScopedComPtr<IInternetBindInfoEx> bind_info_ex; 397 ScopedComPtr<IInternetBindInfoEx> bind_info_ex;
437 HRESULT hr = bind_info_ex.QueryFrom(delegate_); 398 HRESULT hr = bind_info_ex.QueryFrom(delegate_);
438 if (bind_info_ex) 399 if (bind_info_ex)
439 hr = bind_info_ex->GetBindInfoEx(flags, bind_info, bindf2, reserved); 400 hr = bind_info_ex->GetBindInfoEx(flags, bind_info, bindf2, reserved);
440 return hr; 401 return hr;
441 } 402 }
442 403
443 // IServiceProvider 404 // IServiceProvider
444 STDMETHODIMP ProtocolSinkWrap::QueryService(REFGUID service_guid, 405 STDMETHODIMP ProtocolSinkWrap::QueryService(REFGUID service_guid,
445 REFIID riid, void** service) { 406 REFIID riid, void** service) {
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 HRESULT hr = DoQueryService(GUID_NULL, sink, http_negotiate.Receive()); 618 HRESULT hr = DoQueryService(GUID_NULL, sink, http_negotiate.Receive());
658 if (http_negotiate) 619 if (http_negotiate)
659 hr = DoQueryService(IID_ITargetFrame2, http_negotiate, web_browser); 620 hr = DoQueryService(IID_ITargetFrame2, http_negotiate, web_browser);
660 621
661 return hr; 622 return hr;
662 } 623 }
663 624
664 ScopedComPtr<IInternetProtocolSink> ProtocolSinkWrap::MaybeWrapSink( 625 ScopedComPtr<IInternetProtocolSink> ProtocolSinkWrap::MaybeWrapSink(
665 IInternetProtocol* protocol, IInternetProtocolSink* prot_sink, 626 IInternetProtocol* protocol, IInternetProtocolSink* prot_sink,
666 const wchar_t* url) { 627 const wchar_t* url) {
667 ScopedComPtr<IInternetProtocolSink> sink_to_use; 628 ScopedComPtr<IInternetProtocolSink> sink_to_use(prot_sink);
668 sink_to_use.QueryFrom(prot_sink);
669 ScopedComPtr<IWebBrowser2> web_browser; 629 ScopedComPtr<IWebBrowser2> web_browser;
670 WebBrowserFromProtocolSink(prot_sink, web_browser.Receive()); 630 WebBrowserFromProtocolSink(prot_sink, web_browser.Receive());
671 if (web_browser) { 631 if (web_browser) {
672 CComObject<ProtocolSinkWrap>* wrap = NULL; 632 CComObject<ProtocolSinkWrap>* wrap = NULL;
673 CComObject<ProtocolSinkWrap>::CreateInstance(&wrap); 633 CComObject<ProtocolSinkWrap>::CreateInstance(&wrap);
674 DCHECK(wrap); 634 DCHECK(wrap);
675 if (wrap->Initialize(protocol, prot_sink, url)) { 635 if (wrap->Initialize(protocol, prot_sink, url)) {
676 sink_to_use = wrap; 636 sink_to_use = wrap;
677 } 637 }
678 } 638 }
679 639
680 return sink_to_use; 640 return sink_to_use;
681 } 641 }
OLDNEW
« no previous file with comments | « chrome_frame/protocol_sink_wrap.h ('k') | chrome_frame/test/html_util_unittests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698