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

Side by Side Diff: chrome_frame/chrome_frame_activex_base.h

Issue 5814004: Fixing a regression introduced with r69101, which now prevents Chrome Frame... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years 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/chrome_frame_activex.cc ('k') | chrome_frame/chrome_frame_npapi.h » ('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) 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 11 matching lines...) Expand all
22 #include "base/utf_string_conversions.h" 22 #include "base/utf_string_conversions.h"
23 #include "base/win/scoped_bstr.h" 23 #include "base/win/scoped_bstr.h"
24 #include "base/win/scoped_comptr.h" 24 #include "base/win/scoped_comptr.h"
25 #include "base/win/scoped_variant.h" 25 #include "base/win/scoped_variant.h"
26 #include "grit/chrome_frame_resources.h" 26 #include "grit/chrome_frame_resources.h"
27 #include "ceee/ie/common/ceee_util.h" 27 #include "ceee/ie/common/ceee_util.h"
28 #include "chrome/common/url_constants.h" 28 #include "chrome/common/url_constants.h"
29 #include "chrome_frame/chrome_frame_plugin.h" 29 #include "chrome_frame/chrome_frame_plugin.h"
30 #include "chrome_frame/com_message_event.h" 30 #include "chrome_frame/com_message_event.h"
31 #include "chrome_frame/com_type_info_holder.h" 31 #include "chrome_frame/com_type_info_holder.h"
32 #include "chrome_frame/navigation_constraints.h"
33 #include "chrome_frame/simple_resource_loader.h" 32 #include "chrome_frame/simple_resource_loader.h"
34 #include "chrome_frame/urlmon_url_request.h" 33 #include "chrome_frame/urlmon_url_request.h"
35 #include "chrome_frame/urlmon_url_request_private.h" 34 #include "chrome_frame/urlmon_url_request_private.h"
36 #include "chrome_frame/utils.h" 35 #include "chrome_frame/utils.h"
37 #include "grit/generated_resources.h" 36 #include "grit/generated_resources.h"
38 #include "net/base/cookie_monster.h" 37 #include "net/base/cookie_monster.h"
39 38
40 // Include without path to make GYP build see it. 39 // Include without path to make GYP build see it.
41 #include "chrome_tab.h" // NOLINT 40 #include "chrome_tab.h" // NOLINT
42 41
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 public IQuickActivateImpl<T>, 162 public IQuickActivateImpl<T>,
164 public com_util::IProvideClassInfo2Impl<class_id, 163 public com_util::IProvideClassInfo2Impl<class_id,
165 DIID_DIChromeFrameEvents>, 164 DIID_DIChromeFrameEvents>,
166 public com_util::IDispatchImpl<IChromeFrame>, 165 public com_util::IDispatchImpl<IChromeFrame>,
167 public IChromeFrameInternal, 166 public IChromeFrameInternal,
168 public IConnectionPointContainerImpl<T>, 167 public IConnectionPointContainerImpl<T>,
169 public ProxyDIChromeFrameEvents<T>, 168 public ProxyDIChromeFrameEvents<T>,
170 public IPropertyNotifySinkCP<T>, 169 public IPropertyNotifySinkCP<T>,
171 public CComCoClass<T, &class_id>, 170 public CComCoClass<T, &class_id>,
172 public CComControl<T>, 171 public CComControl<T>,
173 public ChromeFramePlugin<T>, 172 public ChromeFramePlugin<T> {
174 public NavigationConstraintsImpl {
175 protected: 173 protected:
176 typedef std::set<base::win::ScopedComPtr<IDispatch> > EventHandlers; 174 typedef std::set<base::win::ScopedComPtr<IDispatch> > EventHandlers;
177 typedef ChromeFrameActivexBase<T, class_id> BasePlugin; 175 typedef ChromeFrameActivexBase<T, class_id> BasePlugin;
178 176
179 public: 177 public:
180 ChromeFrameActivexBase() 178 ChromeFrameActivexBase()
181 : ready_state_(READYSTATE_UNINITIALIZED), 179 : ready_state_(READYSTATE_UNINITIALIZED),
182 url_fetcher_(new UrlmonUrlRequestManager()), 180 url_fetcher_(new UrlmonUrlRequestManager()),
183 failed_to_fetch_in_place_frame_(false), 181 failed_to_fetch_in_place_frame_(false),
184 draw_sad_tab_(false), 182 draw_sad_tab_(false),
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
381 // ActiveX controls genereally will want to do this, 379 // ActiveX controls genereally will want to do this,
382 // returning true, while true top-level documents 380 // returning true, while true top-level documents
383 // (ActiveDocument servers) will not. Your specialization 381 // (ActiveDocument servers) will not. Your specialization
384 // of this template should implement this method based on how 382 // of this template should implement this method based on how
385 // it "feels" from a security perspective. If it's hosted in another 383 // it "feels" from a security perspective. If it's hosted in another
386 // scriptable document, return true, else false. 384 // scriptable document, return true, else false.
387 // 385 //
388 // The base implementation returns true unless we are in privileged 386 // The base implementation returns true unless we are in privileged
389 // mode, in which case we always trust our container so we return false. 387 // mode, in which case we always trust our container so we return false.
390 bool is_frame_busting_enabled() const { 388 bool is_frame_busting_enabled() const {
391 return !is_privileged_; 389 return !is_privileged();
392 } 390 }
393 391
394 // Needed to support PostTask. 392 // Needed to support PostTask.
395 static bool ImplementsThreadSafeReferenceCounting() { 393 static bool ImplementsThreadSafeReferenceCounting() {
396 return true; 394 return true;
397 } 395 }
398 396
399 protected: 397 protected:
400 virtual void GetProfilePath(const std::wstring& profile_name, 398 virtual void GetProfilePath(const std::wstring& profile_name,
401 FilePath* profile_path) { 399 FilePath* profile_path) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 std::wstring wide_url = url_; 485 std::wstring wide_url = url_;
488 GURL parsed_url(WideToUTF8(wide_url)); 486 GURL parsed_url(WideToUTF8(wide_url));
489 487
490 // If Chrome-Frame is presently navigated to an extension page, navigating 488 // If Chrome-Frame is presently navigated to an extension page, navigating
491 // the host to a url with scheme chrome-extension will fail, so we 489 // the host to a url with scheme chrome-extension will fail, so we
492 // point the host at http:local_host. Note that this is NOT the URL 490 // point the host at http:local_host. Note that this is NOT the URL
493 // to which the host is directed. It is only used as a temporary message 491 // to which the host is directed. It is only used as a temporary message
494 // passing mechanism between this CF instance, and the BHO that will 492 // passing mechanism between this CF instance, and the BHO that will
495 // be constructed in the new IE tab. 493 // be constructed in the new IE tab.
496 if (parsed_url.SchemeIs("chrome-extension") && 494 if (parsed_url.SchemeIs("chrome-extension") &&
497 is_privileged_) { 495 is_privileged()) {
498 const char kScheme[] = "http"; 496 const char kScheme[] = "http";
499 const char kHost[] = "local_host"; 497 const char kHost[] = "local_host";
500 498
501 GURL::Replacements r; 499 GURL::Replacements r;
502 r.SetScheme(kScheme, url_parse::Component(0, sizeof(kScheme) -1)); 500 r.SetScheme(kScheme, url_parse::Component(0, sizeof(kScheme) -1));
503 r.SetHost(kHost, url_parse::Component(0, sizeof(kHost) - 1)); 501 r.SetHost(kHost, url_parse::Component(0, sizeof(kHost) - 1));
504 parsed_url = parsed_url.ReplaceComponents(r); 502 parsed_url = parsed_url.ReplaceComponents(r);
505 } 503 }
506 504
507 std::string url = base::StringPrintf( 505 std::string url = base::StringPrintf(
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 draw_sad_tab_ = true; 564 draw_sad_tab_ = true;
567 565
568 ready_state_ = READYSTATE_UNINITIALIZED; 566 ready_state_ = READYSTATE_UNINITIALIZED;
569 FireOnChanged(DISPID_READYSTATE); 567 FireOnChanged(DISPID_READYSTATE);
570 } 568 }
571 569
572 virtual void OnCloseTab(int tab_handle) { 570 virtual void OnCloseTab(int tab_handle) {
573 Fire_onclose(); 571 Fire_onclose();
574 } 572 }
575 573
576 // NavigationConstraints overrides.
577 virtual bool IsSchemeAllowed(const GURL& url) {
578 bool allowed = NavigationConstraintsImpl::IsSchemeAllowed(url);
579 if (allowed)
580 return true;
581
582 if (is_privileged_ &&
583 (url.SchemeIs(chrome::kDataScheme) ||
584 url.SchemeIs(chrome::kExtensionScheme))) {
585 return true;
586 }
587 return false;
588 }
589
590 // Overridden to take advantage of readystate prop changes and send those 574 // Overridden to take advantage of readystate prop changes and send those
591 // to potential listeners. 575 // to potential listeners.
592 HRESULT FireOnChanged(DISPID dispid) { 576 HRESULT FireOnChanged(DISPID dispid) {
593 if (dispid == DISPID_READYSTATE) { 577 if (dispid == DISPID_READYSTATE) {
594 Fire_onreadystatechanged(ready_state_); 578 Fire_onreadystatechanged(ready_state_);
595 } 579 }
596 return __super::FireOnChanged(dispid); 580 return __super::FireOnChanged(dispid);
597 } 581 }
598 582
599 // IChromeFrame 583 // IChromeFrame
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
726 STDMETHOD(get_useChromeNetwork)(VARIANT_BOOL* use_chrome_network) { 710 STDMETHOD(get_useChromeNetwork)(VARIANT_BOOL* use_chrome_network) {
727 if (!use_chrome_network) 711 if (!use_chrome_network)
728 return E_INVALIDARG; 712 return E_INVALIDARG;
729 713
730 *use_chrome_network = 714 *use_chrome_network =
731 automation_client_->use_chrome_network() ? VARIANT_TRUE : VARIANT_FALSE; 715 automation_client_->use_chrome_network() ? VARIANT_TRUE : VARIANT_FALSE;
732 return S_OK; 716 return S_OK;
733 } 717 }
734 718
735 STDMETHOD(put_useChromeNetwork)(VARIANT_BOOL use_chrome_network) { 719 STDMETHOD(put_useChromeNetwork)(VARIANT_BOOL use_chrome_network) {
736 if (!is_privileged_) { 720 if (!is_privileged()) {
737 DLOG(ERROR) << "Attempt to set useChromeNetwork in non-privileged mode"; 721 DLOG(ERROR) << "Attempt to set useChromeNetwork in non-privileged mode";
738 return E_ACCESSDENIED; 722 return E_ACCESSDENIED;
739 } 723 }
740 724
741 automation_client_->set_use_chrome_network( 725 automation_client_->set_use_chrome_network(
742 (VARIANT_FALSE != use_chrome_network)); 726 (VARIANT_FALSE != use_chrome_network));
743 return S_OK; 727 return S_OK;
744 } 728 }
745 729
746 // Posts a message to the chrome frame. 730 // Posts a message to the chrome frame.
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 } 807 }
824 808
825 *version = SysAllocString(automation_client_->GetVersion().c_str()); 809 *version = SysAllocString(automation_client_->GetVersion().c_str());
826 return S_OK; 810 return S_OK;
827 } 811 }
828 812
829 STDMETHOD(postPrivateMessage)(BSTR message, BSTR origin, BSTR target) { 813 STDMETHOD(postPrivateMessage)(BSTR message, BSTR origin, BSTR target) {
830 if (NULL == message) 814 if (NULL == message)
831 return E_INVALIDARG; 815 return E_INVALIDARG;
832 816
833 if (!is_privileged_) { 817 if (!is_privileged()) {
834 DLOG(ERROR) << "Attempt to postPrivateMessage in non-privileged mode"; 818 DLOG(ERROR) << "Attempt to postPrivateMessage in non-privileged mode";
835 return E_ACCESSDENIED; 819 return E_ACCESSDENIED;
836 } 820 }
837 821
838 DCHECK(automation_client_.get()); 822 DCHECK(automation_client_.get());
839 std::string utf8_message, utf8_origin, utf8_target; 823 std::string utf8_message, utf8_origin, utf8_target;
840 WideToUTF8(message, ::SysStringLen(message), &utf8_message); 824 WideToUTF8(message, ::SysStringLen(message), &utf8_message);
841 WideToUTF8(origin, ::SysStringLen(origin), &utf8_origin); 825 WideToUTF8(origin, ::SysStringLen(origin), &utf8_origin);
842 WideToUTF8(target, ::SysStringLen(target), &utf8_target); 826 WideToUTF8(target, ::SysStringLen(target), &utf8_target);
843 827
844 if (!automation_client_->ForwardMessageFromExternalHost(utf8_message, 828 if (!automation_client_->ForwardMessageFromExternalHost(utf8_message,
845 utf8_origin, 829 utf8_origin,
846 utf8_target)) { 830 utf8_target)) {
847 Error(L"Failed to post message to chrome frame"); 831 Error(L"Failed to post message to chrome frame");
848 return E_FAIL; 832 return E_FAIL;
849 } 833 }
850 834
851 return S_OK; 835 return S_OK;
852 } 836 }
853 837
854 STDMETHOD(installExtension)(BSTR crx_path) { 838 STDMETHOD(installExtension)(BSTR crx_path) {
855 DCHECK(automation_client_.get()); 839 DCHECK(automation_client_.get());
856 840
857 if (NULL == crx_path) { 841 if (NULL == crx_path) {
858 NOTREACHED(); 842 NOTREACHED();
859 return E_INVALIDARG; 843 return E_INVALIDARG;
860 } 844 }
861 845
862 if (!is_privileged_) { 846 if (!is_privileged()) {
863 DLOG(ERROR) << "Attempt to installExtension in non-privileged mode"; 847 DLOG(ERROR) << "Attempt to installExtension in non-privileged mode";
864 return E_ACCESSDENIED; 848 return E_ACCESSDENIED;
865 } 849 }
866 850
867 FilePath::StringType crx_path_str(crx_path); 851 FilePath::StringType crx_path_str(crx_path);
868 FilePath crx_file_path(crx_path_str); 852 FilePath crx_file_path(crx_path_str);
869 853
870 automation_client_->InstallExtension(crx_file_path, NULL); 854 automation_client_->InstallExtension(crx_file_path, NULL);
871 return S_OK; 855 return S_OK;
872 } 856 }
873 857
874 STDMETHOD(loadExtension)(BSTR path) { 858 STDMETHOD(loadExtension)(BSTR path) {
875 DCHECK(automation_client_.get()); 859 DCHECK(automation_client_.get());
876 860
877 if (NULL == path) { 861 if (NULL == path) {
878 NOTREACHED(); 862 NOTREACHED();
879 return E_INVALIDARG; 863 return E_INVALIDARG;
880 } 864 }
881 865
882 if (!is_privileged_) { 866 if (!is_privileged()) {
883 DLOG(ERROR) << "Attempt to loadExtension in non-privileged mode"; 867 DLOG(ERROR) << "Attempt to loadExtension in non-privileged mode";
884 return E_ACCESSDENIED; 868 return E_ACCESSDENIED;
885 } 869 }
886 870
887 FilePath::StringType path_str(path); 871 FilePath::StringType path_str(path);
888 FilePath file_path(path_str); 872 FilePath file_path(path_str);
889 873
890 automation_client_->LoadExpandedExtension(file_path, NULL); 874 automation_client_->LoadExpandedExtension(file_path, NULL);
891 return S_OK; 875 return S_OK;
892 } 876 }
893 877
894 STDMETHOD(getEnabledExtensions)() { 878 STDMETHOD(getEnabledExtensions)() {
895 DCHECK(automation_client_.get()); 879 DCHECK(automation_client_.get());
896 880
897 if (!is_privileged_) { 881 if (!is_privileged()) {
898 DLOG(ERROR) << "Attempt to getEnabledExtensions in non-privileged mode"; 882 DLOG(ERROR) << "Attempt to getEnabledExtensions in non-privileged mode";
899 return E_ACCESSDENIED; 883 return E_ACCESSDENIED;
900 } 884 }
901 885
902 automation_client_->GetEnabledExtensions(NULL); 886 automation_client_->GetEnabledExtensions(NULL);
903 return S_OK; 887 return S_OK;
904 } 888 }
905 889
906 STDMETHOD(getSessionId)(int* session_id) { 890 STDMETHOD(getSessionId)(int* session_id) {
907 DCHECK(automation_client_.get()); 891 DCHECK(automation_client_.get());
908 DCHECK(session_id); 892 DCHECK(session_id);
909 893
910 if (!is_privileged_) { 894 if (!is_privileged()) {
911 DLOG(ERROR) << "Attempt to getSessionId in non-privileged mode"; 895 DLOG(ERROR) << "Attempt to getSessionId in non-privileged mode";
912 return E_ACCESSDENIED; 896 return E_ACCESSDENIED;
913 } 897 }
914 898
915 *session_id = automation_client_->GetSessionId(); 899 *session_id = automation_client_->GetSessionId();
916 return (*session_id) == -1 ? S_FALSE : S_OK; 900 return (*session_id) == -1 ? S_FALSE : S_OK;
917 } 901 }
918 902
919 STDMETHOD(registerBhoIfNeeded)() { 903 STDMETHOD(registerBhoIfNeeded)() {
920 return E_NOTIMPL; 904 return E_NOTIMPL;
(...skipping 13 matching lines...) Expand all
934 } else if (LowerCaseEqualsASCII(event_type, event_type_end, "load")) { 918 } else if (LowerCaseEqualsASCII(event_type, event_type_end, "load")) {
935 *handlers = &onload_; 919 *handlers = &onload_;
936 } else if (LowerCaseEqualsASCII(event_type, event_type_end, "loaderror")) { 920 } else if (LowerCaseEqualsASCII(event_type, event_type_end, "loaderror")) {
937 *handlers = &onloaderror_; 921 *handlers = &onloaderror_;
938 } else if (LowerCaseEqualsASCII(event_type, event_type_end, 922 } else if (LowerCaseEqualsASCII(event_type, event_type_end,
939 "readystatechanged")) { 923 "readystatechanged")) {
940 *handlers = &onreadystatechanged_; 924 *handlers = &onreadystatechanged_;
941 } else if (LowerCaseEqualsASCII(event_type, event_type_end, 925 } else if (LowerCaseEqualsASCII(event_type, event_type_end,
942 "privatemessage")) { 926 "privatemessage")) {
943 // This event handler is only available in privileged mode. 927 // This event handler is only available in privileged mode.
944 if (is_privileged_) { 928 if (is_privileged()) {
945 *handlers = &onprivatemessage_; 929 *handlers = &onprivatemessage_;
946 } else { 930 } else {
947 Error("Event type 'privatemessage' is privileged"); 931 Error("Event type 'privatemessage' is privileged");
948 hr = E_ACCESSDENIED; 932 hr = E_ACCESSDENIED;
949 } 933 }
950 } else if (LowerCaseEqualsASCII(event_type, event_type_end, 934 } else if (LowerCaseEqualsASCII(event_type, event_type_end,
951 "extensionready")) { 935 "extensionready")) {
952 // This event handler is only available in privileged mode. 936 // This event handler is only available in privileged mode.
953 if (is_privileged_) { 937 if (is_privileged()) {
954 *handlers = &onextensionready_; 938 *handlers = &onextensionready_;
955 } else { 939 } else {
956 Error("Event type 'extensionready' is privileged"); 940 Error("Event type 'extensionready' is privileged");
957 hr = E_ACCESSDENIED; 941 hr = E_ACCESSDENIED;
958 } 942 }
959 } else { 943 } else {
960 Error(base::StringPrintf( 944 Error(base::StringPrintf(
961 "Event type '%ls' not found", event_type).c_str()); 945 "Event type '%ls' not found", event_type).c_str());
962 hr = E_INVALIDARG; 946 hr = E_INVALIDARG;
963 } 947 }
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
1287 EventHandlers onextensionready_; 1271 EventHandlers onextensionready_;
1288 1272
1289 // Handle network requests when host network stack is used. Passed to the 1273 // Handle network requests when host network stack is used. Passed to the
1290 // automation client on initialization. 1274 // automation client on initialization.
1291 scoped_ptr<UrlmonUrlRequestManager> url_fetcher_; 1275 scoped_ptr<UrlmonUrlRequestManager> url_fetcher_;
1292 1276
1293 HINSTANCE prev_resource_instance_; 1277 HINSTANCE prev_resource_instance_;
1294 }; 1278 };
1295 1279
1296 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ 1280 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_
OLDNEW
« no previous file with comments | « chrome_frame/chrome_frame_activex.cc ('k') | chrome_frame/chrome_frame_npapi.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698