Chromium Code Reviews| Index: content/browser/android/content_settings.cc |
| diff --git a/content/browser/android/content_settings.cc b/content/browser/android/content_settings.cc |
| index 8ac82cbc80c52f6523f2d81887555044f1464efa..e82b0144963eb0012acc70c45aab37ad4003ec90 100644 |
| --- a/content/browser/android/content_settings.cc |
| +++ b/content/browser/android/content_settings.cc |
| @@ -5,7 +5,6 @@ |
| #include "content/browser/android/content_settings.h" |
| #include "base/android/jni_android.h" |
| -#include "base/android/jni_string.h" |
| #include "content/browser/android/content_view_core_impl.h" |
| #include "content/browser/renderer_host/render_view_host_delegate.h" |
| #include "content/browser/renderer_host/render_view_host_impl.h" |
| @@ -14,122 +13,31 @@ |
| #include "jni/ContentSettings_jni.h" |
| #include "webkit/glue/webkit_glue.h" |
| #include "webkit/glue/webpreferences.h" |
| -#include "webkit/user_agent/user_agent.h" |
| -using base::android::CheckException; |
| -using base::android::ConvertJavaStringToUTF16; |
| -using base::android::ConvertUTF16ToJavaString; |
| -using base::android::ConvertUTF8ToJavaString; |
| -using base::android::GetClass; |
| using base::android::GetFieldID; |
| -using base::android::GetMethodIDFromClassName; |
| using base::android::ScopedJavaLocalRef; |
| -using webkit_glue::WebPreferences; |
| namespace content { |
| struct ContentSettings::FieldIds { |
| - // Note on speed. One may think that an approach that reads field values via |
| - // JNI is ineffective and should not be used. Please keep in mind that in the |
| - // legacy WebView the whole Sync method took <1ms on Xoom, and no one is |
| - // expected to modify settings in performance-critical code. |
| FieldIds() { } |
| FieldIds(JNIEnv* env) { |
| - const char* kStringClassName = "Ljava/lang/String;"; |
| - |
| // FIXME: we should be using a new GetFieldIDFromClassName() with caching. |
|
bulach
2013/04/25 12:55:57
ditto..
|
| - ScopedJavaLocalRef<jclass> clazz( |
| - GetClass(env, "org/chromium/content/browser/ContentSettings")); |
| - text_size_percent = GetFieldID(env, clazz, "mTextSizePercent", "I"); |
| - standard_fond_family = |
| - GetFieldID(env, clazz, "mStandardFontFamily", kStringClassName); |
| - fixed_font_family = |
| - GetFieldID(env, clazz, "mFixedFontFamily", kStringClassName); |
| - sans_serif_font_family = |
| - GetFieldID(env, clazz, "mSansSerifFontFamily", kStringClassName); |
| - serif_font_family = |
| - GetFieldID(env, clazz, "mSerifFontFamily", kStringClassName); |
| - cursive_font_family = |
| - GetFieldID(env, clazz, "mCursiveFontFamily", kStringClassName); |
| - fantasy_font_family = |
| - GetFieldID(env, clazz, "mFantasyFontFamily", kStringClassName); |
| - default_text_encoding = |
| - GetFieldID(env, clazz, "mDefaultTextEncoding", kStringClassName); |
| - user_agent = |
| - GetFieldID(env, clazz, "mUserAgent", kStringClassName); |
| - minimum_font_size = GetFieldID(env, clazz, "mMinimumFontSize", "I"); |
| - minimum_logical_font_size = |
| - GetFieldID(env, clazz, "mMinimumLogicalFontSize", "I"); |
| - default_font_size = GetFieldID(env, clazz, "mDefaultFontSize", "I"); |
| - default_fixed_font_size = |
| - GetFieldID(env, clazz, "mDefaultFixedFontSize", "I"); |
| - load_images_automatically = |
| - GetFieldID(env, clazz, "mLoadsImagesAutomatically", "Z"); |
| - images_enabled = |
| - GetFieldID(env, clazz, "mImagesEnabled", "Z"); |
| + ScopedJavaLocalRef<jclass> clazz(base::android::GetClass( |
| + env, "org/chromium/content/browser/ContentSettings")); |
| java_script_enabled = |
| GetFieldID(env, clazz, "mJavaScriptEnabled", "Z"); |
| - allow_universal_access_from_file_urls = |
| - GetFieldID(env, clazz, "mAllowUniversalAccessFromFileURLs", "Z"); |
| - allow_file_access_from_file_urls = |
| - GetFieldID(env, clazz, "mAllowFileAccessFromFileURLs", "Z"); |
| - java_script_can_open_windows_automatically = |
| - GetFieldID(env, clazz, "mJavaScriptCanOpenWindowsAutomatically", "Z"); |
| - support_multiple_windows = |
| - GetFieldID(env, clazz, "mSupportMultipleWindows", "Z"); |
| - dom_storage_enabled = |
| - GetFieldID(env, clazz, "mDomStorageEnabled", "Z"); |
| - database_enabled = |
| - GetFieldID(env, clazz, "mDatabaseEnabled", "Z"); |
| - use_wide_viewport = |
| - GetFieldID(env, clazz, "mUseWideViewport", "Z"); |
| - load_with_overview_mode = |
| - GetFieldID(env, clazz, "mLoadWithOverviewMode", "Z"); |
| - media_playback_requires_user_gesture = |
| - GetFieldID(env, clazz, "mMediaPlaybackRequiresUserGesture", "Z"); |
| - default_video_poster_url = |
| - GetFieldID(env, clazz, "mDefaultVideoPosterURL", kStringClassName); |
| - support_deprecated_target_density_dpi = |
| - GetFieldID(env, clazz, "mSupportDeprecatedTargetDensityDPI", "Z"); |
| } |
| // Field ids |
| - jfieldID text_size_percent; |
| - jfieldID standard_fond_family; |
| - jfieldID fixed_font_family; |
| - jfieldID sans_serif_font_family; |
| - jfieldID serif_font_family; |
| - jfieldID cursive_font_family; |
| - jfieldID fantasy_font_family; |
| - jfieldID default_text_encoding; |
| - jfieldID user_agent; |
| - jfieldID minimum_font_size; |
| - jfieldID minimum_logical_font_size; |
| - jfieldID default_font_size; |
| - jfieldID default_fixed_font_size; |
| - jfieldID load_images_automatically; |
| - jfieldID images_enabled; |
| jfieldID java_script_enabled; |
| - jfieldID allow_universal_access_from_file_urls; |
| - jfieldID allow_file_access_from_file_urls; |
| - jfieldID java_script_can_open_windows_automatically; |
| - jfieldID support_multiple_windows; |
| - jfieldID dom_storage_enabled; |
| - jfieldID database_enabled; |
| - jfieldID use_wide_viewport; |
| - jfieldID load_with_overview_mode; |
| - jfieldID media_playback_requires_user_gesture; |
| - jfieldID default_video_poster_url; |
| - jfieldID support_deprecated_target_density_dpi; |
| }; |
| ContentSettings::ContentSettings(JNIEnv* env, |
| jobject obj, |
| - WebContents* contents, |
| - bool is_master_mode) |
| + WebContents* contents) |
| : WebContentsObserver(contents), |
| - is_master_mode_(is_master_mode), |
| content_settings_(env, obj) { |
| } |
| @@ -158,314 +66,29 @@ void ContentSettings::SyncFromNativeImpl() { |
| if (!obj) |
| return; |
| RenderViewHost* render_view_host = web_contents()->GetRenderViewHost(); |
| - WebPreferences prefs = render_view_host->GetDelegate()->GetWebkitPrefs(); |
| - |
| - Java_ContentSettings_setTextAutosizingEnabled( |
| - env, obj, prefs.text_autosizing_enabled); |
| - CheckException(env); |
| - |
| - env->SetIntField( |
| - obj, |
| - field_ids_->text_size_percent, |
| - prefs.font_scale_factor * 100.0f); |
| - CheckException(env); |
| - |
| - ScopedJavaLocalRef<jstring> str = |
| - ConvertUTF16ToJavaString(env, |
| - prefs.standard_font_family_map[WebPreferences::kCommonScript]); |
| - env->SetObjectField(obj, field_ids_->standard_fond_family, str.obj()); |
| - CheckException(env); |
| - |
| - str.Reset(ConvertUTF16ToJavaString(env, |
| - prefs.fixed_font_family_map[WebPreferences::kCommonScript])); |
| - env->SetObjectField(obj, field_ids_->fixed_font_family, str.obj()); |
| - CheckException(env); |
| - |
| - str.Reset(ConvertUTF16ToJavaString(env, |
| - prefs.sans_serif_font_family_map[WebPreferences::kCommonScript])); |
| - env->SetObjectField(obj, field_ids_->sans_serif_font_family, str.obj()); |
| - CheckException(env); |
| - |
| - str.Reset(ConvertUTF16ToJavaString(env, |
| - prefs.serif_font_family_map[WebPreferences::kCommonScript])); |
| - env->SetObjectField(obj, field_ids_->serif_font_family, str.obj()); |
| - CheckException(env); |
| - |
| - str.Reset(ConvertUTF16ToJavaString(env, |
| - prefs.cursive_font_family_map[WebPreferences::kCommonScript])); |
| - env->SetObjectField(obj, field_ids_->cursive_font_family, str.obj()); |
| - CheckException(env); |
| - |
| - str.Reset(ConvertUTF16ToJavaString(env, |
| - prefs.fantasy_font_family_map[WebPreferences::kCommonScript])); |
| - env->SetObjectField(obj, field_ids_->fantasy_font_family, str.obj()); |
| - CheckException(env); |
| - |
| - str.Reset(ConvertUTF8ToJavaString(env, prefs.default_encoding)); |
| - env->SetObjectField(obj, field_ids_->default_text_encoding, str.obj()); |
| - CheckException(env); |
| - |
| - str.Reset(ConvertUTF8ToJavaString(env, webkit_glue::GetUserAgent(GURL("")))); |
| - env->SetObjectField(obj, field_ids_->user_agent, str.obj()); |
| - CheckException(env); |
| - |
| - env->SetIntField(obj, field_ids_->minimum_font_size, |
| - prefs.minimum_font_size); |
| - CheckException(env); |
| - |
| - env->SetIntField( |
| - obj, |
| - field_ids_->minimum_logical_font_size, prefs.minimum_logical_font_size); |
| - CheckException(env); |
| - |
| - env->SetIntField(obj, field_ids_->default_font_size, |
| - prefs.default_font_size); |
| - CheckException(env); |
| - |
| - env->SetIntField( |
| - obj, field_ids_->default_fixed_font_size, prefs.default_fixed_font_size); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->load_images_automatically, prefs.loads_images_automatically); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->images_enabled, prefs.images_enabled); |
| - CheckException(env); |
| + webkit_glue::WebPreferences prefs = |
| + render_view_host->GetDelegate()->GetWebkitPrefs(); |
| env->SetBooleanField( |
| obj, field_ids_->java_script_enabled, prefs.javascript_enabled); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->allow_universal_access_from_file_urls, |
| - prefs.allow_universal_access_from_file_urls); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->allow_file_access_from_file_urls, |
| - prefs.allow_file_access_from_file_urls); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->java_script_can_open_windows_automatically, |
| - prefs.javascript_can_open_windows_automatically); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->support_multiple_windows, |
| - prefs.supports_multiple_windows); |
| - CheckException(env); |
| - |
| - Java_ContentSettings_setPluginsDisabled(env, obj, !prefs.plugins_enabled); |
| - CheckException(env); |
| - |
| - // We don't need to sync AppCache settings to Java, because there are |
| - // no getters for them in the API. |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->dom_storage_enabled, |
| - prefs.local_storage_enabled); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->database_enabled, |
| - prefs.databases_enabled); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->use_wide_viewport, |
| - prefs.use_wide_viewport); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->load_with_overview_mode, |
| - prefs.initialize_at_minimum_page_scale); |
| - CheckException(env); |
| - |
| - env->SetBooleanField( |
| - obj, |
| - field_ids_->media_playback_requires_user_gesture, |
| - prefs.user_gesture_required_for_media_playback); |
| - CheckException(env); |
| - |
| - str.Reset( |
| - ConvertUTF8ToJavaString(env, prefs.default_video_poster_url.spec())); |
| - env->SetObjectField(obj, field_ids_->default_video_poster_url, str.obj()); |
| - CheckException(env); |
| -} |
| - |
| -void ContentSettings::SyncToNativeImpl() { |
| - JNIEnv* env = base::android::AttachCurrentThread(); |
| - CHECK(env); |
| - if (!field_ids_) |
| - field_ids_.reset(new FieldIds(env)); |
| - |
| - ScopedJavaLocalRef<jobject> scoped_obj = content_settings_.get(env); |
| - jobject obj = scoped_obj.obj(); |
| - if (!obj) |
| - return; |
| - RenderViewHost* render_view_host = web_contents()->GetRenderViewHost(); |
| - WebPreferences prefs = render_view_host->GetDelegate()->GetWebkitPrefs(); |
| - |
| - prefs.text_autosizing_enabled = |
| - Java_ContentSettings_getTextAutosizingEnabled(env, obj); |
| - |
| - int text_size_percent = env->GetIntField(obj, field_ids_->text_size_percent); |
| - if (prefs.text_autosizing_enabled) { |
| - prefs.font_scale_factor = text_size_percent / 100.0f; |
| - prefs.force_enable_zoom = text_size_percent >= 130; |
| - } else { |
| - prefs.force_enable_zoom = false; |
| - } |
| - |
| - ScopedJavaLocalRef<jstring> str( |
| - env, static_cast<jstring>( |
| - env->GetObjectField(obj, field_ids_->standard_fond_family))); |
| - prefs.standard_font_family_map[WebPreferences::kCommonScript] = |
| - ConvertJavaStringToUTF16(str); |
| - |
| - str.Reset( |
| - env, static_cast<jstring>( |
| - env->GetObjectField(obj, field_ids_->fixed_font_family))); |
| - prefs.fixed_font_family_map[WebPreferences::kCommonScript] = |
| - ConvertJavaStringToUTF16(str); |
| - |
| - str.Reset( |
| - env, static_cast<jstring>( |
| - env->GetObjectField(obj, field_ids_->sans_serif_font_family))); |
| - prefs.sans_serif_font_family_map[WebPreferences::kCommonScript] = |
| - ConvertJavaStringToUTF16(str); |
| - |
| - str.Reset( |
| - env, static_cast<jstring>( |
| - env->GetObjectField(obj, field_ids_->serif_font_family))); |
| - prefs.serif_font_family_map[WebPreferences::kCommonScript] = |
| - ConvertJavaStringToUTF16(str); |
| - |
| - str.Reset( |
| - env, static_cast<jstring>( |
| - env->GetObjectField(obj, field_ids_->cursive_font_family))); |
| - prefs.cursive_font_family_map[WebPreferences::kCommonScript] = |
| - ConvertJavaStringToUTF16(str); |
| - |
| - str.Reset( |
| - env, static_cast<jstring>( |
| - env->GetObjectField(obj, field_ids_->fantasy_font_family))); |
| - prefs.fantasy_font_family_map[WebPreferences::kCommonScript] = |
| - ConvertJavaStringToUTF16(str); |
| - |
| - str.Reset( |
| - env, static_cast<jstring>( |
| - env->GetObjectField(obj, field_ids_->default_text_encoding))); |
| - prefs.default_encoding = ConvertJavaStringToUTF8(str); |
| - |
| - prefs.minimum_font_size = |
| - env->GetIntField(obj, field_ids_->minimum_font_size); |
| - |
| - prefs.minimum_logical_font_size = |
| - env->GetIntField(obj, field_ids_->minimum_logical_font_size); |
| - |
| - prefs.default_font_size = |
| - env->GetIntField(obj, field_ids_->default_font_size); |
| - |
| - prefs.default_fixed_font_size = |
| - env->GetIntField(obj, field_ids_->default_fixed_font_size); |
| - |
| - prefs.loads_images_automatically = |
| - env->GetBooleanField(obj, field_ids_->load_images_automatically); |
| - |
| - prefs.images_enabled = |
| - env->GetBooleanField(obj, field_ids_->images_enabled); |
| - |
| - prefs.javascript_enabled = |
| - env->GetBooleanField(obj, field_ids_->java_script_enabled); |
| - |
| - prefs.allow_universal_access_from_file_urls = env->GetBooleanField( |
| - obj, field_ids_->allow_universal_access_from_file_urls); |
| - |
| - prefs.allow_file_access_from_file_urls = env->GetBooleanField( |
| - obj, field_ids_->allow_file_access_from_file_urls); |
| - |
| - prefs.javascript_can_open_windows_automatically = env->GetBooleanField( |
| - obj, field_ids_->java_script_can_open_windows_automatically); |
| - |
| - prefs.supports_multiple_windows = env->GetBooleanField( |
| - obj, field_ids_->support_multiple_windows); |
| - |
| - prefs.plugins_enabled = !Java_ContentSettings_getPluginsDisabled(env, obj); |
| - |
| - prefs.application_cache_enabled = |
| - Java_ContentSettings_getAppCacheEnabled(env, obj); |
| - |
| - prefs.local_storage_enabled = env->GetBooleanField( |
| - obj, field_ids_->dom_storage_enabled); |
| - |
| - prefs.databases_enabled = env->GetBooleanField( |
| - obj, field_ids_->database_enabled); |
| - |
| - prefs.double_tap_to_zoom_enabled = prefs.use_wide_viewport = |
| - env->GetBooleanField(obj, field_ids_->use_wide_viewport); |
| - |
| - prefs.initialize_at_minimum_page_scale = env->GetBooleanField( |
| - obj, field_ids_->load_with_overview_mode); |
| - |
| - prefs.user_gesture_required_for_media_playback = env->GetBooleanField( |
| - obj, field_ids_->media_playback_requires_user_gesture); |
| - |
| - str.Reset( |
| - env, static_cast<jstring>( |
| - env->GetObjectField(obj, field_ids_->default_video_poster_url))); |
| - prefs.default_video_poster_url = str.obj() ? |
| - GURL(ConvertJavaStringToUTF8(str)) : GURL(); |
| - |
| - prefs.support_deprecated_target_density_dpi = env->GetBooleanField( |
| - obj, field_ids_->support_deprecated_target_density_dpi); |
| - |
| - render_view_host->UpdateWebkitPreferences(prefs); |
| + base::android::CheckException(env); |
| } |
| void ContentSettings::SyncFromNative(JNIEnv* env, jobject obj) { |
| SyncFromNativeImpl(); |
| } |
| -void ContentSettings::SyncToNative(JNIEnv* env, jobject obj) { |
| - SyncToNativeImpl(); |
| -} |
| - |
| -void ContentSettings::RenderViewCreated(RenderViewHost* render_view_host) { |
| - if (is_master_mode_) |
| - SyncToNativeImpl(); |
| -} |
| - |
| void ContentSettings::WebContentsDestroyed(WebContents* web_contents) { |
| delete this; |
| } |
| -static jint Init(JNIEnv* env, jobject obj, jint nativeContentViewCore, |
| - jboolean is_master_mode) { |
| +static jint Init(JNIEnv* env, jobject obj, jint nativeContentViewCore) { |
| WebContents* web_contents = |
| reinterpret_cast<ContentViewCoreImpl*>(nativeContentViewCore) |
| ->GetWebContents(); |
| ContentSettings* content_settings = |
| - new ContentSettings(env, obj, web_contents, is_master_mode); |
| + new ContentSettings(env, obj, web_contents); |
| return reinterpret_cast<jint>(content_settings); |
| } |
| -static jstring GetDefaultUserAgent(JNIEnv* env, jclass clazz) { |
| - return base::android::ConvertUTF8ToJavaString( |
| - env, GetContentClient()->GetUserAgent()).Release(); |
| -} |
| - |
| } // namespace content |