Index: chrome/browser/cocoa/test_event_utils.mm |
=================================================================== |
--- chrome/browser/cocoa/test_event_utils.mm (revision 0) |
+++ chrome/browser/cocoa/test_event_utils.mm (revision 0) |
@@ -0,0 +1,45 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#import <Cocoa/Cocoa.h> |
+ |
+#include "chrome/browser/cocoa/test_event_utils.h" |
+ |
+ScopedClassSwizzler::ScopedClassSwizzler(Class target, Class source, |
+ SEL selector) { |
+ old_selector_impl_ = class_getInstanceMethod(target, selector); |
+ new_selector_impl_ = class_getInstanceMethod(source, selector); |
+ method_exchangeImplementations(old_selector_impl_, new_selector_impl_); |
+} |
+ |
+ScopedClassSwizzler::~ScopedClassSwizzler() { |
+ method_exchangeImplementations(old_selector_impl_, new_selector_impl_); |
+} |
+ |
+namespace test_event_utils { |
+ |
+NSEvent* MakeMouseEvent(NSEventType type, NSUInteger modifiers) { |
+ if (type == NSOtherMouseUp) { |
+ // To synthesize middle clicks we need to create a CGEvent with the |
+ // "center" button flags so that our resulting NSEvent will have the |
+ // appropriate buttonNumber field. NSEvent provides no way to create a |
+ // mouse event with a buttonNumber directly. |
+ CGPoint location = { 0, 0 }; |
+ CGEventRef event = CGEventCreateMouseEvent(NULL, kCGEventOtherMouseUp, |
+ location, |
+ kCGMouseButtonCenter); |
+ return [NSEvent eventWithCGEvent:event]; |
+ } |
+ return [NSEvent mouseEventWithType:type |
+ location:NSMakePoint(0, 0) |
+ modifierFlags:modifiers |
+ timestamp:0 |
+ windowNumber:0 |
+ context:nil |
+ eventNumber:0 |
+ clickCount:1 |
+ pressure:1.0]; |
+} |
+ |
+} // namespace test_event_utils |