Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / extensions / extension_view_mac.mm
index 2d96538..351cbb9 100644 (file)
@@ -2,15 +2,17 @@
 // 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/ui/cocoa/extensions/extension_view_mac.h"
 
-#include "chrome/browser/extensions/extension_host.h"
+#import <Cocoa/Cocoa.h>
+
+#include "base/mac/foundation_util.h"
+#include "chrome/browser/extensions/extension_view_host.h"
+#import "chrome/browser/ui/cocoa/chrome_event_processing_window.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/render_widget_host_view.h"
 #include "content/public/browser/web_contents.h"
-#include "content/public/browser/web_contents_view.h"
+#include "extensions/browser/extension_host.h"
 #include "extensions/common/view_type.h"
 
 // The minimum/maximum dimensions of the popup.
@@ -25,26 +27,27 @@ ExtensionViewMac::ExtensionViewMac(extensions::ExtensionHost* extension_host,
       extension_host_(extension_host),
       container_(NULL) {
   DCHECK(extension_host_);
-  [native_view() setHidden:YES];
+  [GetNativeView() setHidden:YES];
 }
 
 ExtensionViewMac::~ExtensionViewMac() {
 }
 
-void ExtensionViewMac::Init() {
-  CreateWidgetHostView();
+void ExtensionViewMac::WindowFrameChanged() {
+  if (render_view_host()->GetView())
+    render_view_host()->GetView()->WindowFrameChanged();
 }
 
-gfx::NativeView ExtensionViewMac::native_view() {
-  return extension_host_->host_contents()->GetView()->GetNativeView();
+void ExtensionViewMac::Init() {
+  CreateWidgetHostView();
 }
 
-content::RenderViewHost* ExtensionViewMac::render_view_host() const {
-  return extension_host_->render_view_host();
+Browser* ExtensionViewMac::GetBrowser() {
+  return browser_;
 }
 
-void ExtensionViewMac::DidStopLoading() {
-  ShowIfCompletelyLoaded();
+gfx::NativeView ExtensionViewMac::GetNativeView() {
+  return extension_host_->host_contents()->GetNativeView();
 }
 
 void ExtensionViewMac::ResizeDueToAutoResize(const gfx::Size& new_size) {
@@ -63,9 +66,27 @@ void ExtensionViewMac::RenderViewCreated() {
   }
 }
 
-void ExtensionViewMac::WindowFrameChanged() {
-  if (render_view_host()->GetView())
-    render_view_host()->GetView()->WindowFrameChanged();
+void ExtensionViewMac::HandleKeyboardEvent(
+    content::WebContents* source,
+    const content::NativeWebKeyboardEvent& event) {
+  if (event.skip_in_browser ||
+      event.type == content::NativeWebKeyboardEvent::Char ||
+      extension_host_->extension_host_type() !=
+          extensions::VIEW_TYPE_EXTENSION_POPUP)
+    return;
+
+  ChromeEventProcessingWindow* event_window =
+      base::mac::ObjCCastStrict<ChromeEventProcessingWindow>(
+          [GetNativeView() window]);
+  [event_window redispatchKeyEvent:event.os_event];
+}
+
+void ExtensionViewMac::DidStopLoading() {
+  ShowIfCompletelyLoaded();
+}
+
+content::RenderViewHost* ExtensionViewMac::render_view_host() const {
+  return extension_host_->render_view_host();
 }
 
 void ExtensionViewMac::CreateWidgetHostView() {
@@ -76,8 +97,20 @@ void ExtensionViewMac::ShowIfCompletelyLoaded() {
   // We wait to show the ExtensionView until it has loaded, and the view has
   // actually been created. These can happen in different orders.
   if (extension_host_->did_stop_loading()) {
-    [native_view() setHidden:NO];
+    [GetNativeView() setHidden:NO];
     if (container_)
       container_->OnExtensionViewDidShow(this);
   }
 }
+
+namespace extensions {
+
+// static
+scoped_ptr<ExtensionView> ExtensionViewHost::CreateExtensionView(
+    ExtensionViewHost* host,
+    Browser* browser) {
+  scoped_ptr<ExtensionViewMac> view(new ExtensionViewMac(host, browser));
+  return view.PassAs<ExtensionView>();
+}
+
+}  // namespace extensions