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" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/metrics/histogram.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "cc/output/begin_frame_args.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" 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/interstitial_page_impl.h" 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/navigation_controller_impl.h" 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/navigation_entry_impl.h" 25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "content/browser/media/android/browser_media_player_manager.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/renderer_host/compositor_impl_android.h" 27bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch#include "content/browser/renderer_host/input/web_input_event_builders_android.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/java/java_bound_object.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_impl.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_impl.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_view_android.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/ssl/ssl_host_state.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/web_contents_view_android.h" 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/common/input_messages.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_messages.h" 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/browser/browser_accessibility_state.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/favicon_status.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_source.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_client.h" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/content_switches.h" 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/common/menu_item.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/page_transition_types.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jni/ContentViewCore_jni.h" 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebBindings.h" 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "ui/base/android/view_android.h" 530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "ui/base/android/window_android.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/android/java_bitmap.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h" 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size_conversions.h" 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/size_f.h" 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/user_agent/user_agent_util.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::AttachCurrentThread; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertJavaStringToUTF16; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertJavaStringToUTF8; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF16ToJavaString; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF8ToJavaString; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaGlobalRef; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaLocalRef; 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebGestureEvent; 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebInputEvent; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Describes the type and enabled state of a select popup item. 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace { 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)enum { 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#define DEFINE_POPUP_ITEM_TYPE(name, value) POPUP_ITEM_TYPE_##name = value, 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/browser/android/popup_item_type_list.h" 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#undef DEFINE_POPUP_ITEM_TYPE 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} //namespace 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const unsigned int kDefaultVSyncIntervalMicros = 16666u; 867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// TODO(brianderson): Use adaptive draw-time estimation. 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)const float kDefaultBrowserCompositeVSyncFraction = 1.0f / 3; 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const void* kContentViewUserDataKey = &kContentViewUserDataKey; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int GetRenderProcessIdFromRenderViewHost(RenderViewHost* host) { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(host); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderProcessHost* render_process = host->GetProcess(); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(render_process); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (render_process->HasConnection()) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return render_process->GetHandle(); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) else 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ScopedJavaLocalRef<jobject> CreateJavaRect( 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& rect) { 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ScopedJavaLocalRef<jobject>( 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_createRect(env, 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(rect.x()), 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(rect.y()), 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(rect.right()), 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(rect.bottom()))); 110d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)} 111d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Enables a callback when the underlying WebContents is destroyed, to enable 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// nulling the back-pointer. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentViewCoreImpl::ContentViewUserData 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public base::SupportsUserData::Data { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit ContentViewUserData(ContentViewCoreImpl* content_view_core) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : content_view_core_(content_view_core) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentViewUserData() { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(joth): When chrome has finished removing the TabContents class (see 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // crbug.com/107201) consider inverting relationship, so ContentViewCore 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // would own WebContents. That effectively implies making the WebContents 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // destructor private on Android. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete content_view_core_; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl* get() const { return content_view_core_; } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Not using scoped_ptr as ContentViewCoreImpl destructor is private. 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl* content_view_core_; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_IMPLICIT_CONSTRUCTORS(ContentViewUserData); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCoreImpl* ContentViewCoreImpl::FromWebContents( 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl::ContentViewUserData* data = 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<ContentViewCoreImpl::ContentViewUserData*>( 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->GetUserData(kContentViewUserDataKey)); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return data ? data->get() : NULL; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCore* ContentViewCore::FromWebContents( 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents) { 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ContentViewCoreImpl::FromWebContents(web_contents); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCore* ContentViewCore::GetNativeContentViewCore(JNIEnv* env, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj) { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<ContentViewCore*>( 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_getNativeContentViewCore(env, obj)); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env, jobject obj, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hardware_accelerated, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ui::ViewAndroid* view_android, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::WindowAndroid* window_android) 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : WebContentsObserver(web_contents), 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) java_ref_(env, obj), 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_(static_cast<WebContentsImpl*>(web_contents)), 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer_(cc::Layer::Create()), 1717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) vsync_interval_(base::TimeDelta::FromMicroseconds( 1727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kDefaultVSyncIntervalMicros)), 1737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_browser_composite_time_(base::TimeDelta::FromMicroseconds( 1747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)), 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view_android_(view_android), 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) window_android_(window_android), 177d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) device_orientation_(0), 178d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) geolocation_needs_pause_(false) { 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(web_contents) << 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "A ContentViewCoreImpl should be created with a valid WebContents."; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(leandrogracia): make use of the hardware_accelerated argument. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Display& display = 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dpi_scale_ = display.device_scale_factor(); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently, the only use case we have for overriding a user agent involves 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // spoofing a desktop Linux user agent for "Request desktop site". 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Automatically set it for all WebContents so that it is available when a 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NavigationEntry requires the user agent to be overridden. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char kLinuxInfoStr[] = "X11; Linux x86_64"; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string product = content::GetContentClient()->GetProduct(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string spoofed_ua = 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) webkit_glue::BuildUserAgentFromOSAndProduct(kLinuxInfoStr, product); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->SetUserAgentOverride(spoofed_ua); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InitWebContents(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentViewCoreImpl::~ContentViewCoreImpl() { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_ref_.reset(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!j_obj.is_null()) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_onNativeContentViewCoreDestroyed( 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) env, j_obj.obj(), reinterpret_cast<intptr_t>(this)); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure nobody calls back into this object while we are tearing things 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // down. 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notification_registrar_.RemoveAll(); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)base::android::ScopedJavaLocalRef<jobject> 215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)ContentViewCoreImpl::GetWebContentsAndroid(JNIEnv* env, jobject obj) { 216a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return web_contents_->GetJavaWebContents(); 217a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnJavaContentViewCoreDestroyed(JNIEnv* env, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(env->IsSameObject(java_ref_.get(env).obj(), obj)); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_ref_.reset(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::InitWebContents() { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(web_contents_); 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_registrar_.Add( 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, NOTIFICATION_RENDER_VIEW_HOST_CHANGED, 2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Source<WebContents>(web_contents_)); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_registrar_.Add( 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, NOTIFICATION_RENDERER_PROCESS_CREATED, 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NotificationService::AllBrowserContextsAndSources()); 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) notification_registrar_.Add( 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, NOTIFICATION_WEB_CONTENTS_CONNECTED, 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Source<WebContents>(web_contents_)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<WebContentsViewAndroid*>(web_contents_->GetView())-> 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetContentViewCore(this); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!web_contents_->GetUserData(kContentViewUserDataKey)); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->SetUserData(kContentViewUserDataKey, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ContentViewUserData(this)); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::Observe(int type, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NotificationSource& source, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NotificationDetails& details) { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (type) { 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NOTIFICATION_RENDER_VIEW_HOST_CHANGED: { 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::pair<RenderViewHost*, RenderViewHost*>* switched_details = 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Details<std::pair<RenderViewHost*, RenderViewHost*> >(details).ptr(); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int old_pid = 0; 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (switched_details->first) { 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) old_pid = GetRenderProcessIdFromRenderViewHost( 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) switched_details->first); 25533bff6d6e5e82ca5f2abf842074e33f4944cc250Ben Murdoch 25633bff6d6e5e82ca5f2abf842074e33f4944cc250Ben Murdoch RenderWidgetHostViewAndroid* view = 25733bff6d6e5e82ca5f2abf842074e33f4944cc250Ben Murdoch static_cast<RenderWidgetHostViewAndroid*>( 25833bff6d6e5e82ca5f2abf842074e33f4944cc250Ben Murdoch switched_details->first->GetView()); 25933bff6d6e5e82ca5f2abf842074e33f4944cc250Ben Murdoch if (view) 26033bff6d6e5e82ca5f2abf842074e33f4944cc250Ben Murdoch view->SetContentViewCore(NULL); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int new_pid = GetRenderProcessIdFromRenderViewHost( 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (new_pid != old_pid) { 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify the Java side of the change of the current renderer process. 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!obj.is_null()) { 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onRenderProcessSwap( 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), old_pid, new_pid); 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 273d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SetFocusInternal(HasFocus()); 274d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) if (geolocation_needs_pause_) 275d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) PauseOrResumeGeolocation(true); 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NOTIFICATION_RENDERER_PROCESS_CREATED: { 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Notify the Java side of the current renderer process. 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderProcessHost* source_process_host = 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Source<RenderProcessHost>(source).ptr(); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderProcessHost* current_process_host = 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()->GetProcess(); 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (source_process_host == current_process_host) { 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int pid = GetRenderProcessIdFromRenderViewHost( 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!obj.is_null()) { 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onRenderProcessSwap(env, obj.obj(), 0, pid); 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case NOTIFICATION_WEB_CONTENTS_CONNECTED: { 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!obj.is_null()) { 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onWebContentsConnected(env, obj.obj()); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void ContentViewCoreImpl::RenderViewReady() { 3084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (device_orientation_ != 0) 3094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SendOrientationChangeEventInternal(); 3104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 3114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderWidgetHostViewAndroid* 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl::GetRenderWidgetHostViewAndroid() { 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostView* rwhv = NULL; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents_) { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv = web_contents_->GetRenderWidgetHostView(); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents_->ShowingInterstitialPage()) { 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv = static_cast<InterstitialPageImpl*>( 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetInterstitialPage())-> 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRenderViewHost()->GetView(); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<RenderWidgetHostViewAndroid*>(rwhv); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedJavaLocalRef<jobject> ContentViewCoreImpl::GetJavaObject() { 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return java_ref_.get(env); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jint ContentViewCoreImpl::GetBackgroundColor(JNIEnv* env, jobject obj) { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhva = GetRenderWidgetHostViewAndroid(); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rwhva) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return SK_ColorWHITE; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return rwhva->GetCachedBackgroundColor(); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnHide(JNIEnv* env, jobject obj) { 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Hide(); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnShow(JNIEnv* env, jobject obj) { 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Show(); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::Show() { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWebContents()->WasShown(); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::Hide() { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWebContents()->WasHidden(); 35268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) PauseVideo(); 35368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 35468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 35568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void ContentViewCoreImpl::PauseVideo() { 35668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) RenderViewHost* host = web_contents_->GetRenderViewHost(); 35768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (host) 35868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) host->Send(new ViewMsg_PauseVideo(host->GetRoutingID())); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 361d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)void ContentViewCoreImpl::PauseOrResumeGeolocation(bool should_pause) { 362d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) geolocation_needs_pause_ = should_pause; 363d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) RenderViewHostImpl* rvh = 364d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) static_cast<RenderViewHostImpl*>(web_contents_->GetRenderViewHost()); 365d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) if (rvh) { 366d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) scoped_refptr<GeolocationDispatcherHost> geolocation_dispatcher = 367d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) static_cast<RenderProcessHostImpl*>( 368d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) web_contents_->GetRenderProcessHost())-> 369d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) geolocation_dispatcher_host(); 370d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) if (geolocation_dispatcher.get()) { 371d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 372d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) base::Bind(&GeolocationDispatcherHost::PauseOrResume, 373d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) geolocation_dispatcher, 374d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) rvh->GetRoutingID(), 375d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) should_pause)); 376d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) geolocation_needs_pause_ = false; 377d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) } 378d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) } 379d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)} 380d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnTabCrashed() { 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (obj.is_null()) 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_resetVSyncNotification(env, obj.obj()); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// All positions and sizes are in CSS pixels. 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Note that viewport_width/height is a best effort based. 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ContentViewCore has the actual information about the physical viewport size. 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::UpdateFrameInfo( 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2dF& scroll_offset, 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float page_scale_factor, 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2dF& page_scale_factor_limits, 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::SizeF& content_size, 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::SizeF& viewport_size, 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2dF& controls_offset, 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Vector2dF& content_offset, 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float overdraw_bottom_height) { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (window_android_) { 4078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::Vector2dF window_offset( 4088bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Java_ContentViewCore_getLocationInWindowX(env, obj.obj()), 4098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) Java_ContentViewCore_getLocationInWindowY(env, obj.obj())); 4108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) window_android_->set_content_offset( 4118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) gfx::ScaleVector2d(content_offset, dpi_scale_) + window_offset); 4128bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4138bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_updateFrameInfo( 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_offset.x(), 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scroll_offset.y(), 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_scale_factor, 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_scale_factor_limits.x(), 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) page_scale_factor_limits.y(), 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_size.width(), 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_size.height(), 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) viewport_size.width(), 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) viewport_size.height(), 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) controls_offset.y(), 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content_offset.y(), 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) overdraw_bottom_height); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 430a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ContentViewCoreImpl::SetTitle(const base::string16& title) { 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jtitle = 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, UTF16ToUTF8(title)); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_setTitle(env, obj.obj(), jtitle.obj()); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::OnBackgroundColorChanged(SkColor color) { 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onBackgroundColorChanged(env, obj.obj(), color); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ShowSelectPopupMenu( 4497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::vector<MenuItem>& items, int selected_item, bool multiple) { 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For multi-select list popups we find the list of previous selections by 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // iterating through the items. But for single selection popups we take the 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // given |selected_item| as is. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jintArray> selected_array; 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (multiple) { 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<jint[]> native_selected_array(new jint[items.size()]); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t selected_count = 0; 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < items.size(); ++i) { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (items[i].checked) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_selected_array[selected_count++] = i; 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch selected_array = ScopedJavaLocalRef<jintArray>( 4687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch env, env->NewIntArray(selected_count)); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntArrayRegion(selected_array.obj(), 0, selected_count, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_selected_array.get()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch selected_array = ScopedJavaLocalRef<jintArray>(env, env->NewIntArray(1)); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint value = selected_item; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntArrayRegion(selected_array.obj(), 0, 1, &value); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jintArray> enabled_array(env, 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->NewIntArray(items.size())); 479a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::vector<base::string16> labels; 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) labels.reserve(items.size()); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < items.size(); ++i) { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) labels.push_back(items[i].label); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint enabled = 4847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch (items[i].type == MenuItem::GROUP ? POPUP_ITEM_TYPE_GROUP : 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) (items[i].enabled ? POPUP_ITEM_TYPE_ENABLED : 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POPUP_ITEM_TYPE_DISABLED)); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntArrayRegion(enabled_array.obj(), i, 1, &enabled); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobjectArray> items_array( 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::android::ToJavaArrayOfStrings(env, labels)); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_showSelectPopup(env, j_obj.obj(), 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) items_array.obj(), enabled_array.obj(), 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multiple, selected_array.obj()); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ConfirmTouchEvent(InputEventAckState ack_result) { 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_confirmTouchEvent(env, j_obj.obj(), 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<jint>(ack_result)); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void ContentViewCoreImpl::UnhandledFlingStartEvent() { 506a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 507a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 508a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (j_obj.is_null()) 509a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return; 510a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Java_ContentViewCore_unhandledFlingStartEvent(env, j_obj.obj()); 5110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 5120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void ContentViewCoreImpl::OnScrollUpdateGestureConsumed() { 5140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 5160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (j_obj.is_null()) 5170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return; 5180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Java_ContentViewCore_onScrollUpdateGestureConsumed(env, j_obj.obj()); 519a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 520a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::HasTouchEventHandlers(bool need_touch_events) { 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_hasTouchEventHandlers(env, 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j_obj.obj(), 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) need_touch_events); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentViewCoreImpl::HasFocus() { 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Java_ContentViewCore_hasFocus(env, obj.obj()); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnSelectionChanged(const std::string& text) { 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> jtext = ConvertUTF8ToJavaString(env, text); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_onSelectionChanged(env, obj.obj(), jtext.obj()); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::OnSelectionBoundsChanged( 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ViewHostMsg_SelectionBounds_Params& params) { 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> anchor_rect_dip( 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateJavaRect(env, params.anchor_rect)); 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> focus_rect_dip( 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateJavaRect(env, params.focus_rect)); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_onSelectionBoundsChanged(env, obj.obj(), 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) anchor_rect_dip.obj(), 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.anchor_dir, 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) focus_rect_dip.obj(), 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.focus_dir, 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.is_anchor_first); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ShowPastePopup(int x_dip, int y_dip) { 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_showPastePopup(env, obj.obj(), 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<jint>(x_dip), 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<jint>(y_dip)); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unsigned int ContentViewCoreImpl::GetScaledContentTexture( 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float scale, 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size* out_size) { 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!view) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return view->GetScaledContentTexture(scale, out_size); 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::StartContentIntent(const GURL& content_url) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> jcontent_url = 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertUTF8ToJavaString(env, content_url.spec()); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_startContentIntent(env, 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j_obj.obj(), 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jcontent_url.obj()); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ShowDisambiguationPopup( 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& target_rect, 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SkBitmap& zoomed_bitmap) { 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> rect_object(CreateJavaRect(env, target_rect)); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> java_bitmap = 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::ConvertToJavaBitmap(&zoomed_bitmap); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!java_bitmap.is_null()); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentViewCore_showDisambiguationPopup(env, 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.obj(), 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rect_object.obj(), 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_bitmap.obj()); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ScopedJavaLocalRef<jobject> ContentViewCoreImpl::CreateTouchEventSynthesizer() { 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 624b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return ScopedJavaLocalRef<jobject>(); 625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return Java_ContentViewCore_createTouchEventSynthesizer(env, obj.obj()); 62658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 62758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 628b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void ContentViewCoreImpl::NotifyExternalSurface( 629b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int player_id, bool is_request, const gfx::RectF& rect) { 630c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 631c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (obj.is_null()) 634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 636b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_ContentViewCore_notifyExternalSurface( 637b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) env, 638b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) obj.obj(), 639b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jint>(player_id), 640b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jboolean>(is_request), 641b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jfloat>(rect.x()), 642b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jfloat>(rect.y()), 643b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jfloat>(rect.width()), 644b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) static_cast<jfloat>(rect.height())); 645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 646c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 647868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ScopedJavaLocalRef<jobject> ContentViewCoreImpl::GetContentVideoViewClient() { 648868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 649868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 650868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 651868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (obj.is_null()) 652868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return ScopedJavaLocalRef<jobject>(); 653868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 654868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return Java_ContentViewCore_getContentVideoViewClient(env, obj.obj()); 655868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 656868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 657868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)ScopedJavaLocalRef<jobject> ContentViewCoreImpl::GetContext() { 658868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 659868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 660868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 661868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (obj.is_null()) 662868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return ScopedJavaLocalRef<jobject>(); 663868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 664868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return Java_ContentViewCore_getContext(env, obj.obj()); 665868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 666868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 667f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ContentViewCoreImpl::ShouldBlockMediaRequest(const GURL& url) { 668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (obj.is_null()) 672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return true; 673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ScopedJavaLocalRef<jstring> j_url = ConvertUTF8ToJavaString(env, url.spec()); 674f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return Java_ContentViewCore_shouldBlockMediaRequest(env, obj.obj(), 675f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) j_url.obj()); 676f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 677f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetPhysicalBackingSize() const { 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (j_obj.is_null()) 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::Size(); 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::Size( 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_getPhysicalBackingWidthPix(env, j_obj.obj()), 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_getPhysicalBackingHeightPix(env, j_obj.obj())); 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetViewportSizePix() const { 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (j_obj.is_null()) 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::Size(); 693c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Size( 694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_getViewportWidthPix(env, j_obj.obj()), 695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_getViewportHeightPix(env, j_obj.obj())); 696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetViewportSizeOffsetPix() const { 699c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 700c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 701c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (j_obj.is_null()) 702c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Size(); 703c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Size( 704c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_getViewportSizeOffsetWidthPix(env, j_obj.obj()), 705c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_ContentViewCore_getViewportSizeOffsetHeightPix(env, j_obj.obj())); 7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetViewportSizeDip() const { 7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::ToCeiledSize( 7102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::ScaleSize(GetViewportSizePix(), 1.0f / GetDpiScale())); 7112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 713c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)gfx::Size ContentViewCoreImpl::GetViewportSizeOffsetDip() const { 714c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::ToCeiledSize( 715c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::ScaleSize(GetViewportSizeOffsetPix(), 1.0f / GetDpiScale())); 716c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 717c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float ContentViewCoreImpl::GetOverdrawBottomHeightDip() const { 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> j_obj = java_ref_.get(env); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (j_obj.is_null()) 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0.f; 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return Java_ContentViewCore_getOverdrawBottomHeightPix(env, j_obj.obj()) 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) / GetDpiScale(); 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::AttachLayer(scoped_refptr<cc::Layer> layer) { 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) root_layer_->AddChild(layer); 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) { 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) layer->RemoveFromParent(); 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::LoadUrl( 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationController::LoadURLParams& params) { 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWebContents()->GetController().LoadURLWithParams(params); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 74068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void ContentViewCoreImpl::AddBeginFrameSubscriber() { 74168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 74268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 74368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (obj.is_null()) 74468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return; 74568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Java_ContentViewCore_addVSyncSubscriber(env, obj.obj()); 74668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 74768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 74868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void ContentViewCoreImpl::RemoveBeginFrameSubscriber() { 749c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 750c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 751c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (obj.is_null()) 752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 75368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) Java_ContentViewCore_removeVSyncSubscriber(env, obj.obj()); 754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 755c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ContentViewCoreImpl::SetNeedsAnimate() { 75790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 75890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 75990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (obj.is_null()) 76090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return; 76190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Java_ContentViewCore_setNeedsAnimate(env, obj.obj()); 76290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 76390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 764c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ui::ViewAndroid* ContentViewCoreImpl::GetViewAndroid() const { 765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // view_android_ should never be null for Chrome. 766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(view_android_); 767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return view_android_; 768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ui::WindowAndroid* ContentViewCoreImpl::GetWindowAndroid() const { 771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This should never be NULL for Chrome, but will be NULL for WebView. 772c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(window_android_); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return window_android_; 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<cc::Layer> ContentViewCoreImpl::GetLayer() const { 7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return root_layer_.get(); 7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ---------------------------------------------------------------------------- 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Methods called from Java via JNI 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ---------------------------------------------------------------------------- 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SelectPopupMenuItems(JNIEnv* env, jobject obj, 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jintArray indices) { 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRenderViewHost()); 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(rvhi); 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (indices == NULL) { 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvhi->DidCancelPopupMenu(); 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selected_count = env->GetArrayLength(indices); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<int> selected_indices; 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint* indices_ptr = env->GetIntArrayElements(indices, NULL); 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < selected_count; ++i) 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_indices.push_back(indices_ptr[i]); 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->ReleaseIntArrayElements(indices, indices_ptr, JNI_ABORT); 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rvhi->DidSelectPopupMenuItems(selected_indices); 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::LoadUrl( 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, jobject obj, 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring url, 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint load_url_type, 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint transition_type, 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint ua_override_option, 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring extra_headers, 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jbyteArray post_data, 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring base_url_for_data_url, 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring virtual_url_for_data_url, 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean can_load_local_resources) { 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(url); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationController::LoadURLParams params( 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(ConvertJavaStringToUTF8(env, url))); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.load_type = static_cast<NavigationController::LoadURLType>( 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_url_type); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.transition_type = PageTransitionFromInt(transition_type); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.override_user_agent = 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<NavigationController::UserAgentOverrideOption>( 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ua_override_option); 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (extra_headers) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.extra_headers = ConvertJavaStringToUTF8(env, extra_headers); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (post_data) { 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<uint8> http_body_vector; 8302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::android::JavaByteArrayToByteVector(env, post_data, &http_body_vector); 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.browser_initiated_post_data = 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::RefCountedBytes::TakeVector(&http_body_vector); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base_url_for_data_url) { 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.base_url_for_data_url = 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(ConvertJavaStringToUTF8(env, base_url_for_data_url)); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (virtual_url_for_data_url) { 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.virtual_url_for_data_url = 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(ConvertJavaStringToUTF8(env, virtual_url_for_data_url)); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.can_load_local_resources = can_load_local_resources; 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadUrl(params); 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jint ContentViewCoreImpl::GetCurrentRenderProcessId(JNIEnv* env, jobject obj) { 8512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return GetRenderProcessIdFromRenderViewHost( 8522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedJavaLocalRef<jstring> ContentViewCoreImpl::GetURL( 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, jobject) const { 8574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return ConvertUTF8ToJavaString(env, GetWebContents()->GetURL().spec()); 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedJavaLocalRef<jstring> ContentViewCoreImpl::GetTitle( 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, jobject obj) const { 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ConvertUTF16ToJavaString(env, GetWebContents()->GetTitle()); 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::IsIncognito(JNIEnv* env, jobject obj) { 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetWebContents()->GetBrowserContext()->IsOffTheRecord(); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContents* ContentViewCoreImpl::GetWebContents() const { 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return web_contents_; 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SetFocus(JNIEnv* env, jobject obj, jboolean focused) { 874d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) SetFocusInternal(focused); 875d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 876d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 877d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ContentViewCoreImpl::SetFocusInternal(bool focused) { 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GetRenderWidgetHostViewAndroid()) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (focused) 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRenderWidgetHostViewAndroid()->Focus(); 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRenderWidgetHostViewAndroid()->Blur(); 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SendOrientationChangeEvent(JNIEnv* env, 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint orientation) { 8904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (device_orientation_ != orientation) { 8914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) device_orientation_ = orientation; 8924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SendOrientationChangeEventInternal(); 8934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::SendTouchEvent(JNIEnv* env, 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong time_ms, 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint type, 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobjectArray pts) { 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (rwhv) { 903f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) using blink::WebTouchEvent; 904f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTouchEvent event; 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TouchPoint::BuildWebTouchEvent(env, type, time_ms, GetDpiScale(), pts, 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv->SendTouchEvent(event); 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float ContentViewCoreImpl::GetTouchPaddingDip() { 9142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 48.0f / GetDpiScale(); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)float ContentViewCoreImpl::GetDpiScale() const { 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dpi_scale_; 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 921c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ContentViewCoreImpl::RequestContentClipping( 922c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Rect& clipping, 923c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Size& content_size) { 924c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 925c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (rwhv) 926c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) rwhv->RequestContentClipping(clipping, content_size); 927c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::SendMouseMoveEvent(JNIEnv* env, 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong time_ms, 9322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, 9332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat y) { 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rwhv) 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 938f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent event = WebMouseEventBuilder::Build( 939bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebInputEvent::MouseMove, 940f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent::ButtonNone, 9412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale(), 0, 1); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv->SendMouseEvent(event); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::SendMouseWheelEvent(JNIEnv* env, 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong time_ms, 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, 9512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat y, 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfloat vertical_axis) { 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!rwhv) 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 957bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch WebMouseWheelEventBuilder::Direction direction; 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (vertical_axis > 0) { 959bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch direction = WebMouseWheelEventBuilder::DIRECTION_UP; 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (vertical_axis < 0) { 961bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch direction = WebMouseWheelEventBuilder::DIRECTION_DOWN; 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseWheelEvent event = WebMouseWheelEventBuilder::Build( 966bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch direction, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rwhv->SendMouseWheelEvent(event); 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebGestureEvent ContentViewCoreImpl::MakeGestureEvent( 973f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) WebInputEvent::Type type, int64 time_ms, float x, float y) const { 974bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch return WebGestureEventBuilder::Build( 975bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch type, time_ms / 1000.0, x / GetDpiScale(), y / GetDpiScale()); 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::SendGestureEvent( 979f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebGestureEvent& event) { 9802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 9812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (rwhv) 9822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rwhv->SendGestureEvent(event); 9832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ScrollBegin(JNIEnv* env, jobject obj, jlong time_ms, 9862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 988868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureScrollBegin, time_ms, x, y); 9892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ScrollEnd(JNIEnv* env, jobject obj, jlong time_ms) { 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 994868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureScrollEnd, time_ms, 0, 0); 9952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ScrollBy(JNIEnv* env, jobject obj, jlong time_ms, 99958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) jfloat x, jfloat y, jfloat dx, jfloat dy) { 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1001868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureScrollUpdate, time_ms, x, y); 10022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.scrollUpdate.deltaX = -dx / GetDpiScale(); 10032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.scrollUpdate.deltaY = -dy / GetDpiScale(); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::FlingStart(JNIEnv* env, jobject obj, jlong time_ms, 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y, jfloat vx, jfloat vy) { 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1011868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureFlingStart, time_ms, x, y); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Velocity should not be scaled by DIP since that interacts poorly with the 10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // deceleration constants. The DIP scaling is done on the renderer. 10152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.flingStart.velocityX = vx; 10162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.flingStart.velocityY = vy; 10172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 10182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::FlingCancel(JNIEnv* env, jobject obj, jlong time_ms) { 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1023868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureFlingCancel, time_ms, 0, 0); 10242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SingleTap(JNIEnv* env, jobject obj, jlong time_ms, 10282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y, 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean disambiguation_popup_tap) { 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1031868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureTap, time_ms, x, y); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event.data.tap.tapCount = 1; 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!disambiguation_popup_tap) { 10352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const float touch_padding_dip = GetTouchPaddingDip(); 10362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.tap.width = touch_padding_dip; 10372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.tap.height = touch_padding_dip; 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1043b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void ContentViewCoreImpl::SingleTapUnconfirmed(JNIEnv* env, jobject obj, 1044b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) jlong time_ms, 1045b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) jfloat x, jfloat y) { 1046b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1047868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureTapUnconfirmed, time_ms, x, y); 1048b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 1049b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) event.data.tap.tapCount = 1; 1050b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 1051b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const float touch_padding_dip = GetTouchPaddingDip(); 1052b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) event.data.tap.width = touch_padding_dip; 1053b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) event.data.tap.height = touch_padding_dip; 1054b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 1055b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) SendGestureEvent(event); 1056b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 1057b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ShowPressState(JNIEnv* env, jobject obj, 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong time_ms, 10602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 10621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WebInputEvent::GestureShowPress, time_ms, x, y); 10632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 10652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1066f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ContentViewCoreImpl::TapCancel(JNIEnv* env, 1067f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jobject obj, 1068f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jlong time_ms, 1069f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jfloat x, 1070f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jfloat y) { 10712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1072868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureTapCancel, time_ms, x, y); 10732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void ContentViewCoreImpl::TapDown(JNIEnv* env, jobject obj, 10771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) jlong time_ms, 10781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) jfloat x, jfloat y) { 10791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 10801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WebInputEvent::GestureTapDown, time_ms, x, y); 10811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendGestureEvent(event); 10821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 10831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::DoubleTap(JNIEnv* env, jobject obj, jlong time_ms, 10852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1087868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureDoubleTap, time_ms, x, y); 10882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::LongPress(JNIEnv* env, jobject obj, jlong time_ms, 10922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y, 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean disambiguation_popup_tap) { 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1095868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureLongPress, time_ms, x, y); 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!disambiguation_popup_tap) { 10982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const float touch_padding_dip = GetTouchPaddingDip(); 10992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.longPress.width = touch_padding_dip; 11002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.longPress.height = touch_padding_dip; 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 11042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::LongTap(JNIEnv* env, jobject obj, jlong time_ms, 11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y, 11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jboolean disambiguation_popup_tap) { 11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GestureLongTap, time_ms, x, y); 11112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!disambiguation_popup_tap) { 11132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const float touch_padding_dip = GetTouchPaddingDip(); 11142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.longPress.width = touch_padding_dip; 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) event.data.longPress.height = touch_padding_dip; 11162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::PinchBegin(JNIEnv* env, jobject obj, jlong time_ms, 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1124868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GesturePinchBegin, time_ms, x, y); 11252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::PinchEnd(JNIEnv* env, jobject obj, jlong time_ms) { 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1130868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GesturePinchEnd, time_ms, 0, 0); 11312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::PinchBy(JNIEnv* env, jobject obj, jlong time_ms, 11352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat anchor_x, jfloat anchor_y, 113658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) jfloat delta) { 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebGestureEvent event = MakeGestureEvent( 1138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) WebInputEvent::GesturePinchUpdate, time_ms, anchor_x, anchor_y); 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) event.data.pinchUpdate.scale = delta; 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendGestureEvent(event); 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SelectBetweenCoordinates(JNIEnv* env, jobject obj, 11452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x1, jfloat y1, 11462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x2, jfloat y2) { 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetRenderWidgetHostViewAndroid()) { 11482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRenderWidgetHostViewAndroid()->SelectRange( 11492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point(x1 / GetDpiScale(), y1 / GetDpiScale()), 11502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point(x2 / GetDpiScale(), y2 / GetDpiScale())); 11512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 11532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::MoveCaret(JNIEnv* env, jobject obj, 11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jfloat x, jfloat y) { 11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (GetRenderWidgetHostViewAndroid()) { 11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetRenderWidgetHostViewAndroid()->MoveCaret( 11582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Point(x / GetDpiScale(), y / GetDpiScale())); 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void ContentViewCoreImpl::LoadIfNecessary(JNIEnv* env, jobject obj) { 11638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) web_contents_->GetController().LoadIfNecessary(); 11648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 11658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 11668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void ContentViewCoreImpl::RequestRestoreLoad(JNIEnv* env, jobject obj) { 11678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) web_contents_->GetController().SetNeedsReload(); 11688bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 11698bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::StopLoading(JNIEnv* env, jobject obj) { 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->Stop(); 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ContentViewCoreImpl::Reload(JNIEnv* env, 1175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jobject obj, 1176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jboolean check_for_repost) { 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents_->GetController().NeedsReload()) 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().LoadIfNecessary(); 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) web_contents_->GetController().Reload(check_for_repost); 1181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ContentViewCoreImpl::ReloadIgnoringCache(JNIEnv* env, 1184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jobject obj, 1185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jboolean check_for_repost) { 1186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) web_contents_->GetController().ReloadIgnoringCache(check_for_repost); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::CancelPendingReload(JNIEnv* env, jobject obj) { 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().CancelPendingReload(); 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ContinuePendingReload(JNIEnv* env, jobject obj) { 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().ContinuePendingReload(); 11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ClearHistory(JNIEnv* env, jobject obj) { 1198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // TODO(creis): Do callers of this need to know if it fails? 1199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (web_contents_->GetController().CanPruneAllButLastCommitted()) 1200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) web_contents_->GetController().PruneAllButLastCommitted(); 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::AddJavascriptInterface( 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject /* obj */, 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject object, 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring name, 12082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jclass safe_annotation_clazz, 12092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject retained_object_set) { 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_object(env, object); 12112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jclass> scoped_clazz(env, safe_annotation_clazz); 12122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JavaObjectWeakGlobalRef weak_retained_object_set(env, retained_object_set); 12132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // JavaBoundObject creates the NPObject with a ref count of 1, and 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // JavaBridgeDispatcherHostManager takes its own ref. 12162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JavaBridgeDispatcherHostManager* java_bridge = 12172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->java_bridge_dispatcher_host_manager(); 12182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_bridge->SetRetainedObjectSet(weak_retained_object_set); 12192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NPObject* bound_object = JavaBoundObject::Create(scoped_object, scoped_clazz, 12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_bridge->AsWeakPtr()); 12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_bridge->AddNamedObject(ConvertJavaStringToUTF16(env, name), 12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bound_object); 1223f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebBindings::releaseObject(bound_object); 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::RemoveJavascriptInterface(JNIEnv* env, 12275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject /* obj */, 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring name) { 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->java_bridge_dispatcher_host_manager()->RemoveNamedObject( 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertJavaStringToUTF16(env, name)); 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::UpdateVSyncParameters(JNIEnv* env, jobject /* obj */, 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong timebase_micros, 12355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jlong interval_micros) { 12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!view) 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl* host = RenderWidgetHostImpl::From( 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view->GetRenderWidgetHost()); 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->UpdateVSyncParameters( 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks::FromInternalValue(timebase_micros), 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMicroseconds(interval_micros)); 12467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 12477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) vsync_interval_ = 12487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeDelta::FromMicroseconds(interval_micros); 12497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) expected_browser_composite_time_ = 12507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) vsync_interval_ * kDefaultBrowserCompositeVSyncFraction; 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ContentViewCoreImpl::OnVSync(JNIEnv* env, jobject /* obj */, 1254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jlong frame_time_micros) { 1255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::TimeTicks frame_time = 1256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::TimeTicks::FromInternalValue(frame_time_micros); 1257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SendBeginFrame(frame_time); 1258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 1259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ContentViewCoreImpl::SendBeginFrame(base::TimeTicks frame_time) { 1261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 1262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!view) 1263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 1264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeTicks display_time = frame_time + vsync_interval_; 12667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) base::TimeTicks deadline = display_time - expected_browser_composite_time_; 12677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 126890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) view->SendBeginFrame( 12697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) cc::BeginFrameArgs::Create(frame_time, deadline, vsync_interval_)); 127090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 127190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 127290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)jboolean ContentViewCoreImpl::OnAnimate(JNIEnv* env, jobject /* obj */, 127390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) jlong frame_time_micros) { 127490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 127590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!view) 127690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return false; 127790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 127890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return view->Animate(base::TimeTicks::FromInternalValue(frame_time_micros)); 1279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jboolean ContentViewCoreImpl::PopulateBitmapFromCompositor(JNIEnv* env, 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject jbitmap) { 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!view) 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return view->PopulateBitmapWithContents(jbitmap); 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::WasResized(JNIEnv* env, jobject obj) { 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 12932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (view) 12942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view->WasResized(); 12952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 12962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 12972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ShowInterstitialPage( 12982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, jobject obj, jstring jurl, jint delegate_ptr) { 12992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url(base::android::ConvertJavaStringToUTF8(env, jurl)); 13002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialPageDelegateAndroid* delegate = 13012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reinterpret_cast<InterstitialPageDelegateAndroid*>(delegate_ptr); 13022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InterstitialPage* interstitial = InterstitialPage::Create( 13032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_, false, url, delegate); 13042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate->set_interstitial_page(interstitial); 13052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interstitial->Show(); 13062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)jboolean ContentViewCoreImpl::IsShowingInterstitialPage(JNIEnv* env, 13092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj) { 13102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return web_contents_->ShowingInterstitialPage(); 13112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::AttachExternalVideoSurface(JNIEnv* env, 13142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 13152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jint player_id, 13162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject jsurface) { 1317d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#if defined(VIDEO_HOLE) 13182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( 13192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 1320424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (rvhi && rvhi->media_player_manager()) { 1321424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) rvhi->media_player_manager()->AttachExternalVideoSurface( 13222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(player_id), jsurface); 13232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1324d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#endif // defined(VIDEO_HOLE) 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) { 1330d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#if defined(VIDEO_HOLE) 13312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( 13322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetRenderViewHost()); 1333424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (rvhi && rvhi->media_player_manager()) { 1334424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) rvhi->media_player_manager()->DetachExternalVideoSurface( 13352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<int>(player_id)); 13362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1337d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#endif // defined(VIDEO_HOLE) 13382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)jboolean ContentViewCoreImpl::IsRenderWidgetHostViewReady(JNIEnv* env, 13412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj) { 13422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 13432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return view && view->HasValidFrame(); 13442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::ExitFullscreen(JNIEnv* env, jobject obj) { 13472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost* host = web_contents_->GetRenderViewHost(); 13481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!host) 13491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host->ExitFullscreen(); 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ContentViewCoreImpl::UpdateTopControlsState(JNIEnv* env, 1354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jobject obj, 1355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_hiding, 1356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool enable_showing, 1357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool animate) { 13582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost* host = web_contents_->GetRenderViewHost(); 13591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!host) 13601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 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) { 14464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) NavigationEntry* entry = web_contents_->GetController().GetVisibleEntry(); 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)void ContentViewCoreImpl::UndoScrollFocusedEditableNodeIntoView( 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj) { 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* host = web_contents_->GetRenderViewHost(); 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send( 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ViewMsg_UndoScrollFocusedEditableNodeIntoView(host->GetRoutingID())); 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 14682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void JavaScriptResultCallback(const ScopedJavaGlobalRef<jobject>& callback, 14692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* result) { 14702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 14712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string json; 14722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::JSONWriter::Write(result, &json); 14732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> j_json = ConvertUTF8ToJavaString(env, json); 14742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_onEvaluateJavaScriptResult(env, 14752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_json.obj(), 14762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.obj()); 14772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 14782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 14792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 14802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::EvaluateJavaScript(JNIEnv* env, 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 14822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jstring script, 14833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) jobject callback, 14843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) jboolean start_renderer) { 14853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) RenderViewHost* rvh = web_contents_->GetRenderViewHost(); 14863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) DCHECK(rvh); 14873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 14883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (start_renderer && !rvh->IsRenderViewLive()) { 14893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!web_contents_->CreateRenderViewForInitialEmptyDocument()) { 14903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) LOG(ERROR) << "Failed to create RenderView in EvaluateJavaScript"; 14913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return; 14923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 14933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!callback) { 14962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // No callback requested. 1497a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) rvh->ExecuteJavascriptInWebFrame(base::string16(), // frame_xpath 14983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ConvertJavaStringToUTF16(env, script)); 14992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 15002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Secure the Java callback in a scoped object and give ownership of it to the 15032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // base::Callback. 15042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaGlobalRef<jobject> j_callback; 15052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_callback.Reset(env, callback); 15062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderViewHost::JavascriptResultCallback c_callback = 15072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&JavaScriptResultCallback, j_callback); 15082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) rvh->ExecuteJavascriptInWebFrameCallbackResult( 1510a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16(), // frame_xpath 15112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertJavaStringToUTF16(env, script), 15122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) c_callback); 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentViewCoreImpl::GetUseDesktopUserAgent( 15165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, jobject obj) { 15174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) NavigationEntry* entry = web_contents_->GetController().GetVisibleEntry(); 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return entry && entry->GetIsOverridingUserAgent(); 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentViewCoreImpl::UpdateImeAdapter(int native_ime_adapter, 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int text_input_type, 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& text, 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_start, 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selection_end, 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int composition_start, 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int composition_end, 15284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool show_ime_if_needed, 15294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool require_ack) { 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_text = ConvertUTF8ToJavaString(env, text); 15362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_ContentViewCore_updateImeAdapter(env, obj.obj(), 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) native_ime_adapter, text_input_type, 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring_text.obj(), 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selection_start, selection_end, 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) composition_start, composition_end, 15414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) show_ime_if_needed, require_ack); 15422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 15432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::ClearSslPreferences(JNIEnv* env, jobject obj) { 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SSLHostState* state = SSLHostState::GetFor( 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().GetBrowserContext()); 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state->Clear(); 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentViewCoreImpl::SetUseDesktopUserAgent( 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean enabled, 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean reload_on_state_change) { 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetUseDesktopUserAgent(env, obj) == enabled) 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the navigation entry actually exists. 15594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) NavigationEntry* entry = web_contents_->GetController().GetVisibleEntry(); 15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry) 15615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the flag in the NavigationEntry. 15645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) entry->SetIsOverridingUserAgent(enabled); 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send the override to the renderer. 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reload_on_state_change) { 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reloading the page will send the override down as part of the 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation IPC message. 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigationControllerImpl& controller = 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<NavigationControllerImpl&>(web_contents_->GetController()); 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller.ReloadOriginalRequestURL(false); 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ContentViewCoreImpl::SetAccessibilityEnabled(JNIEnv* env, jobject obj, 1577eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool enabled) { 1578eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderWidgetHostViewAndroid* host_view = GetRenderWidgetHostViewAndroid(); 1579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!host_view) 1580eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 1581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RenderWidgetHostImpl* host_impl = RenderWidgetHostImpl::From( 1582eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_view->GetRenderWidgetHost()); 15834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BrowserAccessibilityState* accessibility_state = 15844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) BrowserAccessibilityState::GetInstance(); 1585eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (enabled) { 15864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // This enables accessibility globally unless it was explicitly disallowed 15874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // by a command-line flag. 15884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) accessibility_state->OnScreenReaderDetected(); 15894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // If it was actually enabled globally, enable it for this RenderWidget now. 15904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (accessibility_state->IsAccessibleBrowser() && host_impl) 1591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_impl->SetAccessibilityMode(AccessibilityModeComplete); 1592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } else { 15934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) accessibility_state->DisableAccessibility(); 1594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (host_impl) 1595eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host_impl->SetAccessibilityMode(AccessibilityModeOff); 1596eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 1597eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 1598eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ContentViewCoreImpl::SendSingleTapUma(JNIEnv* env, 1600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jobject obj, 1601f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jint type, 1602f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jint count) { 1603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION("Event.SingleTapType", type, count); 1604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ContentViewCoreImpl::SendActionAfterDoubleTapUma(JNIEnv* env, 1607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jobject obj, 1608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jint type, 1609f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jboolean has_delay, 1610f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jint count) { 1611f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // This UMA stat tracks a user's action after a double tap within 1612f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // k seconds (where k == 5 currently). This UMA will tell us if 1613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // removing the tap gesture delay will lead to significantly more 1614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // accidental navigations after a double tap. 1615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (has_delay) { 1616f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION("Event.ActionAfterDoubleTapWithDelay", type, 1617f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) count); 1618f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 1619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UMA_HISTOGRAM_ENUMERATION("Event.ActionAfterDoubleTapNoDelay", type, 1620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) count); 1621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 1622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 1623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 16244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void ContentViewCoreImpl::SendOrientationChangeEventInternal() { 16254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderWidgetHostViewAndroid* rwhv = GetRenderWidgetHostViewAndroid(); 16264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (rwhv) 16274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) rwhv->UpdateScreenInfo(rwhv->GetNativeView()); 16284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 16294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderViewHostImpl* rvhi = static_cast<RenderViewHostImpl*>( 16304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_contents_->GetRenderViewHost()); 16314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) rvhi->SendOrientationChangeEvent(device_orientation_); 16324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 16334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1634d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles)void ContentViewCoreImpl::ExtractSmartClipData(JNIEnv* env, 1635d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) jobject obj, 1636d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) jint x, 1637d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) jint y, 1638d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) jint width, 1639d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) jint height) { 1640d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) gfx::Rect rect( 1641d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) static_cast<int>(x / GetDpiScale()), 1642d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) static_cast<int>(y / GetDpiScale()), 1643d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) static_cast<int>((width > 0 && width < GetDpiScale()) ? 1644d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) 1 : (int)(width / GetDpiScale())), 1645d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) static_cast<int>((height > 0 && height < GetDpiScale()) ? 1646d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) 1 : (int)(height / GetDpiScale()))); 1647d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) GetWebContents()->Send(new ViewMsg_ExtractSmartClipData( 1648d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) GetWebContents()->GetRoutingID(), rect)); 1649d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles)} 1650d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) 1651d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles)void ContentViewCoreImpl::OnSmartClipDataExtracted(const string16& result) { 1652d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 1653d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 1654d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) if (obj.is_null()) 1655d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) return; 1656d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) ScopedJavaLocalRef<jstring> jresult = ConvertUTF16ToJavaString(env, result); 1657d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) Java_ContentViewCore_onSmartClipDataExtracted( 1658d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) env, obj.obj(), jresult.obj()); 1659d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles)} 1660d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) 1661923bd855a3a49144a9f75d8a8200416a52bae775Ben Murdochvoid ContentViewCoreImpl::WebContentsDestroyed(WebContents* web_contents) { 1662923bd855a3a49144a9f75d8a8200416a52bae775Ben Murdoch WebContentsViewAndroid* wcva = 1663923bd855a3a49144a9f75d8a8200416a52bae775Ben Murdoch static_cast<WebContentsViewAndroid*>(web_contents->GetView()); 1664923bd855a3a49144a9f75d8a8200416a52bae775Ben Murdoch DCHECK(wcva); 1665923bd855a3a49144a9f75d8a8200416a52bae775Ben Murdoch wcva->SetContentViewCore(NULL); 1666923bd855a3a49144a9f75d8a8200416a52bae775Ben Murdoch} 1667923bd855a3a49144a9f75d8a8200416a52bae775Ben Murdoch 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is called for each ContentView. 1669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)jlong Init(JNIEnv* env, jobject obj, 1670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jboolean hardware_accelerated, 1671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jlong native_web_contents, 1672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jlong view_android, 1673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) jlong window_android) { 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl* view = new ContentViewCoreImpl( 1675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env, obj, hardware_accelerated, 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<WebContents*>(native_web_contents), 1677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reinterpret_cast<ui::ViewAndroid*>(view_android), 1678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reinterpret_cast<ui::WindowAndroid*>(window_android)); 1679f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return reinterpret_cast<intptr_t>(view); 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RegisterContentViewCore(JNIEnv* env) { 16832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return RegisterNativesImpl(env); 16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1687