| Index: chrome/browser/ui/views/extensions/extension_view_views.cc | 
| diff --git a/chrome/browser/ui/views/extensions/extension_view_views.cc b/chrome/browser/ui/views/extensions/extension_view_views.cc | 
| index e0c58f012ec73cd505e48e1097d3766bf1ff4d87..a7d87430dc85d11cb6093eeb29b7b1d3de88158c 100644 | 
| --- a/chrome/browser/ui/views/extensions/extension_view_views.cc | 
| +++ b/chrome/browser/ui/views/extensions/extension_view_views.cc | 
| @@ -4,6 +4,8 @@ | 
|  | 
| #include "chrome/browser/ui/views/extensions/extension_view_views.h" | 
|  | 
| +#include "chrome/browser/extensions/extension_view_host.h" | 
| +#include "chrome/browser/ui/browser.h" | 
| #include "chrome/browser/ui/views/extensions/extension_popup.h" | 
| #include "content/public/browser/content_browser_client.h" | 
| #include "content/public/browser/render_view_host.h" | 
| @@ -71,10 +73,6 @@ void ExtensionViewViews::ViewHierarchyChanged( | 
| CreateWidgetHostView(); | 
| } | 
|  | 
| -void ExtensionViewViews::DidStopLoading() { | 
| -  ShowIfCompletelyLoaded(); | 
| -} | 
| - | 
| void ExtensionViewViews::SetIsClipped(bool is_clipped) { | 
| if (is_clipped_ != is_clipped) { | 
| is_clipped_ = is_clipped; | 
| @@ -83,6 +81,18 @@ void ExtensionViewViews::SetIsClipped(bool is_clipped) { | 
| } | 
| } | 
|  | 
| +void ExtensionViewViews::Init() { | 
| +  // Initialization continues in ViewHierarchyChanged(). | 
| +} | 
| + | 
| +Browser* ExtensionViewViews::GetBrowser() { | 
| +  return browser_; | 
| +} | 
| + | 
| +gfx::NativeView ExtensionViewViews::GetNativeView() { | 
| +  return native_view(); | 
| +} | 
| + | 
| void ExtensionViewViews::ResizeDueToAutoResize(const gfx::Size& new_size) { | 
| // Don't actually do anything with this information until we have been shown. | 
| // Size changes will not be honored by lower layers while we are hidden. | 
| @@ -105,11 +115,22 @@ void ExtensionViewViews::RenderViewCreated() { | 
| } | 
|  | 
| void ExtensionViewViews::HandleKeyboardEvent( | 
| +    content::WebContents* source, | 
| const content::NativeWebKeyboardEvent& event) { | 
| +  if (browser_) { | 
| +    // Handle lower priority browser shortcuts such as Ctrl-f. | 
| +    browser_->HandleKeyboardEvent(source, event); | 
| +    return; | 
| +  } | 
| + | 
| unhandled_keyboard_event_handler_.HandleKeyboardEvent(event, | 
| GetFocusManager()); | 
| } | 
|  | 
| +void ExtensionViewViews::DidStopLoading() { | 
| +  ShowIfCompletelyLoaded(); | 
| +} | 
| + | 
| bool ExtensionViewViews::SkipDefaultKeyEventProcessing(const ui::KeyEvent& e) { | 
| // Let the tab key event be processed by the renderer (instead of moving the | 
| // focus to the next focusable view). Also handle Backspace, since otherwise | 
| @@ -163,3 +184,18 @@ void ExtensionViewViews::CleanUp() { | 
| Detach(); | 
| initialized_ = false; | 
| } | 
| + | 
| +namespace extensions { | 
| + | 
| +// static | 
| +scoped_ptr<ExtensionView> ExtensionViewHost::CreateExtensionView( | 
| +    ExtensionViewHost* host, | 
| +    Browser* browser) { | 
| +  scoped_ptr<ExtensionViewViews> view(new ExtensionViewViews(host, browser)); | 
| +  // We own |view_|, so don't auto delete when it's removed from the view | 
| +  // hierarchy. | 
| +  view->set_owned_by_client(); | 
| +  return view.PassAs<ExtensionView>(); | 
| +} | 
| + | 
| +}  // namespace extensions | 
|  |