AwSettings.java revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 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)package org.chromium.android_webview;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochimport android.content.Context;
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.content.pm.PackageManager;
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import android.os.Handler;
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import android.os.Message;
111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)import android.os.Process;
12558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochimport android.provider.Settings;
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import android.util.Log;
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import android.webkit.WebSettings;
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import android.webkit.WebSettings.PluginState;
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import org.chromium.base.CalledByNative;
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.base.JNINamespace;
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)import org.chromium.base.ThreadUtils;
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.base.VisibleForTesting;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Stores Android WebView specific settings that does not need to be synced to WebKit.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use {@link org.chromium.content.browser.ContentSettings} for WebKit settings.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Methods in this class can be called from any thread, including threads created by
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the client of WebView.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@JNINamespace("android_webview")
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class AwSettings {
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // This enum corresponds to WebSettings.LayoutAlgorithm. We use our own to be
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // able to extend it.
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public enum LayoutAlgorithm {
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        NORMAL,
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        SINGLE_COLUMN,
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        NARROW_COLUMNS,
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        TEXT_AUTOSIZING,
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    // These constants must be kept in sync with the Android framework, defined in WebSettimgs.
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    @VisibleForTesting
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0;
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    @VisibleForTesting
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public static final int MIXED_CONTENT_NEVER_ALLOW = 1;
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    @VisibleForTesting
460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2;
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private static final String TAG = "AwSettings";
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // This class must be created on the UI thread. Afterwards, it can be
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // used from any thread. Internally, the class uses a message queue
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // to call native code on the UI thread only.
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    // Values passed in on construction.
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    private final boolean mHasInternetPermission;
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private ZoomSupportChangeListener mZoomChangeListener;
581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private double mDIPScale = 1.0;
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Lock to protect all settings.
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private final Object mAwSettingsLock = new Object();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private LayoutAlgorithm mLayoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private int mTextSizePercent = 100;
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private String mStandardFontFamily = "sans-serif";
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private String mFixedFontFamily = "monospace";
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private String mSansSerifFontFamily = "sans-serif";
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private String mSerifFontFamily = "serif";
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private String mCursiveFontFamily = "cursive";
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private String mFantasyFontFamily = "fantasy";
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private String mDefaultTextEncoding;
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private String mUserAgent;
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private int mMinimumFontSize = 8;
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private int mMinimumLogicalFontSize = 8;
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private int mDefaultFontSize = 16;
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private int mDefaultFixedFontSize = 13;
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mLoadsImagesAutomatically = true;
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mImagesEnabled = true;
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mJavaScriptEnabled = false;
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mAllowUniversalAccessFromFileURLs = false;
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mAllowFileAccessFromFileURLs = false;
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mJavaScriptCanOpenWindowsAutomatically = false;
83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mSupportMultipleWindows = false;
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private PluginState mPluginState = PluginState.OFF;
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mAppCacheEnabled = false;
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mDomStorageEnabled = false;
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mDatabaseEnabled = false;
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mUseWideViewport = false;
896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private boolean mZeroLayoutHeightDisablesViewportQuirk = false;
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private boolean mForceZeroLayoutHeight = false;
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mLoadWithOverviewMode = false;
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private boolean mMediaPlaybackRequiresUserGesture = true;
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private String mDefaultVideoPosterURL;
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private float mInitialPageScalePercent = 0;
951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private boolean mSpatialNavigationEnabled;  // Default depends on device features.
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private boolean mEnableSupportedHardwareAcceleratedFeatures = false;
970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    private int mMixedContentMode = MIXED_CONTENT_NEVER_ALLOW;
985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    private boolean mVideoOverlayForEmbeddedVideoEnabled = false;
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Although this bit is stored on AwSettings it is actually controlled via the CookieManager.
101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    private boolean mAcceptThirdPartyCookies = false;
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    private final boolean mSupportLegacyQuirks;
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
105558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    private final boolean mPasswordEchoEnabled;
106558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Not accessed by the native side.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private boolean mBlockNetworkLoads;  // Default depends on permission of embedding APK.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private boolean mAllowContentUrlAccess = true;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private boolean mAllowFileUrlAccess = true;
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private int mCacheMode = WebSettings.LOAD_DEFAULT;
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private boolean mShouldFocusFirstNode = true;
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private boolean mGeolocationEnabled = true;
11490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    private boolean mAutoCompleteEnabled = true;
1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private boolean mFullscreenSupported = false;
116b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean mSupportZoom = true;
117b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean mBuiltInZoomControls = false;
118b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean mDisplayZoomControls = true;
1197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    static class LazyDefaultUserAgent{
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // Lazy Holder pattern
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        private static final String sInstance = nativeGetDefaultUserAgent();
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Protects access to settings global fields.
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private static final Object sGlobalContentSettingsLock = new Object();
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // For compatibility with the legacy WebView, we can only enable AppCache when the path is
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // provided. However, we don't use the path, so we just check if we have received it from the
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // client.
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private static boolean sAppCachePathIsSet = false;
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    // The native side of this object. It's lifetime is bounded by the WebContent it is attached to.
133a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private long mNativeAwSettings = 0;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Custom handler that queues messages to call native code on the UI thread.
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private final EventHandler mEventHandler;
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private static final int MINIMUM_FONT_SIZE = 1;
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private static final int MAXIMUM_FONT_SIZE = 72;
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Class to handle messages to be processed on the UI thread.
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private class EventHandler {
1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        // Message id for running a Runnable with mAwSettingsLock held.
1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        private static final int RUN_RUNNABLE_BLOCKING = 0;
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // Actual UI thread handler
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        private Handler mHandler;
1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        // Synchronization flag.
1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        private boolean mSynchronizationPending = false;
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        EventHandler() {
1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        }
1521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        void bindUiThread() {
1541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            if (mHandler != null) return;
1551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            mHandler = new Handler(ThreadUtils.getUiThreadLooper()) {
156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                @Override
157a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                public void handleMessage(Message msg) {
158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                    switch (msg.what) {
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        case RUN_RUNNABLE_BLOCKING:
160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            synchronized (mAwSettingsLock) {
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                if (mNativeAwSettings != 0) {
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                    ((Runnable) msg.obj).run();
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                }
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                mSynchronizationPending = false;
165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                mAwSettingsLock.notifyAll();
166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            }
167a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                            break;
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    }
169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                }
170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            };
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        void runOnUiThreadBlockingAndLocked(Runnable r) {
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            assert Thread.holdsLock(mAwSettingsLock);
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (mHandler == null) return;
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (ThreadUtils.runningOnUiThread()) {
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                r.run();
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            } else {
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                assert !mSynchronizationPending;
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mSynchronizationPending = true;
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mHandler.sendMessage(Message.obtain(null, RUN_RUNNABLE_BLOCKING, r));
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                try {
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    while (mSynchronizationPending) {
1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        mAwSettingsLock.wait();
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    }
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                } catch (InterruptedException e) {
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    Log.e(TAG, "Interrupted waiting a Runnable to complete", e);
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    mSynchronizationPending = false;
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                }
1901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            }
1911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        }
1921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        void maybePostOnUiThread(Runnable r) {
1941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            if (mHandler != null) {
1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                mHandler.post(r);
1961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            }
1971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        }
1981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        void updateWebkitPreferencesLocked() {
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            runOnUiThreadBlockingAndLocked(new Runnable() {
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                @Override
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                public void run() {
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    updateWebkitPreferencesOnUiThreadLocked();
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                }
2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            });
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    interface ZoomSupportChangeListener {
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        public void onGestureZoomSupportChanged(
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                boolean supportsDoubleTapZoom, boolean supportsMultiTouchZoom);
2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    }
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    public AwSettings(Context context,
2157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            boolean isAccessFromFileURLsGrantedByDefault,
2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            boolean supportsLegacyQuirks) {
2171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)       boolean hasInternetPermission = context.checkPermission(
2181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    android.Manifest.permission.INTERNET,
2191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    Process.myPid(),
2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    Process.myUid()) == PackageManager.PERMISSION_GRANTED;
2217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        synchronized (mAwSettingsLock) {
2227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            mHasInternetPermission = hasInternetPermission;
2237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            mBlockNetworkLoads = !hasInternetPermission;
2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            mEventHandler = new EventHandler();
2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            if (isAccessFromFileURLsGrantedByDefault) {
2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                mAllowUniversalAccessFromFileURLs = true;
2277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                mAllowFileAccessFromFileURLs = true;
2287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            }
229b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            mDefaultTextEncoding = AwResource.getDefaultTextEncoding();
2317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            mUserAgent = LazyDefaultUserAgent.sInstance;
2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            // Best-guess a sensible initial value based on the features supported on the device.
2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            mSpatialNavigationEnabled = !context.getPackageManager().hasSystemFeature(
2351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    PackageManager.FEATURE_TOUCHSCREEN);
236558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
237558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch            // Respect the system setting for password echoing.
238558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch            mPasswordEchoEnabled = Settings.System.getInt(context.getContentResolver(),
239558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                    Settings.System.TEXT_SHOW_PASSWORD, 1) == 1;
240a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            // By default, scale the text size by the system font scale factor. Embedders
242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            // may override this by invoking setTextZoom().
243a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            mTextSizePercent *= context.getResources().getConfiguration().fontScale;
2443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
24558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            mSupportLegacyQuirks = supportsLegacyQuirks;
246b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
2477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        // Defer initializing the native side until a native WebContents instance is set.
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    @CalledByNative
251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private void nativeAwSettingsGone(long nativeAwSettings) {
2527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        assert mNativeAwSettings != 0 && mNativeAwSettings == nativeAwSettings;
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mNativeAwSettings = 0;
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
256b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
257b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private double getDIPScaleLocked() {
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
259b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDIPScale;
260b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
261b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
2621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    void setDIPScale(double dipScale) {
2631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        synchronized (mAwSettingsLock) {
2641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            mDIPScale = dipScale;
2651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            // TODO(joth): This should also be synced over to native side, but right now
2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            // the setDIPScale call is always followed by a setWebContents() which covers this.
2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        }
2681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
2691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    void setZoomListener(ZoomSupportChangeListener zoomChangeListener) {
2711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        synchronized (mAwSettingsLock) {
2721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            mZoomChangeListener = zoomChangeListener;
2731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        }
2741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
2751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
276effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    void setWebContents(long nativeWebContents) {
277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            if (mNativeAwSettings != 0) {
2797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                nativeDestroy(mNativeAwSettings);
2807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                assert mNativeAwSettings == 0;  // nativeAwSettingsGone should have been called.
2817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            }
2827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            if (nativeWebContents != 0) {
2831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                mEventHandler.bindUiThread();
2847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                mNativeAwSettings = nativeInit(nativeWebContents);
28546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                updateEverythingLocked();
2867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            }
287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    private void updateEverythingLocked() {
29146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
29246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        assert mNativeAwSettings != 0;
29346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        nativeUpdateEverythingLocked(mNativeAwSettings);
29446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        onGestureZoomSupportChanged(
29546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                supportsDoubleTapZoomLocked(), supportsMultiTouchZoomLocked());
29646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    }
29746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#setBlockNetworkLoads}.
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void setBlockNetworkLoads(boolean flag) {
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            if (!flag && !mHasInternetPermission) {
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                throw new SecurityException("Permission denied - " +
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        "application missing INTERNET permission");
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            mBlockNetworkLoads = flag;
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#getBlockNetworkLoads}.
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public boolean getBlockNetworkLoads() {
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mBlockNetworkLoads;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * Enable/disable third party cookies for an AwContents
322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * @param accept true if we should accept third party cookies
323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     */
324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    public void setAcceptThirdPartyCookies(boolean accept) {
325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        synchronized (mAwSettingsLock) {
326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            if (mAcceptThirdPartyCookies != accept) {
327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                mAcceptThirdPartyCookies = accept;
328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            }
329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        }
330cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
332cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    /**
333cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * Return whether third party cookies are enabled for an AwContents
334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * @return true if accept third party cookies
335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     */
336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    public boolean getAcceptThirdPartyCookies() {
337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        synchronized (mAwSettingsLock) {
338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            return mAcceptThirdPartyCookies;
339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        }
340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    /**
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#setAllowFileAccess}.
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void setAllowFileAccess(boolean allow) {
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (mAllowFileUrlAccess != allow) {
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                mAllowFileUrlAccess = allow;
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#getAllowFileAccess}.
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public boolean getAllowFileAccess() {
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mAllowFileUrlAccess;
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#setAllowContentAccess}.
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void setAllowContentAccess(boolean allow) {
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (mAllowContentUrlAccess != allow) {
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                mAllowContentUrlAccess = allow;
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#getAllowContentAccess}.
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public boolean getAllowContentAccess() {
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mAllowContentUrlAccess;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setCacheMode}.
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void setCacheMode(int mode) {
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            if (mCacheMode != mode) {
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                mCacheMode = mode;
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getCacheMode}.
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public int getCacheMode() {
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            return mCacheMode;
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setNeedInitialFocus}.
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void setShouldFocusFirstNode(boolean flag) {
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mShouldFocusFirstNode = flag;
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebView#setInitialScale}.
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void setInitialPageScale(final float scaleInPercent) {
415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mInitialPageScalePercent != scaleInPercent) {
417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mInitialPageScalePercent = scaleInPercent;
4185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    @Override
420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    public void run() {
421010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
422010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeUpdateInitialPageScaleLocked(mNativeAwSettings);
423010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    }
425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                });
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
430b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
431b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private float getInitialPageScalePercentLocked() {
4325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
433b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mInitialPageScalePercent;
434b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
435b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
4361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    void setSpatialNavigationEnabled(boolean enable) {
4371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        synchronized (mAwSettingsLock) {
4381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            if (mSpatialNavigationEnabled != enable) {
4391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                mSpatialNavigationEnabled = enable;
4401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
4411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            }
4421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        }
4431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
4441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
4451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    @CalledByNative
4461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private boolean getSpatialNavigationLocked() {
4475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
4481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        return mSpatialNavigationEnabled;
4491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
4501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
4515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    void setEnableSupportedHardwareAcceleratedFeatures(boolean enable) {
4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (mEnableSupportedHardwareAcceleratedFeatures != enable) {
4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEnableSupportedHardwareAcceleratedFeatures = enable;
4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            }
4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
4585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
4595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    @CalledByNative
4615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private boolean getEnableSupportedHardwareAcceleratedFeaturesLocked() {
4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
4635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return mEnableSupportedHardwareAcceleratedFeatures;
4645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
4655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void setFullscreenSupported(boolean supported) {
4676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
4686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            if (mFullscreenSupported != supported) {
4696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mFullscreenSupported = supported;
4706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
4716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            }
4726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
4736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
4746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    @CalledByNative
4766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private boolean getFullscreenSupportedLocked() {
4776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
4786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return mFullscreenSupported;
4796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
4806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setNeedInitialFocus}.
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public boolean shouldFocusFirstNode() {
485a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            return mShouldFocusFirstNode;
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setGeolocationEnabled}.
4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void setGeolocationEnabled(boolean flag) {
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            if (mGeolocationEnabled != flag) {
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                mGeolocationEnabled = flag;
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @return Returns if geolocation is currently enabled.
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    boolean getGeolocationEnabled() {
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            return mGeolocationEnabled;
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
51190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSaveFormData}.
51290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)     */
51390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    public void setSaveFormData(final boolean enable) {
51490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
51590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)            if (mAutoCompleteEnabled != enable) {
51690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                mAutoCompleteEnabled = enable;
5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
51890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                    @Override
51990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                    public void run() {
520010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
521010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeUpdateFormDataPreferencesLocked(mNativeAwSettings);
522010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
52390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                    }
52490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                });
52590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)            }
52690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        }
52790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
52890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
52990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    /**
53090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getSaveFormData}.
53190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)     */
53290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    public boolean getSaveFormData() {
53390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
53490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)            return getSaveFormDataLocked();
53590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        }
53690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
53790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
53890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    @CalledByNative
53990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    private boolean getSaveFormDataLocked() {
5405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
54190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        return mAutoCompleteEnabled;
54290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
54390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
54490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    /**
545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * @returns the default User-Agent used by each ContentViewCore instance, i.e. unless
546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * overridden by {@link #setUserAgentString()}
547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public static String getDefaultUserAgent() {
549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return LazyDefaultUserAgent.sInstance;
550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setUserAgentString}.
554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setUserAgentString(String ua) {
556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            final String oldUserAgent = mUserAgent;
558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (ua == null || ua.length() == 0) {
559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mUserAgent = LazyDefaultUserAgent.sInstance;
560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            } else {
561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mUserAgent = ua;
562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (!oldUserAgent.equals(mUserAgent)) {
5645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    @Override
566c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    public void run() {
567010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
568010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeUpdateUserAgentLocked(mNativeAwSettings);
569010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    }
571c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                });
572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getUserAgentString}.
578c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getUserAgentString() {
580c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
5815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getUserAgentLocked();
582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
585b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
586b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getUserAgentLocked() {
5875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
588b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mUserAgent;
589b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
590b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setLoadWithOverviewMode}.
593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
594c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setLoadWithOverviewMode(boolean overview) {
595c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mLoadWithOverviewMode != overview) {
597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mLoadWithOverviewMode = overview;
5985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    @Override
600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    public void run() {
601010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
602010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            updateWebkitPreferencesOnUiThreadLocked();
603010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeResetScrollAndScaleState(mNativeAwSettings);
604010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    }
606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                });
607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
609c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
612c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getLoadWithOverviewMode}.
613c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getLoadWithOverviewMode() {
615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
6165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getLoadWithOverviewModeLocked();
617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
620b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
621b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getLoadWithOverviewModeLocked() {
6225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
623b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mLoadWithOverviewMode;
624b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
625b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
627c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setTextZoom}.
628c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
629c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setTextZoom(final int textZoom) {
630c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
631a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            if (mTextSizePercent != textZoom) {
632a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                mTextSizePercent = textZoom;
633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getTextZoom}.
640c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
641c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getTextZoom() {
642c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
6435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getTextSizePercentLocked();
644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
646c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
647b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
648b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getTextSizePercentLocked() {
6495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
650b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mTextSizePercent;
651b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
652b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
653c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
654c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setStandardFontFamily}.
655c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
656c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setStandardFontFamily(String font) {
657c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
658c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mStandardFontFamily.equals(font)) {
659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mStandardFontFamily = font;
660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
665c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getStandardFontFamily}.
667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getStandardFontFamily() {
669c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
6705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getStandardFontFamilyLocked();
671c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
673c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
674b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
675b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getStandardFontFamilyLocked() {
6765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
677b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mStandardFontFamily;
678b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
679b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setFixedFontFamily}.
682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setFixedFontFamily(String font) {
684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mFixedFontFamily.equals(font)) {
686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mFixedFontFamily = font;
687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
688c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
689c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
691c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
692c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
693c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getFixedFontFamily}.
694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getFixedFontFamily() {
696c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
6975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getFixedFontFamilyLocked();
698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
699c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
700c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
701b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
702b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getFixedFontFamilyLocked() {
7035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
704b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mFixedFontFamily;
705b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
706b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSansSerifFontFamily}.
709c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
710c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setSansSerifFontFamily(String font) {
711c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
712c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mSansSerifFontFamily.equals(font)) {
713c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mSansSerifFontFamily = font;
714c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
715c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
716c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
717c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
718c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
719c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
720c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getSansSerifFontFamily}.
721c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
722c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getSansSerifFontFamily() {
723c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
7245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getSansSerifFontFamilyLocked();
725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
726c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
727c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
728b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
729b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getSansSerifFontFamilyLocked() {
7305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
731b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mSansSerifFontFamily;
732b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
733b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
734c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSerifFontFamily}.
736c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
737c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setSerifFontFamily(String font) {
738c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
739c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mSerifFontFamily.equals(font)) {
740c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mSerifFontFamily = font;
741c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
742c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
743c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
744c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
745c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
746c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getSerifFontFamily}.
748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
749c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getSerifFontFamily() {
750c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
7515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getSerifFontFamilyLocked();
752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
755b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
756b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getSerifFontFamilyLocked() {
7575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
758b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mSerifFontFamily;
759b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
760b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
761c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setCursiveFontFamily}.
763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
764c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setCursiveFontFamily(String font) {
765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mCursiveFontFamily.equals(font)) {
767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mCursiveFontFamily = font;
768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
770c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
772c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
773c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
774c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getCursiveFontFamily}.
775c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
776c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getCursiveFontFamily() {
777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
7785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getCursiveFontFamilyLocked();
779c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
780c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
781c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
782b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
783b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getCursiveFontFamilyLocked() {
7845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
785b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mCursiveFontFamily;
786b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
787b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
788c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
789c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setFantasyFontFamily}.
790c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
791c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setFantasyFontFamily(String font) {
792c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
793c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mFantasyFontFamily.equals(font)) {
794c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mFantasyFontFamily = font;
795c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
796c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
797c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
798c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
800c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
801c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getFantasyFontFamily}.
802c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getFantasyFontFamily() {
804c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
8055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getFantasyFontFamilyLocked();
806c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
807c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
808c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
809b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
810b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getFantasyFontFamilyLocked() {
8115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
812b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mFantasyFontFamily;
813b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
814b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setMinimumFontSize}.
817c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
818c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setMinimumFontSize(int size) {
819c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
820c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            size = clipFontSize(size);
821c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mMinimumFontSize != size) {
822c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mMinimumFontSize = size;
823c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
824c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
825c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
827c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
829c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getMinimumFontSize}.
830c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
831c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getMinimumFontSize() {
832c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
8335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getMinimumFontSizeLocked();
834c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
835c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
836c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
837b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
838b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getMinimumFontSizeLocked() {
8395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
840b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mMinimumFontSize;
841b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
842b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
843c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
844c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setMinimumLogicalFontSize}.
845c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
846c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setMinimumLogicalFontSize(int size) {
847c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
848c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            size = clipFontSize(size);
849c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mMinimumLogicalFontSize != size) {
850c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mMinimumLogicalFontSize = size;
851c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
852c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
853c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
854c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
855c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
856c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
857c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getMinimumLogicalFontSize}.
858c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
859c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getMinimumLogicalFontSize() {
860c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
8615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getMinimumLogicalFontSizeLocked();
862c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
863c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
864c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
865b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
866b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getMinimumLogicalFontSizeLocked() {
8675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
868b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mMinimumLogicalFontSize;
869b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
870b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
871c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
872c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDefaultFontSize}.
873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
874c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDefaultFontSize(int size) {
875c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
876c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            size = clipFontSize(size);
877c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDefaultFontSize != size) {
878c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDefaultFontSize = size;
879c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
880c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
881c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
882c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
883c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
884c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
885c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDefaultFontSize}.
886c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
887c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getDefaultFontSize() {
888c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
8895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getDefaultFontSizeLocked();
890c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
891c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
892c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
893b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
894b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getDefaultFontSizeLocked() {
8955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
896b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDefaultFontSize;
897b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
898b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
899c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
900c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDefaultFixedFontSize}.
901c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
902c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDefaultFixedFontSize(int size) {
903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
904c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            size = clipFontSize(size);
905c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDefaultFixedFontSize != size) {
906c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDefaultFixedFontSize = size;
907c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
909c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
910c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
911c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
912c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
913c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDefaultFixedFontSize}.
914c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
915c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getDefaultFixedFontSize() {
916c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
9175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getDefaultFixedFontSizeLocked();
918c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
919c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
920c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
921b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
922b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getDefaultFixedFontSizeLocked() {
9235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
924b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDefaultFixedFontSize;
925b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
926b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
927c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setJavaScriptEnabled}.
929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setJavaScriptEnabled(boolean flag) {
931c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mJavaScriptEnabled != flag) {
933c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mJavaScriptEnabled = flag;
934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
936c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
937c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
938c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
939c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setAllowUniversalAccessFromFileURLs}.
941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
942c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setAllowUniversalAccessFromFileURLs(boolean flag) {
943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
944c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mAllowUniversalAccessFromFileURLs != flag) {
945c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mAllowUniversalAccessFromFileURLs = flag;
946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
947c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
948c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setAllowFileAccessFromFileURLs}.
953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setAllowFileAccessFromFileURLs(boolean flag) {
955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mAllowFileAccessFromFileURLs != flag) {
957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mAllowFileAccessFromFileURLs = flag;
958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
959c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
960c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
961c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
963c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
964c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setLoadsImagesAutomatically}.
965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setLoadsImagesAutomatically(boolean flag) {
967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mLoadsImagesAutomatically != flag) {
969c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mLoadsImagesAutomatically = flag;
970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
971c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
974c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getLoadsImagesAutomatically}.
977c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getLoadsImagesAutomatically() {
979c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
9805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getLoadsImagesAutomaticallyLocked();
981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
983c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
984b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
985b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getLoadsImagesAutomaticallyLocked() {
9865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
987b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mLoadsImagesAutomatically;
988b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
989b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setImagesEnabled}.
992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setImagesEnabled(boolean flag) {
994c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
995c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mImagesEnabled != flag) {
996c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mImagesEnabled = flag;
997c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1000c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1001c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1003c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getImagesEnabled}.
1004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getImagesEnabled() {
1006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mImagesEnabled;
1008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1010c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1011b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1012b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getImagesEnabledLocked() {
10135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1014b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mImagesEnabled;
1015b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1016b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getJavaScriptEnabled}.
1019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getJavaScriptEnabled() {
1021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mJavaScriptEnabled;
1023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1025c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1026b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1027b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getJavaScriptEnabledLocked() {
10285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1029b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mJavaScriptEnabled;
1030b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1031b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getAllowUniversalAccessFromFileURLs}.
1034c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getAllowUniversalAccessFromFileURLs() {
1036c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
10375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getAllowUniversalAccessFromFileURLsLocked();
1038c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1039c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1040c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1041b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1042b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getAllowUniversalAccessFromFileURLsLocked() {
10435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1044b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mAllowUniversalAccessFromFileURLs;
1045b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1046b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1048c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getAllowFileAccessFromFileURLs}.
1049c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1050c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getAllowFileAccessFromFileURLs() {
1051c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
10525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getAllowFileAccessFromFileURLsLocked();
1053c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1054c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1055c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1056b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1057b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getAllowFileAccessFromFileURLsLocked() {
10585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1059b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mAllowFileAccessFromFileURLs;
1060b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1061b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1062c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1063c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setPluginsEnabled}.
1064c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1065c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setPluginsEnabled(boolean flag) {
1066c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        setPluginState(flag ? PluginState.ON : PluginState.OFF);
1067c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1068c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1069c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1070c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setPluginState}.
1071c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1072c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setPluginState(PluginState state) {
1073c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1074c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mPluginState != state) {
1075c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mPluginState = state;
1076c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1077c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1078c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1079c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1080c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1081c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1082c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getPluginsEnabled}.
1083c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1084c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getPluginsEnabled() {
1085c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1086c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mPluginState == PluginState.ON;
1087c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1088c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1089c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1090c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1091c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * Return true if plugins are disabled.
1092c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * @return True if plugins are disabled.
1093c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1094c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    @CalledByNative
1095b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getPluginsDisabledLocked() {
10965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1097c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return mPluginState == PluginState.OFF;
1098c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1099c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getPluginState}.
1102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public PluginState getPluginState() {
1104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mPluginState;
1106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setJavaScriptCanOpenWindowsAutomatically}.
1112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setJavaScriptCanOpenWindowsAutomatically(boolean flag) {
1114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mJavaScriptCanOpenWindowsAutomatically != flag) {
1116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mJavaScriptCanOpenWindowsAutomatically = flag;
1117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getJavaScriptCanOpenWindowsAutomatically}.
1124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getJavaScriptCanOpenWindowsAutomatically() {
1126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
11275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getJavaScriptCanOpenWindowsAutomaticallyLocked();
1128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1131b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1132b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getJavaScriptCanOpenWindowsAutomaticallyLocked() {
11335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1134b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mJavaScriptCanOpenWindowsAutomatically;
1135b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1136b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setLayoutAlgorithm}.
1139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setLayoutAlgorithm(LayoutAlgorithm l) {
1141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mLayoutAlgorithm != l) {
1143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mLayoutAlgorithm = l;
1144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getLayoutAlgorithm}.
1151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public LayoutAlgorithm getLayoutAlgorithm() {
1153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mLayoutAlgorithm;
1155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * Gets whether Text Auto-sizing layout algorithm is enabled.
1160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     *
1161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * @return true if Text Auto-sizing layout algorithm is enabled
1162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    @CalledByNative
1164b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getTextAutosizingEnabledLocked() {
11655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return mLayoutAlgorithm == LayoutAlgorithm.TEXT_AUTOSIZING;
1167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSupportMultipleWindows}.
1171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setSupportMultipleWindows(boolean support) {
1173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mSupportMultipleWindows != support) {
1175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mSupportMultipleWindows = support;
1176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#supportMultipleWindows}.
1183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean supportMultipleWindows() {
1185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mSupportMultipleWindows;
1187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1191b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getSupportMultipleWindowsLocked() {
11925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1193b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mSupportMultipleWindows;
1194b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1195b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1196b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
119758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    private boolean getSupportLegacyQuirksLocked() {
11985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
119958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        return mSupportLegacyQuirks;
1200b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1201b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setUseWideViewPort}.
1204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setUseWideViewPort(boolean use) {
1206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mUseWideViewport != use) {
1208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mUseWideViewport = use;
12095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                onGestureZoomSupportChanged(
12105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        supportsDoubleTapZoomLocked(), supportsMultiTouchZoomLocked());
1211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getUseWideViewPort}.
1218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getUseWideViewPort() {
1220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
12215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getUseWideViewportLocked();
1222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1225b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1226b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getUseWideViewportLocked() {
12275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1228b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mUseWideViewport;
1229b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1230b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
12316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void setZeroLayoutHeightDisablesViewportQuirk(boolean enabled) {
12326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
12336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            if (mZeroLayoutHeightDisablesViewportQuirk != enabled) {
12346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mZeroLayoutHeightDisablesViewportQuirk = enabled;
12356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
12366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            }
12376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
12386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public boolean getZeroLayoutHeightDisablesViewportQuirk() {
12416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
12426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            return getZeroLayoutHeightDisablesViewportQuirkLocked();
12436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
12446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    @CalledByNative
12476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private boolean getZeroLayoutHeightDisablesViewportQuirkLocked() {
12486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
12496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return mZeroLayoutHeightDisablesViewportQuirk;
12506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void setForceZeroLayoutHeight(boolean enabled) {
12536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
12546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            if (mForceZeroLayoutHeight != enabled) {
12556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mForceZeroLayoutHeight = enabled;
12566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
12576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            }
12586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
12596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public boolean getForceZeroLayoutHeight() {
12626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
12636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            return getForceZeroLayoutHeightLocked();
12646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
12656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    @CalledByNative
12686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private boolean getForceZeroLayoutHeightLocked() {
12696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
12706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return mForceZeroLayoutHeight;
12716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1273558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    @CalledByNative
12741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private boolean getPasswordEchoEnabledLocked() {
12755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1276558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        return mPasswordEchoEnabled;
1277558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    }
1278558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
1279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setAppCacheEnabled}.
1281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setAppCacheEnabled(boolean flag) {
1283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mAppCacheEnabled != flag) {
1285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mAppCacheEnabled = flag;
1286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setAppCachePath}.
1293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setAppCachePath(String path) {
1295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        boolean needToSync = false;
1296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (sGlobalContentSettingsLock) {
1297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            // AppCachePath can only be set once.
1298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (!sAppCachePathIsSet && path != null && !path.isEmpty()) {
1299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                sAppCachePathIsSet = true;
1300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                needToSync = true;
1301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // The obvious problem here is that other WebViews will not be updated,
1304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // until they execute synchronization from Java to the native side.
1305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // But this is the same behaviour as it was in the legacy WebView.
1306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        if (needToSync) {
1307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            synchronized (mAwSettingsLock) {
1308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * Gets whether Application Cache is enabled.
1315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     *
1316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * @return true if Application Cache is enabled
1317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    @CalledByNative
1319b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getAppCacheEnabledLocked() {
13205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        if (!mAppCacheEnabled) {
1322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return false;
1323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (sGlobalContentSettingsLock) {
1325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return sAppCachePathIsSet;
1326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDomStorageEnabled}.
1331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDomStorageEnabled(boolean flag) {
1333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDomStorageEnabled != flag) {
1335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDomStorageEnabled = flag;
1336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDomStorageEnabled}.
1343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getDomStorageEnabled() {
1345a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
1346a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            return mDomStorageEnabled;
1347a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        }
1348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1350b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1351b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getDomStorageEnabledLocked() {
13525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1353b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDomStorageEnabled;
1354b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1355b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDatabaseEnabled}.
1358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDatabaseEnabled(boolean flag) {
1360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDatabaseEnabled != flag) {
1362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDatabaseEnabled = flag;
1363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDatabaseEnabled}.
1370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getDatabaseEnabled() {
1372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
1373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            return mDatabaseEnabled;
1374a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        }
1375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1377b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1378b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getDatabaseEnabledLocked() {
13795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1380b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDatabaseEnabled;
1381b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1382b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDefaultTextEncodingName}.
1385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDefaultTextEncodingName(String encoding) {
1387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (encoding != null && !mDefaultTextEncoding.equals(encoding)) {
1389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDefaultTextEncoding = encoding;
1390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDefaultTextEncodingName}.
1397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getDefaultTextEncodingName() {
1399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
14005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getDefaultTextEncodingLocked();
1401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1404b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1405b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getDefaultTextEncodingLocked() {
14065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1407b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDefaultTextEncoding;
1408b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1409b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setMediaPlaybackRequiresUserGesture}.
1412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setMediaPlaybackRequiresUserGesture(boolean require) {
1414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mMediaPlaybackRequiresUserGesture != require) {
1416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mMediaPlaybackRequiresUserGesture = require;
1417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getMediaPlaybackRequiresUserGesture}.
1424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getMediaPlaybackRequiresUserGesture() {
1426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
14275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getMediaPlaybackRequiresUserGestureLocked();
1428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1431b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1432b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getMediaPlaybackRequiresUserGestureLocked() {
14335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1434b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mMediaPlaybackRequiresUserGesture;
1435b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1436b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDefaultVideoPosterURL}.
1439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDefaultVideoPosterURL(String url) {
1441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDefaultVideoPosterURL != null && !mDefaultVideoPosterURL.equals(url) ||
1443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    mDefaultVideoPosterURL == null && url != null) {
1444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDefaultVideoPosterURL = url;
1445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDefaultVideoPosterURL}.
1452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getDefaultVideoPosterURL() {
1454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
14555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getDefaultVideoPosterURLLocked();
1456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1459b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1460b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getDefaultVideoPosterURLLocked() {
14615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1462b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDefaultVideoPosterURL;
1463b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1464b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
14655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private void onGestureZoomSupportChanged(
14665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            final boolean supportsDoubleTapZoom, final boolean supportsMultiTouchZoom) {
14677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        // Always post asynchronously here, to avoid doubling back onto the caller.
14681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        mEventHandler.maybePostOnUiThread(new Runnable() {
1469b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            @Override
1470b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            public void run() {
14711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                synchronized (mAwSettingsLock) {
14721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    if (mZoomChangeListener != null) {
14735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        mZoomChangeListener.onGestureZoomSupportChanged(
14745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                supportsDoubleTapZoom, supportsMultiTouchZoom);
14751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    }
14761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                }
1477b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            }
1478b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        });
1479b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1480b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1481b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1482b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSupportZoom}.
1483b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1484b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public void setSupportZoom(boolean support) {
1485b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1486b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            if (mSupportZoom != support) {
1487b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                mSupportZoom = support;
14885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                onGestureZoomSupportChanged(
14895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        supportsDoubleTapZoomLocked(), supportsMultiTouchZoomLocked());
1490b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            }
1491b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1492b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1493b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1494b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1495b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#supportZoom}.
1496b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1497b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public boolean supportZoom() {
1498b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1499b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            return mSupportZoom;
1500b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1501b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1502b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1503b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1504b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setBuiltInZoomControls}.
1505b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1506b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public void setBuiltInZoomControls(boolean enabled) {
1507b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1508b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            if (mBuiltInZoomControls != enabled) {
1509b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                mBuiltInZoomControls = enabled;
15105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                onGestureZoomSupportChanged(
15115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        supportsDoubleTapZoomLocked(), supportsMultiTouchZoomLocked());
1512b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            }
1513b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1514b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1515b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1516b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1517b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getBuiltInZoomControls}.
1518b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1519b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public boolean getBuiltInZoomControls() {
1520b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1521b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            return mBuiltInZoomControls;
1522b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1523b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1524b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1525b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1526b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDisplayZoomControls}.
1527b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1528b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public void setDisplayZoomControls(boolean enabled) {
1529b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1530b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            mDisplayZoomControls = enabled;
1531b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1532b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1533b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1534b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1535b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDisplayZoomControls}.
1536b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1537b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public boolean getDisplayZoomControls() {
1538b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1539b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            return mDisplayZoomControls;
1540b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1541b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1542b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
15430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public void setMixedContentMode(int mode) {
15440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        synchronized (mAwSettingsLock) {
15450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            if (mMixedContentMode != mode) {
15460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                mMixedContentMode = mode;
15470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                mEventHandler.updateWebkitPreferencesLocked();
15480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            }
15490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        }
15500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
15510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
15520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public int getMixedContentMode() {
15530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        synchronized (mAwSettingsLock) {
15540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            return mMixedContentMode;
15550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        }
15560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
15570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
15580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    @CalledByNative
15590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    private boolean getAllowRunningInsecureContentLocked() {
15600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        assert Thread.holdsLock(mAwSettingsLock);
15610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        return mMixedContentMode == MIXED_CONTENT_ALWAYS_ALLOW;
15620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
15630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
15640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    @CalledByNative
15650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    private boolean getAllowDisplayingInsecureContentLocked() {
15660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        assert Thread.holdsLock(mAwSettingsLock);
15670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        return mMixedContentMode == MIXED_CONTENT_ALWAYS_ALLOW ||
15680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                mMixedContentMode == MIXED_CONTENT_COMPATIBILITY_MODE;
15690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
15700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
15715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    /**
15725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     * Sets whether to use the video overlay for the embedded video.
15735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     * @param flag whether to enable the video overlay for the embedded video.
15745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     */
15755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    public void setVideoOverlayForEmbeddedVideoEnabled(final boolean enabled) {
15765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        synchronized (mAwSettingsLock) {
15775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            if (mVideoOverlayForEmbeddedVideoEnabled != enabled) {
15785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                mVideoOverlayForEmbeddedVideoEnabled = enabled;
15795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
15805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    @Override
15815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    public void run() {
1582010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
1583010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeUpdateRendererPreferencesLocked(mNativeAwSettings);
1584010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
15855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    }
15865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                });
15875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            }
15885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        }
15895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
15905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
15915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    /**
15925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     * Gets whether to use the video overlay for the embedded video.
15935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     * @return true if the WebView enables the video overlay for the embedded video.
15945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     */
15955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    public boolean getVideoOverlayForEmbeddedVideoEnabled() {
15965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        synchronized (mAwSettingsLock) {
15975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getVideoOverlayForEmbeddedVideoEnabledLocked();
15985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        }
15995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
16005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
16015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    @CalledByNative
16025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    private boolean getVideoOverlayForEmbeddedVideoEnabledLocked() {
16035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        assert Thread.holdsLock(mAwSettingsLock);
16045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        return mVideoOverlayForEmbeddedVideoEnabled;
16055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
16065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
16075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    @CalledByNative
16085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private boolean supportsDoubleTapZoomLocked() {
16095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
16105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return mSupportZoom && mBuiltInZoomControls && mUseWideViewport;
16115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
16125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
16135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private boolean supportsMultiTouchZoomLocked() {
16147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1615b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mSupportZoom && mBuiltInZoomControls;
1616b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1617b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
16185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    boolean supportsMultiTouchZoom() {
1619b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
16205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            return supportsMultiTouchZoomLocked();
1621b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1622b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1623b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1624b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    boolean shouldDisplayZoomControls() {
1625b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
16265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            return supportsMultiTouchZoomLocked() && mDisplayZoomControls;
1627b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1628b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1629b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1630c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private int clipFontSize(int size) {
1631c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        if (size < MINIMUM_FONT_SIZE) {
1632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return MINIMUM_FONT_SIZE;
1633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        } else if (size > MAXIMUM_FONT_SIZE) {
1634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return MAXIMUM_FONT_SIZE;
1635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return size;
1637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1639b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1640b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private void updateEverything() {
1641b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
164246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)            updateEverythingLocked();
1643b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1644b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1645b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
16465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    @CalledByNative
16475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private void populateWebPreferences(long webPrefsPtr) {
16485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
1649010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            assert mNativeAwSettings != 0;
16505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            nativePopulateWebPreferencesLocked(mNativeAwSettings, webPrefsPtr);
1651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
16522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
16532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
16545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private void updateWebkitPreferencesOnUiThreadLocked() {
16555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert mEventHandler.mHandler != null;
16565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        ThreadUtils.assertOnUiThread();
1657010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        if (mNativeAwSettings != 0) {
1658010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            nativeUpdateWebkitPreferencesLocked(mNativeAwSettings);
1659010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        }
16605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
16615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1662a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native long nativeInit(long webContentsPtr);
16632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1664a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeDestroy(long nativeAwSettings);
16652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
16665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private native void nativePopulateWebPreferencesLocked(long nativeAwSettings, long webPrefsPtr);
16675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1668a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeResetScrollAndScaleState(long nativeAwSettings);
16692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1670a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateEverythingLocked(long nativeAwSettings);
1671c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1672a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateInitialPageScaleLocked(long nativeAwSettings);
1673c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1674a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateUserAgentLocked(long nativeAwSettings);
16752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1676a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateWebkitPreferencesLocked(long nativeAwSettings);
16772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private static native String nativeGetDefaultUserAgent();
167990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1680a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateFormDataPreferencesLocked(long nativeAwSettings);
16815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
16825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    private native void nativeUpdateRendererPreferencesLocked(long nativeAwSettings);
16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1684