15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/defaults.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/aura/tab_contents/web_drag_bookmark_handler_aura.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/sad_tab_helper.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/ui/views/renderer_context_menu/render_view_context_menu_views.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/views/sad_tab_view.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/web_modal/popup_manager.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_process_host.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_widget_host_view.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents_delegate.h" 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/client/screen_position_client.h" 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/window.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/focus/focus_manager.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/focus/view_storage.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(USE_AURA) 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/views/link_disambiguation/link_disambiguation_popup.h" 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeWebContentsViewDelegateViews::ChromeWebContentsViewDelegateViews( 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) 31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch : ContextMenuDelegate(web_contents), 32a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch web_contents_(web_contents) { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_focused_view_storage_id_ = 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ViewStorage::GetInstance()->CreateStorageID(); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ChromeWebContentsViewDelegateViews::~ChromeWebContentsViewDelegateViews() { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Makes sure to remove any stored view we may still have in the ViewStorage. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It is possible the view went away before us, so we only do this if the 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // view is registered. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ViewStorage* view_storage = views::ViewStorage::GetInstance(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view_storage->RetrieveView(last_focused_view_storage_id_) != NULL) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_storage->RemoveView(last_focused_view_storage_id_); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebDragDestDelegate* 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeWebContentsViewDelegateViews::GetDragDestDelegate() { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We install a chrome specific handler to intercept bookmark drags for the 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bookmark manager/extension API. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bookmark_handler_.reset(new WebDragBookmarkHandlerAura); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return bookmark_handler_.get(); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ChromeWebContentsViewDelegateViews::Focus() { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SadTabHelper* sad_tab_helper = SadTabHelper::FromWebContents(web_contents_); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sad_tab_helper) { 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SadTabView* sad_tab = static_cast<SadTabView*>(sad_tab_helper->sad_tab()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sad_tab) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sad_tab->RequestFocus(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_modal::PopupManager* popup_manager = 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_modal::PopupManager::FromWebContents(web_contents_); 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (popup_manager) 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch popup_manager->WasFocused(web_contents_); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeWebContentsViewDelegateViews::TakeFocus(bool reverse) { 7458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch views::FocusManager* focus_manager = GetFocusManager(); 7558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch if (focus_manager) 7658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch focus_manager->AdvanceFocus(reverse); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeWebContentsViewDelegateViews::StoreFocus() { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ViewStorage* view_storage = views::ViewStorage::GetInstance(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view_storage->RetrieveView(last_focused_view_storage_id_) != NULL) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_storage->RemoveView(last_focused_view_storage_id_); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GetFocusManager()) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* focused_view = GetFocusManager()->GetFocusedView(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (focused_view) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_storage->StoreView(last_focused_view_storage_id_, focused_view); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeWebContentsViewDelegateViews::RestoreFocus() { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ViewStorage* view_storage = views::ViewStorage::GetInstance(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* last_focused_view = 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_storage->RetrieveView(last_focused_view_storage_id_); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!last_focused_view) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetInitialFocus(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (last_focused_view->IsFocusable() && 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFocusManager()->ContainsView(last_focused_view)) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) last_focused_view->RequestFocus(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The focused view may not belong to the same window hierarchy (e.g. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if the location bar was focused and the tab is dragged out), or it may 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // no longer be focusable (e.g. if the location bar was focused and then 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we switched to fullscreen mode). In that case we default to the 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // default focus. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetInitialFocus(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_storage->RemoveView(last_focused_view_storage_id_); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochscoped_ptr<RenderViewContextMenu> ChromeWebContentsViewDelegateViews::BuildMenu( 116a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch content::WebContents* web_contents, 1177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const content::ContextMenuParams& params) { 1180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<RenderViewContextMenu> menu; 1190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch content::RenderFrameHost* focused_frame = web_contents->GetFocusedFrame(); 1200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // If the frame tree does not have a focused frame at this point, do not 1210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // bother creating RenderViewContextMenuViews. 1220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // This happens if the frame has navigated to a different page before 1230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // ContextMenu message was received by the current RenderFrameHost. 1240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (focused_frame) { 1250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch menu.reset(RenderViewContextMenuViews::Create(focused_frame, params)); 1260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch menu->Init(); 1270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 128a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return menu.Pass(); 129a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 130a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 131a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid ChromeWebContentsViewDelegateViews::ShowMenu( 132a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch scoped_ptr<RenderViewContextMenu> menu) { 133a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch context_menu_.reset(static_cast<RenderViewContextMenuViews*>(menu.release())); 1340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!context_menu_.get()) 1350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 136a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Menus need a Widget to work. If we're not the active tab we won't 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // necessarily be in a widget. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Widget* top_level_widget = GetTopLevelWidget(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!top_level_widget) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 143a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const content::ContextMenuParams& params = context_menu_->params(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't show empty menus. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (context_menu_->menu_model().GetItemCount() == 0) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point screen_point(params.x, params.y); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Convert from target window coordinates to root window coordinates. 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) aura::Window* target_window = GetActiveNativeView(); 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) aura::Window* root_window = target_window->GetRootWindow(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::client::ScreenPositionClient* screen_position_client = 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) aura::client::GetScreenPositionClient(root_window); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (screen_position_client) { 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) screen_position_client->ConvertPointToScreen(target_window, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &screen_point); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enable recursive tasks on the message loop so we can get updates while 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the context menu is being displayed. 161b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::ScopedNestableTaskAllower allow( 162b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()); 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) context_menu_->RunMenuAt(top_level_widget, screen_point, params.source_type); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 166a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochvoid ChromeWebContentsViewDelegateViews::ShowContextMenu( 167a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch content::RenderFrameHost* render_frame_host, 168a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const content::ContextMenuParams& params) { 169a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ShowMenu( 170a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch BuildMenu(content::WebContents::FromRenderFrameHost(render_frame_host), 171a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch params)); 172a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 173a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ChromeWebContentsViewDelegateViews::ShowDisambiguationPopup( 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::Rect& target_rect, 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const SkBitmap& zoomed_bitmap, 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const gfx::NativeView content, 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::Callback<void(ui::GestureEvent*)>& gesture_cb, 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::Callback<void(ui::MouseEvent*)>& mouse_cb) { 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(USE_AURA) 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci link_disambiguation_popup_.reset(new LinkDisambiguationPopup); 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci link_disambiguation_popup_->Show( 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci zoomed_bitmap, target_rect, content, gesture_cb, mouse_cb); 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ChromeWebContentsViewDelegateViews::HideDisambiguationPopup() { 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci link_disambiguation_popup_.reset(); 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeWebContentsViewDelegateViews::SizeChanged(const gfx::Size& size) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SadTabHelper* sad_tab_helper = SadTabHelper::FromWebContents(web_contents_); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!sad_tab_helper) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SadTabView* sad_tab = static_cast<SadTabView*>(sad_tab_helper->sad_tab()); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sad_tab) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sad_tab->GetWidget()->SetBounds(gfx::Rect(size)); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)aura::Window* ChromeWebContentsViewDelegateViews::GetActiveNativeView() { 201a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return web_contents_->GetFullscreenRenderWidgetHostView() ? 202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) web_contents_->GetFullscreenRenderWidgetHostView()->GetNativeView() : 203010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) web_contents_->GetNativeView(); 204a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 205a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::Widget* ChromeWebContentsViewDelegateViews::GetTopLevelWidget() { 207a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return views::Widget::GetTopLevelWidgetForNativeView(GetActiveNativeView()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)views::FocusManager* 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeWebContentsViewDelegateViews::GetFocusManager() { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Widget* toplevel_widget = GetTopLevelWidget(); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return toplevel_widget ? toplevel_widget->GetFocusManager() : NULL; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ChromeWebContentsViewDelegateViews::SetInitialFocus() { 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents_->FocusLocationBarByDefault()) { 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (web_contents_->GetDelegate()) 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetDelegate()->SetFocusToLocationBar(false); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 221010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) web_contents_->Focus(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)content::WebContentsViewDelegate* CreateWebContentsViewDelegate( 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ChromeWebContentsViewDelegateViews(web_contents); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome 233