1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 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/android/content_view_core_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_android.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_array.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_string.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/scoped_java_ref.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_writer.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer.h" 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "cc/output/begin_frame_args.h" 187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/browser/android/browser_media_player_manager.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/android/interstitial_page_delegate_android.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/load_url_params.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/touch_point.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/renderer_host/compositor_impl_android.h" 23bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/browser/renderer_host/input/web_input_event_builders_android.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/java/java_bound_object.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_impl.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_impl.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_view_android.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/ssl/ssl_host_state.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/interstitial_page_impl.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/navigation_controller_impl.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/navigation_entry_impl.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/web_contents_view_android.h" 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/common/input_messages.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_messages.h" 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/browser/browser_accessibility_state.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/favicon_status.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_client.h" 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/content_switches.h" 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/common/menu_item.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jni/ContentViewCore_jni.h" 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebBindings.h" 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/android/view_android.h" 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/android/window_android.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/android/java_bitmap.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h" 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size_conversions.h" 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size_f.h" 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/user_agent/user_agent_util.h" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::AttachCurrentThread; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertJavaStringToUTF16; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertJavaStringToUTF8; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF16ToJavaString; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF8ToJavaString; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaGlobalRef; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaLocalRef; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebGestureEvent; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebInputEvent; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Describes the type and enabled state of a select popup item. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Keep in sync with the value defined in SelectPopupDialog.java 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)enum PopupItemType { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POPUP_ITEM_TYPE_GROUP = 0, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POPUP_ITEM_TYPE_DISABLED, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POPUP_ITEM_TYPE_ENABLED 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const unsigned int kDefaultVSyncIntervalMicros = 16666u; 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// TODO(brianderson): Use adaptive draw-time estimation. 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const float kDefaultBrowserCompositeVSyncFraction = 1.0f / 3; 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const void* kContentViewUserDataKey = &kContentViewUserDataKey; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int GetRenderProcessIdFromRenderViewHost(RenderViewHost* host) { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(host); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderProcessHost* render_process = host->GetProcess(); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(render_process); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (render_process->HasConnection()) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return render_process->GetHandle(); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> CreateJavaRect( 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& rect) { 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ScopedJavaLocalRef<jobject>( 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_createRect(env, 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(rect.x()), 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(rect.y()), 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(rect.right()), 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(rect.bottom()))); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Enables a callback when the underlying WebContents is destroyed, to enable 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// nulling the back-pointer. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentViewCoreImpl::ContentViewUserData 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public base::SupportsUserData::Data { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit ContentViewUserData(ContentViewCoreImpl* content_view_core) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : content_view_core_(content_view_core) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentViewUserData() { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(joth): When chrome has finished removing the TabContents class (see 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // crbug.com/107201) consider inverting relationship, so ContentViewCore 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // would own WebContents. That effectively implies making the WebContents 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // destructor private on Android. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete content_view_core_; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl* get() const { return content_view_core_; } 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Not using scoped_ptr as ContentViewCoreImpl destructor is private. 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl* content_view_core_; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_IMPLICIT_CONSTRUCTORS(ContentViewUserData); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCoreImpl* ContentViewCoreImpl::FromWebContents( 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl::ContentViewUserData* data = 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<ContentViewCoreImpl::ContentViewUserData*>( 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->GetUserData(kContentViewUserDataKey)); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return data ? data->get() : NULL; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCore* ContentViewCore::FromWebContents( 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ContentViewCoreImpl::FromWebContents(web_contents); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCore* ContentViewCore::GetNativeContentViewCore(JNIEnv* env, 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj) { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<ContentViewCore*>( 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_getNativeContentViewCore(env, obj)); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env, jobject obj, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hardware_accelerated, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::ViewAndroid* view_android, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::WindowAndroid* window_android) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : java_ref_(env, obj), 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_(static_cast<WebContentsImpl*>(web_contents)), 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer_(cc::Layer::Create()), 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_crashed_(false), 1667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) vsync_interval_(base::TimeDelta::FromMicroseconds( 1677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kDefaultVSyncIntervalMicros)), 1687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_browser_composite_time_(base::TimeDelta::FromMicroseconds( 1697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)), 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_android_(view_android), 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window_android_(window_android) { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(web_contents) << 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "A ContentViewCoreImpl should be created with a valid WebContents."; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When a tab is restored (from a saved state), it does not have a renderer 176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // process. We treat it like the tab is crashed. If the content is loaded 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // when the tab is shown, tab_crashed_ will be reset. 178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateTabCrashedFlag(); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(leandrogracia): make use of the hardware_accelerated argument. 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Display& display = 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dpi_scale_ = display.device_scale_factor(); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently, the only use case we have for overriding a user agent involves 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // spoofing a desktop Linux user agent for "Request desktop site". 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Automatically set it for all WebContents so that it is available when a 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NavigationEntry requires the user agent to be overridden. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kLinuxInfoStr[] = "X11; Linux x86_64"; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string product = content::GetContentClient()->GetProduct(); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string spoofed_ua = 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_glue::BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->SetUserAgentOverride(spoofed_ua); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitWebContents(); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCoreImpl::~ContentViewCoreImpl() { 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_ref_.reset(); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!j_obj.is_null()) { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_onNativeContentViewCoreDestroyed( 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, j_obj.obj(), reinterpret_cast<jint>(this)); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure nobody calls back into this object while we are tearing things 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // down. 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_.RemoveAll(); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnJavaContentViewCoreDestroyed(JNIEnv* env, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(env->IsSameObject(java_ref_.get(env).obj(), obj)); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_ref_.reset(); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::InitWebContents() { 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(web_contents_); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_registrar_.Add( 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, NOTIFICATION_RENDER_VIEW_HOST_CHANGED, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Source<NavigationController>(&web_contents_->GetController())); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_registrar_.Add( 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, NOTIFICATION_RENDERER_PROCESS_CREATED, 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllBrowserContextsAndSources()); 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_registrar_.Add( 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, NOTIFICATION_WEB_CONTENTS_CONNECTED, 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Source<WebContents>(web_contents_)); 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) notification_registrar_.Add( 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this, NOTIFICATION_WEB_CONTENTS_SWAPPED, 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Source<WebContents>(web_contents_)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<WebContentsViewAndroid*>(web_contents_->GetView())-> 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentViewCore(this); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!web_contents_->GetUserData(kContentViewUserDataKey)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->SetUserData(kContentViewUserDataKey, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ContentViewUserData(this)); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::Observe(int type, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NotificationSource& source, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NotificationDetails& details) { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NOTIFICATION_RENDER_VIEW_HOST_CHANGED: { 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::pair<RenderViewHost*, RenderViewHost*>* switched_details = 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Details<std::pair<RenderViewHost*, RenderViewHost*> >(details).ptr(); 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int old_pid = 0; 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (switched_details->first) { 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) old_pid = GetRenderProcessIdFromRenderViewHost( 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switched_details->first); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int new_pid = GetRenderProcessIdFromRenderViewHost( 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (new_pid != old_pid) { 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify the Java side of the change of the current renderer process. 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!obj.is_null()) { 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onRenderProcessSwap( 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), old_pid, new_pid); 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 26362f10c6170e9864e1fd1f2be2d62129e8dc4210aBen Murdoch SetFocusInternal(HasFocus()); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NOTIFICATION_RENDERER_PROCESS_CREATED: { 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify the Java side of the current renderer process. 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderProcessHost* source_process_host = 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Source<RenderProcessHost>(source).ptr(); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderProcessHost* current_process_host = 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()->GetProcess(); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (source_process_host == current_process_host) { 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int pid = GetRenderProcessIdFromRenderViewHost( 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!obj.is_null()) { 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onRenderProcessSwap(env, obj.obj(), 0, pid); 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NOTIFICATION_WEB_CONTENTS_CONNECTED: { 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!obj.is_null()) { 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onWebContentsConnected(env, obj.obj()); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) case NOTIFICATION_WEB_CONTENTS_SWAPPED: { 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!obj.is_null()) { 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_onWebContentsSwapped(env, obj.obj()); 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderWidgetHostViewAndroid* 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() { 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostView* rwhv = NULL; 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents_) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv = web_contents_->GetRenderWidgetHostView(); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents_->ShowingInterstitialPage()) { 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv = static_cast<InterstitialPageImpl*>( 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetInterstitialPage())-> 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRenderViewHost()->GetView(); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<RenderWidgetHostViewAndroid*>(rwhv); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedJavaLocalRef<jobject> ContentViewCoreImpl::GetJavaObject() { 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return java_ref_.get(env); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jint ContentViewCoreImpl::GetBackgroundColor(JNIEnv* env, jobject obj) { 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhva = GetRenderWidgetHostViewAndroid(); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rwhva) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SK_ColorWHITE; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rwhva->GetCachedBackgroundColor(); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnHide(JNIEnv* env, jobject obj) { 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Hide(); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnShow(JNIEnv* env, jobject obj) { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Show(); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::Show() { 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWebContents()->WasShown(); 338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Displaying WebContents may trigger a lazy reload, spawning a new renderer 339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // for the tab. 340eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateTabCrashedFlag(); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::Hide() { 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWebContents()->WasHidden(); 3453ffc7ae741780a15b34876d44c5e280dafd9d135Ben Murdoch PauseVideo(); 3463ffc7ae741780a15b34876d44c5e280dafd9d135Ben Murdoch} 3473ffc7ae741780a15b34876d44c5e280dafd9d135Ben Murdoch 3483ffc7ae741780a15b34876d44c5e280dafd9d135Ben Murdochvoid ContentViewCoreImpl::PauseVideo() { 3493ffc7ae741780a15b34876d44c5e280dafd9d135Ben Murdoch RenderViewHost* host = web_contents_->GetRenderViewHost(); 3503ffc7ae741780a15b34876d44c5e280dafd9d135Ben Murdoch if (host) 3513ffc7ae741780a15b34876d44c5e280dafd9d135Ben Murdoch host->Send(new ViewMsg_PauseVideo(host->GetRoutingID())); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnTabCrashed() { 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (obj.is_null()) 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_resetVSyncNotification(env, obj.obj()); 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 361cd5e610960f56ebe90672a265e596c5097594f65Torne (Richard Coles) // Note that we might reach this place multiple times while the 362cd5e610960f56ebe90672a265e596c5097594f65Torne (Richard Coles) // ContentViewCore remains crashed. E.g. if two tabs share the render process 363cd5e610960f56ebe90672a265e596c5097594f65Torne (Richard Coles) // and the process crashes, this will be called for each tab. If the user 364cd5e610960f56ebe90672a265e596c5097594f65Torne (Richard Coles) // reload one tab, a new render process is created and it can be shared by the 365cd5e610960f56ebe90672a265e596c5097594f65Torne (Richard Coles) // other tab. But if user closes the reloaded tab before reloading the other 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // tab, the new render process will be shut down. This will trigger the other 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // tab's OnTabCrashed() called again as two tabs share the same 368cd5e610960f56ebe90672a265e596c5097594f65Torne (Richard Coles) // BrowserRenderProcessHost. The Java side will distinguish this case using 369cd5e610960f56ebe90672a265e596c5097594f65Torne (Richard Coles) // tab_crashed_ passed below. 370cd5e610960f56ebe90672a265e596c5097594f65Torne (Richard Coles) Java_ContentViewCore_onTabCrash(env, obj.obj(), tab_crashed_); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab_crashed_ = true; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// All positions and sizes are in CSS pixels. 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Note that viewport_width/height is a best effort based. 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ContentViewCore has the actual information about the physical viewport size. 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::UpdateFrameInfo( 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2dF& scroll_offset, 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float page_scale_factor, 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2dF& page_scale_factor_limits, 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::SizeF& content_size, 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::SizeF& viewport_size, 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2dF& controls_offset, 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Vector2dF& content_offset, 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float overdraw_bottom_height) { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_updateFrameInfo( 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_offset.x(), 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_offset.y(), 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_scale_factor, 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_scale_factor_limits.x(), 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_scale_factor_limits.y(), 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_size.width(), 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_size.height(), 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) viewport_size.width(), 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) viewport_size.height(), 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controls_offset.y(), 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content_offset.y(), 404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) overdraw_bottom_height); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::SetTitle(const string16& title) { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jtitle = 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, UTF16ToUTF8(title)); 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_setTitle(env, obj.obj(), jtitle.obj()); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::OnBackgroundColorChanged(SkColor color) { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onBackgroundColorChanged(env, obj.obj(), color); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ShowSelectPopupMenu( 4267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::vector<MenuItem>& items, int selected_item, bool multiple) { 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For multi-select list popups we find the list of previous selections by 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // iterating through the items. But for single selection popups we take the 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // given |selected_item| as is. 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jintArray> selected_array; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (multiple) { 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<jint[]> native_selected_array(new jint[items.size()]); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t selected_count = 0; 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < items.size(); ++i) { 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (items[i].checked) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_selected_array[selected_count++] = i; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch selected_array = ScopedJavaLocalRef<jintArray>( 4457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch env, env->NewIntArray(selected_count)); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntArrayRegion(selected_array.obj(), 0, selected_count, 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_selected_array.get()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch selected_array = ScopedJavaLocalRef<jintArray>(env, env->NewIntArray(1)); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint value = selected_item; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntArrayRegion(selected_array.obj(), 0, 1, &value); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jintArray> enabled_array(env, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->NewIntArray(items.size())); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<string16> labels; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) labels.reserve(items.size()); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < items.size(); ++i) { 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) labels.push_back(items[i].label); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint enabled = 4617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch (items[i].type == MenuItem::GROUP ? POPUP_ITEM_TYPE_GROUP : 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (items[i].enabled ? POPUP_ITEM_TYPE_ENABLED : 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POPUP_ITEM_TYPE_DISABLED)); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobjectArray> items_array( 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::android::ToJavaArrayOfStrings(env, labels)); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_showSelectPopup(env, j_obj.obj(), 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items_array.obj(), enabled_array.obj(), 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multiple, selected_array.obj()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) { 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_confirmTouchEvent(env, j_obj.obj(), 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<jint>(ack_result)); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 482a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void ContentViewCoreImpl::UnhandledFlingStartEvent() { 483a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 484a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 485a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (j_obj.is_null()) 486a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return; 487a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Java_ContentViewCore_unhandledFlingStartEvent(env, j_obj.obj()); 488a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 489a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::HasTouchEventHandlers(bool need_touch_events) { 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_hasTouchEventHandlers(env, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j_obj.obj(), 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) need_touch_events); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentViewCoreImpl::HasFocus() { 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Java_ContentViewCore_hasFocus(env, obj.obj()); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnSelectionChanged(const std::string& text) { 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> jtext = ConvertUTF8ToJavaString(env, text); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_onSelectionChanged(env, obj.obj(), jtext.obj()); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnSelectionBoundsChanged( 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ViewHostMsg_SelectionBounds_Params& params) { 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> anchor_rect_dip( 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateJavaRect(env, params.anchor_rect)); 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> focus_rect_dip( 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateJavaRect(env, params.focus_rect)); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_onSelectionBoundsChanged(env, obj.obj(), 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) anchor_rect_dip.obj(), 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.anchor_dir, 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) focus_rect_dip.obj(), 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.focus_dir, 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.is_anchor_first); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ShowPastePopup(int x_dip, int y_dip) { 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_showPastePopup(env, obj.obj(), 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<jint>(x_dip), 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<jint>(y_dip)); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unsigned int ContentViewCoreImpl::GetScaledContentTexture( 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float scale, 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size* out_size) { 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!view) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return view->GetScaledContentTexture(scale, out_size); 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::StartContentIntent(const GURL& content_url) { 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> jcontent_url = 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertUTF8ToJavaString(env, content_url.spec()); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_startContentIntent(env, 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j_obj.obj(), 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jcontent_url.obj()); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ShowDisambiguationPopup( 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& target_rect, 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SkBitmap& zoomed_bitmap) { 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> rect_object(CreateJavaRect(env, target_rect)); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> java_bitmap = 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::ConvertToJavaBitmap(&zoomed_bitmap); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!java_bitmap.is_null()); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_showDisambiguationPopup(env, 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.obj(), 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rect_object.obj(), 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_bitmap.obj()); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 588b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)ScopedJavaLocalRef<jobject> ContentViewCoreImpl::CreateSmoothScroller( 589b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) bool scroll_down, int mouse_event_x, int mouse_event_y) { 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 594b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return ScopedJavaLocalRef<jobject>(); 595b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return Java_ContentViewCore_createSmoothScroller( 596b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) env, obj.obj(), scroll_down, mouse_event_x, mouse_event_y); 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 599b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void ContentViewCoreImpl::NotifyExternalSurface( 600b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int player_id, bool is_request, const gfx::RectF& rect) { 601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 603c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (obj.is_null()) 605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 607b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_ContentViewCore_notifyExternalSurface( 608b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) env, 609b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) obj.obj(), 610b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jint>(player_id), 611b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jboolean>(is_request), 612b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jfloat>(rect.x()), 613b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jfloat>(rect.y()), 614b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jfloat>(rect.width()), 615b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jfloat>(rect.height())); 616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 618868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ScopedJavaLocalRef<jobject> ContentViewCoreImpl::GetContentVideoViewClient() { 619868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 620868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 621868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 622868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (obj.is_null()) 623868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return ScopedJavaLocalRef<jobject>(); 624868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 625868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return Java_ContentViewCore_getContentVideoViewClient(env, obj.obj()); 626868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 627868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 628868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ScopedJavaLocalRef<jobject> ContentViewCoreImpl::GetContext() { 629868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 630868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 631868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 632868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (obj.is_null()) 633868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return ScopedJavaLocalRef<jobject>(); 634868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 635868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return Java_ContentViewCore_getContext(env, obj.obj()); 636868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 637868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetPhysicalBackingSize() const { 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (j_obj.is_null()) 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::Size(); 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::Size( 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_getPhysicalBackingWidthPix(env, j_obj.obj()), 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_getPhysicalBackingHeightPix(env, j_obj.obj())); 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetViewportSizePix() const { 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (j_obj.is_null()) 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::Size(); 653c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Size( 654c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_getViewportWidthPix(env, j_obj.obj()), 655c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_getViewportHeightPix(env, j_obj.obj())); 656c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 657c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 658c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetViewportSizeOffsetPix() const { 659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (j_obj.is_null()) 662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Size(); 663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Size( 664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_getViewportSizeOffsetWidthPix(env, j_obj.obj()), 665c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_getViewportSizeOffsetHeightPix(env, j_obj.obj())); 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetViewportSizeDip() const { 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::ToCeiledSize( 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::ScaleSize(GetViewportSizePix(), 1.0f / GetDpiScale())); 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 673c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetViewportSizeOffsetDip() const { 674c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::ToCeiledSize( 675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::ScaleSize(GetViewportSizeOffsetPix(), 1.0f / GetDpiScale())); 676c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float ContentViewCoreImpl::GetOverdrawBottomHeightDip() const { 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0.f; 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Java_ContentViewCore_getOverdrawBottomHeightPix(env, j_obj.obj()) 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) / GetDpiScale(); 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::AttachLayer(scoped_refptr<cc::Layer> layer) { 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer_->AddChild(layer); 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) { 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->RemoveFromParent(); 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::LoadUrl( 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationController::LoadURLParams& params) { 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWebContents()->GetController().LoadURLWithParams(params); 698eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateTabCrashedFlag(); 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ContentViewCoreImpl::SetNeedsBeginFrame(bool enabled) { 702c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 703c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 704c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (obj.is_null()) 705c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 706c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_setVSyncNotificationEnabled( 707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env, obj.obj(), static_cast<jboolean>(enabled)); 708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 709c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ContentViewCoreImpl::SetNeedsAnimate() { 71190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 71290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 71390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (obj.is_null()) 71490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return; 71590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Java_ContentViewCore_setNeedsAnimate(env, obj.obj()); 71690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 71790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 718c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ui::ViewAndroid* ContentViewCoreImpl::GetViewAndroid() const { 719c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // view_android_ should never be null for Chrome. 720c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(view_android_); 721c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return view_android_; 722c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 723c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::WindowAndroid* ContentViewCoreImpl::GetWindowAndroid() const { 725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This should never be NULL for Chrome, but will be NULL for WebView. 726c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(window_android_); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return window_android_; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<cc::Layer> ContentViewCoreImpl::GetLayer() const { 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return root_layer_.get(); 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ---------------------------------------------------------------------------- 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Methods called from Java via JNI 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ---------------------------------------------------------------------------- 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SelectPopupMenuItems(JNIEnv* env, jobject obj, 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jintArray indices) { 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(rvhi); 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (indices == NULL) { 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvhi->DidCancelPopupMenu(); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selected_count = env->GetArrayLength(indices); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<int> selected_indices; 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint* indices_ptr = env->GetIntArrayElements(indices, NULL); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < selected_count; ++i) 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_indices.push_back(indices_ptr[i]); 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->ReleaseIntArrayElements(indices, indices_ptr, JNI_ABORT); 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvhi->DidSelectPopupMenuItems(selected_indices); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::LoadUrl( 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, jobject obj, 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring url, 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint load_url_type, 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint transition_type, 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint ua_override_option, 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring extra_headers, 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jbyteArray post_data, 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring base_url_for_data_url, 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring virtual_url_for_data_url, 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean can_load_local_resources) { 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(url); 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationController::LoadURLParams params( 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(ConvertJavaStringToUTF8(env, url))); 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.load_type = static_cast<NavigationController::LoadURLType>( 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_url_type); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.transition_type = PageTransitionFromInt(transition_type); 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.override_user_agent = 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<NavigationController::UserAgentOverrideOption>( 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ua_override_option); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extra_headers) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.extra_headers = ConvertJavaStringToUTF8(env, extra_headers); 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (post_data) { 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<uint8> http_body_vector; 7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::android::JavaByteArrayToByteVector(env, post_data, &http_body_vector); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.browser_initiated_post_data = 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RefCountedBytes::TakeVector(&http_body_vector); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base_url_for_data_url) { 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.base_url_for_data_url = 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(ConvertJavaStringToUTF8(env, base_url_for_data_url)); 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (virtual_url_for_data_url) { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.virtual_url_for_data_url = 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(ConvertJavaStringToUTF8(env, virtual_url_for_data_url)); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.can_load_local_resources = can_load_local_resources; 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadUrl(params); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jint ContentViewCoreImpl::GetCurrentRenderProcessId(JNIEnv* env, jobject obj) { 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetRenderProcessIdFromRenderViewHost( 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedJavaLocalRef<jstring> ContentViewCoreImpl::GetURL( 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, jobject) const { 811868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The current users of the Java API expect to use the active entry 812868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // rather than the visible entry, which is exposed by WebContents::GetURL. 813868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) content::NavigationEntry* entry = 814868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) web_contents_->GetController().GetActiveEntry(); 815868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) GURL url = entry ? entry->GetVirtualURL() : GURL::EmptyGURL(); 816868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return ConvertUTF8ToJavaString(env, url.spec()); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedJavaLocalRef<jstring> ContentViewCoreImpl::GetTitle( 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, jobject obj) const { 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ConvertUTF16ToJavaString(env, GetWebContents()->GetTitle()); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::IsIncognito(JNIEnv* env, jobject obj) { 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWebContents()->GetBrowserContext()->IsOffTheRecord(); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContents* ContentViewCoreImpl::GetWebContents() const { 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return web_contents_; 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SetFocus(JNIEnv* env, jobject obj, jboolean focused) { 83362f10c6170e9864e1fd1f2be2d62129e8dc4210aBen Murdoch SetFocusInternal(focused); 83462f10c6170e9864e1fd1f2be2d62129e8dc4210aBen Murdoch} 83562f10c6170e9864e1fd1f2be2d62129e8dc4210aBen Murdoch 83662f10c6170e9864e1fd1f2be2d62129e8dc4210aBen Murdochvoid ContentViewCoreImpl::SetFocusInternal(bool focused) { 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GetRenderWidgetHostViewAndroid()) 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (focused) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRenderWidgetHostViewAndroid()->Focus(); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRenderWidgetHostViewAndroid()->Blur(); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SendOrientationChangeEvent(JNIEnv* env, 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint orientation) { 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rwhv) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv->UpdateScreenInfo(rwhv->GetNativeView()); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvhi->SendOrientationChangeEvent(orientation); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::SendTouchEvent(JNIEnv* env, 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong time_ms, 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint type, 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobjectArray pts) { 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rwhv) { 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using WebKit::WebTouchEvent; 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebTouchEvent event; 8672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TouchPoint::BuildWebTouchEvent(env, type, time_ms, GetDpiScale(), pts, 8682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event); 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv->SendTouchEvent(event); 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float ContentViewCoreImpl::GetTouchPaddingDip() { 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 48.0f / GetDpiScale(); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float ContentViewCoreImpl::GetDpiScale() const { 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dpi_scale_; 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 883c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ContentViewCoreImpl::RequestContentClipping( 884c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Rect& clipping, 885c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Size& content_size) { 886c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 887c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (rwhv) 888c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) rwhv->RequestContentClipping(clipping, content_size); 889c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 890c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::SendMouseMoveEvent(JNIEnv* env, 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong time_ms, 8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat y) { 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rwhv) 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 900bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebKit::WebMouseEvent event = WebMouseEventBuilder::Build( 901bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebInputEvent::MouseMove, 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebMouseEvent::ButtonNone, 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale(), 0, 1); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv->SendMouseEvent(event); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::SendMouseWheelEvent(JNIEnv* env, 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong time_ms, 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat y, 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfloat vertical_axis) { 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rwhv) 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 919bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebMouseWheelEventBuilder::Direction direction; 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (vertical_axis > 0) { 921bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch direction = WebMouseWheelEventBuilder::DIRECTION_UP; 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (vertical_axis < 0) { 923bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch direction = WebMouseWheelEventBuilder::DIRECTION_DOWN; 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 927bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebKit::WebMouseWheelEvent event = WebMouseWheelEventBuilder::Build( 928bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch direction, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv->SendMouseWheelEvent(event); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGestureEvent ContentViewCoreImpl::MakeGestureEvent( 935868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::Type type, long time_ms, float x, float y) const { 936bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return WebGestureEventBuilder::Build( 937bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch type, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::SendGestureEvent( 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const WebKit::WebGestureEvent& event) { 9422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 9432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (rwhv) 9442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rwhv->SendGestureEvent(event); 9452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 947eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ContentViewCoreImpl::UpdateTabCrashedFlag() { 948eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Since RenderWidgetHostView is associated with the lifetime of the renderer 949eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // process, we use it to test whether there is a renderer process. 950eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch tab_crashed_ = !(web_contents_->GetRenderWidgetHostView()); 951eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 952eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ScrollBegin(JNIEnv* env, jobject obj, jlong time_ms, 9542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 956868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureScrollBegin, time_ms, x, y); 9572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ScrollEnd(JNIEnv* env, jobject obj, jlong time_ms) { 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 962868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureScrollEnd, time_ms, 0, 0); 9632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ScrollBy(JNIEnv* env, jobject obj, jlong time_ms, 967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jfloat x, jfloat y, jfloat dx, jfloat dy, 968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jboolean last_input_event_for_vsync) { 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 970868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureScrollUpdate, time_ms, x, y); 9712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.scrollUpdate.deltaX = -dx / GetDpiScale(); 9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.scrollUpdate.deltaY = -dy / GetDpiScale(); 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 975eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 976eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // TODO(brianderson): Clean up last_input_event_for_vsync. crbug.com/247043 977eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (last_input_event_for_vsync) { 978eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SendBeginFrame(base::TimeTicks() + 979eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::TimeDelta::FromMilliseconds(time_ms)); 980eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::FlingStart(JNIEnv* env, jobject obj, jlong time_ms, 9842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y, jfloat vx, jfloat vy) { 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 986868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureFlingStart, time_ms, x, y); 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Velocity should not be scaled by DIP since that interacts poorly with the 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // deceleration constants. The DIP scaling is done on the renderer. 9902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.flingStart.velocityX = vx; 9912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.flingStart.velocityY = vy; 9922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::FlingCancel(JNIEnv* env, jobject obj, jlong time_ms) { 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 998868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureFlingCancel, time_ms, 0, 0); 9992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SingleTap(JNIEnv* env, jobject obj, jlong time_ms, 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y, 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean disambiguation_popup_tap) { 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1006868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureTap, time_ms, x, y); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event.data.tap.tapCount = 1; 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!disambiguation_popup_tap) { 10102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const float touch_padding_dip = GetTouchPaddingDip(); 10112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.tap.width = touch_padding_dip; 10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.tap.height = touch_padding_dip; 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1018b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void ContentViewCoreImpl::SingleTapUnconfirmed(JNIEnv* env, jobject obj, 1019b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) jlong time_ms, 1020b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) jfloat x, jfloat y) { 1021b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1022868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureTapUnconfirmed, time_ms, x, y); 1023b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 1024b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) event.data.tap.tapCount = 1; 1025b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 1026b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const float touch_padding_dip = GetTouchPaddingDip(); 1027b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) event.data.tap.width = touch_padding_dip; 1028b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) event.data.tap.height = touch_padding_dip; 1029b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 1030b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) SendGestureEvent(event); 1031b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 1032b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ShowPressState(JNIEnv* env, jobject obj, 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong time_ms, 10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1037868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureTapDown, time_ms, x, y); 10382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ShowPressCancel(JNIEnv* env, 10422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 10432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jlong time_ms, 10442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, 10452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat y) { 10462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1047868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureTapCancel, time_ms, x, y); 10482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::DoubleTap(JNIEnv* env, jobject obj, jlong time_ms, 10522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1054868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureDoubleTap, time_ms, x, y); 10552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::LongPress(JNIEnv* env, jobject obj, jlong time_ms, 10592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y, 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean disambiguation_popup_tap) { 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1062868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureLongPress, time_ms, x, y); 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!disambiguation_popup_tap) { 10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const float touch_padding_dip = GetTouchPaddingDip(); 10662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.longPress.width = touch_padding_dip; 10672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.longPress.height = touch_padding_dip; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::LongTap(JNIEnv* env, jobject obj, jlong time_ms, 10742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y, 10752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jboolean disambiguation_popup_tap) { 10762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1077868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureLongTap, time_ms, x, y); 10782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!disambiguation_popup_tap) { 10802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const float touch_padding_dip = GetTouchPaddingDip(); 10812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.longPress.width = touch_padding_dip; 10822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.longPress.height = touch_padding_dip; 10832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 10842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::PinchBegin(JNIEnv* env, jobject obj, jlong time_ms, 10892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1091868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GesturePinchBegin, time_ms, x, y); 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::PinchEnd(JNIEnv* env, jobject obj, jlong time_ms) { 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1097868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GesturePinchEnd, time_ms, 0, 0); 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::PinchBy(JNIEnv* env, jobject obj, jlong time_ms, 11022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat anchor_x, jfloat anchor_y, 1103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jfloat delta, 1104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jboolean last_input_event_for_vsync) { 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1106868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GesturePinchUpdate, time_ms, anchor_x, anchor_y); 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event.data.pinchUpdate.scale = delta; 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 1110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // TODO(brianderson): Clean up last_input_event_for_vsync. crbug.com/247043 1112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (last_input_event_for_vsync) { 1113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SendBeginFrame(base::TimeTicks() + 1114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::TimeDelta::FromMilliseconds(time_ms)); 1115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SelectBetweenCoordinates(JNIEnv* env, jobject obj, 11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x1, jfloat y1, 11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x2, jfloat y2) { 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetRenderWidgetHostViewAndroid()) { 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRenderWidgetHostViewAndroid()->SelectRange( 11232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point(x1 / GetDpiScale(), y1 / GetDpiScale()), 11242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point(x2 / GetDpiScale(), y2 / GetDpiScale())); 11252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj, 11292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 11302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (GetRenderWidgetHostViewAndroid()) { 11312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRenderWidgetHostViewAndroid()->MoveCaret( 11322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point(x / GetDpiScale(), y / GetDpiScale())); 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::CanGoBack(JNIEnv* env, jobject obj) { 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return web_contents_->GetController().CanGoBack(); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::CanGoForward(JNIEnv* env, jobject obj) { 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return web_contents_->GetController().CanGoForward(); 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::CanGoToOffset(JNIEnv* env, jobject obj, 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint offset) { 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return web_contents_->GetController().CanGoToOffset(offset); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::GoBack(JNIEnv* env, jobject obj) { 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().GoBack(); 1151eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateTabCrashedFlag(); 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::GoForward(JNIEnv* env, jobject obj) { 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().GoForward(); 1156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateTabCrashedFlag(); 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::GoToOffset(JNIEnv* env, jobject obj, jint offset) { 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().GoToOffset(offset); 1161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateTabCrashedFlag(); 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::GoToNavigationIndex(JNIEnv* env, 11652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 11662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jint index) { 11672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetController().GoToIndex(index); 1168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateTabCrashedFlag(); 11692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::StopLoading(JNIEnv* env, jobject obj) { 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->Stop(); 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::Reload(JNIEnv* env, jobject obj) { 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set check_for_repost parameter to false as we have no repost confirmation 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // dialog ("confirm form resubmission" screen will still appear, however). 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents_->GetController().NeedsReload()) 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().LoadIfNecessary(); 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().Reload(true); 1182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UpdateTabCrashedFlag(); 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::CancelPendingReload(JNIEnv* env, jobject obj) { 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().CancelPendingReload(); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ContinuePendingReload(JNIEnv* env, jobject obj) { 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().ContinuePendingReload(); 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ClearHistory(JNIEnv* env, jobject obj) { 1194868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TODO(creis): Do callers of this need to know if it fails? 1195868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (web_contents_->GetController().CanPruneAllButVisible()) 1196868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) web_contents_->GetController().PruneAllButVisible(); 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::AddJavascriptInterface( 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject /* obj */, 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject object, 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring name, 12042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jclass safe_annotation_clazz, 12052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject retained_object_set) { 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_object(env, object); 12072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jclass> scoped_clazz(env, safe_annotation_clazz); 12082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JavaObjectWeakGlobalRef weak_retained_object_set(env, retained_object_set); 12092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // JavaBoundObject creates the NPObject with a ref count of 1, and 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // JavaBridgeDispatcherHostManager takes its own ref. 12122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JavaBridgeDispatcherHostManager* java_bridge = 12132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->java_bridge_dispatcher_host_manager(); 12142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_bridge->SetRetainedObjectSet(weak_retained_object_set); 12152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NPObject* bound_object = JavaBoundObject::Create(scoped_object, scoped_clazz, 12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_bridge->AsWeakPtr()); 12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_bridge->AddNamedObject(ConvertJavaStringToUTF16(env, name), 12182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bound_object); 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebKit::WebBindings::releaseObject(bound_object); 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::RemoveJavascriptInterface(JNIEnv* env, 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject /* obj */, 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring name) { 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->java_bridge_dispatcher_host_manager()->RemoveNamedObject( 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertJavaStringToUTF16(env, name)); 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::UpdateVSyncParameters(JNIEnv* env, jobject /* obj */, 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong timebase_micros, 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong interval_micros) { 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!view) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl* host = RenderWidgetHostImpl::From( 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view->GetRenderWidgetHost()); 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->UpdateVSyncParameters( 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks::FromInternalValue(timebase_micros), 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMicroseconds(interval_micros)); 12427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) vsync_interval_ = 12447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeDelta::FromMicroseconds(interval_micros); 12457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_browser_composite_time_ = 12467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) vsync_interval_ * kDefaultBrowserCompositeVSyncFraction; 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ContentViewCoreImpl::OnVSync(JNIEnv* env, jobject /* obj */, 1250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jlong frame_time_micros) { 1251eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::TimeTicks frame_time = 1252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::TimeTicks::FromInternalValue(frame_time_micros); 1253eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SendBeginFrame(frame_time); 1254eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 1255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ContentViewCoreImpl::SendBeginFrame(base::TimeTicks frame_time) { 1257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 1258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!view) 1259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 1260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeTicks display_time = frame_time + vsync_interval_; 12627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeTicks deadline = display_time - expected_browser_composite_time_; 12637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 126490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) view->SendBeginFrame( 12657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) cc::BeginFrameArgs::Create(frame_time, deadline, vsync_interval_)); 126690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 126790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 126890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)jboolean ContentViewCoreImpl::OnAnimate(JNIEnv* env, jobject /* obj */, 126990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) jlong frame_time_micros) { 127090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 127190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!view) 127290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return false; 127390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 127490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return view->Animate(base::TimeTicks::FromInternalValue(frame_time_micros)); 1275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::PopulateBitmapFromCompositor(JNIEnv* env, 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject jbitmap) { 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!view) 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return view->PopulateBitmapWithContents(jbitmap); 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::WasResized(JNIEnv* env, jobject obj) { 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 12892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (view) 12902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view->WasResized(); 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ShowInterstitialPage( 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, jobject obj, jstring jurl, jint delegate_ptr) { 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url(base::android::ConvertJavaStringToUTF8(env, jurl)); 12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialPageDelegateAndroid* delegate = 12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reinterpret_cast<InterstitialPageDelegateAndroid*>(delegate_ptr); 12982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialPage* interstitial = InterstitialPage::Create( 12992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_, false, url, delegate); 13002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->set_interstitial_page(interstitial); 13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interstitial->Show(); 13022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)jboolean ContentViewCoreImpl::IsShowingInterstitialPage(JNIEnv* env, 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj) { 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return web_contents_->ShowingInterstitialPage(); 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::AttachExternalVideoSurface(JNIEnv* env, 13102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 13112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jint player_id, 13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject jsurface) { 1313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(GOOGLE_TV) 13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( 13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 13167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch BrowserMediaPlayerManager* browser_media_player_manager = 13177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch rvhi ? static_cast<BrowserMediaPlayerManager*>( 13187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch rvhi->media_player_manager()) 131990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : NULL; 13207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (browser_media_player_manager) { 13217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch browser_media_player_manager->AttachExternalVideoSurface( 13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(player_id), jsurface); 13232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 13252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::DetachExternalVideoSurface(JNIEnv* env, 13282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 13292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jint player_id) { 1330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(GOOGLE_TV) 13312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( 13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 13337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch BrowserMediaPlayerManager* browser_media_player_manager = 13347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch rvhi ? static_cast<BrowserMediaPlayerManager*>( 13357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch rvhi->media_player_manager()) 133690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) : NULL; 13377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (browser_media_player_manager) { 13387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch browser_media_player_manager->DetachExternalVideoSurface( 13392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(player_id)); 13402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 13422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)jboolean ContentViewCoreImpl::IsRenderWidgetHostViewReady(JNIEnv* env, 13452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj) { 13462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 13472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return view && view->HasValidFrame(); 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ExitFullscreen(JNIEnv* env, jobject obj) { 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost* host = web_contents_->GetRenderViewHost(); 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host->ExitFullscreen(); 13532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ContentViewCoreImpl::UpdateTopControlsState(JNIEnv* env, 1356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jobject obj, 1357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_hiding, 1358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_showing, 1359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool animate) { 13602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost* host = web_contents_->GetRenderViewHost(); 1361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host->Send(new ViewMsg_UpdateTopControlsState(host->GetRoutingID(), 1362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enable_hiding, 1363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) enable_showing, 1364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) animate)); 13652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ShowImeIfNeeded(JNIEnv* env, jobject obj) { 13682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost* host = web_contents_->GetRenderViewHost(); 13692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host->Send(new ViewMsg_ShowImeIfNeeded(host->GetRoutingID())); 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ScrollFocusedEditableNodeIntoView(JNIEnv* env, 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj) { 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* host = web_contents_->GetRenderViewHost(); 1375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host->Send(new InputMsg_ScrollFocusedEditableNodeIntoRect( 1376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) host->GetRoutingID(), gfx::Rect())); 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 13802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static void AddNavigationEntryToHistory(JNIEnv* env, jobject obj, 13822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject history, 13832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigationEntry* entry, 13842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int index) { 13852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get the details of the current entry 13862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> j_url( 13872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, entry->GetURL().spec())); 13882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> j_virtual_url( 13892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, entry->GetVirtualURL().spec())); 13902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> j_original_url( 13912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, entry->GetOriginalRequestURL().spec())); 13922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> j_title( 13932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString(env, entry->GetTitle())); 13942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> j_bitmap; 13952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FaviconStatus& status = entry->GetFavicon(); 13962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (status.valid && status.image.ToSkBitmap()->getSize() > 0) 13972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_bitmap = gfx::ConvertToJavaBitmap(status.image.ToSkBitmap()); 13982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add the item to the list 14002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_addToNavigationHistory( 14012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj, history, index, j_url.obj(), j_virtual_url.obj(), 14022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_original_url.obj(), j_title.obj(), j_bitmap.obj()); 14032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 14062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ContentViewCoreImpl::GetNavigationHistory(JNIEnv* env, 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 1409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jobject history) { 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Iterate through navigation entries to populate the list 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NavigationController& controller = web_contents_->GetController(); 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int count = controller.GetEntryCount(); 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < count; ++i) { 14142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddNavigationEntryToHistory( 1415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env, obj, history, controller.GetEntryAtIndex(i), i); 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return controller.GetCurrentEntryIndex(); 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::GetDirectedNavigationHistory(JNIEnv* env, 14222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 1423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jobject history, 14242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jboolean is_forward, 14252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jint max_entries) { 14262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Iterate through navigation entries to populate the list 14272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const NavigationController& controller = web_contents_->GetController(); 14282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int count = controller.GetEntryCount(); 14292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int num_added = 0; 14302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int increment_value = is_forward ? 1 : -1; 14312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = controller.GetCurrentEntryIndex() + increment_value; 14322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) i >= 0 && i < count; 14332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) i += increment_value) { 14342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (num_added >= max_entries) 14352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 14362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddNavigationEntryToHistory( 1438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env, obj, history, controller.GetEntryAtIndex(i), i); 14392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) num_added++; 14402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ScopedJavaLocalRef<jstring> 1444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ContentViewCoreImpl::GetOriginalUrlForActiveNavigationEntry(JNIEnv* env, 1445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jobject obj) { 1446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NavigationEntry* entry = web_contents_->GetController().GetActiveEntry(); 1447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (entry == NULL) 1448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ScopedJavaLocalRef<jstring>(env, NULL); 1449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return ConvertUTF8ToJavaString(env, entry->GetOriginalRequestURL().spec()); 1450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ContentViewCoreImpl::GetNativeImeAdapter(JNIEnv* env, jobject obj) { 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhva = GetRenderWidgetHostViewAndroid(); 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rwhva) 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rwhva->GetNativeImeAdapter(); 14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::NeedsReload(JNIEnv* env, jobject obj) { 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return web_contents_->GetController().NeedsReload(); 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::UndoScrollFocusedEditableNodeIntoView( 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj) { 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* host = web_contents_->GetRenderViewHost(); 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send( 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ViewMsg_UndoScrollFocusedEditableNodeIntoView(host->GetRoutingID())); 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 14722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void JavaScriptResultCallback(const ScopedJavaGlobalRef<jobject>& callback, 14732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* result) { 14742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string json; 14762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONWriter::Write(result, &json); 14772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> j_json = ConvertUTF8ToJavaString(env, json); 14782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onEvaluateJavaScriptResult(env, 14792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_json.obj(), 14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.obj()); 14812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 14832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::EvaluateJavaScript(JNIEnv* env, 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 14862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jstring script, 1487bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon jobject callback, 1488bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon jboolean start_renderer) { 1489bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon RenderViewHost* rvh = web_contents_->GetRenderViewHost(); 1490bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon DCHECK(rvh); 1491bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon 1492bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon if (start_renderer && !rvh->IsRenderViewLive()) { 1493bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon if (!web_contents_->CreateRenderViewForInitialEmptyDocument()) { 1494bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon LOG(ERROR) << "Failed to create RenderView in EvaluateJavaScript"; 1495bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon return; 1496bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon } 1497bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon } 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!callback) { 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // No callback requested. 1501bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon rvh->ExecuteJavascriptInWebFrame(string16(), // frame_xpath 1502bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon ConvertJavaStringToUTF16(env, script)); 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 15042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Secure the Java callback in a scoped object and give ownership of it to the 15072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // base::Callback. 15082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaGlobalRef<jobject> j_callback; 15092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_callback.Reset(env, callback); 15102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderViewHost::JavascriptResultCallback c_callback = 15112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&JavaScriptResultCallback, j_callback); 15122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1513bfb105516e12ad16ce5cefd7511e89e46ccd443eJonathan Dixon rvh->ExecuteJavascriptInWebFrameCallbackResult( 15142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16(), // frame_xpath 15152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16(env, script), 15162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c_callback); 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentViewCoreImpl::GetUseDesktopUserAgent( 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, jobject obj) { 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationEntry* entry = web_contents_->GetController().GetActiveEntry(); 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return entry && entry->GetIsOverridingUserAgent(); 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::UpdateImeAdapter(int native_ime_adapter, 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int text_input_type, 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& text, 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_start, 15295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_end, 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int composition_start, 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int composition_end, 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool show_ime_if_needed) { 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_text = ConvertUTF8ToJavaString(env, text); 15392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_updateImeAdapter(env, obj.obj(), 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_ime_adapter, text_input_type, 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring_text.obj(), 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_start, selection_end, 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) composition_start, composition_end, 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_ime_if_needed); 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ProcessImeBatchStateAck(bool is_begin) { 15482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 15492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 15502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 15512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 15522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_processImeBatchStateAck(env, obj.obj(), is_begin); 15532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ClearSslPreferences(JNIEnv* env, jobject obj) { 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SSLHostState* state = SSLHostState::GetFor( 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().GetBrowserContext()); 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state->Clear(); 15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SetUseDesktopUserAgent( 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean enabled, 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean reload_on_state_change) { 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetUseDesktopUserAgent(env, obj) == enabled) 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the navigation entry actually exists. 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationEntry* entry = web_contents_->GetController().GetActiveEntry(); 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry) 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the flag in the NavigationEntry. 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry->SetIsOverridingUserAgent(enabled); 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send the override to the renderer. 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reload_on_state_change) { 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reloading the page will send the override down as part of the 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation IPC message. 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationControllerImpl& controller = 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<NavigationControllerImpl&>(web_contents_->GetController()); 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.ReloadOriginalRequestURL(false); 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1587eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ContentViewCoreImpl::SetAccessibilityEnabled(JNIEnv* env, jobject obj, 1588eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool enabled) { 1589eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderWidgetHostViewAndroid* host_view = GetRenderWidgetHostViewAndroid(); 1590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!host_view) 1591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 1592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderWidgetHostImpl* host_impl = RenderWidgetHostImpl::From( 1593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_view->GetRenderWidgetHost()); 1594f4c09e4da90034483afafd74218d4788668d380aTorne (Richard Coles) BrowserAccessibilityState* accessibility_state = 1595f4c09e4da90034483afafd74218d4788668d380aTorne (Richard Coles) BrowserAccessibilityState::GetInstance(); 1596eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (enabled) { 1597f4c09e4da90034483afafd74218d4788668d380aTorne (Richard Coles) // This enables accessibility globally unless it was explicitly disallowed 1598f4c09e4da90034483afafd74218d4788668d380aTorne (Richard Coles) // by a command-line flag. 1599f4c09e4da90034483afafd74218d4788668d380aTorne (Richard Coles) accessibility_state->OnScreenReaderDetected(); 1600f4c09e4da90034483afafd74218d4788668d380aTorne (Richard Coles) // If it was actually enabled globally, enable it for this RenderWidget now. 1601f4c09e4da90034483afafd74218d4788668d380aTorne (Richard Coles) if (accessibility_state->IsAccessibleBrowser() && host_impl) 1602eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_impl->SetAccessibilityMode(AccessibilityModeComplete); 1603eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else { 1604f4c09e4da90034483afafd74218d4788668d380aTorne (Richard Coles) accessibility_state->DisableAccessibility(); 1605eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (host_impl) 1606eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_impl->SetAccessibilityMode(AccessibilityModeOff); 1607eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 1608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 1609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is called for each ContentView. 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jint Init(JNIEnv* env, jobject obj, 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean hardware_accelerated, 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint native_web_contents, 1614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jint view_android, 1615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jint window_android) { 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl* view = new ContentViewCoreImpl( 1617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env, obj, hardware_accelerated, 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<WebContents*>(native_web_contents), 1619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reinterpret_cast<ui::ViewAndroid*>(view_android), 1620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reinterpret_cast<ui::WindowAndroid*>(window_android)); 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<jint>(view); 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RegisterContentViewCore(JNIEnv* env) { 16252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return RegisterNativesImpl(env); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1629