aw_settings.cc revision 010d83a9304c5a91596085d917d248abff47903a
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" 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/command_line.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" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/common/content_switches.h" 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/common/renderer_preferences.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "jni/AwSettings_jni.h" 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "ui/gfx/font_render_params_linux.h" 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/common/webpreferences.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ConvertJavaStringToUTF16; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ConvertUTF8ToJavaString; 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ScopedJavaLocalRef; 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuusing content::RendererPreferences; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace android_webview { 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liunamespace { 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// TODO(boliu): Deduplicate with chrome/ code. 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liucontent::RendererPreferencesHintingEnum GetRendererPreferencesHintingEnum( 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gfx::FontRenderParams::Hinting hinting) { 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu switch (hinting) { 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case gfx::FontRenderParams::HINTING_NONE: 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_HINTING_NONE; 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case gfx::FontRenderParams::HINTING_SLIGHT: 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_HINTING_SLIGHT; 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case gfx::FontRenderParams::HINTING_MEDIUM: 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_HINTING_MEDIUM; 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case gfx::FontRenderParams::HINTING_FULL: 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_HINTING_FULL; 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu default: 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NOTREACHED() << "Unhandled hinting style " << hinting; 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_HINTING_SYSTEM_DEFAULT; 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// TODO(boliu): Deduplicate with chrome/ code. 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liucontent::RendererPreferencesSubpixelRenderingEnum 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuGetRendererPreferencesSubpixelRenderingEnum( 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gfx::FontRenderParams::SubpixelRendering subpixel_rendering) { 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu switch (subpixel_rendering) { 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case gfx::FontRenderParams::SUBPIXEL_RENDERING_NONE: 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_NONE; 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case gfx::FontRenderParams::SUBPIXEL_RENDERING_RGB: 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_RGB; 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case gfx::FontRenderParams::SUBPIXEL_RENDERING_BGR: 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_BGR; 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case gfx::FontRenderParams::SUBPIXEL_RENDERING_VRGB: 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VRGB; 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu case gfx::FontRenderParams::SUBPIXEL_RENDERING_VBGR: 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_VBGR; 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu default: 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NOTREACHED() << "Unhandled subpixel rendering style " 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu << subpixel_rendering; 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return content::RENDERER_PREFERENCES_SUBPIXEL_RENDERING_SYSTEM_DEFAULT; 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid PopulateFixedRendererPreferences(RendererPreferences* prefs) { 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->tap_multiple_targets_strategy = 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::TAP_MULTIPLE_TARGETS_STRATEGY_NONE; 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // TODO(boliu): Deduplicate with chrome/ code. 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const gfx::FontRenderParams& params = gfx::GetDefaultWebKitFontRenderParams(); 795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->should_antialias_text = params.antialiasing; 805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->use_subpixel_positioning = params.subpixel_positioning; 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->hinting = GetRendererPreferencesHintingEnum(params.hinting); 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->use_autohinter = params.autohinter; 835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->use_bitmaps = params.use_bitmaps; 845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->subpixel_rendering = 855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu GetRendererPreferencesSubpixelRenderingEnum(params.subpixel_rendering); 865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid PopulateFixedWebPreferences(WebPreferences* web_prefs) { 895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu web_prefs->shrinks_standalone_images_to_fit = false; 905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu web_prefs->should_clear_document_background = false; 915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; // namespace 945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const void* kAwSettingsUserDataKey = &kAwSettingsUserDataKey; 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class AwSettingsUserData : public base::SupportsUserData::Data { 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwSettingsUserData(AwSettings* ptr) : settings_(ptr) {} 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static AwSettings* GetSettings(content::WebContents* web_contents) { 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!web_contents) 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return NULL; 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwSettingsUserData* data = reinterpret_cast<AwSettingsUserData*>( 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_contents->GetUserData(kAwSettingsUserDataKey)); 1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return data ? data->settings_ : NULL; 1074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwSettings* settings_; 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 113a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)AwSettings::AwSettings(JNIEnv* env, jobject obj, jlong web_contents) 1147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : WebContentsObserver( 1157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) reinterpret_cast<content::WebContents*>(web_contents)), 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) accelerated_2d_canvas_disabled_by_switch_( 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CommandLine::ForCurrentProcess()->HasSwitch( 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) switches::kDisableAccelerated2dCanvas)), 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu renderer_prefs_initialized_(false), 1207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) aw_settings_(env, obj) { 1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) reinterpret_cast<content::WebContents*>(web_contents)-> 1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SetUserData(kAwSettingsUserDataKey, new AwSettingsUserData(this)); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwSettings::~AwSettings() { 1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (web_contents()) { 1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_contents()->SetUserData(kAwSettingsUserDataKey, NULL); 1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 1317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jobject obj = scoped_obj.obj(); 1337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!obj) return; 1347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Java_AwSettings_nativeAwSettingsGone(env, obj, 135a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) reinterpret_cast<intptr_t>(this)); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwSettings::Destroy(JNIEnv* env, jobject obj) { 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delete this; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)AwSettings* AwSettings::FromWebContents(content::WebContents* web_contents) { 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return AwSettingsUserData::GetSettings(web_contents); 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() { 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!web_contents()) return NULL; 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwContents* contents = AwContents::FromWebContents(web_contents()); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!contents) return NULL; 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return contents->render_view_host_ext(); 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AwSettings::ResetScrollAndScaleState(JNIEnv* env, jobject obj) { 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!rvhe) return; 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rvhe->ResetScrollAndScaleState(); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void AwSettings::UpdateEverything() { 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CHECK(env); 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) jobject obj = scoped_obj.obj(); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!obj) return; 165b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Grab the lock and call UpdateEverythingLocked. 166b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_updateEverything(env, obj); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 169b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateEverythingLocked(JNIEnv* env, jobject obj) { 170b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateInitialPageScaleLocked(env, obj); 171b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateWebkitPreferencesLocked(env, obj); 172b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) UpdateUserAgentLocked(env, obj); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResetScrollAndScaleState(env, obj); 17490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) UpdateFormDataPreferencesLocked(env, obj); 1755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu UpdateRendererPreferencesLocked(env, obj); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 178b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateUserAgentLocked(JNIEnv* env, jobject obj) { 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) return; 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 181b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedJavaLocalRef<jstring> str = 182b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getUserAgentLocked(env, obj); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ua_overidden = str.obj() != NULL; 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (ua_overidden) { 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string override = base::android::ConvertJavaStringToUTF8(str); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->SetUserAgentOverride(override); 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const content::NavigationController& controller = 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->GetController(); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (int i = 0; i < controller.GetEntryCount(); ++i) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 196b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)void AwSettings::UpdateWebkitPreferencesLocked(JNIEnv* env, jobject obj) { 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) return; 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!render_view_host_ext) return; 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::RenderViewHost* render_view_host = 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) web_contents()->GetRenderViewHost(); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!render_view_host) return; 2044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) render_view_host->UpdateWebkitPreferences( 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) render_view_host->GetWebkitPreferences()); 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AwSettings::UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj) { 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!rvhe) return; 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) float initial_page_scale_percent = 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getInitialPageScalePercentLocked(env, obj); 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (initial_page_scale_percent == 0) { 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) rvhe->SetInitialPageScale(-1); 2164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 2174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) float dip_scale = static_cast<float>( 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getDIPScaleLocked(env, obj)); 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f); 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AwSettings::UpdateFormDataPreferencesLocked(JNIEnv* env, jobject obj) { 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!web_contents()) return; 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) AwContents* contents = AwContents::FromWebContents(web_contents()); 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!contents) return; 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contents->SetSaveFormData(Java_AwSettings_getSaveFormDataLocked(env, obj)); 2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuvoid AwSettings::UpdateRendererPreferencesLocked(JNIEnv* env, jobject obj) { 2325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!web_contents()) return; 2335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool update_prefs = false; 2355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu RendererPreferences* prefs = web_contents()->GetMutableRendererPrefs(); 2365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (!renderer_prefs_initialized_) { 2385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PopulateFixedRendererPreferences(prefs); 2395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu renderer_prefs_initialized_ = true; 2405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu update_prefs = true; 2415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool video_overlay = 2445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu Java_AwSettings_getVideoOverlayForEmbeddedVideoEnabledLocked(env, obj); 2455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (video_overlay != prefs->use_video_overlay_for_embedded_encrypted_video) { 2465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu prefs->use_video_overlay_for_embedded_encrypted_video = video_overlay; 2475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu update_prefs = true; 2485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 2495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content::RenderViewHost* host = web_contents()->GetRenderViewHost(); 2515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (update_prefs && host) 2525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu host->SyncRendererPrefs(); 2535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 2545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) { 2564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // A single WebContents can normally have 0 to many RenderViewHost instances 2574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // associated with it. 2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // This is important since there is only one RenderViewHostExt instance per 2594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // WebContents (and not one RVHExt per RVH, as you might expect) and updating 2604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // settings via RVHExt only ever updates the 'current' RVH. 2614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // In android_webview we don't swap out the RVH on cross-site navigations, so 2624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // we shouldn't have to deal with the multiple RVH per WebContents case. That 2634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // in turn means that the newly created RVH is always the 'current' RVH 2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // (since we only ever go from 0 to 1 RVH instances) and hence the DCHECK. 2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DCHECK(web_contents()->GetRenderViewHost() == render_view_host); 2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) UpdateEverything(); 2684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 270010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void AwSettings::WebContentsDestroyed() { 2714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) delete this; 2724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void AwSettings::PopulateWebPreferences(WebPreferences* web_prefs) { 2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CHECK(env); 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) jobject obj = scoped_obj.obj(); 2794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!obj) return; 2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Grab the lock and call PopulateWebPreferencesLocked. 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Java_AwSettings_populateWebPreferences( 2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) env, obj, reinterpret_cast<jlong>(web_prefs)); 2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void AwSettings::PopulateWebPreferencesLocked( 2865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) JNIEnv* env, jobject obj, jlong web_prefs_ptr) { 2875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); 2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (!render_view_host_ext) return; 2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WebPreferences* web_prefs = reinterpret_cast<WebPreferences*>(web_prefs_ptr); 2915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu PopulateFixedWebPreferences(web_prefs); 2924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->text_autosizing_enabled = 294b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getTextAutosizingEnabledLocked(env, obj); 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 296b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj); 2974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (web_prefs->text_autosizing_enabled) { 2980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) web_prefs->font_scale_factor = text_size_percent / 100.0f; 2994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->force_enable_zoom = text_size_percent >= 130; 300d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Use the default zoom factor value when Text Autosizer is turned on. 301d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view_host_ext->SetTextZoomFactor(1); 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->force_enable_zoom = false; 304d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) render_view_host_ext->SetTextZoomFactor(text_size_percent / 100.0f); 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->standard_font_family_map[webkit_glue::kCommonScript] = 308b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 309b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getStandardFontFamilyLocked(env, obj)); 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->fixed_font_family_map[webkit_glue::kCommonScript] = 312b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 313b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getFixedFontFamilyLocked(env, obj)); 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->sans_serif_font_family_map[webkit_glue::kCommonScript] = 316b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 317b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSansSerifFontFamilyLocked(env, obj)); 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->serif_font_family_map[webkit_glue::kCommonScript] = 320b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 321b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSerifFontFamilyLocked(env, obj)); 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->cursive_font_family_map[webkit_glue::kCommonScript] = 324b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 325b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getCursiveFontFamilyLocked(env, obj)); 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->fantasy_font_family_map[webkit_glue::kCommonScript] = 328b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ConvertJavaStringToUTF16( 329b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getFantasyFontFamilyLocked(env, obj)); 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->default_encoding = ConvertJavaStringToUTF8( 332b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultTextEncodingLocked(env, obj)); 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->minimum_font_size = 3354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getMinimumFontSizeLocked(env, obj); 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->minimum_logical_font_size = 338b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getMinimumLogicalFontSizeLocked(env, obj); 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->default_font_size = 3414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getDefaultFontSizeLocked(env, obj); 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->default_fixed_font_size = 344b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultFixedFontSizeLocked(env, obj); 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Blink's LoadsImagesAutomatically and ImagesEnabled must be 3477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // set cris-cross to Android's. See 3487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // https://code.google.com/p/chromium/issues/detail?id=224317#c26 3494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->loads_images_automatically = 3507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Java_AwSettings_getImagesEnabledLocked(env, obj); 3514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->images_enabled = 352b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getLoadsImagesAutomaticallyLocked(env, obj); 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->javascript_enabled = 355b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getJavaScriptEnabledLocked(env, obj); 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->allow_universal_access_from_file_urls = 358b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAllowUniversalAccessFromFileURLsLocked(env, obj); 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->allow_file_access_from_file_urls = 361b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAllowFileAccessFromFileURLsLocked(env, obj); 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->javascript_can_open_windows_automatically = 364b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getJavaScriptCanOpenWindowsAutomaticallyLocked(env, obj); 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->supports_multiple_windows = 367b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getSupportMultipleWindowsLocked(env, obj); 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->plugins_enabled = 3704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) !Java_AwSettings_getPluginsDisabledLocked(env, obj); 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->application_cache_enabled = 373b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getAppCacheEnabledLocked(env, obj); 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->local_storage_enabled = 376b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDomStorageEnabledLocked(env, obj); 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->databases_enabled = 3794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_AwSettings_getDatabaseEnabledLocked(env, obj); 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->wide_viewport_quirk = true; 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_prefs->use_wide_viewport = 383b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getUseWideViewportLocked(env, obj); 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_prefs->double_tap_to_zoom_enabled = 3865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Java_AwSettings_supportsDoubleTapZoomLocked(env, obj); 3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->initialize_at_minimum_page_scale = 389b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getLoadWithOverviewModeLocked(env, obj); 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->user_gesture_required_for_media_playback = 392b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getMediaPlaybackRequiresUserGestureLocked(env, obj); 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 394b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ScopedJavaLocalRef<jstring> url = 395b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_AwSettings_getDefaultVideoPosterURLLocked(env, obj); 3964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->default_video_poster_url = url.obj() ? 397b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GURL(ConvertJavaStringToUTF8(url)) : GURL(); 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool support_quirks = Java_AwSettings_getSupportLegacyQuirksLocked(env, obj); 400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Please see the corresponding Blink settings for bug references. 4014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->support_deprecated_target_density_dpi = support_quirks; 4024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->use_legacy_background_size_shorthand_behavior = support_quirks; 4034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->viewport_meta_layout_size_quirk = support_quirks; 4041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) web_prefs->viewport_meta_merge_content_quirk = support_quirks; 405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) web_prefs->viewport_meta_non_user_scalable_quirk = support_quirks; 4064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->viewport_meta_zero_values_quirk = support_quirks; 407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) web_prefs->clobber_user_agent_initial_scale_quirk = support_quirks; 4084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->ignore_main_frame_overflow_hidden_quirk = support_quirks; 4098bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) web_prefs->report_screen_size_in_physical_pixels_quirk = support_quirks; 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) web_prefs->password_echo_enabled = 4121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Java_AwSettings_getPasswordEchoEnabledLocked(env, obj); 4131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) web_prefs->spatial_navigation_enabled = 4141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Java_AwSettings_getSpatialNavigationLocked(env, obj); 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 416effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch web_prefs->accelerated_2d_canvas_enabled = true; 417effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (accelerated_2d_canvas_disabled_by_switch_ || 418effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch !Java_AwSettings_getEnableSupportedHardwareAcceleratedFeaturesLocked( 419effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch env, obj)) { 420effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Any canvas smaller than this will fallback to software. Abusing this 421effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // slightly to turn canvas off without changing 422effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // accelerated_2d_canvas_enabled, which also affects compositing mode. 423effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Using 100M instead of max int to avoid overflows. 424effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch web_prefs->minimum_accelerated_2d_canvas_size = 100 * 1000 * 1000; 425effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 4260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 4270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch web_prefs->allow_displaying_insecure_content = 4280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Java_AwSettings_getAllowDisplayingInsecureContentLocked(env, obj); 4290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch web_prefs->allow_running_insecure_content = 4300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Java_AwSettings_getAllowRunningInsecureContentLocked(env, obj); 4317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 433a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)static jlong Init(JNIEnv* env, 434a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jobject obj, 435a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) jlong web_contents) { 4367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AwSettings* settings = new AwSettings(env, obj, web_contents); 437a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return reinterpret_cast<intptr_t>(settings); 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)static jstring GetDefaultUserAgent(JNIEnv* env, jclass clazz) { 441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return base::android::ConvertUTF8ToJavaString(env, GetUserAgent()).Release(); 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RegisterAwSettings(JNIEnv* env) { 4450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return RegisterNativesImpl(env); 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace android_webview 449