Index: android_webview/native/aw_settings.cc |
diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc |
deleted file mode 100644 |
index e59653353758f9f69bd8fd3ed0110ea659400436..0000000000000000000000000000000000000000 |
--- a/android_webview/native/aw_settings.cc |
+++ /dev/null |
@@ -1,468 +0,0 @@ |
-// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "android_webview/native/aw_settings.h" |
- |
-#include "android_webview/browser/aw_content_browser_client.h" |
-#include "android_webview/browser/renderer_host/aw_render_view_host_ext.h" |
-#include "android_webview/common/aw_content_client.h" |
-#include "android_webview/native/aw_contents.h" |
-#include "base/android/jni_android.h" |
-#include "base/android/jni_string.h" |
-#include "base/macros.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/supports_user_data.h" |
-#include "content/public/browser/navigation_controller.h" |
-#include "content/public/browser/navigation_entry.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/common/renderer_preferences.h" |
-#include "content/public/common/web_preferences.h" |
-#include "jni/AwSettings_jni.h" |
-#include "ui/gfx/font_render_params.h" |
- |
-using base::android::ConvertJavaStringToUTF16; |
-using base::android::ConvertUTF8ToJavaString; |
-using base::android::JavaParamRef; |
-using base::android::ScopedJavaLocalRef; |
-using content::RendererPreferences; |
-using content::WebPreferences; |
- |
-namespace android_webview { |
- |
-namespace { |
- |
-void PopulateFixedRendererPreferences(RendererPreferences* prefs) { |
- prefs->tap_multiple_targets_strategy = |
- content::TAP_MULTIPLE_TARGETS_STRATEGY_NONE; |
- |
- // TODO(boliu): Deduplicate with chrome/ code. |
- CR_DEFINE_STATIC_LOCAL(const gfx::FontRenderParams, params, |
- (gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), NULL))); |
- prefs->should_antialias_text = params.antialiasing; |
- prefs->use_subpixel_positioning = params.subpixel_positioning; |
- prefs->hinting = params.hinting; |
- prefs->use_autohinter = params.autohinter; |
- prefs->use_bitmaps = params.use_bitmaps; |
- prefs->subpixel_rendering = params.subpixel_rendering; |
-} |
- |
-void PopulateFixedWebPreferences(WebPreferences* web_prefs) { |
- web_prefs->shrinks_standalone_images_to_fit = false; |
- web_prefs->should_clear_document_background = false; |
- web_prefs->viewport_meta_enabled = true; |
-} |
- |
-const void* const kAwSettingsUserDataKey = &kAwSettingsUserDataKey; |
- |
-}; // namespace |
- |
-class AwSettingsUserData : public base::SupportsUserData::Data { |
- public: |
- explicit AwSettingsUserData(AwSettings* ptr) : settings_(ptr) {} |
- |
- static AwSettings* GetSettings(content::WebContents* web_contents) { |
- if (!web_contents) |
- return NULL; |
- AwSettingsUserData* data = static_cast<AwSettingsUserData*>( |
- web_contents->GetUserData(kAwSettingsUserDataKey)); |
- return data ? data->settings_ : NULL; |
- } |
- |
- private: |
- AwSettings* settings_; |
-}; |
- |
-AwSettings::AwSettings(JNIEnv* env, |
- jobject obj, |
- content::WebContents* web_contents) |
- : WebContentsObserver(web_contents), |
- renderer_prefs_initialized_(false), |
- aw_settings_(env, obj) { |
- web_contents->SetUserData(kAwSettingsUserDataKey, |
- base::MakeUnique<AwSettingsUserData>(this)); |
-} |
- |
-AwSettings::~AwSettings() { |
- if (web_contents()) { |
- web_contents()->SetUserData(kAwSettingsUserDataKey, NULL); |
- } |
- |
- JNIEnv* env = base::android::AttachCurrentThread(); |
- ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); |
- if (scoped_obj.is_null()) |
- return; |
- Java_AwSettings_nativeAwSettingsGone(env, scoped_obj, |
- reinterpret_cast<intptr_t>(this)); |
-} |
- |
-void AwSettings::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
- delete this; |
-} |
- |
-AwSettings* AwSettings::FromWebContents(content::WebContents* web_contents) { |
- return AwSettingsUserData::GetSettings(web_contents); |
-} |
- |
-AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() { |
- if (!web_contents()) return NULL; |
- AwContents* contents = AwContents::FromWebContents(web_contents()); |
- if (!contents) return NULL; |
- return contents->render_view_host_ext(); |
-} |
- |
-void AwSettings::ResetScrollAndScaleState(JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); |
- if (!rvhe) return; |
- rvhe->ResetScrollAndScaleState(); |
-} |
- |
-void AwSettings::UpdateEverything() { |
- JNIEnv* env = base::android::AttachCurrentThread(); |
- CHECK(env); |
- ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); |
- if (scoped_obj.is_null()) |
- return; |
- // Grab the lock and call UpdateEverythingLocked. |
- Java_AwSettings_updateEverything(env, scoped_obj); |
-} |
- |
-void AwSettings::UpdateEverythingLocked(JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- UpdateInitialPageScaleLocked(env, obj); |
- UpdateWebkitPreferencesLocked(env, obj); |
- UpdateUserAgentLocked(env, obj); |
- ResetScrollAndScaleState(env, obj); |
- UpdateFormDataPreferencesLocked(env, obj); |
- UpdateRendererPreferencesLocked(env, obj); |
- UpdateOffscreenPreRasterLocked(env, obj); |
-} |
- |
-void AwSettings::UpdateUserAgentLocked(JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- if (!web_contents()) return; |
- |
- ScopedJavaLocalRef<jstring> str = |
- Java_AwSettings_getUserAgentLocked(env, obj); |
- bool ua_overidden = str.obj() != NULL; |
- |
- if (ua_overidden) { |
- std::string override = base::android::ConvertJavaStringToUTF8(str); |
- web_contents()->SetUserAgentOverride(override); |
- } |
- |
- const content::NavigationController& controller = |
- web_contents()->GetController(); |
- for (int i = 0; i < controller.GetEntryCount(); ++i) |
- controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden); |
-} |
- |
-void AwSettings::UpdateWebkitPreferencesLocked( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- if (!web_contents()) return; |
- AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); |
- if (!render_view_host_ext) return; |
- |
- content::RenderViewHost* render_view_host = |
- web_contents()->GetRenderViewHost(); |
- if (!render_view_host) return; |
- render_view_host->OnWebkitPreferencesChanged(); |
-} |
- |
-void AwSettings::UpdateInitialPageScaleLocked( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); |
- if (!rvhe) return; |
- |
- float initial_page_scale_percent = |
- Java_AwSettings_getInitialPageScalePercentLocked(env, obj); |
- if (initial_page_scale_percent == 0) { |
- rvhe->SetInitialPageScale(-1); |
- } else { |
- float dip_scale = static_cast<float>( |
- Java_AwSettings_getDIPScaleLocked(env, obj)); |
- rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f); |
- } |
-} |
- |
-void AwSettings::UpdateFormDataPreferencesLocked( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- if (!web_contents()) return; |
- AwContents* contents = AwContents::FromWebContents(web_contents()); |
- if (!contents) return; |
- |
- contents->SetSaveFormData(Java_AwSettings_getSaveFormDataLocked(env, obj)); |
-} |
- |
-void AwSettings::UpdateRendererPreferencesLocked( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- if (!web_contents()) return; |
- |
- bool update_prefs = false; |
- RendererPreferences* prefs = web_contents()->GetMutableRendererPrefs(); |
- |
- if (!renderer_prefs_initialized_) { |
- PopulateFixedRendererPreferences(prefs); |
- renderer_prefs_initialized_ = true; |
- update_prefs = true; |
- } |
- |
- if (prefs->accept_languages.compare( |
- AwContentBrowserClient::GetAcceptLangsImpl())) { |
- prefs->accept_languages = AwContentBrowserClient::GetAcceptLangsImpl(); |
- update_prefs = true; |
- } |
- |
- content::RenderViewHost* host = web_contents()->GetRenderViewHost(); |
- if (update_prefs && host) |
- host->SyncRendererPrefs(); |
-} |
- |
-void AwSettings::UpdateOffscreenPreRasterLocked( |
- JNIEnv* env, |
- const JavaParamRef<jobject>& obj) { |
- AwContents* contents = AwContents::FromWebContents(web_contents()); |
- if (contents) { |
- contents->SetOffscreenPreRaster( |
- Java_AwSettings_getOffscreenPreRasterLocked(env, obj)); |
- } |
-} |
- |
-void AwSettings::RenderViewHostChanged(content::RenderViewHost* old_host, |
- content::RenderViewHost* new_host) { |
- DCHECK_EQ(new_host, web_contents()->GetRenderViewHost()); |
- |
- UpdateEverything(); |
-} |
- |
-void AwSettings::WebContentsDestroyed() { |
- delete this; |
-} |
- |
-void AwSettings::PopulateWebPreferences(WebPreferences* web_prefs) { |
- JNIEnv* env = base::android::AttachCurrentThread(); |
- CHECK(env); |
- ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); |
- if (scoped_obj.is_null()) |
- return; |
- // Grab the lock and call PopulateWebPreferencesLocked. |
- Java_AwSettings_populateWebPreferences(env, scoped_obj, |
- reinterpret_cast<jlong>(web_prefs)); |
-} |
- |
-void AwSettings::PopulateWebPreferencesLocked(JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- jlong web_prefs_ptr) { |
- AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); |
- if (!render_view_host_ext) return; |
- |
- WebPreferences* web_prefs = reinterpret_cast<WebPreferences*>(web_prefs_ptr); |
- PopulateFixedWebPreferences(web_prefs); |
- |
- web_prefs->text_autosizing_enabled = |
- Java_AwSettings_getTextAutosizingEnabledLocked(env, obj); |
- |
- int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj); |
- if (web_prefs->text_autosizing_enabled) { |
- web_prefs->font_scale_factor = text_size_percent / 100.0f; |
- web_prefs->force_enable_zoom = text_size_percent >= 130; |
- // Use the default zoom factor value when Text Autosizer is turned on. |
- render_view_host_ext->SetTextZoomFactor(1); |
- } else { |
- web_prefs->force_enable_zoom = false; |
- render_view_host_ext->SetTextZoomFactor(text_size_percent / 100.0f); |
- } |
- |
- web_prefs->standard_font_family_map[content::kCommonScript] = |
- ConvertJavaStringToUTF16( |
- Java_AwSettings_getStandardFontFamilyLocked(env, obj)); |
- |
- web_prefs->fixed_font_family_map[content::kCommonScript] = |
- ConvertJavaStringToUTF16( |
- Java_AwSettings_getFixedFontFamilyLocked(env, obj)); |
- |
- web_prefs->sans_serif_font_family_map[content::kCommonScript] = |
- ConvertJavaStringToUTF16( |
- Java_AwSettings_getSansSerifFontFamilyLocked(env, obj)); |
- |
- web_prefs->serif_font_family_map[content::kCommonScript] = |
- ConvertJavaStringToUTF16( |
- Java_AwSettings_getSerifFontFamilyLocked(env, obj)); |
- |
- web_prefs->cursive_font_family_map[content::kCommonScript] = |
- ConvertJavaStringToUTF16( |
- Java_AwSettings_getCursiveFontFamilyLocked(env, obj)); |
- |
- web_prefs->fantasy_font_family_map[content::kCommonScript] = |
- ConvertJavaStringToUTF16( |
- Java_AwSettings_getFantasyFontFamilyLocked(env, obj)); |
- |
- web_prefs->default_encoding = ConvertJavaStringToUTF8( |
- Java_AwSettings_getDefaultTextEncodingLocked(env, obj)); |
- |
- web_prefs->minimum_font_size = |
- Java_AwSettings_getMinimumFontSizeLocked(env, obj); |
- |
- web_prefs->minimum_logical_font_size = |
- Java_AwSettings_getMinimumLogicalFontSizeLocked(env, obj); |
- |
- web_prefs->default_font_size = |
- Java_AwSettings_getDefaultFontSizeLocked(env, obj); |
- |
- web_prefs->default_fixed_font_size = |
- Java_AwSettings_getDefaultFixedFontSizeLocked(env, obj); |
- |
- // Blink's LoadsImagesAutomatically and ImagesEnabled must be |
- // set cris-cross to Android's. See |
- // https://code.google.com/p/chromium/issues/detail?id=224317#c26 |
- web_prefs->loads_images_automatically = |
- Java_AwSettings_getImagesEnabledLocked(env, obj); |
- web_prefs->images_enabled = |
- Java_AwSettings_getLoadsImagesAutomaticallyLocked(env, obj); |
- |
- web_prefs->javascript_enabled = |
- Java_AwSettings_getJavaScriptEnabledLocked(env, obj); |
- |
- web_prefs->allow_universal_access_from_file_urls = |
- Java_AwSettings_getAllowUniversalAccessFromFileURLsLocked(env, obj); |
- |
- web_prefs->allow_file_access_from_file_urls = |
- Java_AwSettings_getAllowFileAccessFromFileURLsLocked(env, obj); |
- |
- web_prefs->javascript_can_open_windows_automatically = |
- Java_AwSettings_getJavaScriptCanOpenWindowsAutomaticallyLocked(env, obj); |
- |
- web_prefs->supports_multiple_windows = |
- Java_AwSettings_getSupportMultipleWindowsLocked(env, obj); |
- |
- web_prefs->plugins_enabled = |
- !Java_AwSettings_getPluginsDisabledLocked(env, obj); |
- |
- web_prefs->application_cache_enabled = |
- Java_AwSettings_getAppCacheEnabledLocked(env, obj); |
- |
- web_prefs->local_storage_enabled = |
- Java_AwSettings_getDomStorageEnabledLocked(env, obj); |
- |
- web_prefs->databases_enabled = |
- Java_AwSettings_getDatabaseEnabledLocked(env, obj); |
- |
- web_prefs->wide_viewport_quirk = true; |
- web_prefs->use_wide_viewport = |
- Java_AwSettings_getUseWideViewportLocked(env, obj); |
- |
- web_prefs->force_zero_layout_height = |
- Java_AwSettings_getForceZeroLayoutHeightLocked(env, obj); |
- |
- const bool zero_layout_height_disables_viewport_quirk = |
- Java_AwSettings_getZeroLayoutHeightDisablesViewportQuirkLocked(env, obj); |
- web_prefs->viewport_enabled = !(zero_layout_height_disables_viewport_quirk && |
- web_prefs->force_zero_layout_height); |
- |
- web_prefs->double_tap_to_zoom_enabled = |
- Java_AwSettings_supportsDoubleTapZoomLocked(env, obj); |
- |
- web_prefs->initialize_at_minimum_page_scale = |
- Java_AwSettings_getLoadWithOverviewModeLocked(env, obj); |
- |
- web_prefs->user_gesture_required_for_media_playback = |
- Java_AwSettings_getMediaPlaybackRequiresUserGestureLocked(env, obj); |
- |
- ScopedJavaLocalRef<jstring> url = |
- Java_AwSettings_getDefaultVideoPosterURLLocked(env, obj); |
- web_prefs->default_video_poster_url = url.obj() ? |
- GURL(ConvertJavaStringToUTF8(url)) : GURL(); |
- |
- bool support_quirks = Java_AwSettings_getSupportLegacyQuirksLocked(env, obj); |
- // Please see the corresponding Blink settings for bug references. |
- web_prefs->support_deprecated_target_density_dpi = support_quirks; |
- web_prefs->use_legacy_background_size_shorthand_behavior = support_quirks; |
- web_prefs->viewport_meta_layout_size_quirk = support_quirks; |
- web_prefs->viewport_meta_merge_content_quirk = support_quirks; |
- web_prefs->viewport_meta_non_user_scalable_quirk = support_quirks; |
- web_prefs->viewport_meta_zero_values_quirk = support_quirks; |
- web_prefs->clobber_user_agent_initial_scale_quirk = support_quirks; |
- web_prefs->ignore_main_frame_overflow_hidden_quirk = support_quirks; |
- web_prefs->report_screen_size_in_physical_pixels_quirk = support_quirks; |
- |
- web_prefs->resue_global_for_unowned_main_frame = |
- Java_AwSettings_getAllowEmptyDocumentPersistenceLocked(env, obj); |
- |
- web_prefs->password_echo_enabled = |
- Java_AwSettings_getPasswordEchoEnabledLocked(env, obj); |
- web_prefs->spatial_navigation_enabled = |
- Java_AwSettings_getSpatialNavigationLocked(env, obj); |
- |
- bool enable_supported_hardware_accelerated_features = |
- Java_AwSettings_getEnableSupportedHardwareAcceleratedFeaturesLocked( |
- env, obj); |
- |
- bool accelerated_2d_canvas_enabled_by_switch = |
- web_prefs->accelerated_2d_canvas_enabled; |
- web_prefs->accelerated_2d_canvas_enabled = true; |
- if (!accelerated_2d_canvas_enabled_by_switch || |
- !enable_supported_hardware_accelerated_features) { |
- // Any canvas smaller than this will fallback to software. Abusing this |
- // slightly to turn canvas off without changing |
- // accelerated_2d_canvas_enabled, which also affects compositing mode. |
- // Using 100M instead of max int to avoid overflows. |
- web_prefs->minimum_accelerated_2d_canvas_size = 100 * 1000 * 1000; |
- } |
- web_prefs->experimental_webgl_enabled = |
- web_prefs->experimental_webgl_enabled && |
- enable_supported_hardware_accelerated_features; |
- |
- // If strict mixed content checking is enabled then running should not be |
- // allowed. |
- DCHECK(!Java_AwSettings_getUseStricMixedContentCheckingLocked(env, obj) || |
- !Java_AwSettings_getAllowRunningInsecureContentLocked(env, obj)); |
- web_prefs->allow_running_insecure_content = |
- Java_AwSettings_getAllowRunningInsecureContentLocked(env, obj); |
- web_prefs->strict_mixed_content_checking = |
- Java_AwSettings_getUseStricMixedContentCheckingLocked(env, obj); |
- |
- web_prefs->fullscreen_supported = |
- Java_AwSettings_getFullscreenSupportedLocked(env, obj); |
- web_prefs->record_whole_document = |
- Java_AwSettings_getRecordFullDocument(env, obj); |
- |
- // TODO(jww): This should be removed once sufficient warning has been given of |
- // possible API breakage because of disabling insecure use of geolocation. |
- web_prefs->allow_geolocation_on_insecure_origins = |
- Java_AwSettings_getAllowGeolocationOnInsecureOrigins(env, obj); |
- |
- web_prefs->do_not_update_selection_on_mutating_selection_range = |
- Java_AwSettings_getDoNotUpdateSelectionOnMutatingSelectionRange(env, obj); |
- |
- // Keep spellcheck disabled on html elements unless the spellcheck="true" |
- // attribute is explicitly specified. This "opt-in" behavior is for backward |
- // consistency in apps that use WebView (see crbug.com/652314). |
- web_prefs->spellcheck_enabled_by_default = false; |
-} |
- |
-static jlong Init(JNIEnv* env, |
- const JavaParamRef<jobject>& obj, |
- const JavaParamRef<jobject>& web_contents) { |
- content::WebContents* contents = content::WebContents::FromJavaWebContents( |
- web_contents); |
- AwSettings* settings = new AwSettings(env, obj, contents); |
- return reinterpret_cast<intptr_t>(settings); |
-} |
- |
-static ScopedJavaLocalRef<jstring> GetDefaultUserAgent( |
- JNIEnv* env, |
- const JavaParamRef<jclass>& clazz) { |
- return base::android::ConvertUTF8ToJavaString(env, GetUserAgent()); |
-} |
- |
-bool RegisterAwSettings(JNIEnv* env) { |
- return RegisterNativesImpl(env); |
-} |
- |
-} // namespace android_webview |