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" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "android_webview/common/aw_content_client.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "android_webview/native/aw_contents.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/android/jni_android.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/android/jni_string.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/macros.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/supports_user_data.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/navigation_controller.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/navigation_entry.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/render_view_host.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/web_contents.h" 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/common/renderer_preferences.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/web_preferences.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "jni/AwSettings_jni.h" 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/gfx/font_render_params.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; 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuusing content::RendererPreferences; 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing content::WebPreferences; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace { 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid PopulateFixedRendererPreferences(RendererPreferences* prefs) { 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->tap_multiple_targets_strategy = 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::TAP_MULTIPLE_TARGETS_STRATEGY_NONE; 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // TODO(boliu): Deduplicate with chrome/ code. 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CR_DEFINE_STATIC_LOCAL(const gfx::FontRenderParams, params, 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(true), NULL))); 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->should_antialias_text = params.antialiasing; 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->use_subpixel_positioning = params.subpixel_positioning; 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs->hinting = params.hinting; 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->use_autohinter = params.autohinter; 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->use_bitmaps = params.use_bitmaps; 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs->subpixel_rendering = params.subpixel_rendering; 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid PopulateFixedWebPreferences(WebPreferences* web_prefs) { 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu web_prefs->shrinks_standalone_images_to_fit = false; 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu web_prefs->should_clear_document_background = false; 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; // namespace 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const void* kAwSettingsUserDataKey = &kAwSettingsUserDataKey; 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class AwSettingsUserData : public base::SupportsUserData::Data { 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwSettingsUserData(AwSettings* ptr) : settings_(ptr) {} 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static AwSettings* GetSettings(content::WebContents* web_contents) { 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!web_contents) 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return NULL; 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwSettingsUserData* data = reinterpret_cast<AwSettingsUserData*>( 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_contents->GetUserData(kAwSettingsUserDataKey)); 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return data ? data->settings_ : NULL; 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwSettings* settings_; 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)AwSettings::AwSettings(JNIEnv* env, jobject obj, jlong web_contents) 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : WebContentsObserver( 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) reinterpret_cast<content::WebContents*>(web_contents)), 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu renderer_prefs_initialized_(false), 777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) aw_settings_(env, obj) { 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) reinterpret_cast<content::WebContents*>(web_contents)-> 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SetUserData(kAwSettingsUserDataKey, new AwSettingsUserData(this)); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwSettings::~AwSettings() { 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (web_contents()) { 844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_contents()->SetUserData(kAwSettingsUserDataKey, NULL); 854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jobject obj = scoped_obj.obj(); 907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!obj) return; 917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Java_AwSettings_nativeAwSettingsGone(env, obj, 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) reinterpret_cast<intptr_t>(this)); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwSettings::Destroy(JNIEnv* env, jobject obj) { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete this; 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)AwSettings* AwSettings::FromWebContents(content::WebContents* web_contents) { 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return AwSettingsUserData::GetSettings(web_contents); 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() { 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!web_contents()) return NULL; 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwContents* contents = AwContents::FromWebContents(web_contents()); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!contents) return NULL; 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return contents->render_view_host_ext(); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwSettings::ResetScrollAndScaleState(JNIEnv* env, jobject obj) { 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!rvhe) return; 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rvhe->ResetScrollAndScaleState(); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AwSettings::UpdateEverything() { 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(env); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jobject obj = scoped_obj.obj(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!obj) return; 122b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Grab the lock and call UpdateEverythingLocked. 123b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_updateEverything(env, obj); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 126b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateEverythingLocked(JNIEnv* env, jobject obj) { 127b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateInitialPageScaleLocked(env, obj); 128b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateWebkitPreferencesLocked(env, obj); 129b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateUserAgentLocked(env, obj); 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResetScrollAndScaleState(env, obj); 13190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) UpdateFormDataPreferencesLocked(env, obj); 1325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu UpdateRendererPreferencesLocked(env, obj); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 135b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateUserAgentLocked(JNIEnv* env, jobject obj) { 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) return; 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 138b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedJavaLocalRef<jstring> str = 139b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getUserAgentLocked(env, obj); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ua_overidden = str.obj() != NULL; 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (ua_overidden) { 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string override = base::android::ConvertJavaStringToUTF8(str); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->SetUserAgentOverride(override); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NavigationController& controller = 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->GetController(); 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (int i = 0; i < controller.GetEntryCount(); ++i) 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 153b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateWebkitPreferencesLocked(JNIEnv* env, jobject obj) { 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) return; 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!render_view_host_ext) return; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RenderViewHost* render_view_host = 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->GetRenderViewHost(); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!render_view_host) return; 1616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) render_view_host->OnWebkitPreferencesChanged(); 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AwSettings::UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj) { 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!rvhe) return; 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) float initial_page_scale_percent = 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getInitialPageScalePercentLocked(env, obj); 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (initial_page_scale_percent == 0) { 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) rvhe->SetInitialPageScale(-1); 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) float dip_scale = static_cast<float>( 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getDIPScaleLocked(env, obj)); 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f); 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AwSettings::UpdateFormDataPreferencesLocked(JNIEnv* env, jobject obj) { 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!web_contents()) return; 1814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwContents* contents = AwContents::FromWebContents(web_contents()); 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!contents) return; 1834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contents->SetSaveFormData(Java_AwSettings_getSaveFormDataLocked(env, obj)); 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid AwSettings::UpdateRendererPreferencesLocked(JNIEnv* env, jobject obj) { 1885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!web_contents()) return; 1895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool update_prefs = false; 1915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RendererPreferences* prefs = web_contents()->GetMutableRendererPrefs(); 1925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!renderer_prefs_initialized_) { 1945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PopulateFixedRendererPreferences(prefs); 1955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu renderer_prefs_initialized_ = true; 1965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu update_prefs = true; 1975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 1985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool video_overlay = 2005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu Java_AwSettings_getVideoOverlayForEmbeddedVideoEnabledLocked(env, obj); 2015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (video_overlay != prefs->use_video_overlay_for_embedded_encrypted_video) { 2025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->use_video_overlay_for_embedded_encrypted_video = video_overlay; 2035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu update_prefs = true; 2045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::RenderViewHost* host = web_contents()->GetRenderViewHost(); 2075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (update_prefs && host) 2085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu host->SyncRendererPrefs(); 2095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) { 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // A single WebContents can normally have 0 to many RenderViewHost instances 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // associated with it. 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // This is important since there is only one RenderViewHostExt instance per 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // WebContents (and not one RVHExt per RVH, as you might expect) and updating 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // settings via RVHExt only ever updates the 'current' RVH. 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // In android_webview we don't swap out the RVH on cross-site navigations, so 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // we shouldn't have to deal with the multiple RVH per WebContents case. That 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // in turn means that the newly created RVH is always the 'current' RVH 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // (since we only ever go from 0 to 1 RVH instances) and hence the DCHECK. 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK_EQ(render_view_host, web_contents()->GetRenderViewHost()); 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) UpdateEverything(); 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 226010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void AwSettings::WebContentsDestroyed() { 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delete this; 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AwSettings::PopulateWebPreferences(WebPreferences* web_prefs) { 2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CHECK(env); 2334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 2344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) jobject obj = scoped_obj.obj(); 2354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!obj) return; 2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Grab the lock and call PopulateWebPreferencesLocked. 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Java_AwSettings_populateWebPreferences( 2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) env, obj, reinterpret_cast<jlong>(web_prefs)); 2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void AwSettings::PopulateWebPreferencesLocked( 2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) JNIEnv* env, jobject obj, jlong web_prefs_ptr) { 2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); 2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!render_view_host_ext) return; 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebPreferences* web_prefs = reinterpret_cast<WebPreferences*>(web_prefs_ptr); 2475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PopulateFixedWebPreferences(web_prefs); 2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->text_autosizing_enabled = 250b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getTextAutosizingEnabledLocked(env, obj); 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 252b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj); 2534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (web_prefs->text_autosizing_enabled) { 2540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->font_scale_factor = text_size_percent / 100.0f; 2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->force_enable_zoom = text_size_percent >= 130; 256d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Use the default zoom factor value when Text Autosizer is turned on. 257d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view_host_ext->SetTextZoomFactor(1); 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 2594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->force_enable_zoom = false; 260d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view_host_ext->SetTextZoomFactor(text_size_percent / 100.0f); 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->standard_font_family_map[content::kCommonScript] = 264b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 265b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getStandardFontFamilyLocked(env, obj)); 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->fixed_font_family_map[content::kCommonScript] = 268b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 269b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getFixedFontFamilyLocked(env, obj)); 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->sans_serif_font_family_map[content::kCommonScript] = 272b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 273b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSansSerifFontFamilyLocked(env, obj)); 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->serif_font_family_map[content::kCommonScript] = 276b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 277b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSerifFontFamilyLocked(env, obj)); 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->cursive_font_family_map[content::kCommonScript] = 280b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 281b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getCursiveFontFamilyLocked(env, obj)); 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->fantasy_font_family_map[content::kCommonScript] = 284b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 285b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getFantasyFontFamilyLocked(env, obj)); 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->default_encoding = ConvertJavaStringToUTF8( 288b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultTextEncodingLocked(env, obj)); 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->minimum_font_size = 2914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getMinimumFontSizeLocked(env, obj); 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->minimum_logical_font_size = 294b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getMinimumLogicalFontSizeLocked(env, obj); 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->default_font_size = 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getDefaultFontSizeLocked(env, obj); 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->default_fixed_font_size = 300b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultFixedFontSizeLocked(env, obj); 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Blink's LoadsImagesAutomatically and ImagesEnabled must be 3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // set cris-cross to Android's. See 3047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // https://code.google.com/p/chromium/issues/detail?id=224317#c26 3054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->loads_images_automatically = 3067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Java_AwSettings_getImagesEnabledLocked(env, obj); 3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->images_enabled = 308b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getLoadsImagesAutomaticallyLocked(env, obj); 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->javascript_enabled = 311b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getJavaScriptEnabledLocked(env, obj); 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->allow_universal_access_from_file_urls = 314b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAllowUniversalAccessFromFileURLsLocked(env, obj); 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->allow_file_access_from_file_urls = 317b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAllowFileAccessFromFileURLsLocked(env, obj); 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->javascript_can_open_windows_automatically = 320b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getJavaScriptCanOpenWindowsAutomaticallyLocked(env, obj); 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->supports_multiple_windows = 323b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSupportMultipleWindowsLocked(env, obj); 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->plugins_enabled = 3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) !Java_AwSettings_getPluginsDisabledLocked(env, obj); 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->application_cache_enabled = 329b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAppCacheEnabledLocked(env, obj); 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->local_storage_enabled = 332b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDomStorageEnabledLocked(env, obj); 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->databases_enabled = 3354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getDatabaseEnabledLocked(env, obj); 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->wide_viewport_quirk = true; 3385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_prefs->use_wide_viewport = 339b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getUseWideViewportLocked(env, obj); 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_prefs->force_zero_layout_height = 3426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Java_AwSettings_getForceZeroLayoutHeightLocked(env, obj); 3436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const bool zero_layout_height_disables_viewport_quirk = 3456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Java_AwSettings_getZeroLayoutHeightDisablesViewportQuirkLocked(env, obj); 3466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_prefs->viewport_enabled = !(zero_layout_height_disables_viewport_quirk && 3476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_prefs->force_zero_layout_height); 3486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_prefs->double_tap_to_zoom_enabled = 3505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Java_AwSettings_supportsDoubleTapZoomLocked(env, obj); 3515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->initialize_at_minimum_page_scale = 353b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getLoadWithOverviewModeLocked(env, obj); 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->user_gesture_required_for_media_playback = 356b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getMediaPlaybackRequiresUserGestureLocked(env, obj); 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 358b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedJavaLocalRef<jstring> url = 359b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultVideoPosterURLLocked(env, obj); 3604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->default_video_poster_url = url.obj() ? 361b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GURL(ConvertJavaStringToUTF8(url)) : GURL(); 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool support_quirks = Java_AwSettings_getSupportLegacyQuirksLocked(env, obj); 364f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Please see the corresponding Blink settings for bug references. 3654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->support_deprecated_target_density_dpi = support_quirks; 3664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->use_legacy_background_size_shorthand_behavior = support_quirks; 3674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->viewport_meta_layout_size_quirk = support_quirks; 3681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) web_prefs->viewport_meta_merge_content_quirk = support_quirks; 369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) web_prefs->viewport_meta_non_user_scalable_quirk = support_quirks; 3704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->viewport_meta_zero_values_quirk = support_quirks; 371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) web_prefs->clobber_user_agent_initial_scale_quirk = support_quirks; 3724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->ignore_main_frame_overflow_hidden_quirk = support_quirks; 3738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) web_prefs->report_screen_size_in_physical_pixels_quirk = support_quirks; 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->password_echo_enabled = 3761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Java_AwSettings_getPasswordEchoEnabledLocked(env, obj); 3771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) web_prefs->spatial_navigation_enabled = 3781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Java_AwSettings_getSpatialNavigationLocked(env, obj); 3795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool enable_supported_hardware_accelerated_features = 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Java_AwSettings_getEnableSupportedHardwareAcceleratedFeaturesLocked( 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch env, obj); 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool accelerated_2d_canvas_enabled_by_switch = 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->accelerated_2d_canvas_enabled; 386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch web_prefs->accelerated_2d_canvas_enabled = true; 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!accelerated_2d_canvas_enabled_by_switch || 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch !enable_supported_hardware_accelerated_features) { 389effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Any canvas smaller than this will fallback to software. Abusing this 390effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // slightly to turn canvas off without changing 391effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // accelerated_2d_canvas_enabled, which also affects compositing mode. 392effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Using 100M instead of max int to avoid overflows. 393effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch web_prefs->minimum_accelerated_2d_canvas_size = 100 * 1000 * 1000; 394effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->experimental_webgl_enabled = 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->experimental_webgl_enabled && 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch enable_supported_hardware_accelerated_features; 3980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 3990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch web_prefs->allow_displaying_insecure_content = 4000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Java_AwSettings_getAllowDisplayingInsecureContentLocked(env, obj); 4010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch web_prefs->allow_running_insecure_content = 4020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Java_AwSettings_getAllowRunningInsecureContentLocked(env, obj); 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_prefs->disallow_fullscreen_for_non_media_elements = true; 4056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) web_prefs->fullscreen_supported = 4066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Java_AwSettings_getFullscreenSupportedLocked(env, obj); 4077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 409a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)static jlong Init(JNIEnv* env, 410a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jobject obj, 411a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jlong web_contents) { 4127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AwSettings* settings = new AwSettings(env, obj, web_contents); 413a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return reinterpret_cast<intptr_t>(settings); 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static jstring GetDefaultUserAgent(JNIEnv* env, jclass clazz) { 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return base::android::ConvertUTF8ToJavaString(env, GetUserAgent()).Release(); 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RegisterAwSettings(JNIEnv* env) { 4210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return RegisterNativesImpl(env); 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace android_webview 425