| 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 // IE toolband implementation. | 5 // IE toolband implementation. |
| 6 #include "ceee/ie/plugin/toolband/tool_band.h" | 6 #include "ceee/ie/plugin/toolband/tool_band.h" |
| 7 | 7 |
| 8 #include <atlsafe.h> | 8 #include <atlsafe.h> |
| 9 #include <atlstr.h> | 9 #include <atlstr.h> |
| 10 #include <shlguid.h> | 10 #include <shlguid.h> |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 listening_to_browser_events_ = SUCCEEDED(hr); | 280 listening_to_browser_events_ = SUCCEEDED(hr); |
| 281 DCHECK(SUCCEEDED(hr)) << | 281 DCHECK(SUCCEEDED(hr)) << |
| 282 "DispEventAdvise on web browser failed. Error: " << hr; | 282 "DispEventAdvise on web browser failed. Error: " << hr; |
| 283 // Non-critical functionality. If fails in the field, just move on. | 283 // Non-critical functionality. If fails in the field, just move on. |
| 284 } | 284 } |
| 285 | 285 |
| 286 return S_OK; | 286 return S_OK; |
| 287 } | 287 } |
| 288 | 288 |
| 289 HRESULT ToolBand::InitializeAndShowWindow(IUnknown* site) { | 289 HRESULT ToolBand::InitializeAndShowWindow(IUnknown* site) { |
| 290 ScopedComPtr<IOleWindow> site_window; | 290 base::win::ScopedComPtr<IOleWindow> site_window; |
| 291 HRESULT hr = site_window.QueryFrom(site); | 291 HRESULT hr = site_window.QueryFrom(site); |
| 292 if (FAILED(hr)) { | 292 if (FAILED(hr)) { |
| 293 LOG(ERROR) << "Failed to get site window: " << com::LogHr(hr); | 293 LOG(ERROR) << "Failed to get site window: " << com::LogHr(hr); |
| 294 return hr; | 294 return hr; |
| 295 } | 295 } |
| 296 | 296 |
| 297 DCHECK(NULL != site_window.get()); | 297 DCHECK(NULL != site_window.get()); |
| 298 hr = site_window->GetWindow(&parent_window_.m_hWnd); | 298 hr = site_window->GetWindow(&parent_window_.m_hWnd); |
| 299 if (FAILED(hr)) { | 299 if (FAILED(hr)) { |
| 300 LOG(ERROR) << "Failed to get parent window handle: " << com::LogHr(hr); | 300 LOG(ERROR) << "Failed to get parent window handle: " << com::LogHr(hr); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 312 | 312 |
| 313 return hr; | 313 return hr; |
| 314 } | 314 } |
| 315 | 315 |
| 316 HRESULT ToolBand::Teardown() { | 316 HRESULT ToolBand::Teardown() { |
| 317 TRACE_EVENT_INSTANT("ceee.toolband.teardown", this, ""); | 317 TRACE_EVENT_INSTANT("ceee.toolband.teardown", this, ""); |
| 318 | 318 |
| 319 if (IsWindow()) { | 319 if (IsWindow()) { |
| 320 // Teardown the ActiveX host window. | 320 // Teardown the ActiveX host window. |
| 321 CAxWindow host(m_hWnd); | 321 CAxWindow host(m_hWnd); |
| 322 ScopedComPtr<IObjectWithSite> host_with_site; | 322 base::win::ScopedComPtr<IObjectWithSite> host_with_site; |
| 323 HRESULT hr = host.QueryHost(host_with_site.Receive()); | 323 HRESULT hr = host.QueryHost(host_with_site.Receive()); |
| 324 if (SUCCEEDED(hr)) | 324 if (SUCCEEDED(hr)) |
| 325 host_with_site->SetSite(NULL); | 325 host_with_site->SetSite(NULL); |
| 326 | 326 |
| 327 DestroyWindow(); | 327 DestroyWindow(); |
| 328 } | 328 } |
| 329 | 329 |
| 330 if (chrome_frame_) { | 330 if (chrome_frame_) { |
| 331 ChromeFrameEvents::DispEventUnadvise(chrome_frame_); | 331 ChromeFrameEvents::DispEventUnadvise(chrome_frame_); |
| 332 } | 332 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 343 | 343 |
| 344 void ToolBand::OnFinalMessage(HWND window) { | 344 void ToolBand::OnFinalMessage(HWND window) { |
| 345 GetUnknown()->Release(); | 345 GetUnknown()->Release(); |
| 346 } | 346 } |
| 347 | 347 |
| 348 LRESULT ToolBand::OnCreate(LPCREATESTRUCT lpCreateStruct) { | 348 LRESULT ToolBand::OnCreate(LPCREATESTRUCT lpCreateStruct) { |
| 349 // Grab a self-reference. | 349 // Grab a self-reference. |
| 350 GetUnknown()->AddRef(); | 350 GetUnknown()->AddRef(); |
| 351 | 351 |
| 352 // Create a host window instance. | 352 // Create a host window instance. |
| 353 ScopedComPtr<IAxWinHostWindow> host; | 353 base::win::ScopedComPtr<IAxWinHostWindow> host; |
| 354 HRESULT hr = CAxHostWindow::CreateInstance(host.Receive()); | 354 HRESULT hr = CAxHostWindow::CreateInstance(host.Receive()); |
| 355 if (FAILED(hr)) { | 355 if (FAILED(hr)) { |
| 356 LOG(ERROR) << "Failed to create ActiveX host window. " << com::LogHr(hr); | 356 LOG(ERROR) << "Failed to create ActiveX host window. " << com::LogHr(hr); |
| 357 return 1; | 357 return 1; |
| 358 } | 358 } |
| 359 | 359 |
| 360 // We're the site for the host window, this needs to be in place | 360 // We're the site for the host window, this needs to be in place |
| 361 // before we attach ChromeFrame to the ActiveX control window, so | 361 // before we attach ChromeFrame to the ActiveX control window, so |
| 362 // as to allow it to probe our service provider. | 362 // as to allow it to probe our service provider. |
| 363 hr = SetChildSite(host); | 363 hr = SetChildSite(host); |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 // user deleted the extension but the registry stayed the same. | 557 // user deleted the extension but the registry stayed the same. |
| 558 already_tried_installing_ = true; | 558 already_tried_installing_ = true; |
| 559 chrome_frame_->installExtension(CComBSTR(extension_path_.c_str())); | 559 chrome_frame_->installExtension(CComBSTR(extension_path_.c_str())); |
| 560 } else { | 560 } else { |
| 561 // Hide the browser bar as fast as we can. | 561 // Hide the browser bar as fast as we can. |
| 562 // Set the current height of the bar to 0, so that if the user manually | 562 // Set the current height of the bar to 0, so that if the user manually |
| 563 // shows the bar, it will not be visible on screen. | 563 // shows the bar, it will not be visible on screen. |
| 564 current_height_ = 0; | 564 current_height_ = 0; |
| 565 | 565 |
| 566 // Ask IE to reload all info for this toolband. | 566 // Ask IE to reload all info for this toolband. |
| 567 ScopedComPtr<IOleCommandTarget> cmd_target; | 567 base::win::ScopedComPtr<IOleCommandTarget> cmd_target; |
| 568 HRESULT hr = GetSite(IID_IOleCommandTarget, | 568 HRESULT hr = GetSite(IID_IOleCommandTarget, |
| 569 reinterpret_cast<void**>(cmd_target.Receive())); | 569 reinterpret_cast<void**>(cmd_target.Receive())); |
| 570 if (SUCCEEDED(hr)) { | 570 if (SUCCEEDED(hr)) { |
| 571 CComVariant band_id(static_cast<int>(band_id_)); | 571 CComVariant band_id(static_cast<int>(band_id_)); |
| 572 hr = cmd_target->Exec(&CGID_DeskBand, DBID_BANDINFOCHANGED, | 572 hr = cmd_target->Exec(&CGID_DeskBand, DBID_BANDINFOCHANGED, |
| 573 OLECMDEXECOPT_DODEFAULT, &band_id, NULL); | 573 OLECMDEXECOPT_DODEFAULT, &band_id, NULL); |
| 574 if (FAILED(hr)) { | 574 if (FAILED(hr)) { |
| 575 LOG(ERROR) << "Failed to Execute DBID_BANDINFOCHANGED. Error Code: " | 575 LOG(ERROR) << "Failed to Execute DBID_BANDINFOCHANGED. Error Code: " |
| 576 << com::LogHr(hr); | 576 << com::LogHr(hr); |
| 577 } | 577 } |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 677 std::hex << hr; | 677 std::hex << hr; |
| 678 return hr; | 678 return hr; |
| 679 } | 679 } |
| 680 | 680 |
| 681 if (existing_bho.vt != VT_EMPTY) { | 681 if (existing_bho.vt != VT_EMPTY) { |
| 682 DCHECK(existing_bho.vt == VT_UNKNOWN && existing_bho.punkVal != NULL); | 682 DCHECK(existing_bho.vt == VT_UNKNOWN && existing_bho.punkVal != NULL); |
| 683 #ifndef NDEBUG | 683 #ifndef NDEBUG |
| 684 if (existing_bho.vt == VT_UNKNOWN && existing_bho.punkVal != NULL) { | 684 if (existing_bho.vt == VT_UNKNOWN && existing_bho.punkVal != NULL) { |
| 685 // This is a sanity / assumption check regarding what we should regard | 685 // This is a sanity / assumption check regarding what we should regard |
| 686 // as a valid BHO. | 686 // as a valid BHO. |
| 687 ScopedComPtr<IPersist> bho_iid_access; | 687 base::win::ScopedComPtr<IPersist> bho_iid_access; |
| 688 HRESULT hr2 = bho_iid_access.QueryFrom(existing_bho.punkVal); | 688 HRESULT hr2 = bho_iid_access.QueryFrom(existing_bho.punkVal); |
| 689 DCHECK(SUCCEEDED(hr2) && bho_iid_access.get() != NULL); | 689 DCHECK(SUCCEEDED(hr2) && bho_iid_access.get() != NULL); |
| 690 if (SUCCEEDED(hr2) && bho_iid_access.get() != NULL) { | 690 if (SUCCEEDED(hr2) && bho_iid_access.get() != NULL) { |
| 691 CLSID calling_card = {}; | 691 CLSID calling_card = {}; |
| 692 hr2 = bho_iid_access->GetClassID(&calling_card); | 692 hr2 = bho_iid_access->GetClassID(&calling_card); |
| 693 DCHECK(SUCCEEDED(hr2) && calling_card == CLSID_BrowserHelperObject); | 693 DCHECK(SUCCEEDED(hr2) && calling_card == CLSID_BrowserHelperObject); |
| 694 } | 694 } |
| 695 } | 695 } |
| 696 #endif | 696 #endif |
| 697 DVLOG(1) << "BHO already loaded"; | 697 DVLOG(1) << "BHO already loaded"; |
| 698 if (existing_bho.vt != VT_UNKNOWN || existing_bho.punkVal == NULL) | 698 if (existing_bho.vt != VT_UNKNOWN || existing_bho.punkVal == NULL) |
| 699 return E_FAIL; | 699 return E_FAIL; |
| 700 | 700 |
| 701 hr = SendSessionIdToBho(existing_bho.punkVal); | 701 hr = SendSessionIdToBho(existing_bho.punkVal); |
| 702 DCHECK(SUCCEEDED(hr)) << "Failed to send tool band session ID to the " << | 702 DCHECK(SUCCEEDED(hr)) << "Failed to send tool band session ID to the " << |
| 703 "BHO." << com::LogHr(hr); | 703 "BHO." << com::LogHr(hr); |
| 704 return SUCCEEDED(hr) ? S_OK : hr; | 704 return SUCCEEDED(hr) ? S_OK : hr; |
| 705 } | 705 } |
| 706 | 706 |
| 707 ScopedComPtr<IObjectWithSite> bho; | 707 base::win::ScopedComPtr<IObjectWithSite> bho; |
| 708 hr = CreateBhoInstance(bho.Receive()); | 708 hr = CreateBhoInstance(bho.Receive()); |
| 709 | 709 |
| 710 if (FAILED(hr)) { | 710 if (FAILED(hr)) { |
| 711 NOTREACHED() << "Failed to create CEEE BHO." << com::LogHr(hr); | 711 NOTREACHED() << "Failed to create CEEE BHO." << com::LogHr(hr); |
| 712 return hr; | 712 return hr; |
| 713 } | 713 } |
| 714 | 714 |
| 715 hr = bho->SetSite(web_browser_); | 715 hr = bho->SetSite(web_browser_); |
| 716 if (FAILED(hr)) { | 716 if (FAILED(hr)) { |
| 717 NOTREACHED() << "CEEE BHO SetSite failed.:" << com::LogHr(hr); | 717 NOTREACHED() << "CEEE BHO SetSite failed.:" << com::LogHr(hr); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 731 return SUCCEEDED(hr) ? S_OK : hr; | 731 return SUCCEEDED(hr) ? S_OK : hr; |
| 732 } | 732 } |
| 733 | 733 |
| 734 HRESULT ToolBand::CreateBhoInstance(IObjectWithSite** new_bho_instance) { | 734 HRESULT ToolBand::CreateBhoInstance(IObjectWithSite** new_bho_instance) { |
| 735 DCHECK(new_bho_instance != NULL && *new_bho_instance == NULL); | 735 DCHECK(new_bho_instance != NULL && *new_bho_instance == NULL); |
| 736 return BrowserHelperObject::CreateInstance(new_bho_instance); | 736 return BrowserHelperObject::CreateInstance(new_bho_instance); |
| 737 } | 737 } |
| 738 | 738 |
| 739 HRESULT ToolBand::GetSessionId(int* session_id) { | 739 HRESULT ToolBand::GetSessionId(int* session_id) { |
| 740 if (chrome_frame_) { | 740 if (chrome_frame_) { |
| 741 ScopedComPtr<IChromeFrameInternal> chrome_frame_internal_; | 741 base::win::ScopedComPtr<IChromeFrameInternal> chrome_frame_internal_; |
| 742 chrome_frame_internal_.QueryFrom(chrome_frame_); | 742 chrome_frame_internal_.QueryFrom(chrome_frame_); |
| 743 if (chrome_frame_internal_) { | 743 if (chrome_frame_internal_) { |
| 744 return chrome_frame_internal_->getSessionId(session_id); | 744 return chrome_frame_internal_->getSessionId(session_id); |
| 745 } | 745 } |
| 746 } | 746 } |
| 747 NOTREACHED(); | 747 NOTREACHED(); |
| 748 return E_UNEXPECTED; | 748 return E_UNEXPECTED; |
| 749 } | 749 } |
| 750 | 750 |
| 751 HRESULT ToolBand::SendSessionIdToBho(IUnknown* bho) { | 751 HRESULT ToolBand::SendSessionIdToBho(IUnknown* bho) { |
| 752 if (already_sent_id_to_bho_) | 752 if (already_sent_id_to_bho_) |
| 753 return S_FALSE; | 753 return S_FALSE; |
| 754 // Now send the tool band's session ID to the BHO. | 754 // Now send the tool band's session ID to the BHO. |
| 755 ScopedComPtr<ICeeeBho> ceee_bho; | 755 base::win::ScopedComPtr<ICeeeBho> ceee_bho; |
| 756 HRESULT hr = ceee_bho.QueryFrom(bho); | 756 HRESULT hr = ceee_bho.QueryFrom(bho); |
| 757 if (SUCCEEDED(hr)) { | 757 if (SUCCEEDED(hr)) { |
| 758 int session_id = 0; | 758 int session_id = 0; |
| 759 hr = GetSessionId(&session_id); | 759 hr = GetSessionId(&session_id); |
| 760 if (SUCCEEDED(hr)) { | 760 if (SUCCEEDED(hr)) { |
| 761 hr = ceee_bho->SetToolBandSessionId(session_id); | 761 hr = ceee_bho->SetToolBandSessionId(session_id); |
| 762 if (SUCCEEDED(hr)) | 762 if (SUCCEEDED(hr)) |
| 763 already_sent_id_to_bho_ = true; | 763 already_sent_id_to_bho_ = true; |
| 764 return hr; | 764 return hr; |
| 765 } | 765 } |
| 766 } | 766 } |
| 767 return E_FAIL; | 767 return E_FAIL; |
| 768 } | 768 } |
| OLD | NEW |