void WebApplicationCacheManager::setAppCacheMaximumSize(uint64_t size) { WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); cacheStorage().setMaximumSize(size); }
void WebApplicationCacheManager::deleteAllEntries() { WebProcess::LocalTerminationDisabler terminationDisabler(WebProcess::shared()); cacheStorage().deleteAllEntries(); }
void WebProcess::initializeWebProcess(const WebProcessCreationParameters& parameters, CoreIPC::ArgumentDecoder* arguments) { ASSERT(m_pageMap.isEmpty()); platformInitializeWebProcess(parameters, arguments); RefPtr<APIObject> injectedBundleInitializationUserData; InjectedBundleUserMessageDecoder messageDecoder(injectedBundleInitializationUserData); if (!arguments->decode(messageDecoder)) return; if (!parameters.injectedBundlePath.isEmpty()) { m_injectedBundle = InjectedBundle::create(parameters.injectedBundlePath); m_injectedBundle->setSandboxExtension(SandboxExtension::create(parameters.injectedBundlePathExtensionHandle)); if (!m_injectedBundle->load(injectedBundleInitializationUserData.get())) { // Don't keep around the InjectedBundle reference if the load fails. m_injectedBundle.clear(); } } #if ENABLE(DATABASE) // Make sure the WebDatabaseManager is initialized so that the Database directory is set. WebDatabaseManager::initialize(parameters.databaseDirectory); #endif #if ENABLE(ICONDATABASE) m_iconDatabaseProxy.setEnabled(parameters.iconDatabaseEnabled); #endif #if ENABLE(DOM_STORAGE) StorageTracker::initializeTracker(parameters.localStorageDirectory); m_localStorageDirectory = parameters.localStorageDirectory; #endif #if ENABLE(OFFLINE_WEB_APPLICATIONS) if (!parameters.applicationCacheDirectory.isEmpty()) { m_applicationCachePathExtension = SandboxExtension::create(parameters.applicationCacheDirectoryExtensionHandle); m_applicationCachePathExtension->consume(); cacheStorage().setCacheDirectory(parameters.applicationCacheDirectory); } #endif setShouldTrackVisitedLinks(parameters.shouldTrackVisitedLinks); setCacheModel(static_cast<uint32_t>(parameters.cacheModel)); if (!parameters.languageCode.isEmpty()) overrideDefaultLanguage(parameters.languageCode); m_textCheckerState = parameters.textCheckerState; for (size_t i = 0; i < parameters.urlSchemesRegistererdAsEmptyDocument.size(); ++i) registerURLSchemeAsEmptyDocument(parameters.urlSchemesRegistererdAsEmptyDocument[i]); for (size_t i = 0; i < parameters.urlSchemesRegisteredAsSecure.size(); ++i) registerURLSchemeAsSecure(parameters.urlSchemesRegisteredAsSecure[i]); for (size_t i = 0; i < parameters.urlSchemesForWhichDomainRelaxationIsForbidden.size(); ++i) setDomainRelaxationForbiddenForURLScheme(parameters.urlSchemesForWhichDomainRelaxationIsForbidden[i]); setDefaultRequestTimeoutInterval(parameters.defaultRequestTimeoutInterval); for (size_t i = 0; i < parameters.mimeTypesWithCustomRepresentation.size(); ++i) m_mimeTypesWithCustomRepresentations.add(parameters.mimeTypesWithCustomRepresentation[i]); #if PLATFORM(MAC) m_presenterApplicationPid = parameters.presenterApplicationPid; #endif if (parameters.shouldAlwaysUseComplexTextCodePath) setAlwaysUsesComplexTextCodePath(true); #if USE(CFURLSTORAGESESSIONS) WebCore::ResourceHandle::setPrivateBrowsingStorageSessionIdentifierBase(parameters.uiProcessBundleIdentifier); #endif }
void clearAppCache(const WebString& pageGroupName) { cacheStorage().empty(); }
int64_t ApplicationCache::diskUsageForOrigin(SecurityOrigin* origin) { int64_t usage = 0; cacheStorage().calculateUsageForOrigin(origin, usage); return usage; }
void WebProcess::clearApplicationCache() { // Empty the application cache. cacheStorage().empty(); }
void WebProcess::initializeWebProcess(const WebProcessCreationParameters& parameters, CoreIPC::MessageDecoder& decoder) { ASSERT(m_pageMap.isEmpty()); platformInitializeWebProcess(parameters, decoder); memoryPressureHandler().install(); RefPtr<APIObject> injectedBundleInitializationUserData; InjectedBundleUserMessageDecoder messageDecoder(injectedBundleInitializationUserData); if (!decoder.decode(messageDecoder)) return; if (!parameters.injectedBundlePath.isEmpty()) { m_injectedBundle = InjectedBundle::create(parameters.injectedBundlePath); m_injectedBundle->setSandboxExtension(SandboxExtension::create(parameters.injectedBundlePathExtensionHandle)); if (!m_injectedBundle->load(injectedBundleInitializationUserData.get())) { // Don't keep around the InjectedBundle reference if the load fails. m_injectedBundle.clear(); } } WebProcessSupplementMap::const_iterator it = m_supplements.begin(); WebProcessSupplementMap::const_iterator end = m_supplements.end(); for (; it != end; ++it) it->value->initialize(parameters); #if ENABLE(ICONDATABASE) m_iconDatabaseProxy->setEnabled(parameters.iconDatabaseEnabled); #endif if (!parameters.applicationCacheDirectory.isEmpty()) cacheStorage().setCacheDirectory(parameters.applicationCacheDirectory); setShouldTrackVisitedLinks(parameters.shouldTrackVisitedLinks); setCacheModel(static_cast<uint32_t>(parameters.cacheModel)); if (!parameters.languages.isEmpty()) overrideUserPreferredLanguages(parameters.languages); m_textCheckerState = parameters.textCheckerState; m_fullKeyboardAccessEnabled = parameters.fullKeyboardAccessEnabled; for (size_t i = 0; i < parameters.urlSchemesRegistererdAsEmptyDocument.size(); ++i) registerURLSchemeAsEmptyDocument(parameters.urlSchemesRegistererdAsEmptyDocument[i]); for (size_t i = 0; i < parameters.urlSchemesRegisteredAsSecure.size(); ++i) registerURLSchemeAsSecure(parameters.urlSchemesRegisteredAsSecure[i]); for (size_t i = 0; i < parameters.urlSchemesForWhichDomainRelaxationIsForbidden.size(); ++i) setDomainRelaxationForbiddenForURLScheme(parameters.urlSchemesForWhichDomainRelaxationIsForbidden[i]); for (size_t i = 0; i < parameters.urlSchemesRegisteredAsLocal.size(); ++i) registerURLSchemeAsLocal(parameters.urlSchemesRegisteredAsLocal[i]); for (size_t i = 0; i < parameters.urlSchemesRegisteredAsNoAccess.size(); ++i) registerURLSchemeAsNoAccess(parameters.urlSchemesRegisteredAsNoAccess[i]); for (size_t i = 0; i < parameters.urlSchemesRegisteredAsDisplayIsolated.size(); ++i) registerURLSchemeAsDisplayIsolated(parameters.urlSchemesRegisteredAsDisplayIsolated[i]); for (size_t i = 0; i < parameters.urlSchemesRegisteredAsCORSEnabled.size(); ++i) registerURLSchemeAsCORSEnabled(parameters.urlSchemesRegisteredAsCORSEnabled[i]); setDefaultRequestTimeoutInterval(parameters.defaultRequestTimeoutInterval); if (parameters.shouldAlwaysUseComplexTextCodePath) setAlwaysUsesComplexTextCodePath(true); if (parameters.shouldUseFontSmoothing) setShouldUseFontSmoothing(true); #if PLATFORM(MAC) || USE(CFNETWORK) WebFrameNetworkingContext::setPrivateBrowsingStorageSessionIdentifierBase(parameters.uiProcessBundleIdentifier); #endif if (parameters.shouldUseTestingNetworkSession) NetworkStorageSession::switchToNewTestingSession(); #if ENABLE(NETWORK_PROCESS) m_usesNetworkProcess = parameters.usesNetworkProcess; ensureNetworkProcessConnection(); if (usesNetworkProcess()) CookieStorageShim::shared().initialize(); #endif setTerminationTimeout(parameters.terminationTimeout); resetPlugInAutoStartOriginHashes(parameters.plugInAutoStartOriginHashes); for (size_t i = 0; i < parameters.plugInAutoStartOrigins.size(); ++i) m_plugInAutoStartOrigins.add(parameters.plugInAutoStartOrigins[i]); }
static void Sync(JNIEnv* env, jobject obj, jint frame) { WebCore::Frame* pFrame = (WebCore::Frame*)frame; ALOG_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()); ALOG_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 jint textSize = env->GetIntField(obj, gFieldIds->mTextSize); float zoomFactor = textSize / 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->CallObjectMethod(obj, gFieldIds->mGetUserAgentString); WebFrame::getWebFrame(pFrame)->setUserAgent(jstringToWtfString(env, str)); WebViewCore::getWebViewCore(pFrame->view())->setWebRequestContextUserAgent(); str = (jstring)env->GetObjectField(obj, gFieldIds->mUserAgentProfile); WebFrame::getWebFrame(pFrame)->setUserAgentProfile(jstringToWtfString(env, str)); WebViewCore::getWebViewCore(pFrame->view())->setWebRequestContextUserAgentProfile(); jint cacheMode = env->GetIntField(obj, gFieldIds->mOverrideCacheMode); WebViewCore::getWebViewCore(pFrame->view())->setWebRequestContextCacheMode(cacheMode); str = (jstring)env->CallObjectMethod(obj, gFieldIds->mGetAcceptLanguage); WebRequestContext::setAcceptLanguage(jstringToWtfString(env, str)); 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); flag = env->GetBooleanField(obj, gFieldIds->mAllowUniversalAccessFromFileURLs); s->setAllowUniversalAccessFromFileURLs(flag); flag = env->GetBooleanField(obj, gFieldIds->mAllowFileAccessFromFileURLs); s->setAllowFileAccessFromFileURLs(flag); // Hyperlink auditing (the ping attribute) has similar privacy // considerations as does the running of JavaScript, so to keep the UI // simpler, we leverage the same setting. s->setHyperlinkAuditingEnabled(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) // We only enable AppCache if it's been enabled with a call to // setAppCacheEnabled() and if a valid path has been supplied to // setAppCachePath(). Note that the path is applied to all WebViews // whereas enabling is applied per WebView. // WebCore asserts that the path is only set once. Since the path is // shared between WebViews, we can't do the required checks to guard // against this in the Java WebSettings. bool isPathValid = false; if (cacheStorage().cacheDirectory().isNull()) { str = static_cast<jstring>(env->GetObjectField(obj, gFieldIds->mAppCachePath)); // Check for non-null string as an optimization, as this is the common case. if (str) { String path = jstringToWtfString(env, str); ALOG_ASSERT(!path.empty(), "Java side should never send empty string for AppCache 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, permissionFlags660); if (fd >= 0) { close(fd); cacheStorage().setCacheDirectory(path); isPathValid = true; } } } else isPathValid = true; flag = env->GetBooleanField(obj, gFieldIds->mAppCacheEnabled); s->setOfflineWebApplicationCacheEnabled(flag && isPathValid); 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); #if ENABLE(LINK_PREFETCH) flag = env->GetBooleanField(obj, gFieldIds->mLinkPrefetchEnabled); s->setLinkPrefetchEnabled(flag); #endif 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 // This is required to enable the XMLTreeViewer when loading an XML document that // has no style attached to it. http://trac.webkit.org/changeset/79799 s->setDeveloperExtrasEnabled(true); s->setSpatialNavigationEnabled(true); bool echoPassword = env->GetBooleanField(obj, gFieldIds->mPasswordEchoEnabled); s->setPasswordEchoEnabled(echoPassword); flag = env->GetBooleanField(obj, gFieldIds->mMediaPlaybackRequiresUserGesture); s->setMediaPlaybackRequiresUserGesture(flag); }
static void Sync(JNIEnv* env, jobject obj, jint frame) { WebCore::Frame* pFrame = (WebCore::Frame*)frame; ALOG_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()); ALOG_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 jint textSize = env->GetIntField(obj, gFieldIds->mTextSize); float zoomFactor = textSize / 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); //SAMSUNG Change >> String defaultEncoding = jstringToWtfString(env, str); if (defaultEncoding == "AutoDetect") { s->setUsesEncodingDetector(true); } else { s->setUsesEncodingDetector(false); s->setDefaultTextEncodingName(defaultEncoding); } //SAMSUNG Change << //s->setDefaultTextEncodingName(jstringToWtfString(env, str)); str = (jstring)env->CallObjectMethod(obj, gFieldIds->mGetUserAgentString);//4.2 Merge WebFrame::getWebFrame(pFrame)->setUserAgent(jstringToWtfString(env, str)); WebViewCore::getWebViewCore(pFrame->view())->setWebRequestContextUserAgent(); jint cacheMode = env->GetIntField(obj, gFieldIds->mOverrideCacheMode); WebViewCore::getWebViewCore(pFrame->view())->setWebRequestContextCacheMode(cacheMode); str = (jstring)env->CallObjectMethod(obj, gFieldIds->mGetAcceptLanguage);//4.2 Merge WebRequestContext::setAcceptLanguage(jstringToWtfString(env, str)); 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); // SERI - WebGL >> #if ENABLE(WEBGL) flag = env->GetBooleanField(obj, gFieldIds->mWebGLEnabled); s->setWebGLEnabled(flag); #endif // SERI - WebGL << flag = env->GetBooleanField(obj, gFieldIds->mAllowUniversalAccessFromFileURLs); s->setAllowUniversalAccessFromFileURLs(flag); flag = env->GetBooleanField(obj, gFieldIds->mAllowFileAccessFromFileURLs); s->setAllowFileAccessFromFileURLs(flag); // Hyperlink auditing (the ping attribute) has similar privacy // considerations as does the running of JavaScript, so to keep the UI // simpler, we leverage the same setting. s->setHyperlinkAuditingEnabled(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) // We only enable AppCache if it's been enabled with a call to // setAppCacheEnabled() and if a valid path has been supplied to // setAppCachePath(). Note that the path is applied to all WebViews // whereas enabling is applied per WebView. // WebCore asserts that the path is only set once. Since the path is // shared between WebViews, we can't do the required checks to guard // against this in the Java WebSettings. bool isPathValid = false; if (cacheStorage().cacheDirectory().isNull()) { str = static_cast<jstring>(env->GetObjectField(obj, gFieldIds->mAppCachePath)); // Check for non-null string as an optimization, as this is the common case. if (str) { String path = jstringToWtfString(env, str); ALOG_ASSERT(!path.empty(), "Java side should never send empty string for AppCache 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, permissionFlags660); if (fd >= 0) { close(fd); cacheStorage().setCacheDirectory(path); isPathValid = true; } } } else isPathValid = true; flag = env->GetBooleanField(obj, gFieldIds->mAppCacheEnabled); s->setOfflineWebApplicationCacheEnabled(flag && isPathValid); 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(FILE_SYSTEM) flag = env->GetBooleanField(obj, gFieldIds->mFilesystemEnabled); flag = env->GetBooleanField(obj, gFieldIds->mFileSystemPathHasBeenSet); if (flag) { // If the user has set the filesystem path, sync it to the LocalFileSystem. str = (jstring)env->GetObjectField(obj, gFieldIds->mFileSystemPath); if (str) { String path = jstringToWtfString(env, str); LocalFileSystem::localFileSystem().initializeLocalFileSystem(path); } } #endif // Samsung Change - HTML5 Web Notification >> #if ENABLE(NOTIFICATIONS) flag = env->GetBooleanField(obj, gFieldIds->mWebnotificationEnabled); //flag = env->GetBooleanField(obj, gFieldIds->mFileSystemPathHasBeenSet); //if (flag) { // If the user has set the Web notification path, sync it to the NotificationPresenterImpl. str = (jstring)env->GetObjectField(obj, gFieldIds->mWebnotificationDatabasePath); if (str) { String path = jstringToWtfString(env, str); NotificationPresenterImpl::setDatabasePath(path); } // ALWAYS ON = 0 // ON_DEMAND = 1 // OFF = 2 jobject notificationState = env->GetObjectField(obj, gFieldIds->mNotificationState); int notifystate = env->CallIntMethod(notificationState, gFieldIds->mOrdinal); NotificationPresenterImpl::setSettingsValue(notifystate); //s->setPluginsEnabled(state < 2); //} #endif // Samsung Change - HTML5 Web Notification << #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 //SISO_HTMLComposer Start flag = env->GetBooleanField(obj, gFieldIds->mEditableSupport); if(flag) s->setEditableLinkBehavior(WebCore::EditableLinkNeverLive); s->setEditableSupportEnabled(flag); flag = env->GetBooleanField(obj, gFieldIds->mDisableAnimation); s->setDisableAnimation(flag); flag = env->GetBooleanField(obj, gFieldIds->mHighResolutionDevice); s->setHighResolutionDevice(flag); //SISO_HTMLComposer End //SAMSUNG ADVANCED TEXT SELECTION - BEGIN flag = env->GetBooleanField(obj, gFieldIds->mAdvanceTextSelection); s->setAdvancedSelectionEnabled(flag); jlong color = env->GetLongField(obj, gFieldIds->mAdvanceSelectionBgColor); if (-1 != color) { int r = ((color & 0x00FF0000) >> 16); int g = ((color & 0x0000FF00) >> 8); int b = (color & 0x000000FF); s->setAdvancedSelectionBgColor(r, g, b); }