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