1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// 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 "android_webview/native/aw_contents.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosiba#include <limits> 8fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosiba 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/browser/aw_browser_context.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/browser/aw_browser_main_parts.h" 11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "android_webview/browser/gpu_memory_buffer_factory_impl.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "android_webview/browser/in_process_view_renderer.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "android_webview/browser/net_disk_cache_remover.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/browser/renderer_host/aw_resource_dispatcher_host_delegate.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "android_webview/common/aw_hit_test_data.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "android_webview/native/aw_autofill_manager_delegate.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "android_webview/native/aw_browser_dependency_factory.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/native/aw_contents_client_bridge.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "android_webview/native/aw_contents_io_thread_client_impl.h" 205d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun// START: Printing fork b/10190508 215d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun#include "android_webview/native/aw_pdf_exporter.h" 225d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun// END: Printing fork b/10190508 234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "android_webview/native/aw_picture.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "android_webview/native/aw_web_contents_delegate.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/native/java_browser_view_renderer_helper.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/native/state_serializer.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/public/browser/draw_gl.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_android.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_array.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_string.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/android/scoped_java_ref.h" 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/atomicops.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h" 35389f89184187a18e6314d543397f72960e900659Torne (Richard Coles)#include "base/memory/memory_pressure_listener.h" 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/message_loop/message_loop.h" 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/pickle.h" 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/supports_user_data.h" 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/content/browser/autofill_driver_impl.h" 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_manager.h" 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/webdata/autofill_webdata_service.h" 43b182fe5940919bed4353dcd88e26bef9c704aa3fSelim Gurun#include "components/navigation_interception/intercept_navigation_delegate.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/android/content_view_core.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/cert_store.h" 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/browser/favicon_status.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_process_host.h" 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 525db5c4ec98571177cc4dec6df1ad33269f632543Torne (Richard Coles)#include "content/public/common/renderer_preferences.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/ssl_status.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jni/AwContents_jni.h" 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cert/x509_certificate.h" 564311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch#include "third_party/skia/include/core/SkPicture.h" 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/base/l10n/l10n_util_android.h" 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/android/java_bitmap.h" 5966cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org#include "ui/gfx/font_render_params_linux.h" 60ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ui/gfx/image/image.h" 61fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosiba#include "ui/gfx/size.h" 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AwDrawSWFunctionTable; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct AwDrawGLFunctionTable; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)using autofill::AutofillDriverImpl; 6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)using autofill::AutofillManager; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::AttachCurrentThread; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertJavaStringToUTF16; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertJavaStringToUTF8; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF16ToJavaString; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF8ToJavaString; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::JavaRef; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaGlobalRef; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaLocalRef; 76b182fe5940919bed4353dcd88e26bef9c704aa3fSelim Gurunusing navigation_interception::InterceptNavigationDelegate; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::ContentViewCore; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern "C" { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static AwDrawGLFunction DrawGLFunction; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void DrawGLFunction(int view_context, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwDrawGLInfo* draw_info, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* spare) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |view_context| is the value that was returned from the java 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AwContents.onPrepareDrawGL; this cast must match the code there. 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reinterpret_cast<android_webview::BrowserViewRenderer*>(view_context)->DrawGL( 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) draw_info); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace android_webview { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdochbool g_should_download_favicons = false; 98ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdoch 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)JavaBrowserViewRendererHelper* java_renderer_helper() { 1004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch return JavaBrowserViewRendererHelper::GetInstance(); 1017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const void* kAwContentsUserDataKey = &kAwContentsUserDataKey; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AwContentsUserData : public base::SupportsUserData::Data { 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwContentsUserData(AwContents* ptr) : contents_(ptr) {} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AwContents* GetContents(WebContents* web_contents) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!web_contents) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwContentsUserData* data = reinterpret_cast<AwContentsUserData*>( 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents->GetUserData(kAwContentsUserDataKey)); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return data ? data->contents_ : NULL; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwContents* contents_; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::subtle::Atomic32 g_instance_count = 0; 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 12366cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org// TODO(boliu): Deduplicate with chrome/ code. 12466cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.orgcontent::RendererPreferencesHintingEnum GetRendererPreferencesHintingEnum( 12566cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org gfx::FontRenderParams::Hinting hinting) { 12666cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org switch (hinting) { 12766cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org case gfx::FontRenderParams::HINTING_NONE: 12866cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_HINTING_NONE; 12966cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org case gfx::FontRenderParams::HINTING_SLIGHT: 13066cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_HINTING_SLIGHT; 13166cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org case gfx::FontRenderParams::HINTING_MEDIUM: 13266cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_HINTING_MEDIUM; 13366cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org case gfx::FontRenderParams::HINTING_FULL: 13466cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_HINTING_FULL; 13566cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org default: 13666cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org NOTREACHED() << "Unhandled hinting style " << hinting; 13766cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_HINTING_SYSTEM_DEFAULT; 13866cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org } 13966cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org} 14066cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org 14166cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org// TODO(boliu): Deduplicate with chrome/ code. 14266cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.orgcontent::RendererPreferencesSubpixelRenderingEnum 14366cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.orgGetRendererPreferencesSubpixelRenderingEnum( 14466cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org gfx::FontRenderParams::SubpixelRendering subpixel_rendering) { 14566cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org switch (subpixel_rendering) { 14666cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org case gfx::FontRenderParams::SUBPIXEL_RENDERING_NONE: 14766cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_NONE; 14866cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org case gfx::FontRenderParams::SUBPIXEL_RENDERING_RGB: 14966cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_RGB; 15066cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org case gfx::FontRenderParams::SUBPIXEL_RENDERING_BGR: 15166cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_BGR; 15266cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org case gfx::FontRenderParams::SUBPIXEL_RENDERING_VRGB: 15366cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VRGB; 15466cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org case gfx::FontRenderParams::SUBPIXEL_RENDERING_VBGR: 15566cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VBGR; 15666cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org default: 15766cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org NOTREACHED() << "Unhandled subpixel rendering style " 15866cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org << subpixel_rendering; 15966cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT; 16066cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org } 16166cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org} 16266cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AwContents* AwContents::FromWebContents(WebContents* web_contents) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return AwContentsUserData::GetContents(web_contents); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwContents* AwContents::FromID(int render_process_id, int render_view_id) { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::RenderViewHost* rvh = 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::RenderViewHost::FromID(render_process_id, render_view_id); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!rvh) return NULL; 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents* web_contents = 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::WebContents::FromRenderViewHost(rvh); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!web_contents) return NULL; 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return FromWebContents(web_contents); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)AwContents::AwContents(scoped_ptr<WebContents> web_contents) 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : web_contents_(web_contents.Pass()), 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser_view_renderer_( 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new InProcessViewRenderer(this, java_renderer_helper(), 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) web_contents_.get())) { 187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::subtle::NoBarrier_AtomicIncrement(&g_instance_count, 1); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icon_helper_.reset(new IconHelper(web_contents_.get())); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icon_helper_->SetListener(this); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->SetUserData(kAwContentsUserDataKey, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AwContentsUserData(this)); 192b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) render_view_host_ext_.reset( 193b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) new AwRenderViewHostExt(this, web_contents_.get())); 19490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 19590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AwAutofillManagerDelegate* autofill_manager_delegate = 196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AwAutofillManagerDelegate::FromWebContents(web_contents_.get()); 19790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (autofill_manager_delegate) 19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) InitAutofillIfNecessary(autofill_manager_delegate->GetSaveFormData()); 1995db5c4ec98571177cc4dec6df1ad33269f632543Torne (Richard Coles) 20013a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles) SetAndroidWebViewRendererPrefs(); 20190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 20290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void AwContents::SetJavaPeers(JNIEnv* env, 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jobject obj, 2057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jobject aw_contents, 2067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jobject web_contents_delegate, 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jobject contents_client_bridge, 208b182fe5940919bed4353dcd88e26bef9c704aa3fSelim Gurun jobject io_thread_client, 209b182fe5940919bed4353dcd88e26bef9c704aa3fSelim Gurun jobject intercept_navigation_delegate) { 2107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The |aw_content| param is technically spurious as it duplicates |obj| but 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // is passed over anyway to make the binding more explicit. 2137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) java_ref_ = JavaObjectWeakGlobalRef(env, aw_contents); 2147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) web_contents_delegate_.reset( 2167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new AwWebContentsDelegate(env, web_contents_delegate)); 2177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) web_contents_->SetDelegate(web_contents_delegate_.get()); 2187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) contents_client_bridge_.reset( 2207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new AwContentsClientBridge(env, contents_client_bridge)); 2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AwContentsClientBridgeBase::Associate(web_contents_.get(), 2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) contents_client_bridge_.get()); 2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AwContentsIoThreadClientImpl::Associate( 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) web_contents_.get(), ScopedJavaLocalRef<jobject>(env, io_thread_client)); 226b182fe5940919bed4353dcd88e26bef9c704aa3fSelim Gurun 227b182fe5940919bed4353dcd88e26bef9c704aa3fSelim Gurun InterceptNavigationDelegate::Associate( 228b182fe5940919bed4353dcd88e26bef9c704aa3fSelim Gurun web_contents_.get(), 229b182fe5940919bed4353dcd88e26bef9c704aa3fSelim Gurun make_scoped_ptr(new InterceptNavigationDelegate( 230b182fe5940919bed4353dcd88e26bef9c704aa3fSelim Gurun env, intercept_navigation_delegate))); 2311fd9e3b04c69b248f06b24005d5b6a3cd3d86ccbSelim Gurun 2321fd9e3b04c69b248f06b24005d5b6a3cd3d86ccbSelim Gurun // Finally, having setup the associations, release any deferred requests 2331fd9e3b04c69b248f06b24005d5b6a3cd3d86ccbSelim Gurun int child_id = web_contents_->GetRenderProcessHost()->GetID(); 2341fd9e3b04c69b248f06b24005d5b6a3cd3d86ccbSelim Gurun int route_id = web_contents_->GetRoutingID(); 2351fd9e3b04c69b248f06b24005d5b6a3cd3d86ccbSelim Gurun AwResourceDispatcherHostDelegate::OnIoThreadClientReady(child_id, route_id); 2367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 23890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void AwContents::SetSaveFormData(bool enabled) { 23990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) InitAutofillIfNecessary(enabled); 24090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // We need to check for the existence, since autofill_manager_delegate 24190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // may not be created when the setting is false. 2427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (AutofillDriverImpl::FromWebContents(web_contents_.get())) { 243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AwAutofillManagerDelegate::FromWebContents(web_contents_.get())-> 244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SetSaveFormData(enabled); 24590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 24690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 24790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 24890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void AwContents::InitAutofillIfNecessary(bool enabled) { 24990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Do not initialize if the feature is not enabled. 25090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!enabled) 25190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return; 252eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Check if the autofill driver already exists. 25390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::WebContents* web_contents = web_contents_.get(); 2547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (AutofillDriverImpl::FromWebContents(web_contents)) 25590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return; 25690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AwBrowserContext::FromWebContents(web_contents)-> 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CreateUserPrefServiceIfNecessary(); 259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AwAutofillManagerDelegate::CreateForWebContents(web_contents); 2607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AutofillDriverImpl::CreateForWebContentsAndDelegate( 26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) web_contents, 262eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AwAutofillManagerDelegate::FromWebContents(web_contents), 26390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) l10n_util::GetDefaultLocale(), 264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutofillManager::DISABLE_AUTOFILL_DOWNLOAD_MANAGER); 265eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 26713a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles)void AwContents::SetAndroidWebViewRendererPrefs() { 26813a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles) content::RendererPreferences* prefs = 26913a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles) web_contents_->GetMutableRendererPrefs(); 27013a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles) prefs->tap_multiple_targets_strategy = 27113a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles) content::TAP_MULTIPLE_TARGETS_STRATEGY_NONE; 27266cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org 27366cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org // TODO(boliu): Deduplicate with chrome/ code. 27466cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org const gfx::FontRenderParams& params = gfx::GetDefaultWebKitFontRenderParams(); 27566cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org prefs->should_antialias_text = params.antialiasing; 27666cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org prefs->use_subpixel_positioning = params.subpixel_positioning; 27766cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org prefs->hinting = GetRendererPreferencesHintingEnum(params.hinting); 27866cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org prefs->use_autohinter = params.autohinter; 27966cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org prefs->use_bitmaps = params.use_bitmaps; 28066cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org prefs->subpixel_rendering = 28166cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org GetRendererPreferencesSubpixelRenderingEnum(params.subpixel_rendering); 28266cb5b9b21b9e7a3ad902333b276cada24fbceb3boliu@chromium.org 28313a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles) content::RenderViewHost* host = web_contents_->GetRenderViewHost(); 28413a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles) if (host) 28513a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles) host->SyncRendererPrefs(); 28613a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles)} 28713a64a3c22259028b75c5b293d2eaed26080c490Torne (Richard Coles) 288eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid AwContents::SetAwAutofillManagerDelegate(jobject delegate) { 289eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch JNIEnv* env = AttachCurrentThread(); 290eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 291eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (obj.is_null()) 292eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 293eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Java_AwContents_setAwAutofillManagerDelegate(env, obj.obj(), delegate); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AwContents::~AwContents() { 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(AwContents::FromWebContents(web_contents_.get()) == this); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->RemoveUserData(kAwContentsUserDataKey); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (find_helper_.get()) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) find_helper_->SetListener(NULL); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (icon_helper_.get()) 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) icon_helper_->SetListener(NULL); 303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::subtle::NoBarrier_AtomicIncrement(&g_instance_count, -1); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jint AwContents::GetWebContents(JNIEnv* env, jobject obj) { 3077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(web_contents_); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<jint>(web_contents_.get()); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AwContents::Destroy(JNIEnv* env, jobject obj) { 31277ceb7188d76b2f05feb0f0b0ee08a2d7a181d16Selim Gurun java_ref_.reset(); 31377ceb7188d76b2f05feb0f0b0ee08a2d7a181d16Selim Gurun // We do not delete AwContents immediately. Some applications try to delete 31477ceb7188d76b2f05feb0f0b0ee08a2d7a181d16Selim Gurun // Webview in ShouldOverrideUrlLoading callback, which is a sync IPC from 31577ceb7188d76b2f05feb0f0b0ee08a2d7a181d16Selim Gurun // Webkit. 31677ceb7188d76b2f05feb0f0b0ee08a2d7a181d16Selim Gurun BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, this); 317389f89184187a18e6314d543397f72960e900659Torne (Richard Coles) // When the last WebView is destroyed free all discardable memory allocated by 318389f89184187a18e6314d543397f72960e900659Torne (Richard Coles) // Chromium, because the app process may continue to run for a long time 319389f89184187a18e6314d543397f72960e900659Torne (Richard Coles) // without ever using another WebView. 320389f89184187a18e6314d543397f72960e900659Torne (Richard Coles) if (base::subtle::NoBarrier_Load(&g_instance_count) == 0) { 321389f89184187a18e6314d543397f72960e900659Torne (Richard Coles) base::MemoryPressureListener::NotifyMemoryPressure( 322389f89184187a18e6314d543397f72960e900659Torne (Richard Coles) base::MemoryPressureListener::MEMORY_PRESSURE_CRITICAL); 323389f89184187a18e6314d543397f72960e900659Torne (Richard Coles) } 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static jint Init(JNIEnv* env, jclass, jobject browser_context) { 3277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // TODO(joth): Use |browser_context| to get the native BrowserContext, rather 3287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // than hard-code the default instance lookup here. 3297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) scoped_ptr<WebContents> web_contents(content::WebContents::Create( 3307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content::WebContents::CreateParams(AwBrowserContext::GetDefault()))); 3317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Return an 'uninitialized' instance; most work is deferred until the 3327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // subsequent SetJavaPeers() call. 3337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return reinterpret_cast<jint>(new AwContents(web_contents.Pass())); 3347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static void SetAwDrawSWFunctionTable(JNIEnv* env, jclass, jint function_table) { 33790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BrowserViewRenderer::SetAwDrawSWFunctionTable( 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reinterpret_cast<AwDrawSWFunctionTable*>(function_table)); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static void SetAwDrawGLFunctionTable(JNIEnv* env, jclass, jint function_table) { 342558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch GpuMemoryBufferFactoryImpl::SetAwDrawGLFunctionTable( 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) reinterpret_cast<AwDrawGLFunctionTable*>(function_table)); 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)static jint GetAwDrawGLFunction(JNIEnv* env, jclass) { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<jint>(&DrawGLFunction); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 351eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochjint GetNativeInstanceCount(JNIEnv* env, jclass) { 352eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return base::subtle::NoBarrier_Load(&g_instance_count); 353eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)jint AwContents::GetAwDrawGLViewContext(JNIEnv* env, jobject obj) { 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return reinterpret_cast<jint>(browser_view_renderer_.get()); 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DocumentHasImagesCallback(const ScopedJavaGlobalRef<jobject>& message, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_images) { 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_AwContents_onDocumentHasImagesResponse(AttachCurrentThread(), 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_images, 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) message.obj()); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AwContents::DocumentHasImages(JNIEnv* env, jobject obj, jobject message) { 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaGlobalRef<jobject> j_message; 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_message.Reset(env, message); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_host_ext_->DocumentHasImages( 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&DocumentHasImagesCallback, j_message)); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GenerateMHTMLCallback(ScopedJavaGlobalRef<jobject>* callback, 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& path, int64 size) { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Android files are UTF8, so the path conversion below is safe. 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_AwContents_generateMHTMLCallback( 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertUTF8ToJavaString(env, path.AsUTF8Unsafe()).obj(), 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size, callback->obj()); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AwContents::GenerateMHTML(JNIEnv* env, jobject obj, 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring jpath, jobject callback) { 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaGlobalRef<jobject>* j_callback = new ScopedJavaGlobalRef<jobject>(); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) j_callback->Reset(env, callback); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GenerateMHTML( 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(ConvertJavaStringToUTF8(env, jpath)), 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&GenerateMHTMLCallback, base::Owned(j_callback))); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun// START: Printing fork b/10190508 3975d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurunvoid AwContents::CreatePdfExporter(JNIEnv* env, 3985d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun jobject obj, 3995d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun jobject pdfExporter) { 4005d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun 4015d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun pdf_exporter_.reset( 402f466d2a0332c0853e69efff71f2979b31e357eddSelim Gurun new AwPdfExporter(env, 403f466d2a0332c0853e69efff71f2979b31e357eddSelim Gurun pdfExporter, 404f466d2a0332c0853e69efff71f2979b31e357eddSelim Gurun browser_view_renderer_.get(), 405f466d2a0332c0853e69efff71f2979b31e357eddSelim Gurun web_contents_.get())); 4065d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun} 4075d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun// END: Printing fork b/10190508 4085d5be6dc8a24d729a037d5b76e0d1fa711ece471Selim Gurun 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool AwContents::OnReceivedHttpAuthRequest(const JavaRef<jobject>& handler, 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& host, 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& realm) { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> jhost = ConvertUTF8ToJavaString(env, host); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> jrealm = ConvertUTF8ToJavaString(env, realm); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AwContents_onReceivedHttpAuthRequest(env, obj.obj(), handler.obj(), 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jhost.obj(), jrealm.obj()); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::AddVisitedLinks(JNIEnv* env, 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobjectArray jvisited_links) { 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<string16> visited_link_strings; 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::android::AppendJavaStringArrayToStringVector( 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, jvisited_links, &visited_link_strings); 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<GURL> visited_link_gurls; 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (std::vector<string16>::const_iterator itr = visited_link_strings.begin(); 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) itr != visited_link_strings.end(); 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++itr) { 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) visited_link_gurls.push_back(GURL(*itr)); 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwBrowserContext::FromWebContents(web_contents_.get()) 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ->AddVisitedURLs(visited_link_gurls); 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RegisterAwContents(JNIEnv* env) { 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RegisterNativesImpl(env) >= 0; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ShowGeolocationPromptHelperTask(const JavaObjectWeakGlobalRef& java_ref, 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& origin) { 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> j_ref = java_ref.get(env); 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (j_ref.obj()) { 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> j_origin( 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, origin.spec())); 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AwContents_onGeolocationPermissionsShowPrompt(env, 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_ref.obj(), 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) j_origin.obj()); 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ShowGeolocationPromptHelper(const JavaObjectWeakGlobalRef& java_ref, 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& origin) { 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (java_ref.get(env).obj()) { 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::PostTask( 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::BrowserThread::UI, 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FROM_HERE, 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind(&ShowGeolocationPromptHelperTask, 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) java_ref, 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) origin)); 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // anonymous namespace 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::ShowGeolocationPrompt(const GURL& requesting_frame, 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Callback<void(bool)> callback) { 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL origin = requesting_frame.GetOrigin(); 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool show_prompt = pending_geolocation_prompts_.empty(); 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pending_geolocation_prompts_.push_back(OriginCallback(origin, callback)); 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (show_prompt) { 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowGeolocationPromptHelper(java_ref_, origin); 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Invoked from Java 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::InvokeGeolocationCallback(JNIEnv* env, 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jboolean value, 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jstring origin) { 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL callback_origin(base::android::ConvertJavaStringToUTF16(env, origin)); 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (callback_origin.GetOrigin() == 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pending_geolocation_prompts_.front().first) { 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pending_geolocation_prompts_.front().second.Run(value); 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pending_geolocation_prompts_.pop_front(); 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!pending_geolocation_prompts_.empty()) { 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowGeolocationPromptHelper(java_ref_, 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pending_geolocation_prompts_.front().first); 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::HideGeolocationPrompt(const GURL& origin) { 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool removed_current_outstanding_callback = false; 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::list<OriginCallback>::iterator it = pending_geolocation_prompts_.begin(); 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) while (it != pending_geolocation_prompts_.end()) { 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if ((*it).first == origin.GetOrigin()) { 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it == pending_geolocation_prompts_.begin()) { 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) removed_current_outstanding_callback = true; 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it = pending_geolocation_prompts_.erase(it); 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ++it; 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (removed_current_outstanding_callback) { 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> j_ref = java_ref_.get(env); 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (j_ref.obj()) { 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AwContents_onGeolocationPermissionsHidePrompt(env, j_ref.obj()); 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!pending_geolocation_prompts_.empty()) { 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowGeolocationPromptHelper(java_ref_, 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pending_geolocation_prompts_.front().first); 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AwContents::FindAllAsync(JNIEnv* env, jobject obj, jstring search_string) { 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFindHelper()->FindAllAsync(ConvertJavaStringToUTF16(env, search_string)); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AwContents::FindNext(JNIEnv* env, jobject obj, jboolean forward) { 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFindHelper()->FindNext(forward); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AwContents::ClearMatches(JNIEnv* env, jobject obj) { 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFindHelper()->ClearMatches(); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AwContents::ClearCache( 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean include_disk_files) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_host_ext_->ClearCache(); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (include_disk_files) { 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveHttpDiskCache(web_contents_->GetBrowserContext(), 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetRoutingID()); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FindHelper* AwContents::GetFindHelper() { 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!find_helper_.get()) { 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) find_helper_.reset(new FindHelper(web_contents_.get())); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) find_helper_->SetListener(this); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return find_helper_.get(); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AwContents::OnFindResultReceived(int active_ordinal, 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int match_count, 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool finished) { 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; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_AwContents_onFindResultReceived( 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, obj.obj(), active_ordinal, match_count, finished); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 576ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdochbool AwContents::ShouldDownloadFavicon(const GURL& icon_url) { 577ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdoch return g_should_download_favicons; 578ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdoch} 579ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdoch 580ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochvoid AwContents::OnReceivedIcon(const GURL& icon_url, const SkBitmap& bitmap) { 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::NavigationEntry* entry = 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->GetController().GetActiveEntry(); 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 589ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (entry) { 590ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch entry->GetFavicon().valid = true; 591ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch entry->GetFavicon().url = icon_url; 592ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch entry->GetFavicon().image = gfx::Image::CreateFrom1xBitmap(bitmap); 593ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 595ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch Java_AwContents_onReceivedIcon( 596ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch env, obj.obj(), gfx::ConvertToJavaBitmap(&bitmap).obj()); 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::OnReceivedTouchIconUrl(const std::string& url, 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool precomposed) { 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AwContents_onReceivedTouchIconUrl( 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), ConvertUTF8ToJavaString(env, url).obj(), precomposed); 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool AwContents::RequestDrawGL(jobject canvas) { 611b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 612b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 6137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (obj.is_null()) 6147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return false; 6157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return Java_AwContents_requestDrawGL(env, obj.obj(), canvas); 616b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 617b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 6187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void AwContents::PostInvalidate() { 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!obj.is_null()) 6227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Java_AwContents_postInvalidateOnAnimation(env, obj.obj()); 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 625a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void AwContents::UpdateGlobalVisibleRect() { 626a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 627a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 628a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (!obj.is_null()) 629a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) Java_AwContents_updateGlobalVisibleRect(env, obj.obj()); 630a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 631a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 632b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwContents::OnNewPicture() { 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!obj.is_null()) 636b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwContents_onNewPicture(env, obj.obj()); 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::android::ScopedJavaLocalRef<jbyteArray> 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AwContents::GetCertificate(JNIEnv* env, 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj) { 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NavigationEntry* entry = 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_->GetController().GetActiveEntry(); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ScopedJavaLocalRef<jbyteArray>(); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the certificate 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int cert_id = entry->GetSSL().cert_id; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::X509Certificate> cert; 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ok = content::CertStore::GetInstance()->RetrieveCert(cert_id, &cert); 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ok) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ScopedJavaLocalRef<jbyteArray>(); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convert the certificate and return it 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string der_string; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::X509Certificate::GetDEREncoded(cert->os_cert_handle(), &der_string); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::android::ToJavaByteArray(env, 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<const uint8*>(der_string.data()), der_string.length()); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AwContents::RequestNewHitTestDataAt(JNIEnv* env, jobject obj, 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jint x, jint y) { 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_host_ext_->RequestNewHitTestDataAt(x, y); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::UpdateLastHitTestData(JNIEnv* env, jobject obj) { 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!render_view_host_ext_->HasNewHitTestData()) return; 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const AwHitTestData& data = render_view_host_ext_->GetLastHitTestData(); 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) render_view_host_ext_->MarkHitTestDataRead(); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure to null the Java object if data is empty/invalid. 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> extra_data_for_type; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data.extra_data_for_type.length()) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extra_data_for_type = ConvertUTF8ToJavaString( 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, data.extra_data_for_type); 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> href; 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data.href.length()) 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) href = ConvertUTF16ToJavaString(env, data.href); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> anchor_text; 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data.anchor_text.length()) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) anchor_text = ConvertUTF16ToJavaString(env, data.anchor_text); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> img_src; 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data.img_src.is_valid()) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) img_src = ConvertUTF8ToJavaString(env, data.img_src.spec()); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AwContents_updateHitTestData(env, 6902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) obj, 6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) data.type, 6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extra_data_for_type.obj(), 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) href.obj(), 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) anchor_text.obj(), 6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) img_src.obj()); 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::OnSizeChanged(JNIEnv* env, jobject obj, 6992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int w, int h, int ow, int oh) { 7002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_view_renderer_->OnSizeChanged(w, h); 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 703f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles)void AwContents::SetViewVisibility(JNIEnv* env, jobject obj, bool visible) { 704f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles) browser_view_renderer_->SetViewVisibility(visible); 705f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles)} 706f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles) 707f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles)void AwContents::SetWindowVisibility(JNIEnv* env, jobject obj, bool visible) { 708f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles) browser_view_renderer_->SetWindowVisibility(visible); 709f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles)} 710f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles) 711f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles)void AwContents::SetIsPaused(JNIEnv* env, jobject obj, bool paused) { 712f3ce491c3623b9924dccab3703a43e03157e988aTorne (Richard Coles) browser_view_renderer_->SetIsPaused(paused); 713c155a8319c5ef18219fdabf886505cd79c3ae21aJonathan Dixon if (paused) { 714c155a8319c5ef18219fdabf886505cd79c3ae21aJonathan Dixon ContentViewCore* cvc = 715c155a8319c5ef18219fdabf886505cd79c3ae21aJonathan Dixon ContentViewCore::FromWebContents(web_contents_.get()); 716c155a8319c5ef18219fdabf886505cd79c3ae21aJonathan Dixon if (cvc) 7173ffc7ae741780a15b34876d44c5e280dafd9d135Ben Murdoch cvc->PauseVideo(); 7183ffc7ae741780a15b34876d44c5e280dafd9d135Ben Murdoch } 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::OnAttachedToWindow(JNIEnv* env, jobject obj, int w, int h) { 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_view_renderer_->OnAttachedToWindow(w, h); 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::OnDetachedFromWindow(JNIEnv* env, jobject obj) { 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser_view_renderer_->OnDetachedFromWindow(); 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::android::ScopedJavaLocalRef<jbyteArray> 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwContents::GetOpaqueState(JNIEnv* env, jobject obj) { 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Required optimization in WebViewClassic to not save any state if 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // there has been no navigations. 7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!web_contents_->GetController().GetEntryCount()) 7342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ScopedJavaLocalRef<jbyteArray>(); 7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Pickle pickle; 7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!WriteToPickle(*web_contents_, &pickle)) { 7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ScopedJavaLocalRef<jbyteArray>(); 7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return base::android::ToJavaByteArray(env, 7412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) reinterpret_cast<const uint8*>(pickle.data()), pickle.size()); 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)jboolean AwContents::RestoreFromOpaqueState( 7462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env, jobject obj, jbyteArray state) { 7472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(boliu): This copy can be optimized out if this is a performance 7482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // problem. 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<uint8> state_vector; 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::android::JavaByteArrayToByteVector(env, state, &state_vector); 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Pickle pickle(reinterpret_cast<const char*>(state_vector.begin()), 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) state_vector.size()); 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator iterator(pickle); 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return RestoreFromPickle(&iterator, web_contents_.get()); 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool AwContents::OnDraw(JNIEnv* env, 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject canvas, 7627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jboolean is_hardware_accelerated, 7637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jint scroll_x, 7647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jint scroll_y, 7657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jint clip_left, 7667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jint clip_top, 7677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jint clip_right, 768a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) jint clip_bottom) { 76958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch return browser_view_renderer_->OnDraw( 77058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch canvas, 77158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch is_hardware_accelerated, 77258e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch gfx::Vector2d(scroll_x, scroll_y), 77358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch gfx::Rect( 774a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) clip_left, clip_top, clip_right - clip_left, clip_bottom - clip_top)); 775a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 776a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 777a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void AwContents::SetGlobalVisibleRect(JNIEnv* env, 778a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) jobject obj, 779a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) jint visible_left, 780a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) jint visible_top, 781a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) jint visible_right, 782a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) jint visible_bottom) { 783a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) browser_view_renderer_->SetGlobalVisibleRect( 78458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch gfx::Rect(visible_left, 78558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch visible_top, 78658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch visible_right - visible_left, 78758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch visible_bottom - visible_top)); 7882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::SetPendingWebContentsForPopup( 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<content::WebContents> pending) { 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (pending_contents_.get()) { 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(benm): Support holding multiple pop up window requests. 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LOG(WARNING) << "Blocking popup window creation as an outstanding " 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << "popup window is still pending."; 796c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::MessageLoop::current()->DeleteSoon(FROM_HERE, pending.release()); 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) pending_contents_.reset(new AwContents(pending.Pass())); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::FocusFirstNode(JNIEnv* env, jobject obj) { 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents_->FocusThroughTabTraversal(false); 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 806a3f7b4e666c476898878fa745f637129375cd889Ben Murdochvoid AwContents::SetBackgroundColor(JNIEnv* env, jobject obj, jint color) { 807a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch render_view_host_ext_->SetBackgroundColor(color); 808a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch} 809a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 8107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)jint AwContents::ReleasePopupAwContents(JNIEnv* env, jobject obj) { 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return reinterpret_cast<jint>(pending_contents_.release()); 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gfx::Point AwContents::GetLocationOnScreen() { 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 817c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (obj.is_null()) 818c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return gfx::Point(); 8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<int> location; 8202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::android::JavaIntArrayToIntVector( 8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, 8222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_AwContents_getLocationOnScreen(env, obj.obj()).obj(), 8232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &location); 8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return gfx::Point(location[0], location[1]); 8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 827cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosibavoid AwContents::SetMaxContainerViewScrollOffset(gfx::Vector2d new_value) { 828cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba JNIEnv* env = AttachCurrentThread(); 829cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 830cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba if (obj.is_null()) 831cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba return; 832cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba Java_AwContents_setMaxContainerViewScrollOffset( 833cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba env, obj.obj(), new_value.x(), new_value.y()); 834cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba} 835cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba 836eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid AwContents::ScrollContainerViewTo(gfx::Vector2d new_value) { 837eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch JNIEnv* env = AttachCurrentThread(); 838eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 839eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (obj.is_null()) 840eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return; 841eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Java_AwContents_scrollContainerViewTo( 842eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch env, obj.obj(), new_value.x(), new_value.y()); 843eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 844eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 84574e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Eliasbool AwContents::IsFlingActive() const { 84674e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias JNIEnv* env = AttachCurrentThread(); 84774e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 84874e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias if (obj.is_null()) 84974e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias return false; 85074e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias return Java_AwContents_isFlingActive(env, obj.obj()); 85174e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias} 85274e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias 853cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosibavoid AwContents::SetPageScaleFactor(float page_scale_factor) { 854cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba JNIEnv* env = AttachCurrentThread(); 855cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 856cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba if (obj.is_null()) 857cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba return; 858cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba Java_AwContents_setPageScaleFactor(env, obj.obj(), page_scale_factor); 859cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba} 860cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba 861cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosibavoid AwContents::SetContentsSize(gfx::SizeF contents_size_dip) { 862cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba JNIEnv* env = AttachCurrentThread(); 863cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 864cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba if (obj.is_null()) 865cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba return; 866cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba Java_AwContents_setContentsSize( 867cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba env, obj.obj(), contents_size_dip.width(), contents_size_dip.height()); 868cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba} 869eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid AwContents::DidOverscroll(gfx::Vector2d overscroll_delta) { 8717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch JNIEnv* env = AttachCurrentThread(); 8727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 8737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (obj.is_null()) 8747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 8757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_AwContents_didOverscroll( 8767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch env, obj.obj(), overscroll_delta.x(), overscroll_delta.y()); 8777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 8787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 879fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosibavoid AwContents::SetDipScale(JNIEnv* env, jobject obj, jfloat dip_scale) { 880fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosiba browser_view_renderer_->SetDipScale(dip_scale); 881eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 882eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 883fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosibavoid AwContents::SetFixedLayoutSize(JNIEnv* env, 884fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosiba jobject obj, 885fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosiba jint width_dip, 886fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosiba jint height_dip) { 887fe6178dcfbd04cfd6b65eab8deb6f64cf0177454Martin Kosiba render_view_host_ext_->SetFixedLayoutSize(gfx::Size(width_dip, height_dip)); 8887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 8897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 890cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosibavoid AwContents::ScrollTo(JNIEnv* env, jobject obj, jint x, jint y) { 891cd84519d1edac18225f4c58013254ee11d1a8eacMartin Kosiba browser_view_renderer_->ScrollTo(gfx::Vector2d(x, y)); 892eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 893eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid AwContents::OnWebLayoutPageScaleFactorChanged(float page_scale_factor) { 895c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 896c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 897c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (obj.is_null()) 898c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 8997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Java_AwContents_onWebLayoutPageScaleFactorChanged(env, obj.obj(), 9007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch page_scale_factor); 901c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 902c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9034d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosibavoid AwContents::OnWebLayoutContentsSizeChanged( 9044d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosiba const gfx::Size& contents_size) { 9054d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosiba JNIEnv* env = AttachCurrentThread(); 9064d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosiba ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 9074d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosiba if (obj.is_null()) 9084d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosiba return; 9094d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosiba Java_AwContents_onWebLayoutContentsSizeChanged( 9104d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosiba env, obj.obj(), contents_size.width(), contents_size.height()); 9114d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosiba} 9124d9f1c5c0093589a3f3f112641bf9c80442391a0Martin Kosiba 9134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochjint AwContents::CapturePicture(JNIEnv* env, 9144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch jobject obj, 9154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch int width, 9164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch int height) { 9174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch return reinterpret_cast<jint>(new AwPicture( 9184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch browser_view_renderer_->CapturePicture(width, height))); 9192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwContents::EnableOnNewPicture(JNIEnv* env, 9222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 923b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) jboolean enabled) { 924b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) browser_view_renderer_->EnableOnNewPicture(enabled); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 927bfebf9c5f0206a13e1fdcf6343cc432a1d5fe776Torne (Richard Coles)void AwContents::SetJsOnlineProperty(JNIEnv* env, 928bfebf9c5f0206a13e1fdcf6343cc432a1d5fe776Torne (Richard Coles) jobject obj, 929bfebf9c5f0206a13e1fdcf6343cc432a1d5fe776Torne (Richard Coles) jboolean network_up) { 930bfebf9c5f0206a13e1fdcf6343cc432a1d5fe776Torne (Richard Coles) render_view_host_ext_->SetJsOnlineProperty(network_up); 931bfebf9c5f0206a13e1fdcf6343cc432a1d5fe776Torne (Richard Coles)} 932bfebf9c5f0206a13e1fdcf6343cc432a1d5fe776Torne (Richard Coles) 9337211bb133f06cafe148e28f08fbfe0b90c4b1b78boliu@chromium.orgvoid AwContents::TrimMemory(JNIEnv* env, jobject obj, jint level) { 9347211bb133f06cafe148e28f08fbfe0b90c4b1b78boliu@chromium.org browser_view_renderer_->TrimMemory(level); 9357211bb133f06cafe148e28f08fbfe0b90c4b1b78boliu@chromium.org} 9367211bb133f06cafe148e28f08fbfe0b90c4b1b78boliu@chromium.org 937ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdochvoid SetShouldDownloadFavicons(JNIEnv* env, jclass jclazz) { 938ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdoch g_should_download_favicons = true; 939ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdoch} 940ba6679d8642a829a648af7086fd7b6d0ee005981Ben Murdoch 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace android_webview 942