web_contents_view_android.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
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"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_view_android.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_factory.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_impl.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/interstitial_page_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"
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "media/base/android/media_player_manager.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebContentsViewPort* CreateWebContentsView(
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsImpl* web_contents,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsViewDelegate* delegate,
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RenderViewHostDelegateView** render_view_host_delegate_view) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContentsViewAndroid* rv = new WebContentsViewAndroid(
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents, delegate);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *render_view_host_delegate_view = rv;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return rv;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContentsViewAndroid::WebContentsViewAndroid(
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsImpl* web_contents,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsViewDelegate* delegate)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : web_contents_(web_contents),
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content_view_core_(NULL),
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delegate_(delegate) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContentsViewAndroid::~WebContentsViewAndroid() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::SetContentViewCore(
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ContentViewCoreImpl* content_view_core) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content_view_core_ = content_view_core;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderWidgetHostViewAndroid* rwhv = static_cast<RenderWidgetHostViewAndroid*>(
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents_->GetRenderWidgetHostView());
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (rwhv)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rwhv->SetContentViewCore(content_view_core_);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (web_contents_->ShowingInterstitialPage()) {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rwhv = static_cast<RenderWidgetHostViewAndroid*>(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        static_cast<InterstitialPageImpl*>(
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            web_contents_->GetInterstitialPage())->
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                GetRenderViewHost()->GetView());
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (rwhv)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      rwhv->SetContentViewCore(content_view_core_);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(GOOGLE_TV)
58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void WebContentsViewAndroid::NotifyExternalSurface(
59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    int player_id, bool is_request, const gfx::RectF& rect) {
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (content_view_core_)
61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    content_view_core_->NotifyExternalSurface(player_id, is_request, rect);
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeView WebContentsViewAndroid::GetNativeView() const {
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return content_view_core_ ? content_view_core_->GetViewAndroid() : NULL;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeView WebContentsViewAndroid::GetContentNativeView() const {
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return content_view_core_ ? content_view_core_->GetViewAndroid() : NULL;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow WebContentsViewAndroid::GetTopLevelNativeWindow() const {
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  return content_view_core_ ? content_view_core_->GetWindowAndroid() : NULL;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::GetContainerBounds(gfx::Rect* out) const {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (rwhv)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *out = rwhv->GetViewBounds();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::SetPageTitle(const string16& title) {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (content_view_core_)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content_view_core_->SetTitle(title);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::OnTabCrashed(base::TerminationStatus status,
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          int error_code) {
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents_->GetRenderViewHost());
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (rvh->media_player_manager())
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rvh->media_player_manager()->DestroyAllMediaPlayers();
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (content_view_core_)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content_view_core_->OnTabCrashed();
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::SizeContents(const gfx::Size& size) {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(klobag): Do we need to do anything else?
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (rwhv)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    rwhv->SetSize(size);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::Focus() {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (web_contents_->ShowingInterstitialPage())
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_contents_->GetInterstitialPage()->Focus();
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_contents_->GetRenderWidgetHostView()->Focus();
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::SetInitialFocus() {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (web_contents_->FocusLocationBarByDefault())
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_contents_->SetFocusToLocationBar(false);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Focus();
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::StoreFocus() {
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::RestoreFocus() {
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochDropData* WebContentsViewAndroid::GetDropData() const {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Rect WebContentsViewAndroid::GetViewBounds() const {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderWidgetHostView* rwhv = web_contents_->GetRenderWidgetHostView();
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (rwhv)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return rwhv->GetViewBounds();
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return gfx::Rect();
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsViewAndroid::CreateView(
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const gfx::Size& initial_size, gfx::NativeView context) {
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderWidgetHostView* WebContentsViewAndroid::CreateViewForWidget(
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    RenderWidgetHost* render_widget_host) {
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (render_widget_host->GetView()) {
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // During testing, the view will already be set up in most cases to the
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // test view, so we don't want to clobber it with a real one. To verify that
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // this actually is happening (and somebody isn't accidentally creating the
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // view twice), we check for the RVH Factory, which will be set when we're
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // making special ones (which go along with the special views).
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(RenderViewHostFactory::has_factory());
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return render_widget_host->GetView();
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note that while this instructs the render widget host to reference
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |native_view_|, this has no effect without also instructing the
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // native view (i.e. ContentView) how to obtain a reference to this widget in
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // order to paint it. See ContentView::GetRenderWidgetHostViewAndroid for an
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // example of how this is achieved for InterstitialPages.
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(render_widget_host);
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  RenderWidgetHostView* view = new RenderWidgetHostViewAndroid(
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      rwhi, content_view_core_);
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return view;
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderWidgetHostView* WebContentsViewAndroid::CreateViewForPopupWidget(
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    RenderWidgetHost* render_widget_host) {
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return RenderWidgetHostViewPort::CreateViewForWidget(render_widget_host);
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsViewAndroid::RenderViewCreated(RenderViewHost* host) {
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsViewAndroid::RenderViewSwappedIn(RenderViewHost* host) {
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsViewAndroid::SetOverscrollControllerEnabled(bool enabled) {
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::ShowContextMenu(
1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const ContextMenuParams& params) {
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (delegate_)
1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    delegate_->ShowContextMenu(params);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::ShowPopupMenu(
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::Rect& bounds,
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int item_height,
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    double item_font_size,
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int selected_item,
1917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    const std::vector<MenuItem>& items,
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool right_aligned,
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool allow_multiple_selection) {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (content_view_core_) {
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content_view_core_->ShowSelectPopupMenu(
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        items, selected_item, allow_multiple_selection);
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::StartDragging(
201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const DropData& drop_data,
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebKit::WebDragOperationsMask allowed_ops,
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::ImageSkia& image,
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const gfx::Vector2d& image_offset,
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const DragEventSourceInfo& event_info) {
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::UpdateDragCursor(WebKit::WebDragOperation op) {
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTIMPLEMENTED();
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::GotFocus() {
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is only used in the views FocusManager stuff but it bleeds through
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // all subclasses. http://crbug.com/21875
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is called when we the renderer asks us to take focus back (i.e., it has
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// iterated past the last focusable element on the page).
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsViewAndroid::TakeFocus(bool reverse) {
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (web_contents_->GetDelegate() &&
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      web_contents_->GetDelegate()->TakeFocus(web_contents_, reverse))
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_contents_->GetRenderWidgetHostView()->Focus();
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content
228