Index: chrome/browser/renderer_host/render_widget_host_view_mac.mm |
=================================================================== |
--- chrome/browser/renderer_host/render_widget_host_view_mac.mm (revision 30343) |
+++ chrome/browser/renderer_host/render_widget_host_view_mac.mm (working copy) |
@@ -5,7 +5,7 @@ |
#include "chrome/browser/renderer_host/render_widget_host_view_mac.h" |
#include "base/histogram.h" |
-#include "base/scoped_nsobject.h" |
+#import "base/scoped_nsobject.h" |
#include "base/string_util.h" |
#include "base/sys_string_conversions.h" |
#include "chrome/browser/browser_trial.h" |
@@ -544,7 +544,7 @@ |
if (ignoreKeyEvents_) |
return NO; |
- // We have some magic in |CrApplication sendEvent:| that always sends key |
+ // We have some magic in |CrApplication sendEvent:| that always sends key |
// events to |keyEvent:| so that cocoa doesn't have a chance to intercept it. |
DCHECK([[self window] firstResponder] != self); |
return NO; |
@@ -554,8 +554,7 @@ |
if (ignoreKeyEvents_) |
return; |
- // TODO(avi): Possibly kill self? See RenderWidgetHostViewWin::OnKeyEvent and |
- // http://b/issue?id=1192881 . |
+ scoped_nsobject<RenderWidgetHostViewCocoa> keepSelfAlive([self retain]); |
pink (ping after 24hrs)
2009/10/28 19:56:40
in mozilla these were generally named kungFuDeathG
|
// Don't cancel child popups; the key events are probably what's triggering |
// the popup in the first place. |
@@ -591,7 +590,14 @@ |
// To send an onkeydown() event before an onkeypress() event, we should |
// dispatch this NSKeyDown event AFTER sending it to the renderer. |
// (See <https://bugs.webkit.org/show_bug.cgi?id=25119>). |
- if ([theEvent type] == NSKeyDown) |
+ // |
+ // If this object's retainCount is 1, the only reference is the one held by |
+ // keepSelfAlive. All other references may have been destroyed in the |
+ // RenderWidgetHost::ForwardKeyboardEvent call above if it resulted in tab |
+ // closure. Were it not for that single reference, this object would |
+ // already be deallocated. In that case, there's no point in calling |
+ // -interpretKeyEvents:. |
+ if ([self retainCount] > 1 && [theEvent type] == NSKeyDown) |
[self interpretKeyEvents:[NSArray arrayWithObject:theEvent]]; |
// Possibly autohide the cursor. |
@@ -1255,4 +1261,3 @@ |
} |
@end |
- |