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";
714ccfafb49a467adf7819cc5933ef036c1ee41c10mkosiba    private String mDefaultTextEncoding = "UTF-8";
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)
2307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            mUserAgent = LazyDefaultUserAgent.sInstance;
2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            // Best-guess a sensible initial value based on the features supported on the device.
2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            mSpatialNavigationEnabled = !context.getPackageManager().hasSystemFeature(
2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    PackageManager.FEATURE_TOUCHSCREEN);
235558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
236558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch            // Respect the system setting for password echoing.
237558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch            mPasswordEchoEnabled = Settings.System.getInt(context.getContentResolver(),
238558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch                    Settings.System.TEXT_SHOW_PASSWORD, 1) == 1;
239a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
240a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            // By default, scale the text size by the system font scale factor. Embedders
241a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            // may override this by invoking setTextZoom().
242a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            mTextSizePercent *= context.getResources().getConfiguration().fontScale;
2433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
24458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)            mSupportLegacyQuirks = supportsLegacyQuirks;
245b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
2467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        // Defer initializing the native side until a native WebContents instance is set.
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    @CalledByNative
250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private void nativeAwSettingsGone(long nativeAwSettings) {
2517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        assert mNativeAwSettings != 0 && mNativeAwSettings == nativeAwSettings;
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mNativeAwSettings = 0;
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
255b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
256b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private double getDIPScaleLocked() {
2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
258b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDIPScale;
259b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
260b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
2611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    void setDIPScale(double dipScale) {
2621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        synchronized (mAwSettingsLock) {
2631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            mDIPScale = dipScale;
2641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            // TODO(joth): This should also be synced over to native side, but right now
2651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            // the setDIPScale call is always followed by a setWebContents() which covers this.
2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        }
2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
2681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    void setZoomListener(ZoomSupportChangeListener zoomChangeListener) {
2701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        synchronized (mAwSettingsLock) {
2711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            mZoomChangeListener = zoomChangeListener;
2721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        }
2731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
2741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
275effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    void setWebContents(long nativeWebContents) {
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
2777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            if (mNativeAwSettings != 0) {
2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                nativeDestroy(mNativeAwSettings);
2797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                assert mNativeAwSettings == 0;  // nativeAwSettingsGone should have been called.
2807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            }
2817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            if (nativeWebContents != 0) {
2821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                mEventHandler.bindUiThread();
2837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                mNativeAwSettings = nativeInit(nativeWebContents);
28446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                updateEverythingLocked();
2857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            }
286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    private void updateEverythingLocked() {
29046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
29146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        assert mNativeAwSettings != 0;
29246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        nativeUpdateEverythingLocked(mNativeAwSettings);
29346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        onGestureZoomSupportChanged(
29446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                supportsDoubleTapZoomLocked(), supportsMultiTouchZoomLocked());
29546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    }
29646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#setBlockNetworkLoads}.
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void setBlockNetworkLoads(boolean flag) {
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)            if (!flag && !mHasInternetPermission) {
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                throw new SecurityException("Permission denied - " +
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        "application missing INTERNET permission");
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            mBlockNetworkLoads = flag;
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#getBlockNetworkLoads}.
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public boolean getBlockNetworkLoads() {
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mBlockNetworkLoads;
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * Enable/disable third party cookies for an AwContents
321cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * @param accept true if we should accept third party cookies
322cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     */
323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    public void setAcceptThirdPartyCookies(boolean accept) {
324cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        synchronized (mAwSettingsLock) {
325cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            if (mAcceptThirdPartyCookies != accept) {
326cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                mAcceptThirdPartyCookies = accept;
327cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            }
328cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        }
329cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
330cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
331cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    /**
332cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * Return whether third party cookies are enabled for an AwContents
333cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     * @return true if accept third party cookies
334cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)     */
335cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    public boolean getAcceptThirdPartyCookies() {
336cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        synchronized (mAwSettingsLock) {
337cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            return mAcceptThirdPartyCookies;
338cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        }
339cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
340cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    /**
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#setAllowFileAccess}.
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void setAllowFileAccess(boolean allow) {
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (mAllowFileUrlAccess != allow) {
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                mAllowFileUrlAccess = allow;
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#getAllowFileAccess}.
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public boolean getAllowFileAccess() {
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mAllowFileUrlAccess;
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#setAllowContentAccess}.
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void setAllowContentAccess(boolean allow) {
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            if (mAllowContentUrlAccess != allow) {
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                mAllowContentUrlAccess = allow;
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            }
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * See {@link android.webkit.WebSettings#getAllowContentAccess}.
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public boolean getAllowContentAccess() {
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        synchronized (mAwSettingsLock) {
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return mAllowContentUrlAccess;
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setCacheMode}.
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void setCacheMode(int mode) {
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            if (mCacheMode != mode) {
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                mCacheMode = mode;
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getCacheMode}.
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public int getCacheMode() {
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            return mCacheMode;
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setNeedInitialFocus}.
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void setShouldFocusFirstNode(boolean flag) {
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            mShouldFocusFirstNode = flag;
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebView#setInitialScale}.
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void setInitialPageScale(final float scaleInPercent) {
414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mInitialPageScalePercent != scaleInPercent) {
416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mInitialPageScalePercent = scaleInPercent;
4175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    @Override
419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    public void run() {
420010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
421010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeUpdateInitialPageScaleLocked(mNativeAwSettings);
422010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    }
424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                });
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
429b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
430b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private float getInitialPageScalePercentLocked() {
4315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
432b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mInitialPageScalePercent;
433b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
434b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
4351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    void setSpatialNavigationEnabled(boolean enable) {
4361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        synchronized (mAwSettingsLock) {
4371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            if (mSpatialNavigationEnabled != enable) {
4381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                mSpatialNavigationEnabled = enable;
4391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
4401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)            }
4411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        }
4421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
4431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
4441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    @CalledByNative
4451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private boolean getSpatialNavigationLocked() {
4465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
4471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        return mSpatialNavigationEnabled;
4481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    }
4491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
4505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    void setEnableSupportedHardwareAcceleratedFeatures(boolean enable) {
4515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
4525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            if (mEnableSupportedHardwareAcceleratedFeatures != enable) {
4535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEnableSupportedHardwareAcceleratedFeatures = enable;
4545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
4555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            }
4565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        }
4575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
4585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    @CalledByNative
4605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private boolean getEnableSupportedHardwareAcceleratedFeaturesLocked() {
4615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
4625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return mEnableSupportedHardwareAcceleratedFeatures;
4635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
4645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
4656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void setFullscreenSupported(boolean supported) {
4666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
4676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            if (mFullscreenSupported != supported) {
4686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mFullscreenSupported = supported;
4696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
4706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            }
4716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
4726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
4736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    @CalledByNative
4756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private boolean getFullscreenSupportedLocked() {
4766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
4776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return mFullscreenSupported;
4786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
4796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setNeedInitialFocus}.
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public boolean shouldFocusFirstNode() {
484a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            return mShouldFocusFirstNode;
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setGeolocationEnabled}.
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    public void setGeolocationEnabled(boolean flag) {
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            if (mGeolocationEnabled != flag) {
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                mGeolocationEnabled = flag;
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            }
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /**
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     * @return Returns if geolocation is currently enabled.
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)     */
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    boolean getGeolocationEnabled() {
5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        synchronized (mAwSettingsLock) {
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            return mGeolocationEnabled;
5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        }
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
51090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSaveFormData}.
51190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)     */
51290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    public void setSaveFormData(final boolean enable) {
51390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
51490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)            if (mAutoCompleteEnabled != enable) {
51590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                mAutoCompleteEnabled = enable;
5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
51790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                    @Override
51890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                    public void run() {
519010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
520010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeUpdateFormDataPreferencesLocked(mNativeAwSettings);
521010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
52290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                    }
52390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                });
52490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)            }
52590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        }
52690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
52790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
52890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    /**
52990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getSaveFormData}.
53090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)     */
53190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    public boolean getSaveFormData() {
53290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
53390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)            return getSaveFormDataLocked();
53490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        }
53590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
53690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
53790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    @CalledByNative
53890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    private boolean getSaveFormDataLocked() {
5395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
54090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        return mAutoCompleteEnabled;
54190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
54290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
54390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    /**
544c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * @returns the default User-Agent used by each ContentViewCore instance, i.e. unless
545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * overridden by {@link #setUserAgentString()}
546c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public static String getDefaultUserAgent() {
548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return LazyDefaultUserAgent.sInstance;
549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setUserAgentString}.
553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setUserAgentString(String ua) {
555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            final String oldUserAgent = mUserAgent;
557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (ua == null || ua.length() == 0) {
558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mUserAgent = LazyDefaultUserAgent.sInstance;
559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            } else {
560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mUserAgent = ua;
561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
562c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (!oldUserAgent.equals(mUserAgent)) {
5635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    @Override
565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    public void run() {
566010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
567010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeUpdateUserAgentLocked(mNativeAwSettings);
568010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    }
570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                });
571c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
574c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getUserAgentString}.
577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
578c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getUserAgentString() {
579c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
5805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getUserAgentLocked();
581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
582c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
584b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
585b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getUserAgentLocked() {
5865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
587b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mUserAgent;
588b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
589b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
590c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setLoadWithOverviewMode}.
592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setLoadWithOverviewMode(boolean overview) {
594c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
595c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mLoadWithOverviewMode != overview) {
596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mLoadWithOverviewMode = overview;
5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    @Override
599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    public void run() {
600010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
601010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            updateWebkitPreferencesOnUiThreadLocked();
602010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeResetScrollAndScaleState(mNativeAwSettings);
603010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    }
605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                });
606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
609c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getLoadWithOverviewMode}.
612c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
613c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getLoadWithOverviewMode() {
614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
6155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getLoadWithOverviewModeLocked();
616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
619b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
620b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getLoadWithOverviewModeLocked() {
6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
622b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mLoadWithOverviewMode;
623b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
624b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setTextZoom}.
627c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
628c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setTextZoom(final int textZoom) {
629c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
630a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            if (mTextSizePercent != textZoom) {
631a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                mTextSizePercent = textZoom;
632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getTextZoom}.
639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
640c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getTextZoom() {
641c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
6425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getTextSizePercentLocked();
643c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
646b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
647b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getTextSizePercentLocked() {
6485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
649b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mTextSizePercent;
650b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
651b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
652c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
653c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setStandardFontFamily}.
654c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
655c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setStandardFontFamily(String font) {
656c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
657c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mStandardFontFamily.equals(font)) {
658c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mStandardFontFamily = font;
659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
661c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
665c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getStandardFontFamily}.
666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getStandardFontFamily() {
668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
6695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getStandardFontFamilyLocked();
670c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
671c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
673b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
674b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getStandardFontFamilyLocked() {
6755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
676b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mStandardFontFamily;
677b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
678b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setFixedFontFamily}.
681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setFixedFontFamily(String font) {
683c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
684c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mFixedFontFamily.equals(font)) {
685c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mFixedFontFamily = font;
686c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
687c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
688c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
689c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
690c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
691c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
692c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getFixedFontFamily}.
693c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getFixedFontFamily() {
695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
6965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getFixedFontFamilyLocked();
697c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
698c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
699c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
700b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
701b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getFixedFontFamilyLocked() {
7025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
703b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mFixedFontFamily;
704b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
705b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
706c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSansSerifFontFamily}.
708c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
709c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setSansSerifFontFamily(String font) {
710c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
711c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mSansSerifFontFamily.equals(font)) {
712c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mSansSerifFontFamily = font;
713c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
714c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
715c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
716c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
717c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
718c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
719c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getSansSerifFontFamily}.
720c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
721c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getSansSerifFontFamily() {
722c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
7235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getSansSerifFontFamilyLocked();
724c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
726c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
727b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
728b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getSansSerifFontFamilyLocked() {
7295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
730b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mSansSerifFontFamily;
731b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
732b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
733c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
734c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSerifFontFamily}.
735c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
736c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setSerifFontFamily(String font) {
737c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
738c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mSerifFontFamily.equals(font)) {
739c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mSerifFontFamily = font;
740c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
741c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
742c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
743c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
744c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
745c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
746c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getSerifFontFamily}.
747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getSerifFontFamily() {
749c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
7505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getSerifFontFamilyLocked();
751c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
754b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
755b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getSerifFontFamilyLocked() {
7565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
757b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mSerifFontFamily;
758b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
759b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
760c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
761c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setCursiveFontFamily}.
762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setCursiveFontFamily(String font) {
764c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mCursiveFontFamily.equals(font)) {
766c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mCursiveFontFamily = font;
767c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
769c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
770c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
772c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
773c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getCursiveFontFamily}.
774c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
775c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getCursiveFontFamily() {
776c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
7775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getCursiveFontFamilyLocked();
778c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
779c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
780c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
781b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
782b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getCursiveFontFamilyLocked() {
7835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
784b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mCursiveFontFamily;
785b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
786b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
787c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
788c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setFantasyFontFamily}.
789c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
790c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setFantasyFontFamily(String font) {
791c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
792c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (font != null && !mFantasyFontFamily.equals(font)) {
793c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mFantasyFontFamily = font;
794c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
795c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
796c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
797c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
798c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
800c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getFantasyFontFamily}.
801c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
802c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getFantasyFontFamily() {
803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
8045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getFantasyFontFamilyLocked();
805c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
806c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
807c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
808b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
809b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getFantasyFontFamilyLocked() {
8105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
811b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mFantasyFontFamily;
812b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
813b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
815c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setMinimumFontSize}.
816c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
817c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setMinimumFontSize(int size) {
818c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
819c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            size = clipFontSize(size);
820c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mMinimumFontSize != size) {
821c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mMinimumFontSize = size;
822c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
823c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
824c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
825c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
827c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getMinimumFontSize}.
829c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
830c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getMinimumFontSize() {
831c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
8325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getMinimumFontSizeLocked();
833c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
834c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
835c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
836b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
837b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getMinimumFontSizeLocked() {
8385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
839b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mMinimumFontSize;
840b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
841b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
842c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
843c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setMinimumLogicalFontSize}.
844c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
845c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setMinimumLogicalFontSize(int size) {
846c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
847c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            size = clipFontSize(size);
848c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mMinimumLogicalFontSize != size) {
849c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mMinimumLogicalFontSize = size;
850c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
851c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
852c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
853c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
854c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
855c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
856c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getMinimumLogicalFontSize}.
857c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
858c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getMinimumLogicalFontSize() {
859c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
8605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getMinimumLogicalFontSizeLocked();
861c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
862c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
863c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
864b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
865b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getMinimumLogicalFontSizeLocked() {
8665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
867b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mMinimumLogicalFontSize;
868b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
869b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
870c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
871c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDefaultFontSize}.
872c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDefaultFontSize(int size) {
874c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
875c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            size = clipFontSize(size);
876c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDefaultFontSize != size) {
877c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDefaultFontSize = size;
878c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
879c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
880c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
881c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
882c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
883c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
884c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDefaultFontSize}.
885c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
886c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getDefaultFontSize() {
887c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
8885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getDefaultFontSizeLocked();
889c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
890c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
891c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
892b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
893b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getDefaultFontSizeLocked() {
8945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
895b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDefaultFontSize;
896b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
897b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
898c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
899c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDefaultFixedFontSize}.
900c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
901c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDefaultFixedFontSize(int size) {
902c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            size = clipFontSize(size);
904c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDefaultFixedFontSize != size) {
905c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDefaultFixedFontSize = size;
906c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
907c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
909c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
910c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
911c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
912c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDefaultFixedFontSize}.
913c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
914c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public int getDefaultFixedFontSize() {
915c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
9165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getDefaultFixedFontSizeLocked();
917c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
918c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
919c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
920b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
921b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private int getDefaultFixedFontSizeLocked() {
9225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
923b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDefaultFixedFontSize;
924b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
925b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
926c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
927c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setJavaScriptEnabled}.
928c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setJavaScriptEnabled(boolean flag) {
930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
931c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mJavaScriptEnabled != flag) {
932c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mJavaScriptEnabled = flag;
933c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
935c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
936c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
937c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
938c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
939c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setAllowUniversalAccessFromFileURLs}.
940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
941c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setAllowUniversalAccessFromFileURLs(boolean flag) {
942c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mAllowUniversalAccessFromFileURLs != flag) {
944c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mAllowUniversalAccessFromFileURLs = flag;
945c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
947c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
948c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
949c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setAllowFileAccessFromFileURLs}.
952c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
953c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setAllowFileAccessFromFileURLs(boolean flag) {
954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
955c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mAllowFileAccessFromFileURLs != flag) {
956c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mAllowFileAccessFromFileURLs = flag;
957c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
959c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
960c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
961c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
963c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setLoadsImagesAutomatically}.
964c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setLoadsImagesAutomatically(boolean flag) {
966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
967c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mLoadsImagesAutomatically != flag) {
968c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mLoadsImagesAutomatically = flag;
969c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
970c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
971c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
974c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getLoadsImagesAutomatically}.
976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
977c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getLoadsImagesAutomatically() {
978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
9795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getLoadsImagesAutomaticallyLocked();
980c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
982c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
983b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
984b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getLoadsImagesAutomaticallyLocked() {
9855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
986b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mLoadsImagesAutomatically;
987b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
988b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setImagesEnabled}.
991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setImagesEnabled(boolean flag) {
993c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
994c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mImagesEnabled != flag) {
995c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mImagesEnabled = flag;
996c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
997c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
998c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
999c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1000c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1001c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1002c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getImagesEnabled}.
1003c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1004c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getImagesEnabled() {
1005c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mImagesEnabled;
1007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1009c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1010b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1011b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getImagesEnabledLocked() {
10125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1013b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mImagesEnabled;
1014b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1015b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1016c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getJavaScriptEnabled}.
1018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getJavaScriptEnabled() {
1020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mJavaScriptEnabled;
1022c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1023c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1025b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1026b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getJavaScriptEnabledLocked() {
10275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1028b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mJavaScriptEnabled;
1029b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1030b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1031c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getAllowUniversalAccessFromFileURLs}.
1033c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1034c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getAllowUniversalAccessFromFileURLs() {
1035c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
10365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getAllowUniversalAccessFromFileURLsLocked();
1037c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1038c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1039c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1040b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1041b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getAllowUniversalAccessFromFileURLsLocked() {
10425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1043b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mAllowUniversalAccessFromFileURLs;
1044b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1045b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1046c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getAllowFileAccessFromFileURLs}.
1048c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1049c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getAllowFileAccessFromFileURLs() {
1050c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
10515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getAllowFileAccessFromFileURLsLocked();
1052c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1053c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1054c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1055b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1056b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getAllowFileAccessFromFileURLsLocked() {
10575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1058b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mAllowFileAccessFromFileURLs;
1059b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1060b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1061c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1062c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setPluginsEnabled}.
1063c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1064c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setPluginsEnabled(boolean flag) {
1065c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        setPluginState(flag ? PluginState.ON : PluginState.OFF);
1066c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1067c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1068c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1069c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setPluginState}.
1070c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1071c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setPluginState(PluginState state) {
1072c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1073c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mPluginState != state) {
1074c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mPluginState = state;
1075c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1076c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1077c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1078c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1079c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1080c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1081c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getPluginsEnabled}.
1082c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1083c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getPluginsEnabled() {
1084c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1085c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mPluginState == PluginState.ON;
1086c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1087c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1088c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1089c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1090c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * Return true if plugins are disabled.
1091c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * @return True if plugins are disabled.
1092c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1093c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    @CalledByNative
1094b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getPluginsDisabledLocked() {
10955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1096c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return mPluginState == PluginState.OFF;
1097c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1098c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1099c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getPluginState}.
1101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public PluginState getPluginState() {
1103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mPluginState;
1105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setJavaScriptCanOpenWindowsAutomatically}.
1111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setJavaScriptCanOpenWindowsAutomatically(boolean flag) {
1113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mJavaScriptCanOpenWindowsAutomatically != flag) {
1115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mJavaScriptCanOpenWindowsAutomatically = flag;
1116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getJavaScriptCanOpenWindowsAutomatically}.
1123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getJavaScriptCanOpenWindowsAutomatically() {
1125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
11265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getJavaScriptCanOpenWindowsAutomaticallyLocked();
1127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1130b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1131b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getJavaScriptCanOpenWindowsAutomaticallyLocked() {
11325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1133b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mJavaScriptCanOpenWindowsAutomatically;
1134b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1135b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setLayoutAlgorithm}.
1138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setLayoutAlgorithm(LayoutAlgorithm l) {
1140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mLayoutAlgorithm != l) {
1142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mLayoutAlgorithm = l;
1143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getLayoutAlgorithm}.
1150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public LayoutAlgorithm getLayoutAlgorithm() {
1152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mLayoutAlgorithm;
1154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * Gets whether Text Auto-sizing layout algorithm is enabled.
1159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     *
1160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * @return true if Text Auto-sizing layout algorithm is enabled
1161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    @CalledByNative
1163b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getTextAutosizingEnabledLocked() {
11645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return mLayoutAlgorithm == LayoutAlgorithm.TEXT_AUTOSIZING;
1166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSupportMultipleWindows}.
1170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setSupportMultipleWindows(boolean support) {
1172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mSupportMultipleWindows != support) {
1174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mSupportMultipleWindows = support;
1175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#supportMultipleWindows}.
1182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean supportMultipleWindows() {
1184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return mSupportMultipleWindows;
1186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1189b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getSupportMultipleWindowsLocked() {
11915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1192b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mSupportMultipleWindows;
1193b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1194b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1195b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
119658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    private boolean getSupportLegacyQuirksLocked() {
11975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
119858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        return mSupportLegacyQuirks;
1199b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1200b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setUseWideViewPort}.
1203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setUseWideViewPort(boolean use) {
1205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mUseWideViewport != use) {
1207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mUseWideViewport = use;
12085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                onGestureZoomSupportChanged(
12095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        supportsDoubleTapZoomLocked(), supportsMultiTouchZoomLocked());
1210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getUseWideViewPort}.
1217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getUseWideViewPort() {
1219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
12205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getUseWideViewportLocked();
1221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1224b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1225b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getUseWideViewportLocked() {
12265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1227b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mUseWideViewport;
1228b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1229b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
12306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void setZeroLayoutHeightDisablesViewportQuirk(boolean enabled) {
12316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
12326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            if (mZeroLayoutHeightDisablesViewportQuirk != enabled) {
12336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mZeroLayoutHeightDisablesViewportQuirk = enabled;
12346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
12356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            }
12366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
12376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public boolean getZeroLayoutHeightDisablesViewportQuirk() {
12406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
12416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            return getZeroLayoutHeightDisablesViewportQuirkLocked();
12426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
12436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    @CalledByNative
12466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private boolean getZeroLayoutHeightDisablesViewportQuirkLocked() {
12476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
12486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return mZeroLayoutHeightDisablesViewportQuirk;
12496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public void setForceZeroLayoutHeight(boolean enabled) {
12526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
12536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            if (mForceZeroLayoutHeight != enabled) {
12546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mForceZeroLayoutHeight = enabled;
12556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
12566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            }
12576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
12586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    public boolean getForceZeroLayoutHeight() {
12616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        synchronized (mAwSettingsLock) {
12626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)            return getForceZeroLayoutHeightLocked();
12636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        }
12646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
12666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    @CalledByNative
12676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    private boolean getForceZeroLayoutHeightLocked() {
12686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
12696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        return mForceZeroLayoutHeight;
12706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    }
12716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
1272558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    @CalledByNative
12731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    private boolean getPasswordEchoEnabledLocked() {
12745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1275558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch        return mPasswordEchoEnabled;
1276558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch    }
1277558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch
1278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setAppCacheEnabled}.
1280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setAppCacheEnabled(boolean flag) {
1282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mAppCacheEnabled != flag) {
1284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mAppCacheEnabled = flag;
1285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setAppCachePath}.
1292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setAppCachePath(String path) {
1294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        boolean needToSync = false;
1295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (sGlobalContentSettingsLock) {
1296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            // AppCachePath can only be set once.
1297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (!sAppCachePathIsSet && path != null && !path.isEmpty()) {
1298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                sAppCachePathIsSet = true;
1299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                needToSync = true;
1300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // The obvious problem here is that other WebViews will not be updated,
1303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // until they execute synchronization from Java to the native side.
1304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        // But this is the same behaviour as it was in the legacy WebView.
1305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        if (needToSync) {
1306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            synchronized (mAwSettingsLock) {
1307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * Gets whether Application Cache is enabled.
1314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     *
1315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * @return true if Application Cache is enabled
1316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    @CalledByNative
1318b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getAppCacheEnabledLocked() {
13195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        if (!mAppCacheEnabled) {
1321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return false;
1322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (sGlobalContentSettingsLock) {
1324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return sAppCachePathIsSet;
1325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDomStorageEnabled}.
1330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDomStorageEnabled(boolean flag) {
1332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDomStorageEnabled != flag) {
1334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDomStorageEnabled = flag;
1335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDomStorageEnabled}.
1342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getDomStorageEnabled() {
1344a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
1345a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            return mDomStorageEnabled;
1346a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        }
1347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1349b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1350b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getDomStorageEnabledLocked() {
13515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1352b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDomStorageEnabled;
1353b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1354b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDatabaseEnabled}.
1357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDatabaseEnabled(boolean flag) {
1359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDatabaseEnabled != flag) {
1361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDatabaseEnabled = flag;
1362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDatabaseEnabled}.
1369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getDatabaseEnabled() {
1371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
1372a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)            return mDatabaseEnabled;
1373a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        }
1374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1376b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1377b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getDatabaseEnabledLocked() {
13785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1379b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDatabaseEnabled;
1380b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1381b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDefaultTextEncodingName}.
1384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDefaultTextEncodingName(String encoding) {
1386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (encoding != null && !mDefaultTextEncoding.equals(encoding)) {
1388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDefaultTextEncoding = encoding;
1389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDefaultTextEncodingName}.
1396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getDefaultTextEncodingName() {
1398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
13995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getDefaultTextEncodingLocked();
1400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1403b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1404b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getDefaultTextEncodingLocked() {
14055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1406b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDefaultTextEncoding;
1407b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1408b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setMediaPlaybackRequiresUserGesture}.
1411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setMediaPlaybackRequiresUserGesture(boolean require) {
1413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mMediaPlaybackRequiresUserGesture != require) {
1415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mMediaPlaybackRequiresUserGesture = require;
1416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getMediaPlaybackRequiresUserGesture}.
1423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public boolean getMediaPlaybackRequiresUserGesture() {
1425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
14265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getMediaPlaybackRequiresUserGestureLocked();
1427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1430b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1431b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private boolean getMediaPlaybackRequiresUserGestureLocked() {
14325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1433b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mMediaPlaybackRequiresUserGesture;
1434b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1435b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDefaultVideoPosterURL}.
1438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public void setDefaultVideoPosterURL(String url) {
1440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            if (mDefaultVideoPosterURL != null && !mDefaultVideoPosterURL.equals(url) ||
1442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    mDefaultVideoPosterURL == null && url != null) {
1443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mDefaultVideoPosterURL = url;
1444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                mEventHandler.updateWebkitPreferencesLocked();
1445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            }
1446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /**
1450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDefaultVideoPosterURL}.
1451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)     */
1452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    public String getDefaultVideoPosterURL() {
1453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        synchronized (mAwSettingsLock) {
14545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getDefaultVideoPosterURLLocked();
1455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1458b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1459b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private String getDefaultVideoPosterURLLocked() {
14605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1461b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mDefaultVideoPosterURL;
1462b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1463b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
14645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private void onGestureZoomSupportChanged(
14655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            final boolean supportsDoubleTapZoom, final boolean supportsMultiTouchZoom) {
14667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        // Always post asynchronously here, to avoid doubling back onto the caller.
14671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        mEventHandler.maybePostOnUiThread(new Runnable() {
1468b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            @Override
1469b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            public void run() {
14701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                synchronized (mAwSettingsLock) {
14711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    if (mZoomChangeListener != null) {
14725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        mZoomChangeListener.onGestureZoomSupportChanged(
14735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                supportsDoubleTapZoom, supportsMultiTouchZoom);
14741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    }
14751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                }
1476b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            }
1477b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        });
1478b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1479b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1480b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1481b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setSupportZoom}.
1482b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1483b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public void setSupportZoom(boolean support) {
1484b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1485b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            if (mSupportZoom != support) {
1486b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                mSupportZoom = support;
14875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                onGestureZoomSupportChanged(
14885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        supportsDoubleTapZoomLocked(), supportsMultiTouchZoomLocked());
1489b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            }
1490b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1491b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1492b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1493b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1494b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#supportZoom}.
1495b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1496b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public boolean supportZoom() {
1497b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1498b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            return mSupportZoom;
1499b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1500b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1501b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1502b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1503b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setBuiltInZoomControls}.
1504b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1505b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public void setBuiltInZoomControls(boolean enabled) {
1506b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1507b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            if (mBuiltInZoomControls != enabled) {
1508b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)                mBuiltInZoomControls = enabled;
15095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                onGestureZoomSupportChanged(
15105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        supportsDoubleTapZoomLocked(), supportsMultiTouchZoomLocked());
1511b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            }
1512b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1513b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1514b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1515b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1516b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getBuiltInZoomControls}.
1517b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1518b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public boolean getBuiltInZoomControls() {
1519b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1520b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            return mBuiltInZoomControls;
1521b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1522b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1523b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1524b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1525b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#setDisplayZoomControls}.
1526b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1527b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public void setDisplayZoomControls(boolean enabled) {
1528b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1529b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            mDisplayZoomControls = enabled;
1530b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1531b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1532b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1533b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    /**
1534b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     * See {@link android.webkit.WebSettings#getDisplayZoomControls}.
1535b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)     */
1536b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    public boolean getDisplayZoomControls() {
1537b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
1538b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)            return mDisplayZoomControls;
1539b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1540b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1541b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
15420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public void setMixedContentMode(int mode) {
15430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        synchronized (mAwSettingsLock) {
15440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            if (mMixedContentMode != mode) {
15450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                mMixedContentMode = mode;
15460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                mEventHandler.updateWebkitPreferencesLocked();
15470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            }
15480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        }
15490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
15500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
15510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    public int getMixedContentMode() {
15520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        synchronized (mAwSettingsLock) {
15530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch            return mMixedContentMode;
15540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        }
15550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
15560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
15570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    @CalledByNative
15580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    private boolean getAllowRunningInsecureContentLocked() {
15590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        assert Thread.holdsLock(mAwSettingsLock);
15600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        return mMixedContentMode == MIXED_CONTENT_ALWAYS_ALLOW;
15610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
15620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
15630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    @CalledByNative
15640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    private boolean getAllowDisplayingInsecureContentLocked() {
15650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        assert Thread.holdsLock(mAwSettingsLock);
15660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        return mMixedContentMode == MIXED_CONTENT_ALWAYS_ALLOW ||
15670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                mMixedContentMode == MIXED_CONTENT_COMPATIBILITY_MODE;
15680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    }
15690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
15705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    /**
15715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     * Sets whether to use the video overlay for the embedded video.
15725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     * @param flag whether to enable the video overlay for the embedded video.
15735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     */
15745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    public void setVideoOverlayForEmbeddedVideoEnabled(final boolean enabled) {
15755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        synchronized (mAwSettingsLock) {
15765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            if (mVideoOverlayForEmbeddedVideoEnabled != enabled) {
15775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                mVideoOverlayForEmbeddedVideoEnabled = enabled;
15785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                mEventHandler.runOnUiThreadBlockingAndLocked(new Runnable() {
15795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    @Override
15805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    public void run() {
1581010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        if (mNativeAwSettings != 0) {
1582010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                            nativeUpdateRendererPreferencesLocked(mNativeAwSettings);
1583010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                        }
15845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    }
15855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                });
15865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            }
15875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        }
15885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
15895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
15905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    /**
15915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     * Gets whether to use the video overlay for the embedded video.
15925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     * @return true if the WebView enables the video overlay for the embedded video.
15935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu     */
15945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    public boolean getVideoOverlayForEmbeddedVideoEnabled() {
15955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        synchronized (mAwSettingsLock) {
15965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            return getVideoOverlayForEmbeddedVideoEnabledLocked();
15975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        }
15985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
15995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
16005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    @CalledByNative
16015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    private boolean getVideoOverlayForEmbeddedVideoEnabledLocked() {
16025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        assert Thread.holdsLock(mAwSettingsLock);
16035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        return mVideoOverlayForEmbeddedVideoEnabled;
16045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
16055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
16065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    @CalledByNative
16075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private boolean supportsDoubleTapZoomLocked() {
16085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
16095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        return mSupportZoom && mBuiltInZoomControls && mUseWideViewport;
16105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
16115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
16125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private boolean supportsMultiTouchZoomLocked() {
16137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)        assert Thread.holdsLock(mAwSettingsLock);
1614b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        return mSupportZoom && mBuiltInZoomControls;
1615b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1616b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
16175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    boolean supportsMultiTouchZoom() {
1618b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
16195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            return supportsMultiTouchZoomLocked();
1620b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1621b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1622b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1623b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    boolean shouldDisplayZoomControls() {
1624b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
16255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            return supportsMultiTouchZoomLocked() && mDisplayZoomControls;
1626b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1627b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1628b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
1629c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private int clipFontSize(int size) {
1630c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        if (size < MINIMUM_FONT_SIZE) {
1631c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return MINIMUM_FONT_SIZE;
1632c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        } else if (size > MAXIMUM_FONT_SIZE) {
1633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            return MAXIMUM_FONT_SIZE;
1634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
1635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        return size;
1636c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
1637c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1638b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    @CalledByNative
1639b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    private void updateEverything() {
1640b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        synchronized (mAwSettingsLock) {
164146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)            updateEverythingLocked();
1642b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)        }
1643b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    }
1644b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
16455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    @CalledByNative
16465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private void populateWebPreferences(long webPrefsPtr) {
16475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        synchronized (mAwSettingsLock) {
1648010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            assert mNativeAwSettings != 0;
16495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            nativePopulateWebPreferencesLocked(mNativeAwSettings, webPrefsPtr);
1650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        }
16512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
16522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
16535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private void updateWebkitPreferencesOnUiThreadLocked() {
16545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        assert mEventHandler.mHandler != null;
16555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        ThreadUtils.assertOnUiThread();
1656010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        if (mNativeAwSettings != 0) {
1657010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)            nativeUpdateWebkitPreferencesLocked(mNativeAwSettings);
1658010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        }
16595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
16605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1661a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native long nativeInit(long webContentsPtr);
16622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1663a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeDestroy(long nativeAwSettings);
16642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
16655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    private native void nativePopulateWebPreferencesLocked(long nativeAwSettings, long webPrefsPtr);
16665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1667a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeResetScrollAndScaleState(long nativeAwSettings);
16682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1669a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateEverythingLocked(long nativeAwSettings);
1670c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1671a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateInitialPageScaleLocked(long nativeAwSettings);
1672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1673a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateUserAgentLocked(long nativeAwSettings);
16742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1675a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateWebkitPreferencesLocked(long nativeAwSettings);
16762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    private static native String nativeGetDefaultUserAgent();
167890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1679a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private native void nativeUpdateFormDataPreferencesLocked(long nativeAwSettings);
16805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
16815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    private native void nativeUpdateRendererPreferencesLocked(long nativeAwSettings);
16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1683