content_settings.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/content_settings.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_android.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_string.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/content_view_core_impl.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_delegate.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_impl.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_client.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jni/ContentSettings_jni.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "webkit/glue/webkit_glue.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "webkit/glue/webpreferences.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "webkit/user_agent/user_agent.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::CheckException; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertJavaStringToUTF16; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF16ToJavaString; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF8ToJavaString; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::GetClass; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::GetFieldID; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::GetMethodIDFromClassName; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaLocalRef; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using webkit_glue::WebPreferences; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ContentSettings::FieldIds { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note on speed. One may think that an approach that reads field values via 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // JNI is ineffective and should not be used. Please keep in mind that in the 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // legacy WebView the whole Sync method took <1ms on Xoom, and no one is 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // expected to modify settings in performance-critical code. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FieldIds() { } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FieldIds(JNIEnv* env) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kStringClassName = "Ljava/lang/String;"; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // FIXME: we should be using a new GetFieldIDFromClassName() with caching. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jclass> clazz( 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetClass(env, "org/chromium/content/browser/ContentSettings")); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) text_size_percent = GetFieldID(env, clazz, "mTextSizePercent", "I"); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) standard_fond_family = 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mStandardFontFamily", kStringClassName); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fixed_font_family = 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mFixedFontFamily", kStringClassName); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sans_serif_font_family = 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mSansSerifFontFamily", kStringClassName); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) serif_font_family = 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mSerifFontFamily", kStringClassName); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cursive_font_family = 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mCursiveFontFamily", kStringClassName); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fantasy_font_family = 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mFantasyFontFamily", kStringClassName); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_text_encoding = 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mDefaultTextEncoding", kStringClassName); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_agent = 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mUserAgent", kStringClassName); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) minimum_font_size = GetFieldID(env, clazz, "mMinimumFontSize", "I"); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) minimum_logical_font_size = 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mMinimumLogicalFontSize", "I"); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_font_size = GetFieldID(env, clazz, "mDefaultFontSize", "I"); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default_fixed_font_size = 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mDefaultFixedFontSize", "I"); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_images_automatically = 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mLoadsImagesAutomatically", "Z"); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) images_enabled = 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mImagesEnabled", "Z"); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_script_enabled = 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mJavaScriptEnabled", "Z"); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_universal_access_from_file_urls = 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mAllowUniversalAccessFromFileURLs", "Z"); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) allow_file_access_from_file_urls = 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mAllowFileAccessFromFileURLs", "Z"); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) java_script_can_open_windows_automatically = 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mJavaScriptCanOpenWindowsAutomatically", "Z"); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) support_multiple_windows = 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mSupportMultipleWindows", "Z"); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dom_storage_enabled = 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFieldID(env, clazz, "mDomStorageEnabled", "Z"); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Field ids 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID text_size_percent; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID standard_fond_family; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID fixed_font_family; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID sans_serif_font_family; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID serif_font_family; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID cursive_font_family; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID fantasy_font_family; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID default_text_encoding; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID user_agent; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID minimum_font_size; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID minimum_logical_font_size; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID default_font_size; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID default_fixed_font_size; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID load_images_automatically; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID images_enabled; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID java_script_enabled; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID allow_universal_access_from_file_urls; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID allow_file_access_from_file_urls; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID java_script_can_open_windows_automatically; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID support_multiple_windows; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jfieldID dom_storage_enabled; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettings::ContentSettings(JNIEnv* env, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* contents, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_master_mode) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : WebContentsObserver(contents), 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_master_mode_(is_master_mode), 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings_(env, obj) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettings::~ContentSettings() { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = content_settings_.get(env); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.obj()) { 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentSettings_onNativeContentSettingsDestroyed(env, obj.obj(), 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<jint>(this)); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentSettings::RegisterContentSettings(JNIEnv* env) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RegisterNativesImpl(env); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettings::SyncFromNativeImpl() { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(env); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!field_ids_.get()) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_.reset(new FieldIds(env)); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = content_settings_.get(env); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj = scoped_obj.obj(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!obj) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* render_view_host = web_contents()->GetRenderViewHost(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPreferences prefs = render_view_host->GetDelegate()->GetWebkitPrefs(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(mnaganov): Hook LayoutAlgorithm.NARROW_COLUMNS up to 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prefs.text_autosizing_enabled 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntField( 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_->text_size_percent, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.font_scale_factor * 100.0f); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> str = 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertUTF16ToJavaString(env, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.standard_font_family_map[WebPreferences::kCommonScript]); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetObjectField(obj, field_ids_->standard_fond_family, str.obj()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset(ConvertUTF16ToJavaString(env, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.fixed_font_family_map[WebPreferences::kCommonScript])); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetObjectField(obj, field_ids_->fixed_font_family, str.obj()); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset(ConvertUTF16ToJavaString(env, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.sans_serif_font_family_map[WebPreferences::kCommonScript])); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetObjectField(obj, field_ids_->sans_serif_font_family, str.obj()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset(ConvertUTF16ToJavaString(env, 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.serif_font_family_map[WebPreferences::kCommonScript])); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetObjectField(obj, field_ids_->serif_font_family, str.obj()); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset(ConvertUTF16ToJavaString(env, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.cursive_font_family_map[WebPreferences::kCommonScript])); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetObjectField(obj, field_ids_->cursive_font_family, str.obj()); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset(ConvertUTF16ToJavaString(env, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.fantasy_font_family_map[WebPreferences::kCommonScript])); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetObjectField(obj, field_ids_->fantasy_font_family, str.obj()); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset(ConvertUTF8ToJavaString(env, prefs.default_encoding)); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetObjectField(obj, field_ids_->default_text_encoding, str.obj()); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset(ConvertUTF8ToJavaString(env, webkit_glue::GetUserAgent(GURL("")))); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetObjectField(obj, field_ids_->user_agent, str.obj()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntField(obj, field_ids_->minimum_font_size, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.minimum_font_size); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntField( 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_->minimum_logical_font_size, prefs.minimum_logical_font_size); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntField(obj, field_ids_->default_font_size, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.default_font_size); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetIntField( 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, field_ids_->default_fixed_font_size, prefs.default_fixed_font_size); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetBooleanField( 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_->load_images_automatically, prefs.loads_images_automatically); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetBooleanField( 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_->images_enabled, prefs.images_enabled); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetBooleanField( 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, field_ids_->java_script_enabled, prefs.javascript_enabled); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetBooleanField( 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_->allow_universal_access_from_file_urls, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.allow_universal_access_from_file_urls); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetBooleanField( 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_->allow_file_access_from_file_urls, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.allow_file_access_from_file_urls); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetBooleanField( 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_->java_script_can_open_windows_automatically, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.javascript_can_open_windows_automatically); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetBooleanField( 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_->support_multiple_windows, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.supports_multiple_windows); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_ContentSettings_setPluginsDisabled(env, obj, !prefs.plugins_enabled); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->SetBooleanField( 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_->dom_storage_enabled, 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.local_storage_enabled); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckException(env); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettings::SyncToNativeImpl() { 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = base::android::AttachCurrentThread(); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(env); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!field_ids_.get()) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field_ids_.reset(new FieldIds(env)); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> scoped_obj = content_settings_.get(env); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj = scoped_obj.obj(); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!obj) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* render_view_host = web_contents()->GetRenderViewHost(); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebPreferences prefs = render_view_host->GetDelegate()->GetWebkitPrefs(); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(mnaganov): Hook prefs.text_autosizing_enabled up to 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // LayoutAlgorithm.NARROW_COLUMNS 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int text_size_percent = env->GetIntField(obj, field_ids_->text_size_percent); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.font_scale_factor = text_size_percent / 100.0f; 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.force_enable_zoom = text_size_percent >= 130; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jstring> str( 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, static_cast<jstring>( 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetObjectField(obj, field_ids_->standard_fond_family))); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.standard_font_family_map[WebPreferences::kCommonScript] = 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertJavaStringToUTF16(str); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset( 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, static_cast<jstring>( 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetObjectField(obj, field_ids_->fixed_font_family))); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.fixed_font_family_map[WebPreferences::kCommonScript] = 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertJavaStringToUTF16(str); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset( 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, static_cast<jstring>( 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetObjectField(obj, field_ids_->sans_serif_font_family))); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.sans_serif_font_family_map[WebPreferences::kCommonScript] = 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertJavaStringToUTF16(str); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset( 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, static_cast<jstring>( 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetObjectField(obj, field_ids_->serif_font_family))); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.serif_font_family_map[WebPreferences::kCommonScript] = 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertJavaStringToUTF16(str); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset( 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, static_cast<jstring>( 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetObjectField(obj, field_ids_->cursive_font_family))); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.cursive_font_family_map[WebPreferences::kCommonScript] = 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertJavaStringToUTF16(str); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset( 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, static_cast<jstring>( 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetObjectField(obj, field_ids_->fantasy_font_family))); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.fantasy_font_family_map[WebPreferences::kCommonScript] = 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConvertJavaStringToUTF16(str); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str.Reset( 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, static_cast<jstring>( 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetObjectField(obj, field_ids_->default_text_encoding))); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.default_encoding = ConvertJavaStringToUTF8(str); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.minimum_font_size = 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetIntField(obj, field_ids_->minimum_font_size); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.minimum_logical_font_size = 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetIntField(obj, field_ids_->minimum_logical_font_size); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.default_font_size = 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetIntField(obj, field_ids_->default_font_size); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.default_fixed_font_size = 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetIntField(obj, field_ids_->default_fixed_font_size); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.loads_images_automatically = 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetBooleanField(obj, field_ids_->load_images_automatically); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.images_enabled = 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetBooleanField(obj, field_ids_->images_enabled); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.javascript_enabled = 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env->GetBooleanField(obj, field_ids_->java_script_enabled); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.allow_universal_access_from_file_urls = env->GetBooleanField( 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, field_ids_->allow_universal_access_from_file_urls); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.allow_file_access_from_file_urls = env->GetBooleanField( 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, field_ids_->allow_file_access_from_file_urls); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.javascript_can_open_windows_automatically = env->GetBooleanField( 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, field_ids_->java_script_can_open_windows_automatically); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.supports_multiple_windows = env->GetBooleanField( 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, field_ids_->support_multiple_windows); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.plugins_enabled = !Java_ContentSettings_getPluginsDisabled(env, obj); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs.local_storage_enabled = env->GetBooleanField( 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj, field_ids_->dom_storage_enabled); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_host->UpdateWebkitPreferences(prefs); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettings::SyncFromNative(JNIEnv* env, jobject obj) { 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncFromNativeImpl(); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettings::SyncToNative(JNIEnv* env, jobject obj) { 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncToNativeImpl(); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettings::RenderViewCreated(RenderViewHost* render_view_host) { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_master_mode_) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SyncToNativeImpl(); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettings::WebContentsDestroyed(WebContents* web_contents) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static jint Init(JNIEnv* env, jobject obj, jint nativeContentViewCore, 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jboolean is_master_mode) { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents = 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<ContentViewCoreImpl*>(nativeContentViewCore) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ->GetWebContents(); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettings* content_settings = 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new ContentSettings(env, obj, web_contents, is_master_mode); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<jint>(content_settings); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static jstring GetDefaultUserAgent(JNIEnv* env, jclass clazz) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::android::ConvertUTF8ToJavaString( 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, GetContentClient()->GetUserAgent()).Release(); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 393