Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2854)

Unified Diff: android_webview/native/aw_settings.cc

Issue 23619089: [Android WebView] Populate WebKit WebPreferences correctly in browser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « android_webview/native/aw_settings.h ('k') | android_webview/native/webview_native.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: android_webview/native/aw_settings.cc
diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc
index 752a937fac9e14a25b82573ffbb8787356908ea4..aeb21b3fa9f5239aa1295ce34f17d9716d5e0a17 100644
--- a/android_webview/native/aw_settings.cc
+++ b/android_webview/native/aw_settings.cc
@@ -8,6 +8,7 @@
#include "android_webview/native/aw_contents.h"
#include "base/android/jni_android.h"
#include "base/android/jni_string.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"
@@ -18,16 +19,38 @@
#include "webkit/common/webpreferences.h"
#include "webkit/glue/webkit_glue.h"
+#include "base/logging.h"
+
using base::android::ConvertJavaStringToUTF16;
using base::android::ConvertUTF8ToJavaString;
using base::android::ScopedJavaLocalRef;
namespace android_webview {
+const void* kAwSettingsUserDataKey = &kAwSettingsUserDataKey;
+
+class AwSettingsUserData : public base::SupportsUserData::Data {
+ public:
+ AwSettingsUserData(AwSettings* ptr) : settings_(ptr) {}
+
+ static AwSettings* GetSettings(content::WebContents* web_contents) {
+ if (!web_contents)
+ return NULL;
+ AwSettingsUserData* data = reinterpret_cast<AwSettingsUserData*>(
+ web_contents->GetUserData(kAwSettingsUserDataKey));
+ return data ? data->settings_ : NULL;
+ }
+
+ private:
+ AwSettings* settings_;
+};
+
AwSettings::AwSettings(JNIEnv* env, jobject obj, jint web_contents)
: WebContentsObserver(
reinterpret_cast<content::WebContents*>(web_contents)),
aw_settings_(env, obj) {
+ reinterpret_cast<content::WebContents*>(web_contents)->
+ SetUserData(kAwSettingsUserDataKey, new AwSettingsUserData(this));
}
AwSettings::~AwSettings() {
joth 2013/09/25 12:04:01 if (web_contents()) web_contents()->SetUserData(
benm (inactive) 2013/09/25 16:00:56 Done.
@@ -43,174 +66,197 @@ void AwSettings::Destroy(JNIEnv* env, jobject obj) {
delete this;
}
-AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() {
- if (!web_contents()) return NULL;
- AwContents* contents = AwContents::FromWebContents(web_contents());
- if (!contents) return NULL;
- return contents->render_view_host_ext();
+AwSettings* AwSettings::FromWebContents(content::WebContents* web_contents) {
+ return AwSettingsUserData::GetSettings(web_contents);
}
-void AwSettings::ResetScrollAndScaleState(JNIEnv* env, jobject obj) {
- AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt();
- if (!rvhe) return;
- rvhe->ResetScrollAndScaleState();
-}
+void AwSettings::PopulateWebPreferences(WebPreferences* web_prefs) {
-void AwSettings::UpdateEverything() {
JNIEnv* env = base::android::AttachCurrentThread();
CHECK(env);
- ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env);
- jobject obj = scoped_obj.obj();
- if (!obj) return;
- // Grab the lock and call UpdateEverythingLocked.
- Java_AwSettings_updateEverything(env, obj);
-}
-
-void AwSettings::UpdateEverythingLocked(JNIEnv* env, jobject obj) {
- UpdateInitialPageScaleLocked(env, obj);
- UpdateWebkitPreferencesLocked(env, obj);
- UpdateUserAgentLocked(env, obj);
- ResetScrollAndScaleState(env, obj);
- UpdateFormDataPreferencesLocked(env, obj);
-}
-
-void AwSettings::UpdateUserAgentLocked(JNIEnv* env, 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, 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;
- WebPreferences prefs = render_view_host->GetWebkitPreferences();
+ ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env);
+ jobject obj = scoped_obj.obj();
+ if (!obj) return;
- prefs.text_autosizing_enabled =
+ web_prefs->text_autosizing_enabled =
Java_AwSettings_getTextAutosizingEnabledLocked(env, obj);
int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj);
- if (prefs.text_autosizing_enabled) {
- prefs.font_scale_factor = text_size_percent / 100.0f;
- 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);
+ 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 level value when Text Autosizer is turned on.
+ render_view_host_ext->SetTextZoomLevel(0);
} else {
- prefs.force_enable_zoom = false;
- render_view_host_ext->SetTextZoomFactor(text_size_percent / 100.0f);
+ web_prefs->force_enable_zoom = false;
+ render_view_host_ext->SetTextZoomLevel(content::ZoomFactorToZoomLevel(
+ text_size_percent / 100.0f));
}
- prefs.standard_font_family_map[webkit_glue::kCommonScript] =
+ web_prefs->standard_font_family_map[webkit_glue::kCommonScript] =
ConvertJavaStringToUTF16(
Java_AwSettings_getStandardFontFamilyLocked(env, obj));
- prefs.fixed_font_family_map[webkit_glue::kCommonScript] =
+ web_prefs->fixed_font_family_map[webkit_glue::kCommonScript] =
ConvertJavaStringToUTF16(
Java_AwSettings_getFixedFontFamilyLocked(env, obj));
- prefs.sans_serif_font_family_map[webkit_glue::kCommonScript] =
+ web_prefs->sans_serif_font_family_map[webkit_glue::kCommonScript] =
ConvertJavaStringToUTF16(
Java_AwSettings_getSansSerifFontFamilyLocked(env, obj));
- prefs.serif_font_family_map[webkit_glue::kCommonScript] =
+ web_prefs->serif_font_family_map[webkit_glue::kCommonScript] =
ConvertJavaStringToUTF16(
Java_AwSettings_getSerifFontFamilyLocked(env, obj));
- prefs.cursive_font_family_map[webkit_glue::kCommonScript] =
+ web_prefs->cursive_font_family_map[webkit_glue::kCommonScript] =
ConvertJavaStringToUTF16(
Java_AwSettings_getCursiveFontFamilyLocked(env, obj));
- prefs.fantasy_font_family_map[webkit_glue::kCommonScript] =
+ web_prefs->fantasy_font_family_map[webkit_glue::kCommonScript] =
ConvertJavaStringToUTF16(
Java_AwSettings_getFantasyFontFamilyLocked(env, obj));
- prefs.default_encoding = ConvertJavaStringToUTF8(
+ web_prefs->default_encoding = ConvertJavaStringToUTF8(
Java_AwSettings_getDefaultTextEncodingLocked(env, obj));
- prefs.minimum_font_size = Java_AwSettings_getMinimumFontSizeLocked(env, obj);
+ web_prefs->minimum_font_size = Java_AwSettings_getMinimumFontSizeLocked(env, obj);
- prefs.minimum_logical_font_size =
+ web_prefs->minimum_logical_font_size =
Java_AwSettings_getMinimumLogicalFontSizeLocked(env, obj);
- prefs.default_font_size = Java_AwSettings_getDefaultFontSizeLocked(env, obj);
+ web_prefs->default_font_size = Java_AwSettings_getDefaultFontSizeLocked(env, obj);
- prefs.default_fixed_font_size =
+ 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
- prefs.loads_images_automatically =
+ web_prefs->loads_images_automatically =
Java_AwSettings_getImagesEnabledLocked(env, obj);
- prefs.images_enabled =
+ web_prefs->images_enabled =
Java_AwSettings_getLoadsImagesAutomaticallyLocked(env, obj);
- prefs.javascript_enabled =
+ web_prefs->javascript_enabled =
Java_AwSettings_getJavaScriptEnabledLocked(env, obj);
+ LOG(ERROR) << "Set javascript pref to " << web_prefs->javascript_enabled;
- prefs.allow_universal_access_from_file_urls =
+ web_prefs->allow_universal_access_from_file_urls =
Java_AwSettings_getAllowUniversalAccessFromFileURLsLocked(env, obj);
- prefs.allow_file_access_from_file_urls =
+ web_prefs->allow_file_access_from_file_urls =
Java_AwSettings_getAllowFileAccessFromFileURLsLocked(env, obj);
- prefs.javascript_can_open_windows_automatically =
+ web_prefs->javascript_can_open_windows_automatically =
Java_AwSettings_getJavaScriptCanOpenWindowsAutomaticallyLocked(env, obj);
- prefs.supports_multiple_windows =
+ web_prefs->supports_multiple_windows =
Java_AwSettings_getSupportMultipleWindowsLocked(env, obj);
- prefs.plugins_enabled = !Java_AwSettings_getPluginsDisabledLocked(env, obj);
+ web_prefs->plugins_enabled = !Java_AwSettings_getPluginsDisabledLocked(env, obj);
- prefs.application_cache_enabled =
+ web_prefs->application_cache_enabled =
Java_AwSettings_getAppCacheEnabledLocked(env, obj);
- prefs.local_storage_enabled =
+ web_prefs->local_storage_enabled =
Java_AwSettings_getDomStorageEnabledLocked(env, obj);
- prefs.databases_enabled = Java_AwSettings_getDatabaseEnabledLocked(env, obj);
+ web_prefs->databases_enabled = Java_AwSettings_getDatabaseEnabledLocked(env, obj);
- prefs.wide_viewport_quirk = true;
- prefs.double_tap_to_zoom_enabled = prefs.use_wide_viewport =
+ web_prefs->wide_viewport_quirk = true;
+ web_prefs->double_tap_to_zoom_enabled = web_prefs->use_wide_viewport =
Java_AwSettings_getUseWideViewportLocked(env, obj);
- prefs.initialize_at_minimum_page_scale =
+ web_prefs->initialize_at_minimum_page_scale =
Java_AwSettings_getLoadWithOverviewModeLocked(env, obj);
- prefs.user_gesture_required_for_media_playback =
+ web_prefs->user_gesture_required_for_media_playback =
Java_AwSettings_getMediaPlaybackRequiresUserGestureLocked(env, obj);
+ // Temporary setting, for K release only
+ // This is a fork from upstream chromium, and should go away once
+ // https://code.google.com/p/chromium/issues/detail?id=297216
+ // is implemented
+ web_prefs->allow_running_insecure_content = true;
+
ScopedJavaLocalRef<jstring> url =
Java_AwSettings_getDefaultVideoPosterURLLocked(env, obj);
- prefs.default_video_poster_url = url.obj() ?
+ web_prefs->default_video_poster_url = url.obj() ?
GURL(ConvertJavaStringToUTF8(url)) : GURL();
bool support_quirks = Java_AwSettings_getSupportLegacyQuirksLocked(env, obj);
- prefs.support_deprecated_target_density_dpi = support_quirks;
- prefs.use_legacy_background_size_shorthand_behavior = support_quirks;
- prefs.viewport_meta_layout_size_quirk = support_quirks;
- prefs.viewport_meta_zero_values_quirk = support_quirks;
+ 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_zero_values_quirk = support_quirks;
+ web_prefs->ignore_main_frame_overflow_hidden_quirk = support_quirks;
- prefs.password_echo_enabled =
+ web_prefs->password_echo_enabled =
Java_AwSettings_getPasswordEchoEnabled(env, obj);
+}
+
+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, 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);
+ jobject obj = scoped_obj.obj();
+ if (!obj) return;
+ // Grab the lock and call UpdateEverythingLocked.
+ Java_AwSettings_updateEverything(env, obj);
+}
+
+void AwSettings::UpdateEverythingLocked(JNIEnv* env, jobject obj) {
+ UpdateInitialPageScaleLocked(env, obj);
+ UpdateWebkitPreferencesLocked(env, obj);
+ UpdateUserAgentLocked(env, obj);
+ ResetScrollAndScaleState(env, obj);
+ UpdateFormDataPreferencesLocked(env, obj);
+}
+
+void AwSettings::UpdateUserAgentLocked(JNIEnv* env, 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, jobject obj) {
+ if (!web_contents()) return;
+
+ content::RenderViewHost* render_view_host =
+ web_contents()->GetRenderViewHost();
+ if (!render_view_host) return;
+ render_view_host->UpdateWebkitPreferences(
+ render_view_host->GetWebkitPreferences());
- render_view_host->UpdateWebkitPreferences(prefs);
}
void AwSettings::UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj) {
« no previous file with comments | « android_webview/native/aw_settings.h ('k') | android_webview/native/webview_native.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698