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

Side by Side Diff: chrome_frame/chrome_frame_activex_base.h

Issue 1718019: Fix a ChromeFrame crash reported on the crash server while processing an acce... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years, 8 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 | « no previous file | no next file » | 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 896 matching lines...) Expand 10 before | Expand all | Expand 10 after
907 // 0x80020101 == SCRIPT_E_REPORTED. 907 // 0x80020101 == SCRIPT_E_REPORTED.
908 // When the script we're invoking has an error, we get this error back. 908 // When the script we're invoking has an error, we get this error back.
909 DLOG_IF(ERROR, FAILED(hr) && hr != 0x80020101) << "Failed to invoke script"; 909 DLOG_IF(ERROR, FAILED(hr) && hr != 0x80020101) << "Failed to invoke script";
910 return hr; 910 return hr;
911 } 911 }
912 912
913 // Gives the browser a chance to handle an accelerator that was 913 // Gives the browser a chance to handle an accelerator that was
914 // sent to the out of proc chromium instance. 914 // sent to the out of proc chromium instance.
915 // Returns S_OK iff the accelerator was handled by the browser. 915 // Returns S_OK iff the accelerator was handled by the browser.
916 HRESULT AllowFrameToTranslateAccelerator(const MSG& msg) { 916 HRESULT AllowFrameToTranslateAccelerator(const MSG& msg) {
917 static const int kMayTranslateAcceleratorOffset = 0x170;
917 // Although IBrowserService2 is officially deprecated, it's still alive 918 // Although IBrowserService2 is officially deprecated, it's still alive
918 // and well in IE7 and earlier. We have to use it here to correctly give 919 // and well in IE7 and earlier. We have to use it here to correctly give
919 // the browser a chance to handle keyboard shortcuts. 920 // the browser a chance to handle keyboard shortcuts.
920 // This happens automatically for activex components that have windows that 921 // This happens automatically for activex components that have windows that
921 // belong to the current thread. In that circumstance IE owns the message 922 // belong to the current thread. In that circumstance IE owns the message
922 // loop and can walk the line of components allowing each participant the 923 // loop and can walk the line of components allowing each participant the
923 // chance to handle the keystroke and eventually falls back to 924 // chance to handle the keystroke and eventually falls back to
924 // v_MayTranslateAccelerator. However in our case, the message loop is 925 // v_MayTranslateAccelerator. However in our case, the message loop is
925 // owned by the out-of-proc chromium instance so IE doesn't have a chance to 926 // owned by the out-of-proc chromium instance so IE doesn't have a chance to
926 // fall back on its default behavior. Instead we give IE a chance to 927 // fall back on its default behavior. Instead we give IE a chance to
927 // handle the shortcut here. 928 // handle the shortcut here.
928
929 MSG accel_message = msg; 929 MSG accel_message = msg;
930 accel_message.hwnd = ::GetParent(m_hWnd); 930 accel_message.hwnd = ::GetParent(m_hWnd);
931
932 HRESULT hr = S_FALSE; 931 HRESULT hr = S_FALSE;
933 ScopedComPtr<IBrowserService2> bs2; 932 ScopedComPtr<IBrowserService2> bs2;
933 // The code below explicitly checks for whether the
934 // IBrowserService2::v_MayTranslateAccelerator function is valid. On IE8
935 // there is one vtable ieframe!c_ImpostorBrowserService2Vtbl where this
936 // function entry is NULL which leads to a crash. We don't know under what
937 // circumstances this vtable is actually used though.
934 if (S_OK == DoQueryService(SID_STopLevelBrowser, m_spInPlaceSite, 938 if (S_OK == DoQueryService(SID_STopLevelBrowser, m_spInPlaceSite,
935 bs2.Receive()) && bs2.get()) { 939 bs2.Receive()) && bs2.get() &&
940 (bs2 + kMayTranslateAcceleratorOffset)) {
936 hr = bs2->v_MayTranslateAccelerator(&accel_message); 941 hr = bs2->v_MayTranslateAccelerator(&accel_message);
937 } else { 942 } else {
938 // IE8 doesn't support IBrowserService2 unless you enable a special, 943 // IE8 doesn't support IBrowserService2 unless you enable a special,
939 // undocumented flag with CoInternetSetFeatureEnabled and even then, 944 // undocumented flag with CoInternetSetFeatureEnabled and even then,
940 // the object you get back implements only a couple of methods of 945 // the object you get back implements only a couple of methods of
941 // that interface... all the other entries in the vtable are NULL. 946 // that interface... all the other entries in the vtable are NULL.
942 // In addition, the class that implements it is called 947 // In addition, the class that implements it is called
943 // ImpostorBrowserService2 :) 948 // ImpostorBrowserService2 :)
944 // IE8 does have a new interface though, presumably called 949 // IE8 does have a new interface though, presumably called
945 // ITabBrowserService or something that can be abbreviated to TBS. 950 // ITabBrowserService or something that can be abbreviated to TBS.
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
1120 EventHandlers onreadystatechanged_; 1125 EventHandlers onreadystatechanged_;
1121 EventHandlers onprivatemessage_; 1126 EventHandlers onprivatemessage_;
1122 EventHandlers onextensionready_; 1127 EventHandlers onextensionready_;
1123 1128
1124 // Handle network requests when host network stack is used. Passed to the 1129 // Handle network requests when host network stack is used. Passed to the
1125 // automation client on initialization. 1130 // automation client on initialization.
1126 UrlmonUrlRequestManager url_fetcher_; 1131 UrlmonUrlRequestManager url_fetcher_;
1127 }; 1132 };
1128 1133
1129 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_ 1134 #endif // CHROME_FRAME_CHROME_FRAME_ACTIVEX_BASE_H_
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698