OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome_frame/test/ie_event_sink.h" | 5 #include "chrome_frame/test/ie_event_sink.h" |
6 | 6 |
7 #include "base/scoped_bstr_win.h" | 7 #include "base/scoped_bstr_win.h" |
8 #include "base/scoped_handle.h" | 8 #include "base/scoped_handle.h" |
9 #include "base/scoped_variant_win.h" | 9 #include "base/scoped_variant_win.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 } | 414 } |
415 | 415 |
416 STDMETHODIMP_(void) IEEventSink::OnNewWindow2(IDispatch** disp, | 416 STDMETHODIMP_(void) IEEventSink::OnNewWindow2(IDispatch** disp, |
417 VARIANT_BOOL* s) { | 417 VARIANT_BOOL* s) { |
418 if (listener_) | 418 if (listener_) |
419 listener_->OnNewWindow2(disp, s); | 419 listener_->OnNewWindow2(disp, s); |
420 } | 420 } |
421 | 421 |
422 STDMETHODIMP_(void) IEEventSink::OnNavigateError(IDispatch* dispatch, | 422 STDMETHODIMP_(void) IEEventSink::OnNavigateError(IDispatch* dispatch, |
423 VARIANT* url, VARIANT* frame_name, VARIANT* status_code, VARIANT* cancel) { | 423 VARIANT* url, VARIANT* frame_name, VARIANT* status_code, VARIANT* cancel) { |
424 DLOG(INFO) << __FUNCTION__; | 424 DVLOG(1) << __FUNCTION__; |
425 if (listener_) | 425 if (listener_) |
426 listener_->OnNavigateError(dispatch, url, frame_name, status_code, cancel); | 426 listener_->OnNavigateError(dispatch, url, frame_name, status_code, cancel); |
427 } | 427 } |
428 | 428 |
429 STDMETHODIMP IEEventSink::OnBeforeNavigate2( | 429 STDMETHODIMP IEEventSink::OnBeforeNavigate2( |
430 IDispatch* dispatch, VARIANT* url, VARIANT* flags, | 430 IDispatch* dispatch, VARIANT* url, VARIANT* flags, |
431 VARIANT* target_frame_name, VARIANT* post_data, VARIANT* headers, | 431 VARIANT* target_frame_name, VARIANT* post_data, VARIANT* headers, |
432 VARIANT_BOOL* cancel) { | 432 VARIANT_BOOL* cancel) { |
433 DLOG(INFO) << __FUNCTION__ | 433 DVLOG(1) << __FUNCTION__ |
434 << base::StringPrintf("%ls - 0x%08X", url->bstrVal, this); | 434 << base::StringPrintf("%ls - 0x%08X", url->bstrVal, this); |
435 // Reset any existing reference to chrome frame since this is a new | 435 // Reset any existing reference to chrome frame since this is a new |
436 // navigation. | 436 // navigation. |
437 DisconnectFromChromeFrame(); | 437 DisconnectFromChromeFrame(); |
438 if (listener_) | 438 if (listener_) |
439 listener_->OnBeforeNavigate2(dispatch, url, flags, target_frame_name, | 439 listener_->OnBeforeNavigate2(dispatch, url, flags, target_frame_name, |
440 post_data, headers, cancel); | 440 post_data, headers, cancel); |
441 return S_OK; | 441 return S_OK; |
442 } | 442 } |
443 | 443 |
444 STDMETHODIMP_(void) IEEventSink::OnNavigateComplete2( | 444 STDMETHODIMP_(void) IEEventSink::OnNavigateComplete2( |
445 IDispatch* dispatch, VARIANT* url) { | 445 IDispatch* dispatch, VARIANT* url) { |
446 DLOG(INFO) << __FUNCTION__; | 446 DVLOG(1) << __FUNCTION__; |
447 ConnectToChromeFrame(); | 447 ConnectToChromeFrame(); |
448 if (listener_) | 448 if (listener_) |
449 listener_->OnNavigateComplete2(dispatch, url); | 449 listener_->OnNavigateComplete2(dispatch, url); |
450 } | 450 } |
451 | 451 |
452 STDMETHODIMP_(void) IEEventSink::OnDocumentComplete( | 452 STDMETHODIMP_(void) IEEventSink::OnDocumentComplete( |
453 IDispatch* dispatch, VARIANT* url) { | 453 IDispatch* dispatch, VARIANT* url) { |
454 DLOG(INFO) << __FUNCTION__; | 454 DVLOG(1) << __FUNCTION__; |
455 EXPECT_TRUE(url); | 455 EXPECT_TRUE(url); |
456 if (!url) | 456 if (!url) |
457 return; | 457 return; |
458 if (listener_) | 458 if (listener_) |
459 listener_->OnDocumentComplete(dispatch, url); | 459 listener_->OnDocumentComplete(dispatch, url); |
460 } | 460 } |
461 | 461 |
462 STDMETHODIMP_(void) IEEventSink::OnFileDownload( | 462 STDMETHODIMP_(void) IEEventSink::OnFileDownload( |
463 VARIANT_BOOL active_doc, VARIANT_BOOL* cancel) { | 463 VARIANT_BOOL active_doc, VARIANT_BOOL* cancel) { |
464 DLOG(INFO) << __FUNCTION__ << base::StringPrintf(" 0x%08X ad=%i", this, | 464 DVLOG(1) << __FUNCTION__ |
465 active_doc); | 465 << base::StringPrintf(" 0x%08X ad=%i", this, active_doc); |
466 if (listener_) | 466 if (listener_) |
467 listener_->OnFileDownload(active_doc, cancel); | 467 listener_->OnFileDownload(active_doc, cancel); |
468 // Always cancel file downloads in tests. | 468 // Always cancel file downloads in tests. |
469 *cancel = VARIANT_TRUE; | 469 *cancel = VARIANT_TRUE; |
470 } | 470 } |
471 | 471 |
472 STDMETHODIMP_(void) IEEventSink::OnNewWindow3( | 472 STDMETHODIMP_(void) IEEventSink::OnNewWindow3( |
473 IDispatch** dispatch, VARIANT_BOOL* cancel, DWORD flags, BSTR url_context, | 473 IDispatch** dispatch, VARIANT_BOOL* cancel, DWORD flags, BSTR url_context, |
474 BSTR url) { | 474 BSTR url) { |
475 DLOG(INFO) << __FUNCTION__; | 475 DVLOG(1) << __FUNCTION__; |
476 EXPECT_TRUE(dispatch); | 476 EXPECT_TRUE(dispatch); |
477 if (!dispatch) | 477 if (!dispatch) |
478 return; | 478 return; |
479 | 479 |
480 if (listener_) | 480 if (listener_) |
481 listener_->OnNewWindow3(dispatch, cancel, flags, url_context, url); | 481 listener_->OnNewWindow3(dispatch, cancel, flags, url_context, url); |
482 | 482 |
483 // Note that |dispatch| is an [in/out] argument. IE is asking listeners if | 483 // Note that |dispatch| is an [in/out] argument. IE is asking listeners if |
484 // they want to use a IWebBrowser2 of their choice for the new window. | 484 // they want to use a IWebBrowser2 of their choice for the new window. |
485 // Since we need to listen on events on the new browser, we create one | 485 // Since we need to listen on events on the new browser, we create one |
486 // if needed. | 486 // if needed. |
487 if (!*dispatch) { | 487 if (!*dispatch) { |
488 ScopedComPtr<IDispatch> new_browser; | 488 ScopedComPtr<IDispatch> new_browser; |
489 HRESULT hr = new_browser.CreateInstance(CLSID_InternetExplorer, NULL, | 489 HRESULT hr = new_browser.CreateInstance(CLSID_InternetExplorer, NULL, |
490 CLSCTX_LOCAL_SERVER); | 490 CLSCTX_LOCAL_SERVER); |
491 DCHECK(SUCCEEDED(hr) && new_browser); | 491 DCHECK(SUCCEEDED(hr) && new_browser); |
492 *dispatch = new_browser.Detach(); | 492 *dispatch = new_browser.Detach(); |
493 } | 493 } |
494 | 494 |
495 if (*dispatch) | 495 if (*dispatch) |
496 listener_->OnNewBrowserWindow(*dispatch, url); | 496 listener_->OnNewBrowserWindow(*dispatch, url); |
497 } | 497 } |
498 | 498 |
499 STDMETHODIMP_(void) IEEventSink::OnQuit() { | 499 STDMETHODIMP_(void) IEEventSink::OnQuit() { |
500 DLOG(INFO) << __FUNCTION__; | 500 DVLOG(1) << __FUNCTION__; |
501 | 501 |
502 did_receive_on_quit_ = true; | 502 did_receive_on_quit_ = true; |
503 | 503 |
504 DispEventUnadvise(web_browser2_); | 504 DispEventUnadvise(web_browser2_); |
505 CoDisconnectObject(this, 0); | 505 CoDisconnectObject(this, 0); |
506 | 506 |
507 if (listener_) | 507 if (listener_) |
508 listener_->OnQuit(); | 508 listener_->OnQuit(); |
509 } | 509 } |
510 | 510 |
511 HRESULT IEEventSink::OnLoad(const VARIANT* param) { | 511 HRESULT IEEventSink::OnLoad(const VARIANT* param) { |
512 DLOG(INFO) << __FUNCTION__ << " " << param->bstrVal; | 512 DVLOG(1) << __FUNCTION__ << " " << param->bstrVal; |
513 ScopedVariant stack_object(*param); | 513 ScopedVariant stack_object(*param); |
514 if (chrome_frame_) { | 514 if (chrome_frame_) { |
515 if (listener_) | 515 if (listener_) |
516 listener_->OnLoad(param->bstrVal); | 516 listener_->OnLoad(param->bstrVal); |
517 } else { | 517 } else { |
518 DLOG(WARNING) << "Invalid chrome frame pointer"; | 518 DLOG(WARNING) << "Invalid chrome frame pointer"; |
519 } | 519 } |
520 return S_OK; | 520 return S_OK; |
521 } | 521 } |
522 | 522 |
523 HRESULT IEEventSink::OnLoadError(const VARIANT* param) { | 523 HRESULT IEEventSink::OnLoadError(const VARIANT* param) { |
524 DLOG(INFO) << __FUNCTION__ << " " << param->bstrVal; | 524 DVLOG(1) << __FUNCTION__ << " " << param->bstrVal; |
525 if (chrome_frame_) { | 525 if (chrome_frame_) { |
526 if (listener_) | 526 if (listener_) |
527 listener_->OnLoadError(param->bstrVal); | 527 listener_->OnLoadError(param->bstrVal); |
528 } else { | 528 } else { |
529 DLOG(WARNING) << "Invalid chrome frame pointer"; | 529 DLOG(WARNING) << "Invalid chrome frame pointer"; |
530 } | 530 } |
531 return S_OK; | 531 return S_OK; |
532 } | 532 } |
533 | 533 |
534 HRESULT IEEventSink::OnMessage(const VARIANT* param) { | 534 HRESULT IEEventSink::OnMessage(const VARIANT* param) { |
535 DLOG(INFO) << __FUNCTION__ << " " << param; | 535 DVLOG(1) << __FUNCTION__ << " " << param; |
536 if (!chrome_frame_.get()) { | 536 if (!chrome_frame_.get()) { |
537 DLOG(WARNING) << "Invalid chrome frame pointer"; | 537 DLOG(WARNING) << "Invalid chrome frame pointer"; |
538 return S_OK; | 538 return S_OK; |
539 } | 539 } |
540 | 540 |
541 ScopedVariant data, origin, source; | 541 ScopedVariant data, origin, source; |
542 if (param && (V_VT(param) == VT_DISPATCH)) { | 542 if (param && (V_VT(param) == VT_DISPATCH)) { |
543 wchar_t* properties[] = { L"data", L"origin", L"source" }; | 543 wchar_t* properties[] = { L"data", L"origin", L"source" }; |
544 const int prop_count = arraysize(properties); | 544 const int prop_count = arraysize(properties); |
545 DISPID ids[prop_count] = {0}; | 545 DISPID ids[prop_count] = {0}; |
(...skipping 13 matching lines...) Expand all Loading... |
559 source.Receive(), NULL, NULL)); | 559 source.Receive(), NULL, NULL)); |
560 } | 560 } |
561 } | 561 } |
562 | 562 |
563 if (listener_) | 563 if (listener_) |
564 listener_->OnMessage(V_BSTR(&data), V_BSTR(&origin), V_BSTR(&source)); | 564 listener_->OnMessage(V_BSTR(&data), V_BSTR(&origin), V_BSTR(&source)); |
565 return S_OK; | 565 return S_OK; |
566 } | 566 } |
567 | 567 |
568 } // namespace chrome_frame_test | 568 } // namespace chrome_frame_test |
OLD | NEW |