// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/tab_contents/tab_contents_view.h" #include "chrome/browser/renderer_host/render_process_host.h" #include "chrome/browser/renderer_host/render_widget_host.h" #include "chrome/browser/renderer_host/render_widget_host_view.h" #include "chrome/browser/tab_contents/tab_contents.h" #include "chrome/browser/tab_contents/tab_contents_delegate.h" TabContentsView::TabContentsView(TabContents* tab_contents) : tab_contents_(tab_contents), preferred_width_(0) { } void TabContentsView::RenderWidgetHostDestroyed(RenderWidgetHost* host) { if (host->view()) host->view()->WillDestroyRenderWidget(host); delegate_view_helper_.RenderWidgetHostDestroyed(host); } void TabContentsView::RenderViewCreated(RenderViewHost* host) { // Default implementation does nothing. Platforms may override. } void TabContentsView::UpdatePreferredSize(const gfx::Size& pref_size) { preferred_width_ = pref_size.width(); } void TabContentsView::CreateNewWindow(int route_id) { delegate_view_helper_.CreateNewWindow( route_id, tab_contents_->profile(), tab_contents_->GetSiteInstance(), DOMUIFactory::GetDOMUIType(tab_contents_->GetURL()), tab_contents_); } void TabContentsView::CreateNewWidget(int route_id, bool activatable) { CreateNewWidgetInternal(route_id, activatable); } void TabContentsView::ShowCreatedWindow(int route_id, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, bool user_gesture, const GURL& creator_url) { TabContents* contents = delegate_view_helper_.GetCreatedWindow(route_id); if (contents) { tab_contents()->AddNewContents(contents, disposition, initial_pos, user_gesture, creator_url); } } void TabContentsView::ShowCreatedWidget(int route_id, const gfx::Rect& initial_pos) { RenderWidgetHostView* widget_host_view = delegate_view_helper_.GetCreatedWidget(route_id); ShowCreatedWidgetInternal(widget_host_view, initial_pos); } bool TabContentsView::PreHandleKeyboardEvent( const NativeWebKeyboardEvent& event, bool* is_keyboard_shortcut) { return tab_contents_->delegate() && tab_contents_->delegate()->PreHandleKeyboardEvent( event, is_keyboard_shortcut); } void TabContentsView::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) { if (tab_contents_->delegate()) tab_contents_->delegate()->HandleKeyboardEvent(event); } RenderWidgetHostView* TabContentsView::CreateNewWidgetInternal( int route_id, bool activatable) { return delegate_view_helper_.CreateNewWidget(route_id, activatable, tab_contents()->render_view_host()->process()); } void TabContentsView::ShowCreatedWidgetInternal( RenderWidgetHostView* widget_host_view, const gfx::Rect& initial_pos) { if (tab_contents_->delegate()) tab_contents_->delegate()->RenderWidgetShowing(); widget_host_view->InitAsPopup(tab_contents_->render_widget_host_view(), initial_pos); widget_host_view->GetRenderWidgetHost()->Init(); }