Chromium Code Reviews| 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 #ifndef CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ | 5 #ifndef CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ |
| 6 #define CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ | 6 #define CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ |
| 7 | 7 |
| 8 #include <atlbase.h> | 8 #include <atlbase.h> |
| 9 #include <atlcom.h> | 9 #include <atlcom.h> |
| 10 #include <atlctl.h> | 10 #include <atlctl.h> |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 FireMethodWithParams(CF_EVENT_DISPID_ONCHANNELERROR, NULL, 0); | 142 FireMethodWithParams(CF_EVENT_DISPID_ONCHANNELERROR, NULL, 0); |
| 143 } | 143 } |
| 144 | 144 |
| 145 void Fire_onclose() { // NOLINT | 145 void Fire_onclose() { // NOLINT |
| 146 FireMethodWithParams(CF_EVENT_DISPID_ONCLOSE, NULL, 0); | 146 FireMethodWithParams(CF_EVENT_DISPID_ONCLOSE, NULL, 0); |
| 147 } | 147 } |
| 148 }; | 148 }; |
| 149 | 149 |
| 150 extern bool g_first_launch_by_process_; | 150 extern bool g_first_launch_by_process_; |
| 151 | 151 |
| 152 // Posted when the worker thread used for handling URL requests in IE finishes | |
| 153 // uninitialization. | |
| 154 #define WM_WORKER_THREAD_UNINITIALIZED_MSG (WM_APP + 1) | |
| 155 | |
| 156 // Common implementation for ActiveX and Active Document | 152 // Common implementation for ActiveX and Active Document |
| 157 template <class T, const CLSID& class_id> | 153 template <class T, const CLSID& class_id> |
| 158 class ATL_NO_VTABLE ChromeFrameActivexBase : // NOLINT | 154 class ATL_NO_VTABLE ChromeFrameActivexBase : // NOLINT |
| 159 public CComObjectRootEx<CComMultiThreadModel>, | 155 public CComObjectRootEx<CComMultiThreadModel>, |
| 160 public IOleControlImpl<T>, | 156 public IOleControlImpl<T>, |
| 161 public IOleObjectImpl<T>, | 157 public IOleObjectImpl<T>, |
| 162 public IOleInPlaceActiveObjectImpl<T>, | 158 public IOleInPlaceActiveObjectImpl<T>, |
| 163 public IViewObjectExImpl<T>, | 159 public IViewObjectExImpl<T>, |
| 164 public IOleInPlaceObjectWindowlessImpl<T>, | 160 public IOleInPlaceObjectWindowlessImpl<T>, |
| 165 public ISupportErrorInfo, | 161 public ISupportErrorInfo, |
| 166 public IQuickActivateImpl<T>, | 162 public IQuickActivateImpl<T>, |
| 167 public com_util::IProvideClassInfo2Impl<class_id, | 163 public com_util::IProvideClassInfo2Impl<class_id, |
| 168 DIID_DIChromeFrameEvents>, | 164 DIID_DIChromeFrameEvents>, |
| 169 public com_util::IDispatchImpl<IChromeFrame>, | 165 public com_util::IDispatchImpl<IChromeFrame>, |
| 170 public IChromeFrameInternal, | 166 public IChromeFrameInternal, |
| 171 public IConnectionPointContainerImpl<T>, | 167 public IConnectionPointContainerImpl<T>, |
| 172 public ProxyDIChromeFrameEvents<T>, | 168 public ProxyDIChromeFrameEvents<T>, |
| 173 public IPropertyNotifySinkCP<T>, | 169 public IPropertyNotifySinkCP<T>, |
| 174 public CComCoClass<T, &class_id>, | 170 public CComCoClass<T, &class_id>, |
| 175 public CComControl<T>, | 171 public CComControl<T>, |
| 176 public ChromeFramePlugin<T> { | 172 public ChromeFramePlugin<T>, |
| 173 public NavigationConstraintsImpl { | |
| 177 protected: | 174 protected: |
| 178 typedef std::set<base::win::ScopedComPtr<IDispatch> > EventHandlers; | 175 typedef std::set<base::win::ScopedComPtr<IDispatch> > EventHandlers; |
| 179 typedef ChromeFrameActivexBase<T, class_id> BasePlugin; | 176 typedef ChromeFrameActivexBase<T, class_id> BasePlugin; |
| 180 | 177 |
| 181 public: | 178 public: |
| 182 ChromeFrameActivexBase() | 179 ChromeFrameActivexBase() |
| 183 : ready_state_(READYSTATE_UNINITIALIZED), | 180 : ready_state_(READYSTATE_UNINITIALIZED), |
| 184 url_fetcher_(new UrlmonUrlRequestManager()), | 181 url_fetcher_(new UrlmonUrlRequestManager()), |
| 185 failed_to_fetch_in_place_frame_(false), | 182 failed_to_fetch_in_place_frame_(false), |
| 186 draw_sad_tab_(false), | 183 draw_sad_tab_(false), |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 568 draw_sad_tab_ = true; | 565 draw_sad_tab_ = true; |
| 569 | 566 |
| 570 ready_state_ = READYSTATE_UNINITIALIZED; | 567 ready_state_ = READYSTATE_UNINITIALIZED; |
| 571 FireOnChanged(DISPID_READYSTATE); | 568 FireOnChanged(DISPID_READYSTATE); |
| 572 } | 569 } |
| 573 | 570 |
| 574 virtual void OnCloseTab(int tab_handle) { | 571 virtual void OnCloseTab(int tab_handle) { |
| 575 Fire_onclose(); | 572 Fire_onclose(); |
| 576 } | 573 } |
| 577 | 574 |
| 575 // NavigationConstraints overrides. | |
| 576 virtual bool IsSchemeAllowed(const GURL&url) { | |
|
amit
2010/12/10 23:56:17
nit: space after &
ananta
2010/12/11 02:11:11
Done.
| |
| 577 bool allowed = NavigationConstraintsImpl::IsSchemeAllowed(url); | |
| 578 if (allowed) | |
| 579 return true; | |
| 580 | |
| 581 if (is_privileged_ && | |
| 582 (url.SchemeIs(chrome::kDataScheme) || | |
| 583 url.SchemeIs(chrome::kExtensionScheme))) { | |
| 584 return true; | |
| 585 } | |
| 586 return false; | |
| 587 } | |
| 588 | |
| 589 virtual bool IsZoneAllowed(const GURL& url) { | |
| 590 if (!security_manager_) { | |
| 591 HRESULT hr = security_manager_.CreateInstance( | |
| 592 CLSID_InternetSecurityManager); | |
| 593 if (FAILED(hr)) { | |
| 594 NOTREACHED() << __FUNCTION__ | |
| 595 << " Failed to create SecurityManager. Error: 0x%x" | |
| 596 << hr; | |
| 597 return false; | |
| 598 } | |
| 599 } | |
| 600 DWORD zone = URLZONE_INVALID; | |
| 601 std::wstring unicode_url = UTF8ToWide(url.spec()); | |
| 602 security_manager_->MapUrlToZone(unicode_url.c_str(), &zone, 0); | |
| 603 if (zone == URLZONE_UNTRUSTED) { | |
| 604 DLOG(WARNING) << __FUNCTION__ | |
| 605 << " Disallowing navigation to restricted url: " << url; | |
| 606 return false; | |
| 607 } | |
| 608 return true; | |
| 609 } | |
| 610 | |
| 578 // Overridden to take advantage of readystate prop changes and send those | 611 // Overridden to take advantage of readystate prop changes and send those |
| 579 // to potential listeners. | 612 // to potential listeners. |
| 580 HRESULT FireOnChanged(DISPID dispid) { | 613 HRESULT FireOnChanged(DISPID dispid) { |
| 581 if (dispid == DISPID_READYSTATE) { | 614 if (dispid == DISPID_READYSTATE) { |
| 582 Fire_onreadystatechanged(ready_state_); | 615 Fire_onreadystatechanged(ready_state_); |
| 583 } | 616 } |
| 584 return __super::FireOnChanged(dispid); | 617 return __super::FireOnChanged(dispid); |
| 585 } | 618 } |
| 586 | 619 |
| 587 // IChromeFrame | 620 // IChromeFrame |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 604 // Switch the src to UTF8 and try to expand to full URL | 637 // Switch the src to UTF8 and try to expand to full URL |
| 605 std::string src_utf8; | 638 std::string src_utf8; |
| 606 WideToUTF8(src, SysStringLen(src), &src_utf8); | 639 WideToUTF8(src, SysStringLen(src), &src_utf8); |
| 607 std::string full_url = ResolveURL(GetDocumentUrl(), src_utf8); | 640 std::string full_url = ResolveURL(GetDocumentUrl(), src_utf8); |
| 608 | 641 |
| 609 // We can initiate navigation here even if ready_state is not complete. | 642 // We can initiate navigation here even if ready_state is not complete. |
| 610 // We do not have to set proxy, and AutomationClient will take care | 643 // We do not have to set proxy, and AutomationClient will take care |
| 611 // of navigation just after CreateExternalTab is done. | 644 // of navigation just after CreateExternalTab is done. |
| 612 if (!automation_client_->InitiateNavigation(full_url, | 645 if (!automation_client_->InitiateNavigation(full_url, |
| 613 GetDocumentUrl(), | 646 GetDocumentUrl(), |
| 614 is_privileged_)) { | 647 this)) { |
| 615 // TODO(robertshield): Make InitiateNavigation return more useful | 648 // TODO(robertshield): Make InitiateNavigation return more useful |
| 616 // error information. | 649 // error information. |
| 617 return E_INVALIDARG; | 650 return E_INVALIDARG; |
| 618 } | 651 } |
| 619 | 652 |
| 620 // Save full URL in BSTR member | 653 // Save full URL in BSTR member |
| 621 url_.Reset(::SysAllocString(UTF8ToWide(full_url).c_str())); | 654 url_.Reset(::SysAllocString(UTF8ToWide(full_url).c_str())); |
| 622 | 655 |
| 623 return S_OK; | 656 return S_OK; |
| 624 } | 657 } |
| (...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1270 EventHandlers onmessage_; | 1303 EventHandlers onmessage_; |
| 1271 EventHandlers onloaderror_; | 1304 EventHandlers onloaderror_; |
| 1272 EventHandlers onload_; | 1305 EventHandlers onload_; |
| 1273 EventHandlers onreadystatechanged_; | 1306 EventHandlers onreadystatechanged_; |
| 1274 EventHandlers onprivatemessage_; | 1307 EventHandlers onprivatemessage_; |
| 1275 EventHandlers onextensionready_; | 1308 EventHandlers onextensionready_; |
| 1276 | 1309 |
| 1277 // Handle network requests when host network stack is used. Passed to the | 1310 // Handle network requests when host network stack is used. Passed to the |
| 1278 // automation client on initialization. | 1311 // automation client on initialization. |
| 1279 scoped_ptr<UrlmonUrlRequestManager> url_fetcher_; | 1312 scoped_ptr<UrlmonUrlRequestManager> url_fetcher_; |
| 1313 ScopedComPtr<IInternetSecurityManager> security_manager_; | |
| 1280 | 1314 |
| 1281 HINSTANCE prev_resource_instance_; | 1315 HINSTANCE prev_resource_instance_; |
| 1282 }; | 1316 }; |
| 1283 | 1317 |
| 1284 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ | 1318 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ |
| OLD | NEW |