summaryrefslogtreecommitdiffstats
path: root/WebKit/android/jni/WebSettings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebKit/android/jni/WebSettings.cpp')
-rw-r--r--WebKit/android/jni/WebSettings.cpp599
1 files changed, 0 insertions, 599 deletions
diff --git a/WebKit/android/jni/WebSettings.cpp b/WebKit/android/jni/WebSettings.cpp
deleted file mode 100644
index 468e7b0..0000000
--- a/WebKit/android/jni/WebSettings.cpp
+++ /dev/null
@@ -1,599 +0,0 @@
-/*
- * Copyright 2007, The Android Open Source Project
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#define LOG_TAG "websettings"
-
-#include <config.h>
-#include <wtf/Platform.h>
-
-#include "ApplicationCacheStorage.h"
-#include "BitmapAllocatorAndroid.h"
-#include "CachedResourceLoader.h"
-#include "ChromiumIncludes.h"
-#include "DatabaseTracker.h"
-#include "Database.h"
-#include "Document.h"
-#include "EditorClientAndroid.h"
-#include "FileSystem.h"
-#include "Frame.h"
-#include "FrameLoader.h"
-#include "FrameView.h"
-#include "GeolocationPermissions.h"
-#include "GeolocationPositionCache.h"
-#include "Page.h"
-#include "PageCache.h"
-#include "RenderTable.h"
-#include "SQLiteFileSystem.h"
-#include "Settings.h"
-#include "WebCoreFrameBridge.h"
-#include "WebCoreJni.h"
-#if USE(V8)
-#include "WorkerContextExecutionProxy.h"
-#endif
-#include "WebRequestContext.h"
-#include "WebViewCore.h"
-
-#include <JNIHelp.h>
-#include <utils/misc.h>
-#include <wtf/text/CString.h>
-
-namespace android {
-
-static const int permissionFlags660 = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
-
-struct FieldIds {
- FieldIds(JNIEnv* env, jclass clazz) {
- mLayoutAlgorithm = env->GetFieldID(clazz, "mLayoutAlgorithm",
- "Landroid/webkit/WebSettings$LayoutAlgorithm;");
- mTextSize = env->GetFieldID(clazz, "mTextSize",
- "Landroid/webkit/WebSettings$TextSize;");
- mStandardFontFamily = env->GetFieldID(clazz, "mStandardFontFamily",
- "Ljava/lang/String;");
- mFixedFontFamily = env->GetFieldID(clazz, "mFixedFontFamily",
- "Ljava/lang/String;");
- mSansSerifFontFamily = env->GetFieldID(clazz, "mSansSerifFontFamily",
- "Ljava/lang/String;");
- mSerifFontFamily = env->GetFieldID(clazz, "mSerifFontFamily",
- "Ljava/lang/String;");
- mCursiveFontFamily = env->GetFieldID(clazz, "mCursiveFontFamily",
- "Ljava/lang/String;");
- mFantasyFontFamily = env->GetFieldID(clazz, "mFantasyFontFamily",
- "Ljava/lang/String;");
- mDefaultTextEncoding = env->GetFieldID(clazz, "mDefaultTextEncoding",
- "Ljava/lang/String;");
- mUserAgent = env->GetFieldID(clazz, "mUserAgent",
- "Ljava/lang/String;");
- mAcceptLanguage = env->GetFieldID(clazz, "mAcceptLanguage", "Ljava/lang/String;");
- mMinimumFontSize = env->GetFieldID(clazz, "mMinimumFontSize", "I");
- mMinimumLogicalFontSize = env->GetFieldID(clazz, "mMinimumLogicalFontSize", "I");
- mDefaultFontSize = env->GetFieldID(clazz, "mDefaultFontSize", "I");
- mDefaultFixedFontSize = env->GetFieldID(clazz, "mDefaultFixedFontSize", "I");
- mLoadsImagesAutomatically = env->GetFieldID(clazz, "mLoadsImagesAutomatically", "Z");
-#ifdef ANDROID_BLOCK_NETWORK_IMAGE
- mBlockNetworkImage = env->GetFieldID(clazz, "mBlockNetworkImage", "Z");
-#endif
- mBlockNetworkLoads = env->GetFieldID(clazz, "mBlockNetworkLoads", "Z");
- mJavaScriptEnabled = env->GetFieldID(clazz, "mJavaScriptEnabled", "Z");
- mPluginState = env->GetFieldID(clazz, "mPluginState",
- "Landroid/webkit/WebSettings$PluginState;");
-#if ENABLE(DATABASE)
- mDatabaseEnabled = env->GetFieldID(clazz, "mDatabaseEnabled", "Z");
-#endif
-#if ENABLE(DOM_STORAGE)
- mDomStorageEnabled = env->GetFieldID(clazz, "mDomStorageEnabled", "Z");
-#endif
-#if ENABLE(DATABASE) || ENABLE(DOM_STORAGE)
- // The databases saved to disk for both the SQL and DOM Storage APIs are stored
- // in the same base directory.
- mDatabasePath = env->GetFieldID(clazz, "mDatabasePath", "Ljava/lang/String;");
- mDatabasePathHasBeenSet = env->GetFieldID(clazz, "mDatabasePathHasBeenSet", "Z");
-#endif
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- mAppCacheEnabled = env->GetFieldID(clazz, "mAppCacheEnabled", "Z");
- mAppCachePath = env->GetFieldID(clazz, "mAppCachePath", "Ljava/lang/String;");
- mAppCacheMaxSize = env->GetFieldID(clazz, "mAppCacheMaxSize", "J");
-#endif
-#if ENABLE(WORKERS)
- mWorkersEnabled = env->GetFieldID(clazz, "mWorkersEnabled", "Z");
-#endif
- mGeolocationEnabled = env->GetFieldID(clazz, "mGeolocationEnabled", "Z");
- mGeolocationDatabasePath = env->GetFieldID(clazz, "mGeolocationDatabasePath", "Ljava/lang/String;");
- mXSSAuditorEnabled = env->GetFieldID(clazz, "mXSSAuditorEnabled", "Z");
- mJavaScriptCanOpenWindowsAutomatically = env->GetFieldID(clazz,
- "mJavaScriptCanOpenWindowsAutomatically", "Z");
- mUseWideViewport = env->GetFieldID(clazz, "mUseWideViewport", "Z");
- mSupportMultipleWindows = env->GetFieldID(clazz, "mSupportMultipleWindows", "Z");
- mShrinksStandaloneImagesToFit = env->GetFieldID(clazz, "mShrinksStandaloneImagesToFit", "Z");
- mMaximumDecodedImageSize = env->GetFieldID(clazz, "mMaximumDecodedImageSize", "J");
- mPrivateBrowsingEnabled = env->GetFieldID(clazz, "mPrivateBrowsingEnabled", "Z");
- mSyntheticLinksEnabled = env->GetFieldID(clazz, "mSyntheticLinksEnabled", "Z");
- mUseDoubleTree = env->GetFieldID(clazz, "mUseDoubleTree", "Z");
- mPageCacheCapacity = env->GetFieldID(clazz, "mPageCacheCapacity", "I");
-#if ENABLE(WEB_AUTOFILL)
- mAutoFillEnabled = env->GetFieldID(clazz, "mAutoFillEnabled", "Z");
- mAutoFillProfile = env->GetFieldID(clazz, "mAutoFillProfile", "Landroid/webkit/WebSettings$AutoFillProfile;");
- jclass autoFillProfileClass = env->FindClass("android/webkit/WebSettings$AutoFillProfile");
- mAutoFillProfileFullName = env->GetFieldID(autoFillProfileClass, "mFullName", "Ljava/lang/String;");
- mAutoFillProfileEmailAddress = env->GetFieldID(autoFillProfileClass, "mEmailAddress", "Ljava/lang/String;");
- mAutoFillProfileCompanyName = env->GetFieldID(autoFillProfileClass, "mCompanyName", "Ljava/lang/String;");
- mAutoFillProfileAddressLine1 = env->GetFieldID(autoFillProfileClass, "mAddressLine1", "Ljava/lang/String;");
- mAutoFillProfileAddressLine2 = env->GetFieldID(autoFillProfileClass, "mAddressLine2", "Ljava/lang/String;");
- mAutoFillProfileCity = env->GetFieldID(autoFillProfileClass, "mCity", "Ljava/lang/String;");
- mAutoFillProfileState = env->GetFieldID(autoFillProfileClass, "mState", "Ljava/lang/String;");
- mAutoFillProfileZipCode = env->GetFieldID(autoFillProfileClass, "mZipCode", "Ljava/lang/String;");
- mAutoFillProfileCountry = env->GetFieldID(autoFillProfileClass, "mCountry", "Ljava/lang/String;");
- mAutoFillProfilePhoneNumber = env->GetFieldID(autoFillProfileClass, "mPhoneNumber", "Ljava/lang/String;");
- env->DeleteLocalRef(autoFillProfileClass);
-#endif
-#if USE(CHROME_NETWORK_STACK)
- mOverrideCacheMode = env->GetFieldID(clazz, "mOverrideCacheMode", "I");
-#endif
-
- LOG_ASSERT(mLayoutAlgorithm, "Could not find field mLayoutAlgorithm");
- LOG_ASSERT(mTextSize, "Could not find field mTextSize");
- LOG_ASSERT(mStandardFontFamily, "Could not find field mStandardFontFamily");
- LOG_ASSERT(mFixedFontFamily, "Could not find field mFixedFontFamily");
- LOG_ASSERT(mSansSerifFontFamily, "Could not find field mSansSerifFontFamily");
- LOG_ASSERT(mSerifFontFamily, "Could not find field mSerifFontFamily");
- LOG_ASSERT(mCursiveFontFamily, "Could not find field mCursiveFontFamily");
- LOG_ASSERT(mFantasyFontFamily, "Could not find field mFantasyFontFamily");
- LOG_ASSERT(mDefaultTextEncoding, "Could not find field mDefaultTextEncoding");
- LOG_ASSERT(mUserAgent, "Could not find field mUserAgent");
- LOG_ASSERT(mAcceptLanguage, "Could not find field mAcceptLanguage");
- LOG_ASSERT(mMinimumFontSize, "Could not find field mMinimumFontSize");
- LOG_ASSERT(mMinimumLogicalFontSize, "Could not find field mMinimumLogicalFontSize");
- LOG_ASSERT(mDefaultFontSize, "Could not find field mDefaultFontSize");
- LOG_ASSERT(mDefaultFixedFontSize, "Could not find field mDefaultFixedFontSize");
- LOG_ASSERT(mLoadsImagesAutomatically, "Could not find field mLoadsImagesAutomatically");
-#ifdef ANDROID_BLOCK_NETWORK_IMAGE
- LOG_ASSERT(mBlockNetworkImage, "Could not find field mBlockNetworkImage");
-#endif
- LOG_ASSERT(mBlockNetworkLoads, "Could not find field mBlockNetworkLoads");
- LOG_ASSERT(mJavaScriptEnabled, "Could not find field mJavaScriptEnabled");
- LOG_ASSERT(mPluginState, "Could not find field mPluginState");
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- LOG_ASSERT(mAppCacheEnabled, "Could not find field mAppCacheEnabled");
- LOG_ASSERT(mAppCachePath, "Could not find field mAppCachePath");
- LOG_ASSERT(mAppCacheMaxSize, "Could not find field mAppCacheMaxSize");
-#endif
-#if ENABLE(WORKERS)
- LOG_ASSERT(mWorkersEnabled, "Could not find field mWorkersEnabled");
-#endif
- LOG_ASSERT(mJavaScriptCanOpenWindowsAutomatically,
- "Could not find field mJavaScriptCanOpenWindowsAutomatically");
- LOG_ASSERT(mUseWideViewport, "Could not find field mUseWideViewport");
- LOG_ASSERT(mSupportMultipleWindows, "Could not find field mSupportMultipleWindows");
- LOG_ASSERT(mShrinksStandaloneImagesToFit, "Could not find field mShrinksStandaloneImagesToFit");
- LOG_ASSERT(mMaximumDecodedImageSize, "Could not find field mMaximumDecodedImageSize");
- LOG_ASSERT(mUseDoubleTree, "Could not find field mUseDoubleTree");
- LOG_ASSERT(mPageCacheCapacity, "Could not find field mPageCacheCapacity");
-
- jclass enumClass = env->FindClass("java/lang/Enum");
- LOG_ASSERT(enumClass, "Could not find Enum class!");
- mOrdinal = env->GetMethodID(enumClass, "ordinal", "()I");
- LOG_ASSERT(mOrdinal, "Could not find method ordinal");
- env->DeleteLocalRef(enumClass);
-
- jclass textSizeClass = env->FindClass("android/webkit/WebSettings$TextSize");
- LOG_ASSERT(textSizeClass, "Could not find TextSize enum");
- mTextSizeValue = env->GetFieldID(textSizeClass, "value", "I");
- env->DeleteLocalRef(textSizeClass);
- }
-
- // Field ids
- jfieldID mLayoutAlgorithm;
- jfieldID mTextSize;
- jfieldID mStandardFontFamily;
- jfieldID mFixedFontFamily;
- jfieldID mSansSerifFontFamily;
- jfieldID mSerifFontFamily;
- jfieldID mCursiveFontFamily;
- jfieldID mFantasyFontFamily;
- jfieldID mDefaultTextEncoding;
- jfieldID mUserAgent;
- jfieldID mAcceptLanguage;
- jfieldID mMinimumFontSize;
- jfieldID mMinimumLogicalFontSize;
- jfieldID mDefaultFontSize;
- jfieldID mDefaultFixedFontSize;
- jfieldID mLoadsImagesAutomatically;
-#ifdef ANDROID_BLOCK_NETWORK_IMAGE
- jfieldID mBlockNetworkImage;
-#endif
- jfieldID mBlockNetworkLoads;
- jfieldID mJavaScriptEnabled;
- jfieldID mPluginState;
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- jfieldID mAppCacheEnabled;
- jfieldID mAppCachePath;
- jfieldID mAppCacheMaxSize;
-#endif
-#if ENABLE(WORKERS)
- jfieldID mWorkersEnabled;
-#endif
- jfieldID mJavaScriptCanOpenWindowsAutomatically;
- jfieldID mUseWideViewport;
- jfieldID mSupportMultipleWindows;
- jfieldID mShrinksStandaloneImagesToFit;
- jfieldID mMaximumDecodedImageSize;
- jfieldID mPrivateBrowsingEnabled;
- jfieldID mSyntheticLinksEnabled;
- jfieldID mUseDoubleTree;
- jfieldID mPageCacheCapacity;
- // Ordinal() method and value field for enums
- jmethodID mOrdinal;
- jfieldID mTextSizeValue;
-
-#if ENABLE(DATABASE)
- jfieldID mDatabaseEnabled;
-#endif
-#if ENABLE(DOM_STORAGE)
- jfieldID mDomStorageEnabled;
-#endif
- jfieldID mGeolocationEnabled;
- jfieldID mGeolocationDatabasePath;
- jfieldID mXSSAuditorEnabled;
-#if ENABLE(DATABASE) || ENABLE(DOM_STORAGE)
- jfieldID mDatabasePath;
- jfieldID mDatabasePathHasBeenSet;
-#endif
-#if ENABLE(WEB_AUTOFILL)
- jfieldID mAutoFillEnabled;
- jfieldID mAutoFillProfile;
- jfieldID mAutoFillProfileFullName;
- jfieldID mAutoFillProfileEmailAddress;
- jfieldID mAutoFillProfileCompanyName;
- jfieldID mAutoFillProfileAddressLine1;
- jfieldID mAutoFillProfileAddressLine2;
- jfieldID mAutoFillProfileCity;
- jfieldID mAutoFillProfileState;
- jfieldID mAutoFillProfileZipCode;
- jfieldID mAutoFillProfileCountry;
- jfieldID mAutoFillProfilePhoneNumber;
-#endif
-#if USE(CHROME_NETWORK_STACK)
- jfieldID mOverrideCacheMode;
-#endif
-};
-
-static struct FieldIds* gFieldIds;
-
-// Note: This is moved from the old FrameAndroid.cpp
-static void recursiveCleanupForFullLayout(WebCore::RenderObject* obj)
-{
- obj->setNeedsLayout(true, false);
-#ifdef ANDROID_LAYOUT
- if (obj->isTable())
- (static_cast<WebCore::RenderTable *>(obj))->clearSingleColumn();
-#endif
- for (WebCore::RenderObject* n = obj->firstChild(); n; n = n->nextSibling())
- recursiveCleanupForFullLayout(n);
-}
-
-#if ENABLE(WEB_AUTOFILL)
-inline string16 getStringFieldAsString16(JNIEnv* env, jobject autoFillProfile, jfieldID fieldId)
-{
- jstring str = static_cast<jstring>(env->GetObjectField(autoFillProfile, fieldId));
- return str ? jstringToString16(env, str) : string16();
-}
-
-void syncAutoFillProfile(JNIEnv* env, jobject autoFillProfile, WebAutoFill* webAutoFill)
-{
- string16 fullName = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfileFullName);
- string16 emailAddress = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfileEmailAddress);
- string16 companyName = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfileCompanyName);
- string16 addressLine1 = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfileAddressLine1);
- string16 addressLine2 = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfileAddressLine2);
- string16 city = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfileCity);
- string16 state = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfileState);
- string16 zipCode = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfileZipCode);
- string16 country = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfileCountry);
- string16 phoneNumber = getStringFieldAsString16(env, autoFillProfile, gFieldIds->mAutoFillProfilePhoneNumber);
-
- webAutoFill->setProfile(fullName, emailAddress, companyName, addressLine1, addressLine2, city, state, zipCode, country, phoneNumber);
-}
-#endif
-
-class WebSettings {
-public:
- static void Sync(JNIEnv* env, jobject obj, jint frame)
- {
- WebCore::Frame* pFrame = (WebCore::Frame*)frame;
- LOG_ASSERT(pFrame, "%s must take a valid frame pointer!", __FUNCTION__);
- WebCore::Settings* s = pFrame->settings();
- if (!s)
- return;
- WebCore::CachedResourceLoader* cachedResourceLoader = pFrame->document()->cachedResourceLoader();
-
-#ifdef ANDROID_LAYOUT
- jobject layout = env->GetObjectField(obj, gFieldIds->mLayoutAlgorithm);
- WebCore::Settings::LayoutAlgorithm l = (WebCore::Settings::LayoutAlgorithm)
- env->CallIntMethod(layout, gFieldIds->mOrdinal);
- if (s->layoutAlgorithm() != l) {
- s->setLayoutAlgorithm(l);
- if (pFrame->document()) {
- pFrame->document()->styleSelectorChanged(WebCore::RecalcStyleImmediately);
- if (pFrame->document()->renderer()) {
- recursiveCleanupForFullLayout(pFrame->document()->renderer());
- LOG_ASSERT(pFrame->view(), "No view for this frame when trying to relayout");
- pFrame->view()->layout();
- // FIXME: This call used to scroll the page to put the focus into view.
- // It worked on the WebViewCore, but now scrolling is done outside of the
- // WebViewCore, on the UI side, so there needs to be a new way to do this.
- //pFrame->makeFocusVisible();
- }
- }
- }
-#endif
- jobject textSize = env->GetObjectField(obj, gFieldIds->mTextSize);
- float zoomFactor = env->GetIntField(textSize, gFieldIds->mTextSizeValue) / 100.0f;
- if (pFrame->textZoomFactor() != zoomFactor)
- pFrame->setTextZoomFactor(zoomFactor);
-
- jstring str = (jstring)env->GetObjectField(obj, gFieldIds->mStandardFontFamily);
- s->setStandardFontFamily(jstringToWtfString(env, str));
-
- str = (jstring)env->GetObjectField(obj, gFieldIds->mFixedFontFamily);
- s->setFixedFontFamily(jstringToWtfString(env, str));
-
- str = (jstring)env->GetObjectField(obj, gFieldIds->mSansSerifFontFamily);
- s->setSansSerifFontFamily(jstringToWtfString(env, str));
-
- str = (jstring)env->GetObjectField(obj, gFieldIds->mSerifFontFamily);
- s->setSerifFontFamily(jstringToWtfString(env, str));
-
- str = (jstring)env->GetObjectField(obj, gFieldIds->mCursiveFontFamily);
- s->setCursiveFontFamily(jstringToWtfString(env, str));
-
- str = (jstring)env->GetObjectField(obj, gFieldIds->mFantasyFontFamily);
- s->setFantasyFontFamily(jstringToWtfString(env, str));
-
- str = (jstring)env->GetObjectField(obj, gFieldIds->mDefaultTextEncoding);
- s->setDefaultTextEncodingName(jstringToWtfString(env, str));
-
- str = (jstring)env->GetObjectField(obj, gFieldIds->mUserAgent);
- WebFrame::getWebFrame(pFrame)->setUserAgent(jstringToWtfString(env, str));
-#if USE(CHROME_NETWORK_STACK)
- WebViewCore::getWebViewCore(pFrame->view())->setWebRequestContextUserAgent();
-
- jint cacheMode = env->GetIntField(obj, gFieldIds->mOverrideCacheMode);
- WebViewCore::getWebViewCore(pFrame->view())->setWebRequestContextCacheMode(cacheMode);
-
- str = (jstring)env->GetObjectField(obj, gFieldIds->mAcceptLanguage);
- WebRequestContext::setAcceptLanguage(jstringToWtfString(env, str));
-#endif
-
- jint size = env->GetIntField(obj, gFieldIds->mMinimumFontSize);
- s->setMinimumFontSize(size);
-
- size = env->GetIntField(obj, gFieldIds->mMinimumLogicalFontSize);
- s->setMinimumLogicalFontSize(size);
-
- size = env->GetIntField(obj, gFieldIds->mDefaultFontSize);
- s->setDefaultFontSize(size);
-
- size = env->GetIntField(obj, gFieldIds->mDefaultFixedFontSize);
- s->setDefaultFixedFontSize(size);
-
- jboolean flag = env->GetBooleanField(obj, gFieldIds->mLoadsImagesAutomatically);
- s->setLoadsImagesAutomatically(flag);
- if (flag)
- cachedResourceLoader->setAutoLoadImages(true);
-
-#ifdef ANDROID_BLOCK_NETWORK_IMAGE
- flag = env->GetBooleanField(obj, gFieldIds->mBlockNetworkImage);
- s->setBlockNetworkImage(flag);
- if(!flag)
- cachedResourceLoader->setBlockNetworkImage(false);
-#endif
- flag = env->GetBooleanField(obj, gFieldIds->mBlockNetworkLoads);
- WebFrame* webFrame = WebFrame::getWebFrame(pFrame);
- webFrame->setBlockNetworkLoads(flag);
-
- flag = env->GetBooleanField(obj, gFieldIds->mJavaScriptEnabled);
- s->setJavaScriptEnabled(flag);
-
- // ON = 0
- // ON_DEMAND = 1
- // OFF = 2
- jobject pluginState = env->GetObjectField(obj, gFieldIds->mPluginState);
- int state = env->CallIntMethod(pluginState, gFieldIds->mOrdinal);
- s->setPluginsEnabled(state < 2);
-#ifdef ANDROID_PLUGINS
- s->setPluginsOnDemand(state == 1);
-#endif
-
-#if ENABLE(OFFLINE_WEB_APPLICATIONS)
- flag = env->GetBooleanField(obj, gFieldIds->mAppCacheEnabled);
- s->setOfflineWebApplicationCacheEnabled(flag);
- str = (jstring)env->GetObjectField(obj, gFieldIds->mAppCachePath);
- if (str) {
- String path = jstringToWtfString(env, str);
- if (path.length() && cacheStorage().cacheDirectory().isNull()) {
- cacheStorage().setCacheDirectory(path);
- // This database is created on the first load. If the file
- // doesn't exist, we create it and set its permissions. The
- // filename must match that in ApplicationCacheStorage.cpp.
- String filename = pathByAppendingComponent(path, "ApplicationCache.db");
- int fd = open(filename.utf8().data(), O_CREAT | O_EXCL, permissionFlags660);
- if (fd >= 0)
- close(fd);
- }
- }
- jlong maxsize = env->GetLongField(obj, gFieldIds->mAppCacheMaxSize);
- cacheStorage().setMaximumSize(maxsize);
-#endif
-
- flag = env->GetBooleanField(obj, gFieldIds->mJavaScriptCanOpenWindowsAutomatically);
- s->setJavaScriptCanOpenWindowsAutomatically(flag);
-
-#ifdef ANDROID_LAYOUT
- flag = env->GetBooleanField(obj, gFieldIds->mUseWideViewport);
- s->setUseWideViewport(flag);
-#endif
-
-#ifdef ANDROID_MULTIPLE_WINDOWS
- flag = env->GetBooleanField(obj, gFieldIds->mSupportMultipleWindows);
- s->setSupportMultipleWindows(flag);
-#endif
- flag = env->GetBooleanField(obj, gFieldIds->mShrinksStandaloneImagesToFit);
- s->setShrinksStandaloneImagesToFit(flag);
- jlong maxImage = env->GetLongField(obj, gFieldIds->mMaximumDecodedImageSize);
- // Since in ImageSourceAndroid.cpp, the image will always not exceed
- // MAX_SIZE_BEFORE_SUBSAMPLE, there's no need to pass the max value to
- // WebCore, which checks (image_width * image_height * 4) as an
- // estimation against the max value, which is done in CachedImage.cpp.
- // And there're cases where the decoded image size will not
- // exceed the max, but the WebCore estimation will. So the following
- // code is commented out to fix those cases.
- // if (maxImage == 0)
- // maxImage = computeMaxBitmapSizeForCache();
- s->setMaximumDecodedImageSize(maxImage);
-
- flag = env->GetBooleanField(obj, gFieldIds->mPrivateBrowsingEnabled);
- s->setPrivateBrowsingEnabled(flag);
-
- flag = env->GetBooleanField(obj, gFieldIds->mSyntheticLinksEnabled);
- s->setDefaultFormatDetection(flag);
- s->setFormatDetectionAddress(flag);
- s->setFormatDetectionEmail(flag);
- s->setFormatDetectionTelephone(flag);
-#if ENABLE(DATABASE)
- flag = env->GetBooleanField(obj, gFieldIds->mDatabaseEnabled);
- WebCore::Database::setIsAvailable(flag);
-
- flag = env->GetBooleanField(obj, gFieldIds->mDatabasePathHasBeenSet);
- if (flag) {
- // If the user has set the database path, sync it to the DatabaseTracker.
- str = (jstring)env->GetObjectField(obj, gFieldIds->mDatabasePath);
- if (str) {
- String path = jstringToWtfString(env, str);
- DatabaseTracker::tracker().setDatabaseDirectoryPath(path);
- // This database is created when the first HTML5 Database object is
- // instantiated. If the file doesn't exist, we create it and set its
- // permissions. The filename must match that in
- // DatabaseTracker.cpp.
- String filename = SQLiteFileSystem::appendDatabaseFileNameToPath(path, "Databases.db");
- int fd = open(filename.utf8().data(), O_CREAT | O_EXCL, permissionFlags660);
- if (fd >= 0)
- close(fd);
- }
- }
-#endif
-#if ENABLE(DOM_STORAGE)
- flag = env->GetBooleanField(obj, gFieldIds->mDomStorageEnabled);
- s->setLocalStorageEnabled(flag);
- str = (jstring)env->GetObjectField(obj, gFieldIds->mDatabasePath);
- if (str) {
- WTF::String localStorageDatabasePath = jstringToWtfString(env,str);
- if (localStorageDatabasePath.length()) {
- localStorageDatabasePath = WebCore::pathByAppendingComponent(
- localStorageDatabasePath, "localstorage");
- // We need 770 for folders
- mkdir(localStorageDatabasePath.utf8().data(),
- permissionFlags660 | S_IXUSR | S_IXGRP);
- s->setLocalStorageDatabasePath(localStorageDatabasePath);
- }
- }
-#endif
-
- flag = env->GetBooleanField(obj, gFieldIds->mGeolocationEnabled);
- GeolocationPermissions::setAlwaysDeny(!flag);
- str = (jstring)env->GetObjectField(obj, gFieldIds->mGeolocationDatabasePath);
- if (str) {
- String path = jstringToWtfString(env, str);
- GeolocationPermissions::setDatabasePath(path);
- GeolocationPositionCache::instance()->setDatabasePath(path);
- // This database is created when the first Geolocation object is
- // instantiated. If the file doesn't exist, we create it and set its
- // permissions. The filename must match that in
- // GeolocationPositionCache.cpp.
- String filename = SQLiteFileSystem::appendDatabaseFileNameToPath(path, "CachedGeoposition.db");
- int fd = open(filename.utf8().data(), O_CREAT | O_EXCL, permissionFlags660);
- if (fd >= 0)
- close(fd);
- }
-
- flag = env->GetBooleanField(obj, gFieldIds->mXSSAuditorEnabled);
- s->setXSSAuditorEnabled(flag);
-
- size = env->GetIntField(obj, gFieldIds->mPageCacheCapacity);
- if (size > 0) {
- s->setUsesPageCache(true);
- WebCore::pageCache()->setCapacity(size);
- } else
- s->setUsesPageCache(false);
-
-#if ENABLE(WEB_AUTOFILL)
- flag = env->GetBooleanField(obj, gFieldIds->mAutoFillEnabled);
- // TODO: This updates the Settings WebCore side with the user's
- // preference for autofill and will stop WebCore making requests
- // into the chromium autofill code. That code in Chromium also has
- // a notion of being enabled/disabled that gets read from the users
- // preferences. At the moment, it's hardcoded to true on Android
- // (see chrome/browser/autofill/autofill_manager.cc:405). This
- // setting should probably be synced into Chromium also.
-
- s->setAutoFillEnabled(flag);
-
- if (flag) {
- EditorClientAndroid* editorC = static_cast<EditorClientAndroid*>(pFrame->page()->editorClient());
- WebAutoFill* webAutoFill = editorC->getAutoFill();
- // Set the active AutoFillProfile data.
- jobject autoFillProfile = env->GetObjectField(obj, gFieldIds->mAutoFillProfile);
- if (autoFillProfile)
- syncAutoFillProfile(env, autoFillProfile, webAutoFill);
- else {
- // The autofill profile is null. We need to tell Chromium about this because
- // this may be because the user just deleted their profile but left the
- // autofill feature setting enabled.
- webAutoFill->clearProfiles();
- }
- }
-#endif
- }
-};
-
-
-//-------------------------------------------------------------
-// JNI registration
-//-------------------------------------------------------------
-
-static JNINativeMethod gWebSettingsMethods[] = {
- { "nativeSync", "(I)V",
- (void*) WebSettings::Sync }
-};
-
-int registerWebSettings(JNIEnv* env)
-{
- jclass clazz = env->FindClass("android/webkit/WebSettings");
- LOG_ASSERT(clazz, "Unable to find class WebSettings!");
- gFieldIds = new FieldIds(env, clazz);
- env->DeleteLocalRef(clazz);
- return jniRegisterNativeMethods(env, "android/webkit/WebSettings",
- gWebSettingsMethods, NELEM(gWebSettingsMethods));
-}
-
-}