summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwSettings.java199
-rw-r--r--android_webview/native/aw_settings.cc262
-rw-r--r--android_webview/native/aw_settings.h18
3 files changed, 244 insertions, 235 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
index cd8c484..2cbaf53 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -132,7 +132,7 @@ public class AwSettings {
switch (msg.what) {
case UPDATE_WEBKIT_PREFERENCES:
synchronized (mAwSettingsLock) {
- updateWebkitPreferencesOnUiThread();
+ updateWebkitPreferencesOnUiThreadLocked();
mIsUpdateWebkitPrefsMessagePending = false;
mAwSettingsLock.notifyAll();
}
@@ -146,7 +146,7 @@ public class AwSettings {
assert Thread.holdsLock(mAwSettingsLock);
if (mNativeAwSettings == 0) return;
if (Looper.myLooper() == mHandler.getLooper()) {
- updateWebkitPreferencesOnUiThread();
+ updateWebkitPreferencesOnUiThreadLocked();
} else {
// We're being called on a background thread, so post a message.
if (mIsUpdateWebkitPrefsMessagePending) {
@@ -175,8 +175,6 @@ public class AwSettings {
android.Manifest.permission.INTERNET,
Process.myPid(),
Process.myUid()) != PackageManager.PERMISSION_GRANTED;
- mNativeAwSettings = nativeInit(nativeWebContents);
- assert mNativeAwSettings != 0;
mContentViewCore = contentViewCore;
mContentViewCore.updateMultiTouchZoomSupport(supportsMultiTouchZoomLocked());
@@ -187,7 +185,11 @@ public class AwSettings {
mEventHandler = new EventHandler();
mUserAgent = LazyDefaultUserAgent.sInstance;
- nativeUpdateEverything(mNativeAwSettings);
+
+ synchronized (mAwSettingsLock) {
+ mNativeAwSettings = nativeInit(nativeWebContents);
+ }
+ assert mNativeAwSettings != 0;
}
public void destroy() {
@@ -201,9 +203,14 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private double getDIPScaleLocked() {
+ return mDIPScale;
+ }
+
public void setWebContents(int nativeWebContents) {
synchronized (mAwSettingsLock) {
- nativeSetWebContents(mNativeAwSettings, nativeWebContents);
+ nativeSetWebContentsLocked(mNativeAwSettings, nativeWebContents);
}
}
@@ -301,11 +308,6 @@ public class AwSettings {
}
}
- @Deprecated
- public void setEnableFixedLayoutMode(final boolean enable) {
- // No-op. Will be removed.
- }
-
/**
* See {@link android.webkit.WebView#setInitialScale}.
*/
@@ -317,7 +319,7 @@ public class AwSettings {
@Override
public void run() {
if (mNativeAwSettings != 0) {
- nativeUpdateInitialPageScale(mNativeAwSettings);
+ nativeUpdateInitialPageScaleLocked(mNativeAwSettings);
}
}
});
@@ -325,6 +327,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private float getInitialPageScalePercentLocked() {
+ return mInitialPageScalePercent;
+ }
+
/**
* See {@link android.webkit.WebSettings#setNeedInitialFocus}.
*/
@@ -378,7 +385,7 @@ public class AwSettings {
@Override
public void run() {
if (mNativeAwSettings != 0) {
- nativeUpdateUserAgent(mNativeAwSettings);
+ nativeUpdateUserAgentLocked(mNativeAwSettings);
}
}
});
@@ -395,6 +402,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private String getUserAgentLocked() {
+ return mUserAgent;
+ }
+
/**
* See {@link android.webkit.WebSettings#setLoadWithOverviewMode}.
*/
@@ -424,6 +436,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getLoadWithOverviewModeLocked() {
+ return mLoadWithOverviewMode;
+ }
+
/**
* See {@link android.webkit.WebSettings#setTextZoom}.
*/
@@ -445,6 +462,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private int getTextSizePercentLocked() {
+ return mTextSizePercent;
+ }
+
/**
* See {@link android.webkit.WebSettings#setStandardFontFamily}.
*/
@@ -466,6 +488,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private String getStandardFontFamilyLocked() {
+ return mStandardFontFamily;
+ }
+
/**
* See {@link android.webkit.WebSettings#setFixedFontFamily}.
*/
@@ -487,6 +514,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private String getFixedFontFamilyLocked() {
+ return mFixedFontFamily;
+ }
+
/**
* See {@link android.webkit.WebSettings#setSansSerifFontFamily}.
*/
@@ -508,6 +540,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private String getSansSerifFontFamilyLocked() {
+ return mSansSerifFontFamily;
+ }
+
/**
* See {@link android.webkit.WebSettings#setSerifFontFamily}.
*/
@@ -529,6 +566,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private String getSerifFontFamilyLocked() {
+ return mSerifFontFamily;
+ }
+
/**
* See {@link android.webkit.WebSettings#setCursiveFontFamily}.
*/
@@ -550,6 +592,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private String getCursiveFontFamilyLocked() {
+ return mCursiveFontFamily;
+ }
+
/**
* See {@link android.webkit.WebSettings#setFantasyFontFamily}.
*/
@@ -571,6 +618,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private String getFantasyFontFamilyLocked() {
+ return mFantasyFontFamily;
+ }
+
/**
* See {@link android.webkit.WebSettings#setMinimumFontSize}.
*/
@@ -593,6 +645,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private int getMinimumFontSizeLocked() {
+ return mMinimumFontSize;
+ }
+
/**
* See {@link android.webkit.WebSettings#setMinimumLogicalFontSize}.
*/
@@ -615,6 +672,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private int getMinimumLogicalFontSizeLocked() {
+ return mMinimumLogicalFontSize;
+ }
+
/**
* See {@link android.webkit.WebSettings#setDefaultFontSize}.
*/
@@ -637,6 +699,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private int getDefaultFontSizeLocked() {
+ return mDefaultFontSize;
+ }
+
/**
* See {@link android.webkit.WebSettings#setDefaultFixedFontSize}.
*/
@@ -659,6 +726,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private int getDefaultFixedFontSizeLocked() {
+ return mDefaultFixedFontSize;
+ }
+
/**
* See {@link android.webkit.WebSettings#setJavaScriptEnabled}.
*/
@@ -716,6 +788,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getLoadsImagesAutomaticallyLocked() {
+ return mLoadsImagesAutomatically;
+ }
+
/**
* See {@link android.webkit.WebSettings#setImagesEnabled}.
*/
@@ -737,6 +814,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getImagesEnabledLocked() {
+ return mImagesEnabled;
+ }
+
/**
* See {@link android.webkit.WebSettings#getJavaScriptEnabled}.
*/
@@ -746,6 +828,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getJavaScriptEnabledLocked() {
+ return mJavaScriptEnabled;
+ }
+
/**
* See {@link android.webkit.WebSettings#getAllowUniversalAccessFromFileURLs}.
*/
@@ -755,6 +842,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getAllowUniversalAccessFromFileURLsLocked() {
+ return mAllowUniversalAccessFromFileURLs;
+ }
+
/**
* See {@link android.webkit.WebSettings#getAllowFileAccessFromFileURLs}.
*/
@@ -764,6 +856,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getAllowFileAccessFromFileURLsLocked() {
+ return mAllowFileAccessFromFileURLs;
+ }
+
/**
* See {@link android.webkit.WebSettings#setPluginsEnabled}.
*/
@@ -800,9 +897,7 @@ public class AwSettings {
* @hide
*/
@CalledByNative
- private boolean getPluginsDisabled() {
- // This should only be called from UpdateWebkitPreferences, which is called
- // either from the constructor, or with mAwSettingsLock being held.
+ private boolean getPluginsDisabledLocked() {
return mPluginState == PluginState.OFF;
}
@@ -837,6 +932,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getJavaScriptCanOpenWindowsAutomaticallyLocked() {
+ return mJavaScriptCanOpenWindowsAutomatically;
+ }
+
/**
* See {@link android.webkit.WebSettings#setLayoutAlgorithm}.
*/
@@ -865,7 +965,7 @@ public class AwSettings {
* @hide
*/
@CalledByNative
- private boolean getTextAutosizingEnabled() {
+ private boolean getTextAutosizingEnabledLocked() {
return mLayoutAlgorithm == LayoutAlgorithm.TEXT_AUTOSIZING;
}
@@ -890,6 +990,16 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getSupportMultipleWindowsLocked() {
+ return mSupportMultipleWindows;
+ }
+
+ @CalledByNative
+ private boolean getSupportDeprecatedTargetDensityDPILocked() {
+ return mSupportDeprecatedTargetDensityDPI;
+ }
+
/**
* See {@link android.webkit.WebSettings#setUseWideViewPort}.
*/
@@ -911,6 +1021,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getUseWideViewportLocked() {
+ return mUseWideViewport;
+ }
+
/**
* See {@link android.webkit.WebSettings#setAppCacheEnabled}.
*/
@@ -952,9 +1067,7 @@ public class AwSettings {
* @hide
*/
@CalledByNative
- private boolean getAppCacheEnabled() {
- // This should only be called from UpdateWebkitPreferences, which is called
- // either from the constructor, or with mAwSettingsLock being held.
+ private boolean getAppCacheEnabledLocked() {
if (!mAppCacheEnabled) {
return false;
}
@@ -984,6 +1097,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getDomStorageEnabledLocked() {
+ return mDomStorageEnabled;
+ }
+
/**
* See {@link android.webkit.WebSettings#setDatabaseEnabled}.
*/
@@ -1005,6 +1123,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getDatabaseEnabledLocked() {
+ return mDatabaseEnabled;
+ }
+
/**
* See {@link android.webkit.WebSettings#setDefaultTextEncodingName}.
*/
@@ -1026,6 +1149,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private String getDefaultTextEncodingLocked() {
+ return mDefaultTextEncoding;
+ }
+
/**
* See {@link android.webkit.WebSettings#setMediaPlaybackRequiresUserGesture}.
*/
@@ -1047,6 +1175,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private boolean getMediaPlaybackRequiresUserGestureLocked() {
+ return mMediaPlaybackRequiresUserGesture;
+ }
+
/**
* See {@link android.webkit.WebSettings#setDefaultVideoPosterURL}.
*/
@@ -1069,6 +1202,11 @@ public class AwSettings {
}
}
+ @CalledByNative
+ private String getDefaultVideoPosterURLLocked() {
+ return mDefaultVideoPosterURL;
+ }
+
private void updateMultiTouchZoomSupport(final boolean supportsMultiTouchZoom) {
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
@@ -1163,10 +1301,17 @@ public class AwSettings {
return size;
}
- private void updateWebkitPreferencesOnUiThread() {
+ @CalledByNative
+ private void updateEverything() {
+ synchronized (mAwSettingsLock) {
+ nativeUpdateEverythingLocked(mNativeAwSettings);
+ }
+ }
+
+ private void updateWebkitPreferencesOnUiThreadLocked() {
if (mNativeAwSettings != 0) {
ThreadUtils.assertOnUiThread();
- nativeUpdateWebkitPreferences(mNativeAwSettings);
+ nativeUpdateWebkitPreferencesLocked(mNativeAwSettings);
}
}
@@ -1176,15 +1321,15 @@ public class AwSettings {
private native void nativeResetScrollAndScaleState(int nativeAwSettings);
- private native void nativeSetWebContents(int nativeAwSettings, int nativeWebContents);
+ private native void nativeSetWebContentsLocked(int nativeAwSettings, int nativeWebContents);
- private native void nativeUpdateEverything(int nativeAwSettings);
+ private native void nativeUpdateEverythingLocked(int nativeAwSettings);
- private native void nativeUpdateInitialPageScale(int nativeAwSettings);
+ private native void nativeUpdateInitialPageScaleLocked(int nativeAwSettings);
- private native void nativeUpdateUserAgent(int nativeAwSettings);
+ private native void nativeUpdateUserAgentLocked(int nativeAwSettings);
- private native void nativeUpdateWebkitPreferences(int nativeAwSettings);
+ private native void nativeUpdateWebkitPreferencesLocked(int nativeAwSettings);
private static native String nativeGetDefaultUserAgent();
}
diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc
index 8dd383e..21b9968 100644
--- a/android_webview/native/aw_settings.cc
+++ b/android_webview/native/aw_settings.cc
@@ -18,119 +18,12 @@
#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;
namespace android_webview {
-struct AwSettings::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.
- ScopedJavaLocalRef<jclass> clazz(
- GetClass(env, "org/chromium/android_webview/AwSettings"));
- 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");
- 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");
- dip_scale =
- GetFieldID(env, clazz, "mDIPScale", "D");
- initial_page_scale_percent =
- GetFieldID(env, clazz, "mInitialPageScalePercent", "F");
- }
-
- // 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;
- jfieldID dip_scale;
- jfieldID initial_page_scale_percent;
-};
-
AwSettings::AwSettings(JNIEnv* env, jobject obj)
: aw_settings_(env, obj) {
}
@@ -155,12 +48,13 @@ void AwSettings::ResetScrollAndScaleState(JNIEnv* env, jobject obj) {
rvhe->ResetScrollAndScaleState();
}
-void AwSettings::SetWebContents(JNIEnv* env, jobject obj, jint jweb_contents) {
+void AwSettings::SetWebContentsLocked(
+ JNIEnv* env, jobject obj, jint jweb_contents) {
content::WebContents* web_contents =
reinterpret_cast<content::WebContents*>(jweb_contents);
Observe(web_contents);
- UpdateEverything(env, obj);
+ UpdateEverythingLocked(env, obj);
}
void AwSettings::UpdateEverything() {
@@ -169,25 +63,23 @@ void AwSettings::UpdateEverything() {
ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env);
jobject obj = scoped_obj.obj();
if (!obj) return;
- UpdateEverything(env, obj);
+ // Grab the lock and call UpdateEverythingLocked.
+ Java_AwSettings_updateEverything(env, obj);
}
-void AwSettings::UpdateEverything(JNIEnv* env, jobject obj) {
- UpdateInitialPageScale(env, obj);
- UpdateWebkitPreferences(env, obj);
- UpdateUserAgent(env, obj);
+void AwSettings::UpdateEverythingLocked(JNIEnv* env, jobject obj) {
+ UpdateInitialPageScaleLocked(env, obj);
+ UpdateWebkitPreferencesLocked(env, obj);
+ UpdateUserAgentLocked(env, obj);
ResetScrollAndScaleState(env, obj);
UpdatePreferredSizeMode();
}
-void AwSettings::UpdateUserAgent(JNIEnv* env, jobject obj) {
+void AwSettings::UpdateUserAgentLocked(JNIEnv* env, jobject obj) {
if (!web_contents()) return;
- if (!field_ids_)
- field_ids_.reset(new FieldIds(env));
-
- ScopedJavaLocalRef<jstring> str(env, static_cast<jstring>(
- env->GetObjectField(obj, field_ids_->user_agent)));
+ ScopedJavaLocalRef<jstring> str =
+ Java_AwSettings_getUserAgentLocked(env, obj);
bool ua_overidden = str.obj() != NULL;
if (ua_overidden) {
@@ -201,23 +93,20 @@ void AwSettings::UpdateUserAgent(JNIEnv* env, jobject obj) {
controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden);
}
-void AwSettings::UpdateWebkitPreferences(JNIEnv* env, jobject obj) {
+void AwSettings::UpdateWebkitPreferencesLocked(JNIEnv* env, jobject obj) {
if (!web_contents()) return;
AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt();
if (!render_view_host_ext) return;
- if (!field_ids_)
- field_ids_.reset(new FieldIds(env));
-
content::RenderViewHost* render_view_host =
web_contents()->GetRenderViewHost();
if (!render_view_host) return;
WebPreferences prefs = render_view_host->GetWebkitPreferences();
prefs.text_autosizing_enabled =
- Java_AwSettings_getTextAutosizingEnabled(env, obj);
+ Java_AwSettings_getTextAutosizingEnabledLocked(env, obj);
- int text_size_percent = env->GetIntField(obj, field_ids_->text_size_percent);
+ 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;
@@ -229,126 +118,104 @@ void AwSettings::UpdateWebkitPreferences(JNIEnv* env, jobject obj) {
text_size_percent / 100.0f));
}
- ScopedJavaLocalRef<jstring> str(
- env, static_cast<jstring>(
- env->GetObjectField(obj, field_ids_->standard_fond_family)));
prefs.standard_font_family_map[webkit_glue::kCommonScript] =
- ConvertJavaStringToUTF16(str);
+ ConvertJavaStringToUTF16(
+ Java_AwSettings_getStandardFontFamilyLocked(env, obj));
- str.Reset(
- env, static_cast<jstring>(
- env->GetObjectField(obj, field_ids_->fixed_font_family)));
prefs.fixed_font_family_map[webkit_glue::kCommonScript] =
- ConvertJavaStringToUTF16(str);
+ ConvertJavaStringToUTF16(
+ Java_AwSettings_getFixedFontFamilyLocked(env, obj));
- str.Reset(
- env, static_cast<jstring>(
- env->GetObjectField(obj, field_ids_->sans_serif_font_family)));
prefs.sans_serif_font_family_map[webkit_glue::kCommonScript] =
- ConvertJavaStringToUTF16(str);
+ ConvertJavaStringToUTF16(
+ Java_AwSettings_getSansSerifFontFamilyLocked(env, obj));
- str.Reset(
- env, static_cast<jstring>(
- env->GetObjectField(obj, field_ids_->serif_font_family)));
prefs.serif_font_family_map[webkit_glue::kCommonScript] =
- ConvertJavaStringToUTF16(str);
+ ConvertJavaStringToUTF16(
+ Java_AwSettings_getSerifFontFamilyLocked(env, obj));
- str.Reset(
- env, static_cast<jstring>(
- env->GetObjectField(obj, field_ids_->cursive_font_family)));
prefs.cursive_font_family_map[webkit_glue::kCommonScript] =
- ConvertJavaStringToUTF16(str);
+ ConvertJavaStringToUTF16(
+ Java_AwSettings_getCursiveFontFamilyLocked(env, obj));
- str.Reset(
- env, static_cast<jstring>(
- env->GetObjectField(obj, field_ids_->fantasy_font_family)));
prefs.fantasy_font_family_map[webkit_glue::kCommonScript] =
- ConvertJavaStringToUTF16(str);
+ ConvertJavaStringToUTF16(
+ Java_AwSettings_getFantasyFontFamilyLocked(env, obj));
- str.Reset(
- env, static_cast<jstring>(
- env->GetObjectField(obj, field_ids_->default_text_encoding)));
- prefs.default_encoding = ConvertJavaStringToUTF8(str);
+ prefs.default_encoding = ConvertJavaStringToUTF8(
+ Java_AwSettings_getDefaultTextEncodingLocked(env, obj));
- prefs.minimum_font_size =
- env->GetIntField(obj, field_ids_->minimum_font_size);
+ prefs.minimum_font_size = Java_AwSettings_getMinimumFontSizeLocked(env, obj);
prefs.minimum_logical_font_size =
- env->GetIntField(obj, field_ids_->minimum_logical_font_size);
+ Java_AwSettings_getMinimumLogicalFontSizeLocked(env, obj);
- prefs.default_font_size =
- env->GetIntField(obj, field_ids_->default_font_size);
+ prefs.default_font_size = Java_AwSettings_getDefaultFontSizeLocked(env, obj);
prefs.default_fixed_font_size =
- env->GetIntField(obj, field_ids_->default_fixed_font_size);
+ Java_AwSettings_getDefaultFixedFontSizeLocked(env, obj);
prefs.loads_images_automatically =
- env->GetBooleanField(obj, field_ids_->load_images_automatically);
+ Java_AwSettings_getLoadsImagesAutomaticallyLocked(env, obj);
- prefs.images_enabled =
- env->GetBooleanField(obj, field_ids_->images_enabled);
+ prefs.images_enabled = Java_AwSettings_getImagesEnabledLocked(env, obj);
prefs.javascript_enabled =
- env->GetBooleanField(obj, field_ids_->java_script_enabled);
+ Java_AwSettings_getJavaScriptEnabledLocked(env, obj);
- prefs.allow_universal_access_from_file_urls = env->GetBooleanField(
- obj, field_ids_->allow_universal_access_from_file_urls);
+ prefs.allow_universal_access_from_file_urls =
+ Java_AwSettings_getAllowUniversalAccessFromFileURLsLocked(env, obj);
- prefs.allow_file_access_from_file_urls = env->GetBooleanField(
- obj, field_ids_->allow_file_access_from_file_urls);
+ prefs.allow_file_access_from_file_urls =
+ Java_AwSettings_getAllowFileAccessFromFileURLsLocked(env, obj);
- prefs.javascript_can_open_windows_automatically = env->GetBooleanField(
- obj, field_ids_->java_script_can_open_windows_automatically);
+ prefs.javascript_can_open_windows_automatically =
+ Java_AwSettings_getJavaScriptCanOpenWindowsAutomaticallyLocked(env, obj);
- prefs.supports_multiple_windows = env->GetBooleanField(
- obj, field_ids_->support_multiple_windows);
+ prefs.supports_multiple_windows =
+ Java_AwSettings_getSupportMultipleWindowsLocked(env, obj);
- prefs.plugins_enabled = !Java_AwSettings_getPluginsDisabled(env, obj);
+ prefs.plugins_enabled = !Java_AwSettings_getPluginsDisabledLocked(env, obj);
prefs.application_cache_enabled =
- Java_AwSettings_getAppCacheEnabled(env, obj);
+ Java_AwSettings_getAppCacheEnabledLocked(env, obj);
- prefs.local_storage_enabled = env->GetBooleanField(
- obj, field_ids_->dom_storage_enabled);
+ prefs.local_storage_enabled =
+ Java_AwSettings_getDomStorageEnabledLocked(env, obj);
- prefs.databases_enabled = env->GetBooleanField(
- obj, field_ids_->database_enabled);
+ prefs.databases_enabled = Java_AwSettings_getDatabaseEnabledLocked(env, obj);
prefs.double_tap_to_zoom_enabled = prefs.use_wide_viewport =
- env->GetBooleanField(obj, field_ids_->use_wide_viewport);
+ Java_AwSettings_getUseWideViewportLocked(env, obj);
- prefs.initialize_at_minimum_page_scale = env->GetBooleanField(
- obj, field_ids_->load_with_overview_mode);
+ prefs.initialize_at_minimum_page_scale =
+ Java_AwSettings_getLoadWithOverviewModeLocked(env, obj);
- prefs.user_gesture_required_for_media_playback = env->GetBooleanField(
- obj, field_ids_->media_playback_requires_user_gesture);
+ prefs.user_gesture_required_for_media_playback =
+ Java_AwSettings_getMediaPlaybackRequiresUserGestureLocked(env, obj);
- 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();
+ ScopedJavaLocalRef<jstring> url =
+ Java_AwSettings_getDefaultVideoPosterURLLocked(env, obj);
+ prefs.default_video_poster_url = url.obj() ?
+ GURL(ConvertJavaStringToUTF8(url)) : GURL();
- prefs.support_deprecated_target_density_dpi = env->GetBooleanField(
- obj, field_ids_->support_deprecated_target_density_dpi);
+ prefs.support_deprecated_target_density_dpi =
+ Java_AwSettings_getSupportDeprecatedTargetDensityDPILocked(env, obj);
render_view_host->UpdateWebkitPreferences(prefs);
}
-void AwSettings::UpdateInitialPageScale(JNIEnv* env, jobject obj) {
+void AwSettings::UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj) {
AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt();
if (!rvhe) return;
- if (!field_ids_)
- field_ids_.reset(new FieldIds(env));
-
float initial_page_scale_percent =
- env->GetFloatField(obj, field_ids_->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>(
- env->GetDoubleField(obj, field_ids_->dip_scale));
+ Java_AwSettings_getDIPScaleLocked(env, obj));
rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f);
}
}
@@ -374,11 +241,12 @@ void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) {
UpdateEverything();
}
+// Assumed to be called from the Java object's constructor, thus is "Locked".
static jint Init(JNIEnv* env,
jobject obj,
jint web_contents) {
AwSettings* settings = new AwSettings(env, obj);
- settings->SetWebContents(env, obj, web_contents);
+ settings->SetWebContentsLocked(env, obj, web_contents);
return reinterpret_cast<jint>(settings);
}
diff --git a/android_webview/native/aw_settings.h b/android_webview/native/aw_settings.h
index d24df56..42df647 100644
--- a/android_webview/native/aw_settings.h
+++ b/android_webview/native/aw_settings.h
@@ -21,18 +21,17 @@ class AwSettings : public content::WebContentsObserver {
AwSettings(JNIEnv* env, jobject obj);
virtual ~AwSettings();
- // Called from Java.
+ // Called from Java. Methods with "Locked" suffix require that the settings
+ // access lock is held during their execution.
void Destroy(JNIEnv* env, jobject obj);
void ResetScrollAndScaleState(JNIEnv* env, jobject obj);
- void SetWebContents(JNIEnv* env, jobject obj, jint web_contents);
- void UpdateEverything(JNIEnv* env, jobject obj);
- void UpdateInitialPageScale(JNIEnv* env, jobject obj);
- void UpdateUserAgent(JNIEnv* env, jobject obj);
- void UpdateWebkitPreferences(JNIEnv* env, jobject obj);
+ void SetWebContentsLocked(JNIEnv* env, jobject obj, jint web_contents);
+ void UpdateEverythingLocked(JNIEnv* env, jobject obj);
+ void UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj);
+ void UpdateUserAgentLocked(JNIEnv* env, jobject obj);
+ void UpdateWebkitPreferencesLocked(JNIEnv* env, jobject obj);
private:
- struct FieldIds;
-
AwRenderViewHostExt* GetAwRenderViewHostExt();
void UpdateEverything();
void UpdatePreferredSizeMode();
@@ -41,9 +40,6 @@ class AwSettings : public content::WebContentsObserver {
virtual void RenderViewCreated(
content::RenderViewHost* render_view_host) OVERRIDE;
- // Java field references for accessing the values in the Java object.
- scoped_ptr<FieldIds> field_ids_;
-
JavaObjectWeakGlobalRef aw_settings_;
};