aw_settings.cc revision 558790d6acca3451cf3a6b497803a5f07d0bec58
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" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/navigation_controller.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/navigation_entry.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/web_contents.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/common/content_client.h" 1658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "content/public/common/page_zoom.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "jni/AwSettings_jni.h" 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/common/user_agent/user_agent.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/common/webpreferences.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "webkit/glue/webkit_glue.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ConvertJavaStringToUTF16; 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ConvertUTF8ToJavaString; 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ScopedJavaLocalRef; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)AwSettings::AwSettings(JNIEnv* env, jobject obj, jint web_contents) 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : WebContentsObserver( 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) reinterpret_cast<content::WebContents*>(web_contents)), 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) aw_settings_(env, obj) { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwSettings::~AwSettings() { 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jobject obj = scoped_obj.obj(); 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!obj) return; 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Java_AwSettings_nativeAwSettingsGone(env, obj, 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) reinterpret_cast<jint>(this)); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwSettings::Destroy(JNIEnv* env, jobject obj) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete this; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!web_contents()) return NULL; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwContents* contents = AwContents::FromWebContents(web_contents()); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!contents) return NULL; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return contents->render_view_host_ext(); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwSettings::ResetScrollAndScaleState(JNIEnv* env, jobject obj) { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!rvhe) return; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rvhe->ResetScrollAndScaleState(); 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AwSettings::UpdateEverything() { 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(env); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jobject obj = scoped_obj.obj(); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!obj) return; 66b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Grab the lock and call UpdateEverythingLocked. 67b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_updateEverything(env, obj); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 70b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateEverythingLocked(JNIEnv* env, jobject obj) { 71b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateInitialPageScaleLocked(env, obj); 72b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateWebkitPreferencesLocked(env, obj); 73b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateUserAgentLocked(env, obj); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResetScrollAndScaleState(env, obj); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdatePreferredSizeMode(); 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) UpdateFormDataPreferencesLocked(env, obj); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 79b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateUserAgentLocked(JNIEnv* env, jobject obj) { 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) return; 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 82b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedJavaLocalRef<jstring> str = 83b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getUserAgentLocked(env, obj); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ua_overidden = str.obj() != NULL; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (ua_overidden) { 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string override = base::android::ConvertJavaStringToUTF8(str); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->SetUserAgentOverride(override); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NavigationController& controller = 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->GetController(); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (int i = 0; i < controller.GetEntryCount(); ++i) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 97b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateWebkitPreferencesLocked(JNIEnv* env, jobject obj) { 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) return; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!render_view_host_ext) return; 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RenderViewHost* render_view_host = 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->GetRenderViewHost(); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!render_view_host) return; 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) WebPreferences prefs = render_view_host->GetWebkitPreferences(); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.text_autosizing_enabled = 108b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getTextAutosizingEnabledLocked(env, obj); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (prefs.text_autosizing_enabled) { 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.font_scale_factor = text_size_percent / 100.0f; 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.force_enable_zoom = text_size_percent >= 130; 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Use the default zoom level value when Text Autosizer is turned on. 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view_host_ext->SetTextZoomLevel(0); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.force_enable_zoom = false; 11858e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch render_view_host_ext->SetTextZoomLevel(content::ZoomFactorToZoomLevel( 11958e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch text_size_percent / 100.0f)); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.standard_font_family_map[webkit_glue::kCommonScript] = 123b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 124b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getStandardFontFamilyLocked(env, obj)); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.fixed_font_family_map[webkit_glue::kCommonScript] = 127b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 128b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getFixedFontFamilyLocked(env, obj)); 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.sans_serif_font_family_map[webkit_glue::kCommonScript] = 131b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 132b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSansSerifFontFamilyLocked(env, obj)); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.serif_font_family_map[webkit_glue::kCommonScript] = 135b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 136b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSerifFontFamilyLocked(env, obj)); 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.cursive_font_family_map[webkit_glue::kCommonScript] = 139b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 140b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getCursiveFontFamilyLocked(env, obj)); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.fantasy_font_family_map[webkit_glue::kCommonScript] = 143b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 144b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getFantasyFontFamilyLocked(env, obj)); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 146b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.default_encoding = ConvertJavaStringToUTF8( 147b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultTextEncodingLocked(env, obj)); 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 149b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.minimum_font_size = Java_AwSettings_getMinimumFontSizeLocked(env, obj); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.minimum_logical_font_size = 152b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getMinimumLogicalFontSizeLocked(env, obj); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.default_font_size = Java_AwSettings_getDefaultFontSizeLocked(env, obj); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.default_fixed_font_size = 157b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultFixedFontSizeLocked(env, obj); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Blink's LoadsImagesAutomatically and ImagesEnabled must be 1607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // set cris-cross to Android's. See 1617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // https://code.google.com/p/chromium/issues/detail?id=224317#c26 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.loads_images_automatically = 1637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Java_AwSettings_getImagesEnabledLocked(env, obj); 1647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs.images_enabled = 165b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getLoadsImagesAutomaticallyLocked(env, obj); 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.javascript_enabled = 168b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getJavaScriptEnabledLocked(env, obj); 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 170b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.allow_universal_access_from_file_urls = 171b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAllowUniversalAccessFromFileURLsLocked(env, obj); 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 173b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.allow_file_access_from_file_urls = 174b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAllowFileAccessFromFileURLsLocked(env, obj); 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 176b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.javascript_can_open_windows_automatically = 177b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getJavaScriptCanOpenWindowsAutomaticallyLocked(env, obj); 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 179b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.supports_multiple_windows = 180b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSupportMultipleWindowsLocked(env, obj); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 182b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.plugins_enabled = !Java_AwSettings_getPluginsDisabledLocked(env, obj); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.application_cache_enabled = 185b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAppCacheEnabledLocked(env, obj); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 187b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.local_storage_enabled = 188b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDomStorageEnabledLocked(env, obj); 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.databases_enabled = Java_AwSettings_getDatabaseEnabledLocked(env, obj); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs.double_tap_to_zoom_enabled = prefs.use_wide_viewport = 193b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getUseWideViewportLocked(env, obj); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 195b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.initialize_at_minimum_page_scale = 196b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getLoadWithOverviewModeLocked(env, obj); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 198b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.user_gesture_required_for_media_playback = 199b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getMediaPlaybackRequiresUserGestureLocked(env, obj); 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedJavaLocalRef<jstring> url = 202b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultVideoPosterURLLocked(env, obj); 203b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.default_video_poster_url = url.obj() ? 204b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GURL(ConvertJavaStringToUTF8(url)) : GURL(); 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 206b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) prefs.support_deprecated_target_density_dpi = 207b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSupportDeprecatedTargetDensityDPILocked(env, obj); 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // TODO(primiano): deferred image decoding seems to cause increased memory 210ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // usage in WebView chromium after http://crrev.com/19838002 (at least on 211ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // some tests, for instance +18MB on moz and moz2). Thus, deferred image 212ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // decoding is being disabled until the root of the problem is found. 213ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // See http://crbug.com/262957 . 214ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch prefs.deferred_image_decoding_enabled = false; 215ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 216558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch prefs.password_echo_enabled = 217558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch Java_AwSettings_getPasswordEchoEnabled(env, obj); 218558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) render_view_host->UpdateWebkitPreferences(prefs); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj) { 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!rvhe) return; 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float initial_page_scale_percent = 227b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getInitialPageScalePercentLocked(env, obj); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (initial_page_scale_percent == 0) { 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rvhe->SetInitialPageScale(-1); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) float dip_scale = static_cast<float>( 232b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDIPScaleLocked(env, obj)); 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f); 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AwSettings::UpdatePreferredSizeMode() { 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (web_contents()->GetRenderViewHost()) { 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->GetRenderViewHost()->EnablePreferredSizeMode(); 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 24390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void AwSettings::UpdateFormDataPreferencesLocked(JNIEnv* env, jobject obj) { 24490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!web_contents()) return; 24590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AwContents* contents = AwContents::FromWebContents(web_contents()); 24690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!contents) return; 24790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 24890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) contents->SetSaveFormData(Java_AwSettings_getSaveFormDataLocked(env, obj)); 24990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 25090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) { 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A single WebContents can normally have 0 to many RenderViewHost instances 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // associated with it. 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This is important since there is only one RenderViewHostExt instance per 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // WebContents (and not one RVHExt per RVH, as you might expect) and updating 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // settings via RVHExt only ever updates the 'current' RVH. 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // In android_webview we don't swap out the RVH on cross-site navigations, so 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // we shouldn't have to deal with the multiple RVH per WebContents case. That 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // in turn means that the newly created RVH is always the 'current' RVH 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // (since we only ever go from 0 to 1 RVH instances) and hence the DCHECK. 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(web_contents()->GetRenderViewHost() == render_view_host); 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UpdateEverything(); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void AwSettings::WebContentsDestroyed(content::WebContents* web_contents) { 2677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delete this; 2687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 2697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static jint Init(JNIEnv* env, 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jobject obj, 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jint web_contents) { 2737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AwSettings* settings = new AwSettings(env, obj, web_contents); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return reinterpret_cast<jint>(settings); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static jstring GetDefaultUserAgent(JNIEnv* env, jclass clazz) { 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return base::android::ConvertUTF8ToJavaString( 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env, content::GetUserAgent(GURL())).Release(); 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RegisterAwSettings(JNIEnv* env) { 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return RegisterNativesImpl(env) >= 0; 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace android_webview 287