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 } | |
Finnur
2014/07/03 14:27:05
nit: You don't need braces if the if clause is sin
tapted
2014/07/04 00:08:03
Done.
| |
95 | |
96 ChromeEventProcessingWindow* event_window = | |
97 static_cast<ChromeEventProcessingWindow*>([GetNativeView() window]); | |
98 DCHECK([event_window isKindOfClass:[ChromeEventProcessingWindow class]]); | |
99 [event_window redispatchKeyEvent:event.os_event]; | |
68 } | 100 } |
69 | 101 |
70 void ExtensionViewMac::CreateWidgetHostView() { | 102 void ExtensionViewMac::DidStopLoading() { |
71 extension_host_->CreateRenderViewSoon(); | 103 ShowIfCompletelyLoaded(); |
72 } | 104 } |
73 | 105 |
74 void ExtensionViewMac::ShowIfCompletelyLoaded() { | 106 namespace extensions { |
75 // We wait to show the ExtensionView until it has loaded, and the view has | 107 |
76 // actually been created. These can happen in different orders. | 108 // static |
77 if (extension_host_->did_stop_loading()) { | 109 scoped_ptr<ExtensionView> ExtensionViewHost::CreateExtensionView( |
78 [native_view() setHidden:NO]; | 110 ExtensionViewHost* host, |
79 if (container_) | 111 Browser* browser) { |
80 container_->OnExtensionViewDidShow(this); | 112 scoped_ptr<ExtensionViewMac> view(new ExtensionViewMac(host, browser)); |
81 } | 113 return view.PassAs<ExtensionView>(); |
82 } | 114 } |
115 | |
116 } // namespace extensions | |
OLD | NEW |