1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/extensions/extension_view_host_mac.h"
7 #import "base/mac/foundation_util.h"
8 #import "chrome/browser/ui/cocoa/chrome_event_processing_window.h"
9 #import "chrome/browser/ui/cocoa/extensions/extension_popup_controller.h"
10 #import "chrome/browser/ui/cocoa/info_bubble_window.h"
11 #include "content/public/browser/native_web_keyboard_event.h"
13 using content::NativeWebKeyboardEvent;
15 namespace extensions {
17 ExtensionViewHostMac::~ExtensionViewHostMac() {
18 // If there is a popup open for this host's extension, close it.
19 ExtensionPopupController* popup = [ExtensionPopupController popup];
20 InfoBubbleWindow* window =
21 base::mac::ObjCCast<InfoBubbleWindow>([popup window]);
22 if ([window isVisible] && [popup extensionViewHost] == this) {
23 [window setAllowedAnimations:info_bubble::kAnimateNone];
28 void ExtensionViewHostMac::UnhandledKeyboardEvent(
29 content::WebContents* source,
30 const NativeWebKeyboardEvent& event) {
31 if (event.skip_in_browser || event.type == NativeWebKeyboardEvent::Char ||
32 extension_host_type() != VIEW_TYPE_EXTENSION_POPUP) {
36 ChromeEventProcessingWindow* event_window =
37 static_cast<ChromeEventProcessingWindow*>([view()->native_view() window]);
38 DCHECK([event_window isKindOfClass:[ChromeEventProcessingWindow class]]);
39 [event_window redispatchKeyEvent:event.os_event];
42 } // namespace extensions