Add interface and Mac implementation for responsiveness::NativeEventObserver.
NativeEventObserver forwards will_run and did_run callbacks from the native
event processor to responsiveness::Watcher.
This CL also adds the macOS implementation. This requires modifying
BrowserCrApplication and ShellCrApplication to support a new protocol:
NativeEventProcessor, which allows observers to register for event will_run and
did_run callbacks.
Bug: 859155
Change-Id: Ie2db48efb4a93377ad54e91cbdb376d990b25f11
Reviewed-on: https://chromium-review.googlesource.com/1157235
Commit-Queue: Erik Chen <[email protected]>
Reviewed-by: Avi Drissman <[email protected]>
Reviewed-by: Alexander Timin <[email protected]>
Reviewed-by: Timothy Dresser <[email protected]>
Cr-Commit-Position: refs/heads/master@{#580345}
diff --git a/content/shell/browser/shell_application_mac.mm b/content/shell/browser/shell_application_mac.mm
index 58d8773c..89896675 100644
--- a/content/shell/browser/shell_application_mac.mm
+++ b/content/shell/browser/shell_application_mac.mm
@@ -5,12 +5,20 @@
#include "content/shell/browser/shell_application_mac.h"
#include "base/auto_reset.h"
+#include "base/observer_list.h"
+#include "content/public/browser/native_event_processor_mac.h"
+#include "content/public/browser/native_event_processor_observer_mac.h"
#include "content/public/common/url_constants.h"
#include "content/shell/browser/shell.h"
#include "content/shell/browser/shell_browser_context.h"
#include "content/shell/browser/shell_content_browser_client.h"
#include "url/gurl.h"
+@interface ShellCrApplication ()<NativeEventProcessor> {
+ base::ObserverList<content::NativeEventProcessorObserver> observers_;
+}
+@end
+
@implementation ShellCrApplication
- (BOOL)isHandlingSendEvent {
@@ -19,6 +27,9 @@
- (void)sendEvent:(NSEvent*)event {
base::AutoReset<BOOL> scoper(&handlingSendEvent_, YES);
+
+ content::ScopedNotifyNativeEventProcessorObserver scopedObserverNotifier(
+ &observers_, event);
[super sendEvent:event];
}
@@ -35,4 +46,14 @@
gfx::Size());
}
+- (void)addNativeEventProcessorObserver:
+ (content::NativeEventProcessorObserver*)observer {
+ observers_.AddObserver(observer);
+}
+
+- (void)removeNativeEventProcessorObserver:
+ (content::NativeEventProcessorObserver*)observer {
+ observers_.RemoveObserver(observer);
+}
+
@end