| 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/views/extensions/extension_view_views.h" | 5 #include "chrome/browser/ui/views/extensions/extension_view_views.h" |
| 6 | 6 |
| 7 #include "chrome/browser/extensions/extension_view_host.h" |
| 8 #include "chrome/browser/ui/browser.h" |
| 7 #include "chrome/browser/ui/views/extensions/extension_popup.h" | 9 #include "chrome/browser/ui/views/extensions/extension_popup.h" |
| 8 #include "content/public/browser/content_browser_client.h" | 10 #include "content/public/browser/content_browser_client.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 #include "ui/events/event.h" | 16 #include "ui/events/event.h" |
| 15 #include "ui/views/widget/widget.h" | 17 #include "ui/views/widget/widget.h" |
| 16 | 18 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 return gfx::kNullCursor; | 66 return gfx::kNullCursor; |
| 65 } | 67 } |
| 66 | 68 |
| 67 void ExtensionViewViews::ViewHierarchyChanged( | 69 void ExtensionViewViews::ViewHierarchyChanged( |
| 68 const ViewHierarchyChangedDetails& details) { | 70 const ViewHierarchyChangedDetails& details) { |
| 69 NativeViewHost::ViewHierarchyChanged(details); | 71 NativeViewHost::ViewHierarchyChanged(details); |
| 70 if (details.is_add && GetWidget() && !initialized_) | 72 if (details.is_add && GetWidget() && !initialized_) |
| 71 CreateWidgetHostView(); | 73 CreateWidgetHostView(); |
| 72 } | 74 } |
| 73 | 75 |
| 74 void ExtensionViewViews::DidStopLoading() { | |
| 75 ShowIfCompletelyLoaded(); | |
| 76 } | |
| 77 | |
| 78 void ExtensionViewViews::SetIsClipped(bool is_clipped) { | 76 void ExtensionViewViews::SetIsClipped(bool is_clipped) { |
| 79 if (is_clipped_ != is_clipped) { | 77 if (is_clipped_ != is_clipped) { |
| 80 is_clipped_ = is_clipped; | 78 is_clipped_ = is_clipped; |
| 81 if (visible()) | 79 if (visible()) |
| 82 ShowIfCompletelyLoaded(); | 80 ShowIfCompletelyLoaded(); |
| 83 } | 81 } |
| 84 } | 82 } |
| 85 | 83 |
| 84 void ExtensionViewViews::Init() { |
| 85 // Initialization continues in ViewHierarchyChanged(). |
| 86 } |
| 87 |
| 88 Browser* ExtensionViewViews::GetBrowser() { |
| 89 return browser_; |
| 90 } |
| 91 |
| 92 gfx::NativeView ExtensionViewViews::GetNativeView() { |
| 93 return native_view(); |
| 94 } |
| 95 |
| 86 void ExtensionViewViews::ResizeDueToAutoResize(const gfx::Size& new_size) { | 96 void ExtensionViewViews::ResizeDueToAutoResize(const gfx::Size& new_size) { |
| 87 // Don't actually do anything with this information until we have been shown. | 97 // Don't actually do anything with this information until we have been shown. |
| 88 // Size changes will not be honored by lower layers while we are hidden. | 98 // Size changes will not be honored by lower layers while we are hidden. |
| 89 if (!visible()) { | 99 if (!visible()) { |
| 90 pending_preferred_size_ = new_size; | 100 pending_preferred_size_ = new_size; |
| 91 return; | 101 return; |
| 92 } | 102 } |
| 93 | 103 |
| 94 if (new_size != GetPreferredSize()) | 104 if (new_size != GetPreferredSize()) |
| 95 SetPreferredSize(new_size); | 105 SetPreferredSize(new_size); |
| 96 } | 106 } |
| 97 | 107 |
| 98 void ExtensionViewViews::RenderViewCreated() { | 108 void ExtensionViewViews::RenderViewCreated() { |
| 99 extensions::ViewType host_type = host_->extension_host_type(); | 109 extensions::ViewType host_type = host_->extension_host_type(); |
| 100 if (host_type == extensions::VIEW_TYPE_EXTENSION_POPUP) { | 110 if (host_type == extensions::VIEW_TYPE_EXTENSION_POPUP) { |
| 101 render_view_host()->EnableAutoResize( | 111 render_view_host()->EnableAutoResize( |
| 102 gfx::Size(ExtensionPopup::kMinWidth, ExtensionPopup::kMinHeight), | 112 gfx::Size(ExtensionPopup::kMinWidth, ExtensionPopup::kMinHeight), |
| 103 gfx::Size(ExtensionPopup::kMaxWidth, ExtensionPopup::kMaxHeight)); | 113 gfx::Size(ExtensionPopup::kMaxWidth, ExtensionPopup::kMaxHeight)); |
| 104 } | 114 } |
| 105 } | 115 } |
| 106 | 116 |
| 107 void ExtensionViewViews::HandleKeyboardEvent( | 117 void ExtensionViewViews::HandleKeyboardEvent( |
| 118 content::WebContents* source, |
| 108 const content::NativeWebKeyboardEvent& event) { | 119 const content::NativeWebKeyboardEvent& event) { |
| 120 if (browser_) { |
| 121 // Handle lower priority browser shortcuts such as Ctrl-f. |
| 122 browser_->HandleKeyboardEvent(source, event); |
| 123 return; |
| 124 } |
| 125 |
| 109 unhandled_keyboard_event_handler_.HandleKeyboardEvent(event, | 126 unhandled_keyboard_event_handler_.HandleKeyboardEvent(event, |
| 110 GetFocusManager()); | 127 GetFocusManager()); |
| 111 } | 128 } |
| 112 | 129 |
| 130 void ExtensionViewViews::DidStopLoading() { |
| 131 ShowIfCompletelyLoaded(); |
| 132 } |
| 133 |
| 113 bool ExtensionViewViews::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) { | 134 bool ExtensionViewViews::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) { |
| 114 // Let the tab key event be processed by the renderer (instead of moving the | 135 // Let the tab key event be processed by the renderer (instead of moving the |
| 115 // focus to the next focusable view). Also handle Backspace, since otherwise | 136 // focus to the next focusable view). Also handle Backspace, since otherwise |
| 116 // (on Windows at least), pressing Backspace, when focus is on a text field | 137 // (on Windows at least), pressing Backspace, when focus is on a text field |
| 117 // within the ExtensionViewViews, will navigate the page back instead of | 138 // within the ExtensionViewViews, will navigate the page back instead of |
| 118 // erasing a character. | 139 // erasing a character. |
| 119 return (e.key_code() == ui::VKEY_TAB || e.key_code() == ui::VKEY_BACK); | 140 return (e.key_code() == ui::VKEY_TAB || e.key_code() == ui::VKEY_BACK); |
| 120 } | 141 } |
| 121 | 142 |
| 122 void ExtensionViewViews::OnBoundsChanged(const gfx::Rect& previous_bounds) { | 143 void ExtensionViewViews::OnBoundsChanged(const gfx::Rect& previous_bounds) { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 } | 177 } |
| 157 } | 178 } |
| 158 | 179 |
| 159 void ExtensionViewViews::CleanUp() { | 180 void ExtensionViewViews::CleanUp() { |
| 160 if (!initialized_) | 181 if (!initialized_) |
| 161 return; | 182 return; |
| 162 if (native_view()) | 183 if (native_view()) |
| 163 Detach(); | 184 Detach(); |
| 164 initialized_ = false; | 185 initialized_ = false; |
| 165 } | 186 } |
| 187 |
| 188 namespace extensions { |
| 189 |
| 190 // static |
| 191 scoped_ptr<ExtensionView> ExtensionViewHost::CreateExtensionView( |
| 192 ExtensionViewHost* host, |
| 193 Browser* browser) { |
| 194 scoped_ptr<ExtensionViewViews> view(new ExtensionViewViews(host, browser)); |
| 195 // We own |view_|, so don't auto delete when it's removed from the view |
| 196 // hierarchy. |
| 197 view->set_owned_by_client(); |
| 198 return view.PassAs<ExtensionView>(); |
| 199 } |
| 200 |
| 201 } // namespace extensions |
| OLD | NEW |