| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/cocoa/extensions/extension_view_mac.h" |
| 6 |
| 5 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
| 6 | 8 |
| 7 #include "chrome/browser/ui/cocoa/extensions/extension_view_mac.h" | 9 #include "chrome/browser/extensions/extension_view_host.h" |
| 8 | 10 #import "chrome/browser/ui/cocoa/chrome_event_processing_window.h" |
| 9 #include "content/public/browser/render_view_host.h" | 11 #include "content/public/browser/render_view_host.h" |
| 10 #include "content/public/browser/render_widget_host_view.h" | 12 #include "content/public/browser/render_widget_host_view.h" |
| 11 #include "content/public/browser/web_contents.h" | 13 #include "content/public/browser/web_contents.h" |
| 12 #include "extensions/browser/extension_host.h" | 14 #include "extensions/browser/extension_host.h" |
| 13 #include "extensions/common/view_type.h" | 15 #include "extensions/common/view_type.h" |
| 14 | 16 |
| 15 // The minimum/maximum dimensions of the popup. | 17 // The minimum/maximum dimensions of the popup. |
| 16 const CGFloat ExtensionViewMac::kMinWidth = 25.0; | 18 const CGFloat ExtensionViewMac::kMinWidth = 25.0; |
| 17 const CGFloat ExtensionViewMac::kMinHeight = 25.0; | 19 const CGFloat ExtensionViewMac::kMinHeight = 25.0; |
| 18 const CGFloat ExtensionViewMac::kMaxWidth = 800.0; | 20 const CGFloat ExtensionViewMac::kMaxWidth = 800.0; |
| 19 const CGFloat ExtensionViewMac::kMaxHeight = 600.0; | 21 const CGFloat ExtensionViewMac::kMaxHeight = 600.0; |
| 20 | 22 |
| 21 ExtensionViewMac::ExtensionViewMac(extensions::ExtensionHost* extension_host, | 23 ExtensionViewMac::ExtensionViewMac(extensions::ExtensionHost* extension_host, |
| 22 Browser* browser) | 24 Browser* browser) |
| 23 : browser_(browser), | 25 : browser_(browser), |
| 24 extension_host_(extension_host), | 26 extension_host_(extension_host), |
| 25 container_(NULL) { | 27 container_(NULL) { |
| 26 DCHECK(extension_host_); | 28 DCHECK(extension_host_); |
| 27 [native_view() setHidden:YES]; | 29 [GetNativeView() setHidden:YES]; |
| 28 } | 30 } |
| 29 | 31 |
| 30 ExtensionViewMac::~ExtensionViewMac() { | 32 ExtensionViewMac::~ExtensionViewMac() { |
| 31 } | 33 } |
| 32 | 34 |
| 35 content::RenderViewHost* ExtensionViewMac::render_view_host() const { |
| 36 return extension_host_->render_view_host(); |
| 37 } |
| 38 |
| 39 void ExtensionViewMac::WindowFrameChanged() { |
| 40 if (render_view_host()->GetView()) |
| 41 render_view_host()->GetView()->WindowFrameChanged(); |
| 42 } |
| 43 |
| 44 void ExtensionViewMac::CreateWidgetHostView() { |
| 45 extension_host_->CreateRenderViewSoon(); |
| 46 } |
| 47 |
| 48 void ExtensionViewMac::ShowIfCompletelyLoaded() { |
| 49 // We wait to show the ExtensionView until it has loaded, and the view has |
| 50 // actually been created. These can happen in different orders. |
| 51 if (extension_host_->did_stop_loading()) { |
| 52 [GetNativeView() setHidden:NO]; |
| 53 if (container_) |
| 54 container_->OnExtensionViewDidShow(this); |
| 55 } |
| 56 } |
| 57 |
| 33 void ExtensionViewMac::Init() { | 58 void ExtensionViewMac::Init() { |
| 34 CreateWidgetHostView(); | 59 CreateWidgetHostView(); |
| 35 } | 60 } |
| 36 | 61 |
| 37 gfx::NativeView ExtensionViewMac::native_view() { | 62 Browser* ExtensionViewMac::GetBrowser() { |
| 63 return browser_; |
| 64 } |
| 65 |
| 66 gfx::NativeView ExtensionViewMac::GetNativeView() { |
| 38 return extension_host_->host_contents()->GetNativeView(); | 67 return extension_host_->host_contents()->GetNativeView(); |
| 39 } | 68 } |
| 40 | 69 |
| 41 content::RenderViewHost* ExtensionViewMac::render_view_host() const { | |
| 42 return extension_host_->render_view_host(); | |
| 43 } | |
| 44 | |
| 45 void ExtensionViewMac::DidStopLoading() { | |
| 46 ShowIfCompletelyLoaded(); | |
| 47 } | |
| 48 | |
| 49 void ExtensionViewMac::ResizeDueToAutoResize(const gfx::Size& new_size) { | 70 void ExtensionViewMac::ResizeDueToAutoResize(const gfx::Size& new_size) { |
| 50 if (container_) | 71 if (container_) |
| 51 container_->OnExtensionSizeChanged(this, new_size); | 72 container_->OnExtensionSizeChanged(this, new_size); |
| 52 } | 73 } |
| 53 | 74 |
| 54 void ExtensionViewMac::RenderViewCreated() { | 75 void ExtensionViewMac::RenderViewCreated() { |
| 55 extensions::ViewType host_type = extension_host_->extension_host_type(); | 76 extensions::ViewType host_type = extension_host_->extension_host_type(); |
| 56 if (host_type == extensions::VIEW_TYPE_EXTENSION_POPUP) { | 77 if (host_type == extensions::VIEW_TYPE_EXTENSION_POPUP) { |
| 57 gfx::Size min_size(ExtensionViewMac::kMinWidth, | 78 gfx::Size min_size(ExtensionViewMac::kMinWidth, |
| 58 ExtensionViewMac::kMinHeight); | 79 ExtensionViewMac::kMinHeight); |
| 59 gfx::Size max_size(ExtensionViewMac::kMaxWidth, | 80 gfx::Size max_size(ExtensionViewMac::kMaxWidth, |
| 60 ExtensionViewMac::kMaxHeight); | 81 ExtensionViewMac::kMaxHeight); |
| 61 render_view_host()->EnableAutoResize(min_size, max_size); | 82 render_view_host()->EnableAutoResize(min_size, max_size); |
| 62 } | 83 } |
| 63 } | 84 } |
| 64 | 85 |
| 65 void ExtensionViewMac::WindowFrameChanged() { | 86 void ExtensionViewMac::HandleKeyboardEvent( |
| 66 if (render_view_host()->GetView()) | 87 content::WebContents* source, |
| 67 render_view_host()->GetView()->WindowFrameChanged(); | 88 const content::NativeWebKeyboardEvent& event) { |
| 89 if (event.skip_in_browser || |
| 90 event.type == content::NativeWebKeyboardEvent::Char || |
| 91 extension_host_->extension_host_type() != |
| 92 extensions::VIEW_TYPE_EXTENSION_POPUP) |
| 93 return; |
| 94 |
| 95 ChromeEventProcessingWindow* event_window = |
| 96 static_cast<ChromeEventProcessingWindow*>([GetNativeView() window]); |
| 97 DCHECK([event_window isKindOfClass:[ChromeEventProcessingWindow class]]); |
| 98 [event_window redispatchKeyEvent:event.os_event]; |
| 68 } | 99 } |
| 69 | 100 |
| 70 void ExtensionViewMac::CreateWidgetHostView() { | 101 void ExtensionViewMac::DidStopLoading() { |
| 71 extension_host_->CreateRenderViewSoon(); | 102 ShowIfCompletelyLoaded(); |
| 72 } | 103 } |
| 73 | 104 |
| 74 void ExtensionViewMac::ShowIfCompletelyLoaded() { | 105 namespace extensions { |
| 75 // We wait to show the ExtensionView until it has loaded, and the view has | 106 |
| 76 // actually been created. These can happen in different orders. | 107 // static |
| 77 if (extension_host_->did_stop_loading()) { | 108 scoped_ptr<ExtensionView> ExtensionViewHost::CreateExtensionView( |
| 78 [native_view() setHidden:NO]; | 109 ExtensionViewHost* host, |
| 79 if (container_) | 110 Browser* browser) { |
| 80 container_->OnExtensionViewDidShow(this); | 111 scoped_ptr<ExtensionViewMac> view(new ExtensionViewMac(host, browser)); |
| 81 } | 112 return view.PassAs<ExtensionView>(); |
| 82 } | 113 } |
| 114 |
| 115 } // namespace extensions |
| OLD | NEW |