WebSettings.java revision 972acd0c339db4b6a72c307ae0a0b2b5405376db
154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/*
254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * you may not use this file except in compliance with the License.
654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * You may obtain a copy of the License at
754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project *
1054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * See the License for the specific language governing permissions and
1454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * limitations under the License.
1554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
1654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpackage android.webkit;
1854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.content.Context;
20972acd0c339db4b6a72c307ae0a0b2b5405376dbAndrei Popescuimport android.content.pm.PackageManager;
2154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Build;
2254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Handler;
2354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport android.os.Message;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Checkin;
25f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Projectimport java.lang.SecurityException;
2654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectimport java.util.Locale;
2754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
2854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project/**
2954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * Manages settings state for a WebView. When a WebView is first created, it
3054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * obtains a set of default settings. These default settings will be returned
3154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * from any getter call. A WebSettings object obtained from
3254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * WebView.getSettings() is tied to the life of the WebView. If a WebView has
3354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * been destroyed, any method call on WebSettings will throw an
3454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project * IllegalStateException.
3554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project */
3654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Projectpublic class WebSettings {
3754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
3854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enum for controlling the layout of html.
3954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NORMAL means no rendering changes.
4054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SINGLE_COLUMN moves all content into one column that is the width of the
4154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * view.
4254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NARROW_COLUMNS makes all columns no wider than the screen if possible.
4354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
4454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // XXX: These must match LayoutAlgorithm in Settings.h in WebCore.
4554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum LayoutAlgorithm {
4654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL,
4754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SINGLE_COLUMN,
4854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NARROW_COLUMNS
4954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
5054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
5154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
5254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enum for specifying the text size.
5354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SMALLEST is 50%
5454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * SMALLER is 75%
5554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * NORMAL is 100%
5654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * LARGER is 150%
5754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * LARGEST is 200%
5854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
5954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum TextSize {
6054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SMALLEST(50),
6154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        SMALLER(75),
6254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL(100),
6354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LARGER(150),
6454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LARGEST(200);
6554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        TextSize(int size) {
6654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            value = size;
6754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
6854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        int value;
6954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
700d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
710d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    /**
720d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * Enum for specifying the WebView's desired density.
730d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * FAR makes 100% looking like in 240dpi
740d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * MEDIUM makes 100% looking like in 160dpi
750d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * CLOSE makes 100% looking like in 120dpi
760d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @hide Pending API council approval
770d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     */
780d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    public enum ZoomDensity {
790d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        FAR(150),      // 240dpi
800d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        MEDIUM(100),    // 160dpi
810d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        CLOSE(75);     // 120dpi
820d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        ZoomDensity(int size) {
830d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba            value = size;
840d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        }
850d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        int value;
860d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    }
870d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
8854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
8954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Default cache usage pattern  Use with {@link #setCacheMode}.
9054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
9154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_DEFAULT = -1;
9254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
9454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Normal cache usage pattern  Use with {@link #setCacheMode}.
9554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
9654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_NORMAL = 0;
9754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
9854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
9954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use cache if content is there, even if expired (eg, history nav)
10054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * If it is not in the cache, load from network.
10154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use with {@link #setCacheMode}.
10254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
10354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_CACHE_ELSE_NETWORK = 1;
10454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
10554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
10654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Don't use the cache, load from network
10754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use with {@link #setCacheMode}.
10854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
10954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_NO_CACHE = 2;
11054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
11254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Don't use the network, load from cache only.
11354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Use with {@link #setCacheMode}.
11454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
11554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public static final int LOAD_CACHE_ONLY = 3;
11654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
11754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public enum RenderPriority {
11854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        NORMAL,
11954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        HIGH,
12054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        LOW
12154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
12254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1230d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    // WebView associated with this WebSettings.
1240d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    private WebView mWebView;
12554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // BrowserFrame used to access the native frame pointer.
12654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private BrowserFrame mBrowserFrame;
12754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Flag to prevent multiple SYNC messages at one time.
12854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean mSyncPending = false;
12954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Custom handler that queues messages until the WebCore thread is active.
13054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private final EventHandler mEventHandler;
131adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
13254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Private settings so we don't have to go into native code to
13354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // retrieve the values. After setXXX, postSync() needs to be called.
134adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    //
135adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // The default values need to match those in WebSettings.cpp
136adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // If the defaults change, please also update the JavaDocs so developers
137adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    // know what they are.
13854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private LayoutAlgorithm mLayoutAlgorithm = LayoutAlgorithm.NARROW_COLUMNS;
139f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private Context         mContext;
14054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private TextSize        mTextSize = TextSize.NORMAL;
14154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mStandardFontFamily = "sans-serif";
14254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mFixedFontFamily = "monospace";
14354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mSansSerifFontFamily = "sans-serif";
14454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mSerifFontFamily = "serif";
14554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mCursiveFontFamily = "cursive";
14654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private String          mFantasyFontFamily = "fantasy";
147c27d9b5341b29c1b58c882f0a04b4c519d8a9853Daisuke Miyakawa    private String          mDefaultTextEncoding;
148f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String          mUserAgent;
149f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mUseDefaultUserAgent;
150f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String          mAcceptLanguage;
15154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mMinimumFontSize = 8;
15254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mMinimumLogicalFontSize = 8;
15354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mDefaultFontSize = 16;
15454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mDefaultFixedFontSize = 13;
15554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mLoadsImagesAutomatically = true;
15654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mBlockNetworkImage = false;
157c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project    private boolean         mBlockNetworkLoads;
15854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mJavaScriptEnabled = false;
15954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mPluginsEnabled = false;
16011e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard    private long            mWebStorageDefaultQuota = 0;
16154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mJavaScriptCanOpenWindowsAutomatically = false;
16254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mUseDoubleTree = false;
16354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mUseWideViewport = false;
16454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSupportMultipleWindows = false;
165f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mShrinksStandaloneImagesToFit = false;
16654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Don't need to synchronize the get/set methods as they
16754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // are basic types, also none of these values are used in
16854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // native WebCore code.
1690d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    private ZoomDensity     mDefaultZoom = ZoomDensity.MEDIUM;
17054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private RenderPriority  mRenderPriority = RenderPriority.NORMAL;
17154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int             mOverrideCacheMode = LOAD_DEFAULT;
17254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSaveFormData = true;
17354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSavePassword = true;
17454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mLightTouchEnabled = false;
17554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mNeedInitialFocus = true;
17654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mNavDump = false;
17754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private boolean         mSupportZoom = true;
178105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    private boolean         mBuiltInZoomControls = false;
179f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private boolean         mAllowFileAccess = true;
1807df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    private String          mDatabasePath = "";
1817df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    private boolean         mDatabaseEnabled = false;
18260a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    private String          mAppCachePath = "";
18360a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    private boolean         mAppCacheEnabled = false;
184274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    private boolean         mDomStorageEnabled = false;
18554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
18654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Class to handle messages before WebCore is ready.
18754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private class EventHandler {
18854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Message id for syncing
18954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        static final int SYNC = 0;
19054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Message id for setting priority
19154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        static final int PRIORITY = 1;
19254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Actual WebCore thread handler
19354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private Handler mHandler;
19454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
19554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private synchronized void createHandler() {
19654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // as mRenderPriority can be set before thread is running, sync up
19754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            setRenderPriority();
19854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
19954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            // create a new handler
20054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mHandler = new Handler() {
20154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                @Override
20254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                public void handleMessage(Message msg) {
20354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    switch (msg.what) {
20454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        case SYNC:
20554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            synchronized (WebSettings.this) {
20654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                if (mBrowserFrame.mNativeFrame != 0) {
20754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                    nativeSync(mBrowserFrame.mNativeFrame);
20854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                }
20954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                                mSyncPending = false;
21054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            }
21154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            break;
21254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
21354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        case PRIORITY: {
21454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            setRenderPriority();
21554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            break;
21654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                        }
21754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    }
21854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
21954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            };
22054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
22154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
22254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private void setRenderPriority() {
22354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            synchronized (WebSettings.this) {
22454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (mRenderPriority == RenderPriority.NORMAL) {
22554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
22654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_DEFAULT);
22754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } else if (mRenderPriority == RenderPriority.HIGH) {
22854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
22954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_FOREGROUND +
23054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_LESS_FAVORABLE);
23154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                } else if (mRenderPriority == RenderPriority.LOW) {
23254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    android.os.Process.setThreadPriority(
23354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                            android.os.Process.THREAD_PRIORITY_BACKGROUND);
23454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
23554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
23654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
23754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
23854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        /**
23954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         * Send a message to the private queue or handler.
24054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project         */
24154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        private synchronized boolean sendMessage(Message msg) {
24254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            if (mHandler != null) {
24354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                mHandler.sendMessage(msg);
24454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return true;
24554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            } else {
24654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                return false;
24754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
24854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
24954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
25054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
25154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // User agent strings.
25254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private static final String DESKTOP_USERAGENT =
253b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us)"
254b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0"
255b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " Safari/530.17";
256f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static final String IPHONE_USERAGENT =
257b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us)"
258b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0"
259b4f33445b8106f550ade837362c678cf9de2ecd2Grace Kloba            + " Mobile/7A341 Safari/528.16";
260f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static Locale sLocale;
261f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private static Object sLockForLocaleSettings;
262f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
26354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
26454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Package constructor to prevent clients from creating a new settings
26554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * instance.
26654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
2670d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    WebSettings(Context context, WebView webview) {
268f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mEventHandler = new EventHandler();
269f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mContext = context;
2700d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        mWebView = webview;
271c27d9b5341b29c1b58c882f0a04b4c519d8a9853Daisuke Miyakawa        mDefaultTextEncoding = context.getString(com.android.internal.
272c27d9b5341b29c1b58c882f0a04b4c519d8a9853Daisuke Miyakawa                                                 R.string.default_text_encoding);
273f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
274f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (sLockForLocaleSettings == null) {
275f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            sLockForLocaleSettings = new Object();
276f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            sLocale = Locale.getDefault();
277f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
278f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mAcceptLanguage = getCurrentAcceptLanguage();
279f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mUserAgent = getCurrentUserAgent();
280f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mUseDefaultUserAgent = true;
281f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
282c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project        mBlockNetworkLoads = mContext.checkPermission(
283c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                "android.permission.INTERNET", android.os.Process.myPid(),
284c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                android.os.Process.myUid()) != PackageManager.PERMISSION_GRANTED;
285f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
286f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
287f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
288f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Looks at sLocale and returns current AcceptLanguage String.
289f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return Current AcceptLanguage String.
290f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
291f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private String getCurrentAcceptLanguage() {
292f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Locale locale;
293f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
294f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            locale = sLocale;
295f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
296f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        StringBuffer buffer = new StringBuffer();
297f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String language = locale.getLanguage();
298f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (language != null) {
299f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(language);
300f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            final String country = locale.getCountry();
301f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (country != null) {
302f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append("-");
303f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(country);
30454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
305f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
306f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!locale.equals(Locale.US)) {
307f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(", ");
308f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            java.util.Locale us = Locale.US;
309f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (us.getLanguage() != null) {
310f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(us.getLanguage());
311f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                final String country = us.getCountry();
31254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                if (country != null) {
313f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    buffer.append("-");
314f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    buffer.append(country);
31554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                }
31654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
317f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
318f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
319f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return buffer.toString();
320f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
321f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
322f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
323f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Looks at sLocale and mContext and returns current UserAgent String.
324f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return Current UserAgent String.
325f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
326f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private synchronized String getCurrentUserAgent() {
327f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        Locale locale;
328f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
329f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            locale = sLocale;
330f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
331f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        StringBuffer buffer = new StringBuffer();
332f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        // Add version
333f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String version = Build.VERSION.RELEASE;
334f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (version.length() > 0) {
335f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(version);
336f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else {
337f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // default to "1.0"
338f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("1.0");
339f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
340f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        buffer.append("; ");
341f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String language = locale.getLanguage();
342f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (language != null) {
343f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append(language.toLowerCase());
344f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            final String country = locale.getCountry();
345f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (country != null) {
346f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append("-");
347f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                buffer.append(country.toLowerCase());
34854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            }
349f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else {
350f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            // default to "en"
351f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("en");
35254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
353f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String model = Build.MODEL;
3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (model.length() > 0) {
356f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            buffer.append("; ");
3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(model);
3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final String id = Build.ID;
3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (id.length() > 0) {
3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(" Build/");
3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.append(id);
363f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
364f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        final String base = mContext.getResources().getText(
365f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                com.android.internal.R.string.web_user_agent).toString();
366f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return String.format(base, buffer);
36754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
368f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
36954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
37054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enables dumping the pages navigation cache to a text file.
37154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
37254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setNavDump(boolean enabled) {
37354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mNavDump = enabled;
37454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
37554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
37654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
37754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns true if dumping the navigation cache is enabled.
37854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
37954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getNavDump() {
38054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mNavDump;
38154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
38254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
38354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
38454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set whether the WebView supports zoom
38554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
38654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSupportZoom(boolean support) {
38754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSupportZoom = support;
38854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
38954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
39054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
39154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns whether the WebView supports zoom
39254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
39354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean supportZoom() {
39454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSupportZoom;
39554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
39654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
39754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
398105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     * Sets whether the zoom mechanism built into WebView is used.
399105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     */
400105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    public void setBuiltInZoomControls(boolean enabled) {
401105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        mBuiltInZoomControls = enabled;
402105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    }
403105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
404105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    /**
405105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     * Returns true if the zoom mechanism built into WebView is being used.
406105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project     */
407105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    public boolean getBuiltInZoomControls() {
408105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project        return mBuiltInZoomControls;
409105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    }
410105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project
411105925376f8d0f6b318c9938c7b83ef7fef094daThe Android Open Source Project    /**
412f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Enable or disable file access within WebView. File access is enabled by
413f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * default.
414f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
415f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void setAllowFileAccess(boolean allow) {
416f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        mAllowFileAccess = allow;
417f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
418f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
419f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
420f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Returns true if this WebView supports file access.
421f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
422f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public boolean getAllowFileAccess() {
423f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mAllowFileAccess;
424f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
425f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
426f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
42754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Store whether the WebView is saving form data.
42854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
42954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSaveFormData(boolean save) {
43054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSaveFormData = save;
43154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
43254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
43354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
43454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Return whether the WebView is saving form data.
43554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
43654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getSaveFormData() {
43754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSaveFormData;
43854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
43954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
44054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
44154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Store whether the WebView is saving password.
44254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
44354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setSavePassword(boolean save) {
44454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSavePassword = save;
44554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
44654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
44754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
44854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *  Return whether the WebView is saving password.
44954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
45054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getSavePassword() {
45154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSavePassword;
45254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
45354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
45454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
45554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the text size of the page.
45654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param t A TextSize value for increasing or decreasing the text.
45754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.TextSize
45854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
45954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setTextSize(TextSize t) {
4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (WebView.mLogEvent && mTextSize != t ) {
4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Checkin.updateStats(mContext.getContentResolver(),
4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    Checkin.Stats.Tag.BROWSER_TEXT_SIZE_CHANGE, 1, 0.0);
4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
46454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mTextSize = t;
46554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        postSync();
46654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
46754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
46854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
46954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Get the text size of the page.
47054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A TextSize enum value describing the text size.
47154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.TextSize
47254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
47354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized TextSize getTextSize() {
47454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mTextSize;
47554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
47654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
47754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
4780d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * Set the default zoom density of the page. This should be called from UI
4790d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * thread.
4800d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @param zoom A ZoomDensity value
4810d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @see WebSettings.ZoomDensity
4820d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @hide Pending API council approval
4830d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     */
4840d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    public void setDefaultZoom(ZoomDensity zoom) {
4850d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        if (mDefaultZoom != zoom) {
4860d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba            mDefaultZoom = zoom;
4870d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba            mWebView.updateDefaultZoomDensity(zoom.value);
4880d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        }
4890d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    }
4900d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
4910d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    /**
4920d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * Get the default zoom density of the page. This should be called from UI
4930d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * thread.
4940d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @return A ZoomDensity value
4950d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @see WebSettings.ZoomDensity
4960d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     * @hide Pending API council approval
4970d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba     */
4980d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    public ZoomDensity getDefaultZoom() {
4990d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba        return mDefaultZoom;
5000d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    }
5010d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba
5020d8b77c2453d0e597f94e39212e4bfeed8affffaGrace Kloba    /**
50354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Enables using light touches to make a selection and activate mouseovers.
50454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
50554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setLightTouchEnabled(boolean enabled) {
50654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mLightTouchEnabled = enabled;
50754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
50854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
50954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
51054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Returns true if light touches are enabled.
51154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
51254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public boolean getLightTouchEnabled() {
51354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLightTouchEnabled;
51454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
51554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
51654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
517adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * @deprecated This setting controlled a rendering optimization
518adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * that is no longer present. Setting it now has no effect.
51954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
520adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    @Deprecated
52154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUseDoubleTree(boolean use) {
522adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn        return;
52354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
52454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
52554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
526adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * @deprecated This setting controlled a rendering optimization
527adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * that is no longer present. Setting it now has no effect.
52854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
529adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn    @Deprecated
53054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getUseDoubleTree() {
531adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn        return false;
53254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
53354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
53454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
53554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView about user-agent string.
53654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param ua 0 if the WebView should use an Android user-agent string,
53754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *           1 if the WebView should use a desktop user-agent string.
538f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *
539f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @deprecated Please use setUserAgentString instead.
54054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
541f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Deprecated
54254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUserAgent(int ua) {
543f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        String uaString = null;
544f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (ua == 1) {
545f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (DESKTOP_USERAGENT.equals(mUserAgent)) {
546f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                return; // do nothing
547f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } else {
548f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                uaString = DESKTOP_USERAGENT;
549f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
550f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (ua == 2) {
551f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (IPHONE_USERAGENT.equals(mUserAgent)) {
552f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                return; // do nothing
553f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            } else {
554f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                uaString = IPHONE_USERAGENT;
555f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
556f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (ua != 0) {
557f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return; // do nothing
55854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
559f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        setUserAgentString(uaString);
56054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
56154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
56254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
56354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return user-agent as int
56454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return int  0 if the WebView is using an Android user-agent string.
56554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *              1 if the WebView is using a desktop user-agent string.
566f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *             -1 if the WebView is using user defined user-agent string.
567f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     *
568f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @deprecated Please use getUserAgentString instead.
56954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
570f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    @Deprecated
57154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getUserAgent() {
57254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent)) {
57354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 1;
57454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else if (IPHONE_USERAGENT.equals(mUserAgent)) {
57554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 2;
576f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else if (mUseDefaultUserAgent) {
577f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return 0;
57854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
579f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return -1;
58054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
58154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
58254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
58354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to use the wide viewport
58454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
58554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setUseWideViewPort(boolean use) {
58654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mUseWideViewport != use) {
58754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mUseWideViewport = use;
58854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
58954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
59054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
59154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
59254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
59354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView is using a wide viewport
59454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
59554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getUseWideViewPort() {
59654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mUseWideViewport;
59754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
59854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
59954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
60054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView whether it supports multiple windows. TRUE means
60154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
60254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
60354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
60454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSupportMultipleWindows(boolean support) {
60554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mSupportMultipleWindows != support) {
60654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSupportMultipleWindows = support;
60754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
60854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
60954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
61054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
61154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
61254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView is supporting multiple windows. This means
61354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         that {@link WebChromeClient#onCreateWindow(WebView, boolean,
61454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         boolean, Message)} is implemented by the host application.
61554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
61654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean supportMultipleWindows() {
61754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSupportMultipleWindows;
61854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
61954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
62054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
62154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the underlying layout algorithm. This will cause a relayout of the
62254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * WebView.
62354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param l A LayoutAlgorithm enum specifying the algorithm to use.
62454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
62554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
62654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setLayoutAlgorithm(LayoutAlgorithm l) {
62754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // XXX: This will only be affective if libwebcore was built with
62854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // ANDROID_LAYOUT defined.
62954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mLayoutAlgorithm != l) {
63054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mLayoutAlgorithm = l;
63154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
63254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
63354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
63454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
63554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
636adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return the current layout algorithm. The default is NARROW_COLUMNS.
63754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return LayoutAlgorithm enum value describing the layout algorithm
63854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         being used.
63954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @see WebSettings.LayoutAlgorithm
64054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
64154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized LayoutAlgorithm getLayoutAlgorithm() {
64254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLayoutAlgorithm;
64354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
64454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
64554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
64654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the standard font family name.
64754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
64854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
64954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setStandardFontFamily(String font) {
65054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mStandardFontFamily)) {
65154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mStandardFontFamily = font;
65254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
65354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
65454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
65554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
65654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
657adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the standard font family name. The default is "sans-serif".
65854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The standard font family name as a string.
65954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
66054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getStandardFontFamily() {
66154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mStandardFontFamily;
66254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
66354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
66454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
66554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the fixed font family name.
66654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
66754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
66854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setFixedFontFamily(String font) {
66954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mFixedFontFamily)) {
67054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mFixedFontFamily = font;
67154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
67254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
67354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
67454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
67554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
676adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the fixed font family name. The default is "monospace".
67754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The fixed font family name as a string.
67854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
67954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getFixedFontFamily() {
68054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mFixedFontFamily;
68154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
68254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
68354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
68454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the sans-serif font family name.
68554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
68654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
68754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSansSerifFontFamily(String font) {
68854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mSansSerifFontFamily)) {
68954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSansSerifFontFamily = font;
69054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
69154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
69254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
69354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
69454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
69554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Get the sans-serif font family name.
69654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The sans-serif font family name as a string.
69754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
69854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getSansSerifFontFamily() {
69954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSansSerifFontFamily;
70054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
70154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
70254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
703adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Set the serif font family name. The default is "sans-serif".
70454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
70554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
70654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setSerifFontFamily(String font) {
70754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mSerifFontFamily)) {
70854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSerifFontFamily = font;
70954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
71054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
71154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
71254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
71354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
714adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the serif font family name. The default is "serif".
71554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The serif font family name as a string.
71654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
71754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getSerifFontFamily() {
71854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mSerifFontFamily;
71954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
72054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
72154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
72254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the cursive font family name.
72354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
72454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
72554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setCursiveFontFamily(String font) {
72654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mCursiveFontFamily)) {
72754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mCursiveFontFamily = font;
72854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
72954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
73054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
73154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
73254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
733adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the cursive font family name. The default is "cursive".
73454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The cursive font family name as a string.
73554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
73654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getCursiveFontFamily() {
73754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mCursiveFontFamily;
73854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
73954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
74054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
74154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the fantasy font family name.
74254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param font A font family name.
74354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
74454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setFantasyFontFamily(String font) {
74554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (font != null && !font.equals(mFantasyFontFamily)) {
74654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mFantasyFontFamily = font;
74754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
74854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
74954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
75054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
75154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
752adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the fantasy font family name. The default is "fantasy".
75354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The fantasy font family name as a string.
75454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
75554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getFantasyFontFamily() {
75654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mFantasyFontFamily;
75754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
75854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
75954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
76054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the minimum font size.
76154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
76254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
76354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
76454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setMinimumFontSize(int size) {
76554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
76654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mMinimumFontSize != size) {
76754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mMinimumFontSize = size;
76854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
76954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
77054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
77154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
77254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
773adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the minimum font size. The default is 8.
77454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
77554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
77654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getMinimumFontSize() {
77754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mMinimumFontSize;
77854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
77954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
78054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
78154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the minimum logical font size.
78254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
78354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
78454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
78554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setMinimumLogicalFontSize(int size) {
78654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
78754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mMinimumLogicalFontSize != size) {
78854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mMinimumLogicalFontSize = size;
78954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
79054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
79154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
79254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
79354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
794adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the minimum logical font size. The default is 8.
79554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
79654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
79754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getMinimumLogicalFontSize() {
79854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mMinimumLogicalFontSize;
79954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
80054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
80154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
80254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default font size.
80354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
80454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
80554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
80654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultFontSize(int size) {
80754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
80854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mDefaultFontSize != size) {
80954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultFontSize = size;
81054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
81154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
81254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
81354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
81454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
815adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default font size. The default is 16.
81654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
81754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
81854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getDefaultFontSize() {
81954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultFontSize;
82054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
82154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
82254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
82354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default fixed font size.
82454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param size A non-negative integer between 1 and 72.
82554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Any number outside the specified range will be pinned.
82654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
82754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultFixedFontSize(int size) {
82854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        size = pin(size);
82954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mDefaultFixedFontSize != size) {
83054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultFixedFontSize = size;
83154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
83254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
83354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
83454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
83554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
836adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default fixed font size. The default is 16.
83754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return A non-negative integer between 1 and 72.
83854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
83954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized int getDefaultFixedFontSize() {
84054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultFixedFontSize;
84154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
84254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
84354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
84454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to load image resources automatically.
84554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should load images automatically.
84654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
84754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setLoadsImagesAutomatically(boolean flag) {
84854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mLoadsImagesAutomatically != flag) {
84954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mLoadsImagesAutomatically = flag;
85054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
85154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
85254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
85354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
85454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
85554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return true if the WebView will load image resources automatically.
856adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * The default is true.
85754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView loads images automatically.
85854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
85954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getLoadsImagesAutomatically() {
86054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mLoadsImagesAutomatically;
86154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
86254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
86354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
86454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to block network image. This is only checked when
86554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * getLoadsImagesAutomatically() is true.
86654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should block network image
86754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
86854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setBlockNetworkImage(boolean flag) {
86954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mBlockNetworkImage != flag) {
87054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mBlockNetworkImage = flag;
87154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
87254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
87354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
87454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
87554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
876adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if the WebView will block network image. The default is false.
87754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if the WebView blocks network image.
87854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
87954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getBlockNetworkImage() {
88054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mBlockNetworkImage;
88154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
882adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
883f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
884f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @hide
885adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Tell the WebView to block all network load requests.
886f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @param flag True if the WebView should block all network loads
887f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
888f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized void setBlockNetworkLoads(boolean flag) {
889f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (mBlockNetworkLoads != flag) {
890f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mBlockNetworkLoads = flag;
891f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            verifyNetworkAccess();
892f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
893f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
894f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
895f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
896f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @hide
897f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Return true if the WebView will block all network loads.
898adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * The default is false.
899f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @return True if the WebView blocks all network loads.
900f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
901f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized boolean getBlockNetworkLoads() {
902f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mBlockNetworkLoads;
903f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
904adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
905adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn
906f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    private void verifyNetworkAccess() {
907f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!mBlockNetworkLoads) {
908f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (mContext.checkPermission("android.permission.INTERNET",
909c39a6e0c51e182338deb8b63d07933b585134929The Android Open Source Project                    android.os.Process.myPid(), android.os.Process.myUid()) !=
910f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        PackageManager.PERMISSION_GRANTED) {
911f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                throw new SecurityException
912f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                        ("Permission denied - " +
913f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                                "application missing INTERNET permission");
914f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
915f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
916f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
91754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
91854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
91954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to enable javascript execution.
92054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should execute javascript.
92154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
92254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setJavaScriptEnabled(boolean flag) {
92354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mJavaScriptEnabled != flag) {
92454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mJavaScriptEnabled = flag;
92554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
92654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
92754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
92854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
92954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
93054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView to enable plugins.
93154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if the WebView should load plugins.
93254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
93354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setPluginsEnabled(boolean flag) {
93454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mPluginsEnabled != flag) {
93554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mPluginsEnabled = flag;
93654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
93754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
93854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
93954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
94054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
941658ab7d787f64987d7c45aae08e5a12a073afe78Grace Kloba     * TODO: need to add @Deprecated
94254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
94354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setPluginsPath(String pluginsPath) {
94454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
94554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
94654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
94711e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard     * @hide
94811e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard     * Set the default quota for WebStorage DBs
94911e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard     * @param quota the default quota in bytes
95011e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard     */
95111e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard    public synchronized void setWebStorageDefaultQuota(long quota) {
95211e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard        if (mWebStorageDefaultQuota != quota) {
95311e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard            mWebStorageDefaultQuota = quota;
95411e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard            postSync();
95511e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard        }
95611e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard    }
95711e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard
95811e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard    /**
9597df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Set the path to where database storage API databases should be saved.
9607df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * This will update WebCore when the Sync runs in the C++ side.
9617df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @param databasePath String path to the directory where databases should
9627df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     *     be saved. May be the empty string but should never be null.
9637df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
9647df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized void setDatabasePath(String databasePath) {
9657df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        if (databasePath != null && !databasePath.equals(mDatabasePath)) {
9667df1985e86635af006be3dfa65987d60e290b5deBen Murdoch            mDatabasePath = databasePath;
9677df1985e86635af006be3dfa65987d60e290b5deBen Murdoch            postSync();
9687df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        }
9697df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
9707df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
9717df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
97260a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * Tell the WebView to enable Application Caches API.
97360a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @param flag True if the WebView should enable Application Caches.
97460a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @hide pending api council approval
97560a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     */
97660a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    public synchronized void setAppCacheEnabled(boolean flag) {
97760a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        if (mAppCacheEnabled != flag) {
97860a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            mAppCacheEnabled = flag;
97960a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            postSync();
98060a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        }
98160a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    }
98260a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu
98360a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    /**
98460a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * Set a custom path to the Application Caches files. The client
98560a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * must ensure it exists before this call.
98660a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @param appCachePath String path to the directory containing Application
98760a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * Caches files. The appCache path can be the empty string but should not
98860a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * be null. Passing null for this parameter will result in a no-op.
98960a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     * @hide pending api council approval
99060a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu     */
99160a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    public synchronized void setAppCachePath(String appCachePath) {
99260a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        if (appCachePath != null && !appCachePath.equals(mAppCachePath)) {
99360a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            mAppCachePath = appCachePath;
99460a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu            postSync();
99560a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu        }
99660a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    }
99760a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu
99860a9a7d05577a65c8904fcb5f32b6a7a10886a13Andrei Popescu    /**
9997df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Set whether the database storage API is enabled.
10007df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @param flag boolean True if the WebView should use the database storage
10017df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     *     API.
10027df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
10037df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized void setDatabaseEnabled(boolean flag) {
10047df1985e86635af006be3dfa65987d60e290b5deBen Murdoch       if (mDatabaseEnabled != flag) {
10057df1985e86635af006be3dfa65987d60e290b5deBen Murdoch           mDatabaseEnabled = flag;
10067df1985e86635af006be3dfa65987d60e290b5deBen Murdoch           postSync();
10077df1985e86635af006be3dfa65987d60e290b5deBen Murdoch       }
10087df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
10097df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
10107df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
1011274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * Set whether the DOM storage API is enabled.
1012274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @param flag boolean True if the WebView should use the DOM storage
1013274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     *     API.
1014274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @hide pending API council.
1015274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     */
1016274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    public synchronized void setDomStorageEnabled(boolean flag) {
1017274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch       if (mDomStorageEnabled != flag) {
1018274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch           mDomStorageEnabled = flag;
1019274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch           postSync();
1020274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch       }
1021274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    }
1022274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch
1023274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    /**
1024274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * Returns true if the DOM Storage API's are enabled.
1025274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @return True if the DOM Storage API's are enabled.
1026274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     * @hide pending API council.
1027274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch     */
1028274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    public synchronized boolean getDomStorageEnabled() {
1029274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch       return mDomStorageEnabled;
1030274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    }
1031274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch
1032274680d9b8fce08f31c23dda796ecec937c942deBen Murdoch    /**
10337df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Return the path to where database storage API databases are saved for
10347df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * the current WebView.
10357df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @return the String path to the database storage API databases.
10367df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
10377df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized String getDatabasePath() {
10387df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        return mDatabasePath;
10397df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
10407df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
10417df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
10427df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * Returns true if database storage API is enabled.
10437df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     * @return True if the database storage API is enabled.
10447df1985e86635af006be3dfa65987d60e290b5deBen Murdoch     */
10457df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    public synchronized boolean getDatabaseEnabled() {
10467df1985e86635af006be3dfa65987d60e290b5deBen Murdoch        return mDatabaseEnabled;
10477df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    }
10487df1985e86635af006be3dfa65987d60e290b5deBen Murdoch
10497df1985e86635af006be3dfa65987d60e290b5deBen Murdoch    /**
1050adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if javascript is enabled. <b>Note: The default is false.</b>
105154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if javascript is enabled.
105254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
105354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getJavaScriptEnabled() {
105454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mJavaScriptEnabled;
105554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
105654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
105754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
105854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return true if plugins are enabled.
105954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if plugins are enabled.
106054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
106154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getPluginsEnabled() {
106254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mPluginsEnabled;
106354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
106454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
106554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1066658ab7d787f64987d7c45aae08e5a12a073afe78Grace Kloba     * TODO: need to add @Deprecated
106754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
106854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getPluginsPath() {
1069658ab7d787f64987d7c45aae08e5a12a073afe78Grace Kloba        return "";
107054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
107154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
107254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
107311e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard     * @hide
107411e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard     * Return the default quota for WebStorage DBs
107511e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard     * @return the default quota in bytes
107611e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard     */
107711e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard    public synchronized long getWebStorageDefaultQuota() {
107811e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard        return mWebStorageDefaultQuota;
107911e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard    }
108011e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard
108111e8fe5a7208c9cd6afc2a0373761ae506d7707fNicolas Roard    /**
108254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell javascript to open windows automatically. This applies to the
108354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * javascript function window.open().
108454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag True if javascript can open windows automatically.
108554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
108654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setJavaScriptCanOpenWindowsAutomatically(
108754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            boolean flag) {
108854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mJavaScriptCanOpenWindowsAutomatically != flag) {
108954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mJavaScriptCanOpenWindowsAutomatically = flag;
109054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
109154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
109254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
109354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
109454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1095adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Return true if javascript can open windows automatically. The default
1096adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * is false.
109754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return True if javascript can open windows automatically during
109854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *         window.open().
109954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
110054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized boolean getJavaScriptCanOpenWindowsAutomatically() {
110154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mJavaScriptCanOpenWindowsAutomatically;
110254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
110354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
110454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
110554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the default text encoding name to use when decoding html pages.
110654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param encoding The text encoding name.
110754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
110854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setDefaultTextEncodingName(String encoding) {
110954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (encoding != null && !encoding.equals(mDefaultTextEncoding)) {
111054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mDefaultTextEncoding = encoding;
111154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            postSync();
111254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
111354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
111454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
111554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
1116adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * Get the default text encoding name. The default is "Latin-1".
111754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @return The default text encoding name as a string.
111854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
111954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized String getDefaultTextEncodingName() {
112054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mDefaultTextEncoding;
112154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
112254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1123f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1124f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Set the WebView's user-agent string. If the string "ua" is null or empty,
1125f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * it will use the system default user-agent string.
1126f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1127f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized void setUserAgentString(String ua) {
1128f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (ua == null || ua.length() == 0) {
1129f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            synchronized(sLockForLocaleSettings) {
1130f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                Locale currentLocale = Locale.getDefault();
1131f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                if (!sLocale.equals(currentLocale)) {
1132f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    sLocale = currentLocale;
1133f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                    mAcceptLanguage = getCurrentAcceptLanguage();
1134f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                }
1135f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1136f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            ua = getCurrentUserAgent();
1137f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUseDefaultUserAgent = true;
1138f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        } else  {
1139f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUseDefaultUserAgent = false;
1140f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1141f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1142f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (!ua.equals(mUserAgent)) {
1143f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mUserAgent = ua;
1144f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1145f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1146f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1147f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1148f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1149f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * Return the WebView's user-agent string.
1150f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1151f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public synchronized String getUserAgentString() {
1152f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (DESKTOP_USERAGENT.equals(mUserAgent) ||
1153f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                IPHONE_USERAGENT.equals(mUserAgent) ||
1154f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                !mUseDefaultUserAgent) {
1155f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            return mUserAgent;
1156f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1157f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1158f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        boolean doPostSync = false;
1159f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
1160f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            Locale currentLocale = Locale.getDefault();
1161f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
1162f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                sLocale = currentLocale;
1163f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mUserAgent = getCurrentUserAgent();
1164f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
1165f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                doPostSync = true;
1166f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1167f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1168f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (doPostSync) {
1169f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1170f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
117154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mUserAgent;
117254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
117354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
1174f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /* package api to grab the Accept Language string. */
1175f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /*package*/ synchronized String getAcceptLanguage() {
1176f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        synchronized(sLockForLocaleSettings) {
1177f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            Locale currentLocale = Locale.getDefault();
1178f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            if (!sLocale.equals(currentLocale)) {
1179f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                sLocale = currentLocale;
1180f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project                mAcceptLanguage = getCurrentAcceptLanguage();
1181f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            }
1182f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1183f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        return mAcceptLanguage;
1184f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    }
1185f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
118654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
118754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Tell the WebView whether it needs to set a node to have focus when
118854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * {@link WebView#requestFocus(int, android.graphics.Rect)} is called.
118954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     *
119054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param flag
119154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
119254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setNeedInitialFocus(boolean flag) {
119354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mNeedInitialFocus != flag) {
119454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mNeedInitialFocus = flag;
119554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
119654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
119754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
119854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* Package api to get the choice whether it needs to set initial focus. */
119954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* package */ boolean getNeedInitialFocus() {
120054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mNeedInitialFocus;
120154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
120254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
120354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
120454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Set the priority of the Render thread. Unlike the other settings, this
1205adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     * one only needs to be called once per process. The default is NORMAL.
1206adcd2ed8d24deddee528e96260d0ed673eeb261cMike Hearn     *
120754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param priority RenderPriority, can be normal, high or low.
120854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
120954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public synchronized void setRenderPriority(RenderPriority priority) {
121054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mRenderPriority != priority) {
121154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mRenderPriority = priority;
121254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mEventHandler.sendMessage(Message.obtain(null,
121354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    EventHandler.PRIORITY));
121454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
121554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
121654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
121754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
121854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Override the way the cache is used. The way the cache is used is based
121954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * on the navigation option. For a normal page load, the cache is checked
122054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * and content is re-validated as needed. When navigating back, content is
122154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * not revalidated, instead the content is just pulled from the cache.
122254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * This function allows the client to override this behavior.
122354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * @param mode One of the LOAD_ values.
122454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
122554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public void setCacheMode(int mode) {
122654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (mode != mOverrideCacheMode) {
122754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mOverrideCacheMode = mode;
122854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
122954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
123054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
123154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
123254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Return the current setting for overriding the cache mode. For a full
123354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * description, see the {@link #setCacheMode(int)} function.
123454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
123554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    public int getCacheMode() {
123654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return mOverrideCacheMode;
123754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
1238f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project
1239f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    /**
1240f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * If set, webkit alternately shrinks and expands images viewed outside
1241f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * of an HTML page to fit the screen. This conflicts with attempts by
1242f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * the UI to zoom in and out of an image, so it is set false by default.
1243f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * @param shrink Set true to let webkit shrink the standalone image to fit.
1244f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     * {@hide}
1245f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     */
1246f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project    public void setShrinksStandaloneImagesToFit(boolean shrink) {
1247f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        if (mShrinksStandaloneImagesToFit != shrink) {
1248f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            mShrinksStandaloneImagesToFit = shrink;
1249f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project            postSync();
1250f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project        }
1251f013e1afd1e68af5e3b868c26a653bbfb39538f8The Android Open Source Project     }
125254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
125354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /**
125454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * Transfer messages from the queue to the new WebCoreThread. Called from
125554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     * WebCore thread.
125654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project     */
125754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /*package*/
125854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    synchronized void syncSettingsAndCreateHandler(BrowserFrame frame) {
125954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mBrowserFrame = frame;
12602e5c150e746647a1ce5c10e1708debbf06c45ea7Derek Sollenberger        if (DebugFlags.WEB_SETTINGS) {
126154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            junit.framework.Assert.assertTrue(frame.mNativeFrame != 0);
126254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
126354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        nativeSync(frame.mNativeFrame);
126454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mSyncPending = false;
126554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        mEventHandler.createHandler();
126654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
126754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
126854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private int pin(int size) {
126954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // FIXME: 72 is just an arbitrary max text size value.
127054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (size < 1) {
127154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 1;
127254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        } else if (size > 72) {
127354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            return 72;
127454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
127554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        return size;
127654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
127754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
127854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    /* Post a SYNC message to handle syncing the native settings. */
127954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private synchronized void postSync() {
128054b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        // Only post if a sync is not pending
128154b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        if (!mSyncPending) {
128254b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project            mSyncPending = mEventHandler.sendMessage(
128354b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project                    Message.obtain(null, EventHandler.SYNC));
128454b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project        }
128554b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    }
128654b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project
128754b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    // Synchronize the native and java settings.
128854b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project    private native void nativeSync(int nativeFrame);
128954b6cfa9a9e5b861a9930af873580d6dc20f773The Android Open Source Project}
1290