12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/native/aw_settings.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/browser/renderer_host/aw_render_view_host_ext.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/native/aw_contents.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/android/jni_android.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/android/jni_string.h" 1117bd0998cb865093270d712b29b004829024d391Ben Murdoch#include "base/supports_user_data.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/navigation_controller.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/navigation_entry.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/web_contents.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/common/content_client.h" 1758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/public/common/page_zoom.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "jni/AwSettings_jni.h" 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/user_agent/user_agent.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/common/webpreferences.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "webkit/glue/webkit_glue.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ConvertJavaStringToUTF16; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ConvertUTF8ToJavaString; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ScopedJavaLocalRef; 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2917bd0998cb865093270d712b29b004829024d391Ben Murdochconst void* kAwSettingsUserDataKey = &kAwSettingsUserDataKey; 3017bd0998cb865093270d712b29b004829024d391Ben Murdoch 3117bd0998cb865093270d712b29b004829024d391Ben Murdochclass AwSettingsUserData : public base::SupportsUserData::Data { 3217bd0998cb865093270d712b29b004829024d391Ben Murdoch public: 3317bd0998cb865093270d712b29b004829024d391Ben Murdoch AwSettingsUserData(AwSettings* ptr) : settings_(ptr) {} 3417bd0998cb865093270d712b29b004829024d391Ben Murdoch 3517bd0998cb865093270d712b29b004829024d391Ben Murdoch static AwSettings* GetSettings(content::WebContents* web_contents) { 3617bd0998cb865093270d712b29b004829024d391Ben Murdoch if (!web_contents) 3717bd0998cb865093270d712b29b004829024d391Ben Murdoch return NULL; 3817bd0998cb865093270d712b29b004829024d391Ben Murdoch AwSettingsUserData* data = reinterpret_cast<AwSettingsUserData*>( 3917bd0998cb865093270d712b29b004829024d391Ben Murdoch web_contents->GetUserData(kAwSettingsUserDataKey)); 4017bd0998cb865093270d712b29b004829024d391Ben Murdoch return data ? data->settings_ : NULL; 4117bd0998cb865093270d712b29b004829024d391Ben Murdoch } 4217bd0998cb865093270d712b29b004829024d391Ben Murdoch 4317bd0998cb865093270d712b29b004829024d391Ben Murdoch private: 4417bd0998cb865093270d712b29b004829024d391Ben Murdoch AwSettings* settings_; 4517bd0998cb865093270d712b29b004829024d391Ben Murdoch}; 4617bd0998cb865093270d712b29b004829024d391Ben Murdoch 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)AwSettings::AwSettings(JNIEnv* env, jobject obj, jint web_contents) 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : WebContentsObserver( 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) reinterpret_cast<content::WebContents*>(web_contents)), 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) aw_settings_(env, obj) { 5117bd0998cb865093270d712b29b004829024d391Ben Murdoch reinterpret_cast<content::WebContents*>(web_contents)-> 5217bd0998cb865093270d712b29b004829024d391Ben Murdoch SetUserData(kAwSettingsUserDataKey, new AwSettingsUserData(this)); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwSettings::~AwSettings() { 5617bd0998cb865093270d712b29b004829024d391Ben Murdoch if (web_contents()) { 5717bd0998cb865093270d712b29b004829024d391Ben Murdoch web_contents()->SetUserData(kAwSettingsUserDataKey, NULL); 5817bd0998cb865093270d712b29b004829024d391Ben Murdoch } 5917bd0998cb865093270d712b29b004829024d391Ben Murdoch 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jobject obj = scoped_obj.obj(); 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!obj) return; 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Java_AwSettings_nativeAwSettingsGone(env, obj, 657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) reinterpret_cast<jint>(this)); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwSettings::Destroy(JNIEnv* env, jobject obj) { 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete this; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7217bd0998cb865093270d712b29b004829024d391Ben MurdochAwSettings* AwSettings::FromWebContents(content::WebContents* web_contents) { 7317bd0998cb865093270d712b29b004829024d391Ben Murdoch return AwSettingsUserData::GetSettings(web_contents); 7417bd0998cb865093270d712b29b004829024d391Ben Murdoch} 7517bd0998cb865093270d712b29b004829024d391Ben Murdoch 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() { 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!web_contents()) return NULL; 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwContents* contents = AwContents::FromWebContents(web_contents()); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!contents) return NULL; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return contents->render_view_host_ext(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwSettings::ResetScrollAndScaleState(JNIEnv* env, jobject obj) { 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!rvhe) return; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rvhe->ResetScrollAndScaleState(); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AwSettings::UpdateEverything() { 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(env); 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jobject obj = scoped_obj.obj(); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!obj) return; 95b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Grab the lock and call UpdateEverythingLocked. 96b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_updateEverything(env, obj); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 99b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateEverythingLocked(JNIEnv* env, jobject obj) { 100b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateInitialPageScaleLocked(env, obj); 101b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateWebkitPreferencesLocked(env, obj); 102b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateUserAgentLocked(env, obj); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResetScrollAndScaleState(env, obj); 10490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) UpdateFormDataPreferencesLocked(env, obj); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 107b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateUserAgentLocked(JNIEnv* env, jobject obj) { 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) return; 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedJavaLocalRef<jstring> str = 111b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getUserAgentLocked(env, obj); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ua_overidden = str.obj() != NULL; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (ua_overidden) { 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string override = base::android::ConvertJavaStringToUTF8(str); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->SetUserAgentOverride(override); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NavigationController& controller = 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->GetController(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (int i = 0; i < controller.GetEntryCount(); ++i) 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 125b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateWebkitPreferencesLocked(JNIEnv* env, jobject obj) { 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) return; 127c85cc835a1dd85051b4cd6465c2b41677c7b2e7cBen Murdoch AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); 128c85cc835a1dd85051b4cd6465c2b41677c7b2e7cBen Murdoch if (!render_view_host_ext) return; 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RenderViewHost* render_view_host = 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->GetRenderViewHost(); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!render_view_host) return; 13317bd0998cb865093270d712b29b004829024d391Ben Murdoch render_view_host->UpdateWebkitPreferences( 13417bd0998cb865093270d712b29b004829024d391Ben Murdoch render_view_host->GetWebkitPreferences()); 13517bd0998cb865093270d712b29b004829024d391Ben Murdoch} 13617bd0998cb865093270d712b29b004829024d391Ben Murdoch 13717bd0998cb865093270d712b29b004829024d391Ben Murdochvoid AwSettings::UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj) { 13817bd0998cb865093270d712b29b004829024d391Ben Murdoch AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 13917bd0998cb865093270d712b29b004829024d391Ben Murdoch if (!rvhe) return; 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14117bd0998cb865093270d712b29b004829024d391Ben Murdoch float initial_page_scale_percent = 14217bd0998cb865093270d712b29b004829024d391Ben Murdoch Java_AwSettings_getInitialPageScalePercentLocked(env, obj); 14317bd0998cb865093270d712b29b004829024d391Ben Murdoch if (initial_page_scale_percent == 0) { 14417bd0998cb865093270d712b29b004829024d391Ben Murdoch rvhe->SetInitialPageScale(-1); 14517bd0998cb865093270d712b29b004829024d391Ben Murdoch } else { 14617bd0998cb865093270d712b29b004829024d391Ben Murdoch float dip_scale = static_cast<float>( 14717bd0998cb865093270d712b29b004829024d391Ben Murdoch Java_AwSettings_getDIPScaleLocked(env, obj)); 14817bd0998cb865093270d712b29b004829024d391Ben Murdoch rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f); 14917bd0998cb865093270d712b29b004829024d391Ben Murdoch } 15017bd0998cb865093270d712b29b004829024d391Ben Murdoch} 15117bd0998cb865093270d712b29b004829024d391Ben Murdoch 15217bd0998cb865093270d712b29b004829024d391Ben Murdochvoid AwSettings::UpdateFormDataPreferencesLocked(JNIEnv* env, jobject obj) { 15317bd0998cb865093270d712b29b004829024d391Ben Murdoch if (!web_contents()) return; 15417bd0998cb865093270d712b29b004829024d391Ben Murdoch AwContents* contents = AwContents::FromWebContents(web_contents()); 15517bd0998cb865093270d712b29b004829024d391Ben Murdoch if (!contents) return; 15617bd0998cb865093270d712b29b004829024d391Ben Murdoch 15717bd0998cb865093270d712b29b004829024d391Ben Murdoch contents->SetSaveFormData(Java_AwSettings_getSaveFormDataLocked(env, obj)); 15817bd0998cb865093270d712b29b004829024d391Ben Murdoch} 15917bd0998cb865093270d712b29b004829024d391Ben Murdoch 16017bd0998cb865093270d712b29b004829024d391Ben Murdochvoid AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) { 16117bd0998cb865093270d712b29b004829024d391Ben Murdoch // A single WebContents can normally have 0 to many RenderViewHost instances 16217bd0998cb865093270d712b29b004829024d391Ben Murdoch // associated with it. 16317bd0998cb865093270d712b29b004829024d391Ben Murdoch // This is important since there is only one RenderViewHostExt instance per 16417bd0998cb865093270d712b29b004829024d391Ben Murdoch // WebContents (and not one RVHExt per RVH, as you might expect) and updating 16517bd0998cb865093270d712b29b004829024d391Ben Murdoch // settings via RVHExt only ever updates the 'current' RVH. 16617bd0998cb865093270d712b29b004829024d391Ben Murdoch // In android_webview we don't swap out the RVH on cross-site navigations, so 16717bd0998cb865093270d712b29b004829024d391Ben Murdoch // we shouldn't have to deal with the multiple RVH per WebContents case. That 16817bd0998cb865093270d712b29b004829024d391Ben Murdoch // in turn means that the newly created RVH is always the 'current' RVH 16917bd0998cb865093270d712b29b004829024d391Ben Murdoch // (since we only ever go from 0 to 1 RVH instances) and hence the DCHECK. 17017bd0998cb865093270d712b29b004829024d391Ben Murdoch DCHECK(web_contents()->GetRenderViewHost() == render_view_host); 17117bd0998cb865093270d712b29b004829024d391Ben Murdoch 17217bd0998cb865093270d712b29b004829024d391Ben Murdoch UpdateEverything(); 17317bd0998cb865093270d712b29b004829024d391Ben Murdoch} 17417bd0998cb865093270d712b29b004829024d391Ben Murdoch 17517bd0998cb865093270d712b29b004829024d391Ben Murdochvoid AwSettings::WebContentsDestroyed(content::WebContents* web_contents) { 17617bd0998cb865093270d712b29b004829024d391Ben Murdoch delete this; 17717bd0998cb865093270d712b29b004829024d391Ben Murdoch} 17817bd0998cb865093270d712b29b004829024d391Ben Murdoch 179f1f5a614c72ca11541bdec079819d75c98464177boliu@chromium.org// static 180f1f5a614c72ca11541bdec079819d75c98464177boliu@chromium.orgvoid AwSettings::PopulateFixedPreferences(WebPreferences* web_prefs) { 181f1f5a614c72ca11541bdec079819d75c98464177boliu@chromium.org web_prefs->shrinks_standalone_images_to_fit = false; 182431571a3a769041c098e15fed32e0a980b3029d2Bo Liu web_prefs->should_clear_document_background = false; 183f1f5a614c72ca11541bdec079819d75c98464177boliu@chromium.org} 184f1f5a614c72ca11541bdec079819d75c98464177boliu@chromium.org 18517bd0998cb865093270d712b29b004829024d391Ben Murdochvoid AwSettings::PopulateWebPreferences(WebPreferences* web_prefs) { 18617bd0998cb865093270d712b29b004829024d391Ben Murdoch JNIEnv* env = base::android::AttachCurrentThread(); 18717bd0998cb865093270d712b29b004829024d391Ben Murdoch CHECK(env); 18817bd0998cb865093270d712b29b004829024d391Ben Murdoch 18917bd0998cb865093270d712b29b004829024d391Ben Murdoch AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); 19017bd0998cb865093270d712b29b004829024d391Ben Murdoch if (!render_view_host_ext) return; 19117bd0998cb865093270d712b29b004829024d391Ben Murdoch 19217bd0998cb865093270d712b29b004829024d391Ben Murdoch ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 19317bd0998cb865093270d712b29b004829024d391Ben Murdoch jobject obj = scoped_obj.obj(); 19417bd0998cb865093270d712b29b004829024d391Ben Murdoch if (!obj) return; 19517bd0998cb865093270d712b29b004829024d391Ben Murdoch 196f1f5a614c72ca11541bdec079819d75c98464177boliu@chromium.org PopulateFixedPreferences(web_prefs); 197f1f5a614c72ca11541bdec079819d75c98464177boliu@chromium.org 19817bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->text_autosizing_enabled = 199b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getTextAutosizingEnabledLocked(env, obj); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj); 20217bd0998cb865093270d712b29b004829024d391Ben Murdoch if (web_prefs->text_autosizing_enabled) { 20317bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->font_scale_factor = text_size_percent / 100.0f; 20417bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->force_enable_zoom = text_size_percent >= 130; 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Use the default zoom level value when Text Autosizer is turned on. 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view_host_ext->SetTextZoomLevel(0); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 20817bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->force_enable_zoom = false; 20958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch render_view_host_ext->SetTextZoomLevel(content::ZoomFactorToZoomLevel( 21058e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch text_size_percent / 100.0f)); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21317bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->standard_font_family_map[webkit_glue::kCommonScript] = 214b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 215b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getStandardFontFamilyLocked(env, obj)); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21717bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->fixed_font_family_map[webkit_glue::kCommonScript] = 218b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 219b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getFixedFontFamilyLocked(env, obj)); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22117bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->sans_serif_font_family_map[webkit_glue::kCommonScript] = 222b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 223b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSansSerifFontFamilyLocked(env, obj)); 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22517bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->serif_font_family_map[webkit_glue::kCommonScript] = 226b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 227b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSerifFontFamilyLocked(env, obj)); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22917bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->cursive_font_family_map[webkit_glue::kCommonScript] = 230b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 231b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getCursiveFontFamilyLocked(env, obj)); 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23317bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->fantasy_font_family_map[webkit_glue::kCommonScript] = 234b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 235b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getFantasyFontFamilyLocked(env, obj)); 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23717bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->default_encoding = ConvertJavaStringToUTF8( 238b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultTextEncodingLocked(env, obj)); 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24017bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->minimum_font_size = 24117bd0998cb865093270d712b29b004829024d391Ben Murdoch Java_AwSettings_getMinimumFontSizeLocked(env, obj); 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24317bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->minimum_logical_font_size = 244b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getMinimumLogicalFontSizeLocked(env, obj); 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24617bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->default_font_size = 24717bd0998cb865093270d712b29b004829024d391Ben Murdoch Java_AwSettings_getDefaultFontSizeLocked(env, obj); 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24917bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->default_fixed_font_size = 250b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultFixedFontSizeLocked(env, obj); 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Blink's LoadsImagesAutomatically and ImagesEnabled must be 2537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // set cris-cross to Android's. See 2547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // https://code.google.com/p/chromium/issues/detail?id=224317#c26 25517bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->loads_images_automatically = 2567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Java_AwSettings_getImagesEnabledLocked(env, obj); 25717bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->images_enabled = 258b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getLoadsImagesAutomaticallyLocked(env, obj); 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26017bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->javascript_enabled = 261b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getJavaScriptEnabledLocked(env, obj); 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26317bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->allow_universal_access_from_file_urls = 264b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAllowUniversalAccessFromFileURLsLocked(env, obj); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26617bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->allow_file_access_from_file_urls = 267b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAllowFileAccessFromFileURLsLocked(env, obj); 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26917bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->javascript_can_open_windows_automatically = 270b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getJavaScriptCanOpenWindowsAutomaticallyLocked(env, obj); 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27217bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->supports_multiple_windows = 273b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSupportMultipleWindowsLocked(env, obj); 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27517bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->plugins_enabled = 27617bd0998cb865093270d712b29b004829024d391Ben Murdoch !Java_AwSettings_getPluginsDisabledLocked(env, obj); 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27817bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->application_cache_enabled = 279b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAppCacheEnabledLocked(env, obj); 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28117bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->local_storage_enabled = 282b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDomStorageEnabledLocked(env, obj); 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28417bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->databases_enabled = 28517bd0998cb865093270d712b29b004829024d391Ben Murdoch Java_AwSettings_getDatabaseEnabledLocked(env, obj); 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28717bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->wide_viewport_quirk = true; 28817bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->double_tap_to_zoom_enabled = web_prefs->use_wide_viewport = 289b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getUseWideViewportLocked(env, obj); 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29117bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->initialize_at_minimum_page_scale = 292b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getLoadWithOverviewModeLocked(env, obj); 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29417bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->user_gesture_required_for_media_playback = 295b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getMediaPlaybackRequiresUserGestureLocked(env, obj); 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2973e35739886bcb31eef708caed3d7e45aa522b142Kristian Monsen // Temporary setting, for K release only 2983e35739886bcb31eef708caed3d7e45aa522b142Kristian Monsen // This is a fork from upstream chromium, and should go away once 2993e35739886bcb31eef708caed3d7e45aa522b142Kristian Monsen // https://code.google.com/p/chromium/issues/detail?id=297216 3003e35739886bcb31eef708caed3d7e45aa522b142Kristian Monsen // is implemented 30117bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->allow_running_insecure_content = true; 3023e35739886bcb31eef708caed3d7e45aa522b142Kristian Monsen 303b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedJavaLocalRef<jstring> url = 304b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultVideoPosterURLLocked(env, obj); 30517bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->default_video_poster_url = url.obj() ? 306b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GURL(ConvertJavaStringToUTF8(url)) : GURL(); 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3087879b4e35bc0616056661d21ed48d28e6cecd0a0Torne (Richard Coles) bool support_quirks = Java_AwSettings_getSupportLegacyQuirksLocked(env, obj); 30917bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->support_deprecated_target_density_dpi = support_quirks; 31017bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->use_legacy_background_size_shorthand_behavior = support_quirks; 31117bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->viewport_meta_layout_size_quirk = support_quirks; 31292b481d04cc09465f5b62c36bc1155f95c83ab09Mikhail Naganov web_prefs->viewport_meta_merge_quirk = support_quirks; 31317bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->viewport_meta_zero_values_quirk = support_quirks; 31417bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->ignore_main_frame_overflow_hidden_quirk = support_quirks; 315b76d682e577a78ae238af2584c91351331c8ea61Mikhail Naganov web_prefs->report_screen_size_in_physical_pixels_quirk = support_quirks; 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31717bd0998cb865093270d712b29b004829024d391Ben Murdoch web_prefs->password_echo_enabled = 318325e9a0b42e50545e2b581f7ad931c59f83b414ejoth@chromium.org Java_AwSettings_getPasswordEchoEnabledLocked(env, obj); 319325e9a0b42e50545e2b581f7ad931c59f83b414ejoth@chromium.org web_prefs->spatial_navigation_enabled = 320325e9a0b42e50545e2b581f7ad931c59f83b414ejoth@chromium.org Java_AwSettings_getSpatialNavigationLocked(env, obj); 3217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 3227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static jint Init(JNIEnv* env, 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jint web_contents) { 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AwSettings* settings = new AwSettings(env, obj, web_contents); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return reinterpret_cast<jint>(settings); 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static jstring GetDefaultUserAgent(JNIEnv* env, jclass clazz) { 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return base::android::ConvertUTF8ToJavaString( 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env, content::GetUserAgent(GURL())).Release(); 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RegisterAwSettings(JNIEnv* env) { 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return RegisterNativesImpl(env) >= 0; 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace android_webview 340