web_contents_view_android.cc revision 010d83a9304c5a91596085d917d248abff47903a
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 "content/browser/web_contents/web_contents_view_android.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/content_view_core_impl.h"
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/interstitial_page_impl.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_view_android.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_factory.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_impl.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/web_contents_impl.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)WebContentsView* CreateWebContentsView(
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsImpl* web_contents,
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsViewDelegate* delegate,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RenderViewHostDelegateView** render_view_host_delegate_view) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContentsViewAndroid* rv = new WebContentsViewAndroid(
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents, delegate);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *render_view_host_delegate_view = rv;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContentsViewAndroid::WebContentsViewAndroid(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsImpl* web_contents,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsViewDelegate* delegate)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : web_contents_(web_contents),
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content_view_core_(NULL),
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delegate_(delegate) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContentsViewAndroid::~WebContentsViewAndroid() {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::SetContentViewCore(
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentViewCoreImpl* content_view_core) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_view_core_ = content_view_core;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents_->GetRenderWidgetHostView());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (rwhv)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rwhv->SetContentViewCore(content_view_core_);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (web_contents_->ShowingInterstitialPage()) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rwhv = static_cast<RenderWidgetHostViewAndroid*>(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        static_cast<InterstitialPageImpl*>(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            web_contents_->GetInterstitialPage())->
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GetRenderViewHost()->GetView());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (rwhv)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rwhv->SetContentViewCore(content_view_core_);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeView WebContentsViewAndroid::GetNativeView() const {
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return content_view_core_ ? content_view_core_->GetViewAndroid() : NULL;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeView WebContentsViewAndroid::GetContentNativeView() const {
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return content_view_core_ ? content_view_core_->GetViewAndroid() : NULL;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow WebContentsViewAndroid::GetTopLevelNativeWindow() const {
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return content_view_core_ ? content_view_core_->GetWindowAndroid() : NULL;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::GetContainerBounds(gfx::Rect* out) const {
690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  *out = content_view_core_ ? gfx::Rect(content_view_core_->GetViewSize())
700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                            : gfx::Rect();
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void WebContentsViewAndroid::SetPageTitle(const base::string16& title) {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (content_view_core_)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content_view_core_->SetTitle(title);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::SizeContents(const gfx::Size& size) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(klobag): Do we need to do anything else?
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (rwhv)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rwhv->SetSize(size);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::Focus() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (web_contents_->ShowingInterstitialPage())
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_contents_->GetInterstitialPage()->Focus();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_contents_->GetRenderWidgetHostView()->Focus();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::SetInitialFocus() {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (web_contents_->FocusLocationBarByDefault())
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_contents_->SetFocusToLocationBar(false);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Focus();
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::StoreFocus() {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::RestoreFocus() {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochDropData* WebContentsViewAndroid::GetDropData() const {
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Rect WebContentsViewAndroid::GetViewBounds() const {
1130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (content_view_core_)
1140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    return gfx::Rect(content_view_core_->GetViewSize());
1150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return gfx::Rect();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsViewAndroid::CreateView(
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const gfx::Size& initial_size, gfx::NativeView context) {
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
123010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)RenderWidgetHostViewBase* WebContentsViewAndroid::CreateViewForWidget(
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    RenderWidgetHost* render_widget_host) {
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (render_widget_host->GetView()) {
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // During testing, the view will already be set up in most cases to the
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // test view, so we don't want to clobber it with a real one. To verify that
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // this actually is happening (and somebody isn't accidentally creating the
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // view twice), we check for the RVH Factory, which will be set when we're
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // making special ones (which go along with the special views).
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(RenderViewHostFactory::has_factory());
132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return static_cast<RenderWidgetHostViewBase*>(
133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        render_widget_host->GetView());
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note that while this instructs the render widget host to reference
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |native_view_|, this has no effect without also instructing the
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // native view (i.e. ContentView) how to obtain a reference to this widget in
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // order to paint it. See ContentView::GetRenderWidgetHostViewAndroid for an
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // example of how this is achieved for InterstitialPages.
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(render_widget_host);
141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return new RenderWidgetHostViewAndroid(rwhi, content_view_core_);
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)RenderWidgetHostViewBase* WebContentsViewAndroid::CreateViewForPopupWidget(
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    RenderWidgetHost* render_widget_host) {
146010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(render_widget_host);
147010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return new RenderWidgetHostViewAndroid(rwhi, NULL);
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsViewAndroid::RenderViewCreated(RenderViewHost* host) {
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsViewAndroid::RenderViewSwappedIn(RenderViewHost* host) {
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsViewAndroid::SetOverscrollControllerEnabled(bool enabled) {
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::ShowContextMenu(
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    RenderFrameHost* render_frame_host, const ContextMenuParams& params) {
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (delegate_)
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    delegate_->ShowContextMenu(render_frame_host, params);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::ShowPopupMenu(
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::Rect& bounds,
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int item_height,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    double item_font_size,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int selected_item,
1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::vector<MenuItem>& items,
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool right_aligned,
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool allow_multiple_selection) {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (content_view_core_) {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content_view_core_->ShowSelectPopupMenu(
175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        bounds, items, selected_item, allow_multiple_selection);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
179effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid WebContentsViewAndroid::HidePopupMenu() {
180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (content_view_core_)
181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_view_core_->HideSelectPopupMenu();
182effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
183effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::StartDragging(
185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const DropData& drop_data,
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    blink::WebDragOperationsMask allowed_ops,
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::ImageSkia& image,
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::Vector2d& image_offset,
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const DragEventSourceInfo& event_info) {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void WebContentsViewAndroid::UpdateDragCursor(blink::WebDragOperation op) {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::GotFocus() {
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is only used in the views FocusManager stuff but it bleeds through
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // all subclasses. http://crbug.com/21875
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is called when we the renderer asks us to take focus back (i.e., it has
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// iterated past the last focusable element on the page).
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::TakeFocus(bool reverse) {
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (web_contents_->GetDelegate() &&
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents_->GetDelegate()->TakeFocus(web_contents_, reverse))
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_contents_->GetRenderWidgetHostView()->Focus();
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content
212