From 61a4c377355df93ad0d5bac81afdf0b0609ab053 Mon Sep 17 00:00:00 2001 From: Ziyan Date: Fri, 9 Sep 2016 18:04:54 +0200 Subject: [PATCH] msm8976-common: ril: add squash of OSS libsecnativefeature msm8976-common: ril: add open-sourced libsecnativefeature, used by libsec-ril Change-Id: I2f487db23b31c63ba919863f393ca37cc9a81191 libsecnativefeature: fix build with clang Change-Id: Ibda3234af2b1184e094913e35cb919a75f972c87 Change-Id: Iaaa06fa527cedce6609a95b21d787c13dda6a30a --- libsecnativefeature/Android.mk | 20 ++ libsecnativefeature/SecNativeFeature.h | 31 +++ libsecnativefeature/SecNativeFeatureCIf.cpp | 85 ++++++++ libsecnativefeature/SecNativeFeatureCIf.h | 24 +++ libsecnativefeature/SecNativeFeatureCppIf.cpp | 187 ++++++++++++++++++ libsecnativefeature/SecNativeFeatureCppIf.h | 27 +++ libsecnativefeature/SecNativeFeatureTagAll.h | 20 ++ .../SecNativeFeatureTagCommon.h | 9 + .../SecNativeFeatureTagFramework.h | 16 ++ libsecnativefeature/SecNativeFeatureTagWeb.h | 150 ++++++++++++++ 10 files changed, 569 insertions(+) create mode 100644 libsecnativefeature/Android.mk create mode 100644 libsecnativefeature/SecNativeFeature.h create mode 100644 libsecnativefeature/SecNativeFeatureCIf.cpp create mode 100644 libsecnativefeature/SecNativeFeatureCIf.h create mode 100644 libsecnativefeature/SecNativeFeatureCppIf.cpp create mode 100644 libsecnativefeature/SecNativeFeatureCppIf.h create mode 100644 libsecnativefeature/SecNativeFeatureTagAll.h create mode 100644 libsecnativefeature/SecNativeFeatureTagCommon.h create mode 100644 libsecnativefeature/SecNativeFeatureTagFramework.h create mode 100644 libsecnativefeature/SecNativeFeatureTagWeb.h diff --git a/libsecnativefeature/Android.mk b/libsecnativefeature/Android.mk new file mode 100644 index 0000000..2276655 --- /dev/null +++ b/libsecnativefeature/Android.mk @@ -0,0 +1,20 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional + +LOCAL_SRC_FILES := \ + SecNativeFeatureCIf.cpp \ + SecNativeFeatureCppIf.cpp + +LOCAL_C_INCLUDES += \ + external/expat/lib + +LOCAL_SHARED_LIBRARIES := \ + libexpat + +LOCAL_CFLAGS := -Wall -Werror + +LOCAL_MODULE := libsecnativefeature + +include $(BUILD_SHARED_LIBRARY) diff --git a/libsecnativefeature/SecNativeFeature.h b/libsecnativefeature/SecNativeFeature.h new file mode 100644 index 0000000..4de0283 --- /dev/null +++ b/libsecnativefeature/SecNativeFeature.h @@ -0,0 +1,31 @@ +#ifndef SEC_NATIVE_FEATURE_H +#define SEC_NATIVE_FEATURE_H + +#include "SecNativeFeatureTagAll.h" + +// define TAG for default value +/* +#define Str_NoTag "" +#define Bool_NoTag false +#define Int_NoTag (0) + +#define TAG_BOOLEAN_TEST_TRUE "CscFeature_BooleanTestTrue" +#define TAG_BOOLEAN_TEST_FALSE "CscFeature_BooleanTestFalse" +#define TAG_BOOLEAN_TEST_NULL "CscFeature_BooleanTestNull" +#define TAG_STRING_TEST "CscFeature_StringTest" +#define TAG_STRING_TEST_NULL "CscFeature_StringTestNull" +#define TAG_INTEGER_TEST "CscFeature_IntegerTest" +#define TAG_INTEGER_TEST_NULL "CscFeature_IntegerTestNull" + +#define TAG_FMRADIO_RTPLUS "CscFeature_FMRadioRTPlus" +#define TAG_FMRADIO_SEASETTING "CscFeature_FMRadioSEASetting" +*/ + +#ifdef __cplusplus +#include "SecNativeFeatureCppIf.h" +#else +#include "SecNativeFeatureCIf.h" +#endif + +#endif // SEC_NATIVE_FEATURE_H + diff --git a/libsecnativefeature/SecNativeFeatureCIf.cpp b/libsecnativefeature/SecNativeFeatureCIf.cpp new file mode 100644 index 0000000..88a5405 --- /dev/null +++ b/libsecnativefeature/SecNativeFeatureCIf.cpp @@ -0,0 +1,85 @@ +#include +#include +#include "SecNativeFeatureCppIf.h" +#include "SecNativeFeatureCIf.h" +#include +#include + + +int +SecNativeFeature_getEnableStatus(const char* tag) +{ + SecNativeFeature* instance = SecNativeFeature::getInstance(); + + if (instance) + { + return instance->getEnableStatus(tag); + } + + return 0; +} + +int +SecNativeFeature_getEnableStatusWithDefault(const char* tag, int defaultValue) +{ + SecNativeFeature* instance = SecNativeFeature::getInstance(); + + if (instance) + { + return instance->getEnableStatus(tag, defaultValue); + } + + return defaultValue; +} + +int +SecNativeFeature_getInteger(const char* tag) +{ + SecNativeFeature* instance = SecNativeFeature::getInstance(); + + if (instance) + { + return instance->getInteger(tag); + } + + return -1; +} + +int +SecNativeFeature_getIntegerWithDefault(const char* tag, int defaultValue) +{ + SecNativeFeature* instance = SecNativeFeature::getInstance(); + + if (instance) + { + return instance->getInteger(tag, defaultValue); + } + + return defaultValue; +} + +const char* +SecNativeFeature_getString(const char* tag) +{ + SecNativeFeature* instance = SecNativeFeature::getInstance(); + + if (instance) + { + return instance->getString(tag); + } + + return NULL; +} + +const char* +SecNativeFeature_getStringWithDefault(const char* tag, char* defaultValue) +{ + SecNativeFeature* instance = SecNativeFeature::getInstance(); + + if (instance) + { + return instance->getString(tag, defaultValue); + } + + return defaultValue; +} diff --git a/libsecnativefeature/SecNativeFeatureCIf.h b/libsecnativefeature/SecNativeFeatureCIf.h new file mode 100644 index 0000000..3d26168 --- /dev/null +++ b/libsecnativefeature/SecNativeFeatureCIf.h @@ -0,0 +1,24 @@ +#ifndef SEC_NATIVE_FEATURE_CIF_H +#define SEC_NATIVE_FEATURE_CIF_H + +#ifdef __cplusplus +#define DECLARE_BEGIN_C extern "C" { +#define DECLARE_END_C } +#else +#define DECLARE_BEGIN_C +#define DECLARE_END_C +#endif + +DECLARE_BEGIN_C + +int SecNativeFeature_getEnableStatus(const char* tag); +int SecNativeFeature_getEnableStatusWithDefault(const char* tag, int defaultValue); +int SecNativeFeature_getInteger(const char* tag); +int SecNativeFeature_getIntegerWithDefault(const char* tag, int defaultValue); +const char* SecNativeFeature_getString(const char* tag); +const char* SecNativeFeature_getStringWithDefault(const char* tag, char* defaultValue); + +DECLARE_END_C + +#endif // SEC_NATIVE_FEATURE_CIF_H + diff --git a/libsecnativefeature/SecNativeFeatureCppIf.cpp b/libsecnativefeature/SecNativeFeatureCppIf.cpp new file mode 100644 index 0000000..d70ebe7 --- /dev/null +++ b/libsecnativefeature/SecNativeFeatureCppIf.cpp @@ -0,0 +1,187 @@ +#include +#include +#include "SecNativeFeatureCppIf.h" +#include +#include + +// feature file location (which should be "/system/csc/feature.xml") +#define FEATURE_FILE "/system/csc/feature.xml" +// feature file location (which should be "/system/csc/others.xml") +#define MPS_FEATURE_FILE "/system/csc/others.xml" + +// XML parsing using expat lib - handlers +typedef struct{ + std::string curr_name; + std::map *pFeatures; + int depth; +} ParserUserData; + +static void XMLCALL +charDataHandler(void *userData, const char *s, int len){ + ParserUserData* pData = (ParserUserData*)userData; + std::string value(s, len); + std::string curr_name = pData->curr_name; + + if(!curr_name.empty()){ + std::map::iterator result = (*pData->pFeatures).find(curr_name); + + if (result != (*pData->pFeatures).end()) { + value = result->second + value; + (*pData->pFeatures).erase(curr_name); + } + + std::map::iterator begin; + begin = (*pData->pFeatures).begin(); + std::pair feature(curr_name,value); + (*pData->pFeatures).insert(begin, feature); + } + // else{ + // // printf("no name\n"); + // } +} + +static void XMLCALL +startElement(void *userData, const char *name, const char **atts __unused) +{ + ParserUserData* pData = (ParserUserData*)userData; + pData->curr_name.assign(name); + pData->depth += 1; +} + +static void XMLCALL +endElement(void *userData, const char *name __unused) +{ + ParserUserData* pData = (ParserUserData*)userData; + pData->curr_name.clear(); + pData->depth -= 1; +} + +// SecNativeFeture class implementation +SecNativeFeature* SecNativeFeature::_instance = NULL; +SecNativeFeature::SecNativeFeature() { + int load_result = 0; + _features.clear(); + load_result = _loadFeature(); + if (load_result == -1){ + // todo : handle _loadFeature errors here. + } +} + +SecNativeFeature::~SecNativeFeature() { + delete _instance; +} +SecNativeFeature* SecNativeFeature::getInstance() { + if(_instance == NULL) { + _instance = new SecNativeFeature(); + } + return _instance; +} + +bool SecNativeFeature::getEnableStatus(const char* tag) { + std::map::iterator found; + found = _features.find(tag); + + if(found == _features.end()) { + return false; + } + + if(found->second.compare("true") == 0 || found->second.compare("TRUE") == 0) { + return true; + } + return false; +} + +bool SecNativeFeature::getEnableStatus(const char* tag, bool defaultValue) { + std::map::iterator found; + found = _features.find(tag); + + if(found == _features.end()) { + return defaultValue; + } + + if(found->second.compare("true") == 0 || found->second.compare("TRUE") == 0) { + return true; + } + return defaultValue; +} + +const char* SecNativeFeature::getString(const char* tag) { + std::map::iterator found; + found = _features.find(tag); + + if(found == _features.end()) { + return ""; + } + return found->second.c_str(); +} + +const char* SecNativeFeature::getString(const char* tag, char* defaultValue) { + std::map::iterator found; + found = _features.find(tag); + + if(found == _features.end()) { + return defaultValue; + } + return found->second.c_str(); +} + +int SecNativeFeature::getInteger(const char* tag) { + std::map::iterator found; + found = _features.find(tag); + + if(found == _features.end()) { + return -1; + } + std::string raw_value = _features.find(tag)->second; + return atoi(raw_value.c_str()); +} + +int SecNativeFeature::getInteger(const char* tag, int defaultValue) { + std::map::iterator found; + found = _features.find(tag); + + if(found == _features.end()) { + return defaultValue; + } + std::string raw_value = _features.find(tag)->second; + return atoi(raw_value.c_str()); +} + +int SecNativeFeature::_loadFeature(){ + char buf[BUFSIZ]; + XML_Parser parser = XML_ParserCreate(NULL); + int done; + FILE * pFeatureFile = NULL; + ParserUserData userData; + userData.curr_name = std::string (); + userData.pFeatures = &_features; + userData.depth = 0; + + pFeatureFile = fopen(FEATURE_FILE, "r"); + if (pFeatureFile == NULL) { + pFeatureFile = fopen(MPS_FEATURE_FILE, "r"); + if (pFeatureFile == NULL) { + return -1; + } + } + XML_SetUserData(parser, &userData); + XML_SetElementHandler(parser, startElement, endElement); + XML_SetCharacterDataHandler(parser, charDataHandler); + do { + size_t len = fread(buf, 1, sizeof(buf), pFeatureFile); + if ((len != sizeof(buf)) && (ferror(pFeatureFile))){ + fclose(pFeatureFile); + return -1; + } + done = len < sizeof(buf); + if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) { + if(pFeatureFile) { + fclose(pFeatureFile); + } + return -1; + } + } while (!done); + XML_ParserFree(parser); + fclose(pFeatureFile); + return 0; +} diff --git a/libsecnativefeature/SecNativeFeatureCppIf.h b/libsecnativefeature/SecNativeFeatureCppIf.h new file mode 100644 index 0000000..37cb085 --- /dev/null +++ b/libsecnativefeature/SecNativeFeatureCppIf.h @@ -0,0 +1,27 @@ +#ifndef SEC_NATIVE_FEATURE_CPPIF_H +#define SEC_NATIVE_FEATURE_CPPIF_H + +#include +#include + +class SecNativeFeature { +public: + bool getEnableStatus(const char* tag); + bool getEnableStatus(const char* tag, bool defaultValue); + const char* getString(const char* tag); + const char* getString(const char* tag, char* defaultValue); + int getInteger(const char* tag); + int getInteger(const char* tag, int defaultValue); + + static SecNativeFeature* getInstance(); +private: + static SecNativeFeature* _instance; + SecNativeFeature(); + ~SecNativeFeature(); + int _loadFeature(); + int _loadDefault(); + std::map _features; +}; + +#endif // SEC_NATIVE_FEATURE_CPPIF_H + diff --git a/libsecnativefeature/SecNativeFeatureTagAll.h b/libsecnativefeature/SecNativeFeatureTagAll.h new file mode 100644 index 0000000..1bbc23f --- /dev/null +++ b/libsecnativefeature/SecNativeFeatureTagAll.h @@ -0,0 +1,20 @@ +/* + * CSC Features + * Auto generated by gen_cscfeaturetag_ih.pl + * DO NOT EDIT THIS FILE + */ + +/* +#include "SecNativeFeatureTagGMS.h" +#include "SecNativeFeatureTagIMS.h" +#include "SecNativeFeatureTagMediaProvider.h" +#include "SecNativeFeatureTagNFC.h" +#include "SecNativeFeatureTagRIL.h" +#include "SecNativeFeatureTagStreaming.h" +#include "SecNativeFeatureTagWiFi.h" +#include "SecNativeFeatureTagBT.h" +*/ + +#include "SecNativeFeatureTagFramework.h" +#include "SecNativeFeatureTagCommon.h" +#include "SecNativeFeatureTagWeb.h" diff --git a/libsecnativefeature/SecNativeFeatureTagCommon.h b/libsecnativefeature/SecNativeFeatureTagCommon.h new file mode 100644 index 0000000..7439806 --- /dev/null +++ b/libsecnativefeature/SecNativeFeatureTagCommon.h @@ -0,0 +1,9 @@ +#ifndef SEC_NATIVE_FEATURE_TAG_COMMON_H +#define SEC_NATIVE_FEATURE_TAG_COMMON_H + +// Note +// The string must be same as the string in CSCFeatureTagCommon.java +// Because one feature coulde be implemented both in java layer and in native layer +#define TAG_CSCFEATURE_COMMON_USECHAMELEON "CscFeature_Common_UseChameleon" + +#endif // SEC_NATIVE_FEATURE_TAG_COMMON_H diff --git a/libsecnativefeature/SecNativeFeatureTagFramework.h b/libsecnativefeature/SecNativeFeatureTagFramework.h new file mode 100644 index 0000000..a29d67c --- /dev/null +++ b/libsecnativefeature/SecNativeFeatureTagFramework.h @@ -0,0 +1,16 @@ +#ifndef SEC_NATIVE_FEATURE_TAG_FRAMEWORK_H +#define SEC_NATIVE_FEATURE_TAG_FRAMEWORK_H + + +// Note +// The string must be same as the string in CSCFeatureTagFramework.java +// Because one feature coulde be implemented both in java layer and in native layer + + +#define TAG_CSCFEATURE_FRAMEWORK_ENABLEBIDIRECTION "CscFeature_Framework_EnableBidirection" + +#define TAG_CSCFEATURE_FRAMEWORK_ENABLEHARFBUZZ "CscFeature_Framework_EnableHarfbuzz" + +#define TAG_CSCFEATURE_FRAMEWORK_ENABLETHAIVIETRESHAPING "CscFeature_Framework_EnableThaiVietReshaping" + +#endif // SEC_NATIVE_FEATURE_TAG_FRAMEWORK_H diff --git a/libsecnativefeature/SecNativeFeatureTagWeb.h b/libsecnativefeature/SecNativeFeatureTagWeb.h new file mode 100644 index 0000000..100448a --- /dev/null +++ b/libsecnativefeature/SecNativeFeatureTagWeb.h @@ -0,0 +1,150 @@ +#ifndef SEC_NATIVE_FEATURE_TAG_WEB_H +#define SEC_NATIVE_FEATURE_TAG_WEB_H + + +// Note +// The string must be same as the string in CSCFeatureTagWeb.java +// Because one feature coulde be implemented both in java layer and in native layer + +// The default values for each types +// This means the specified TAG is not defined +#define CSCFeatureTagWeb_Str_NoTag "" +#define CSCFeatureTagWeb_Bool_NoTag false +#define CSCFeatureTagWeb_Int_NoTag 0 + +// To define custom UserAgent string +// If this value is not defined, the default Android UserAgent will be sent to server +#define CSCFeatureTagWeb_SetUserAgent "CscFeature_Web_SetUserAgent" + + +// To define UAProfile string +// If this value is not defined, UAProfile will not be sent to server +#define CSCFeatureTagWeb_SetUAProfile "CscFeature_Web_SetUAProfile" + +// Change homepage_base regardless language and APN +#define CscFeatureTagWeb_SetHomepageURL "CscFeature_Web_SetHomepageURL" +// Disable RSS button on the url bar +#define CscFeatureTagWeb_DisableRSS "CscFeature_Web_DisableRSS" +// Remove voicesearch button on the url bar +#define CscFeatureTagWeb_DisableVoiceSearch "CscFeature_Web_DisableVoiceSearch" +// Disable showing activity chooser on redirecting in case when 3rd party browser also installed +#define CscFeatureTagWeb_DisableRedirectionChooser "CscFeature_Web_DisableRedirectionChooser" + +// Enable UAProfile in Header +#define CscFeatureTagWeb_Bool_EnableUAProfile "CscFeature_Web_Bool_EnableUAProfile" + +// To Enable the GateConfig Logs(USA STA requirement for stability test) +#define CscFeatureTagWeb_Bool_EnableGateConfig "CscFeature_Web_EnableLogStabililtyTest" + +//add for Handling Operator UA +#define CscFeature_Web_OverrideUserAgent "CscFeature_Web_OverrideUserAgent" + +// add menu clear today history +#define CscFeatureTagWeb_EnableDeletingTodayHistory "CscFeature_Web_EnableDeletingTodayHistory" + + // To enable bookmark overwrite +#define CscFeatureTagWeb_EnableOverwritingBookmark "CscFeature_Web_EnableOverwritingBookmark" + +// To enable downloaded folder notification +#define CscFeatureTagWeb_EnableDownloadedFolderInNotificationBar "CscFeature_Web_EnableDownloadedFolderInNotificationBar" + + //Enable DeviceID at Header(USA ATT Requirement) +#define CscFeatureTag_Web_Bool_DeviceID "CscFeature_Web_UseDeviceIdInHeader" + +// support uploading contacts in VCard format (China-Telecom requirement) +#define CscFeatureTagWeb_SupportVcfUpload "CscFeature_Web_SupportVcfUpload" +//Parse XHTML document as HTML (ignore parse error. China-Telecom requirement) +#define CscFeatureTagWeb_ParseXHtmlToHtml "CscFeature_Web_ParseXHtmlToHtml" + + //Block SD & CD download ( NAGSM common requirement) +#define CscFeatureTag_Web_Bool_BlockSDCDDownload "CscFeature_Web_BlockSDCDDownload" + +// display download progress on notification bar (China-Telecom requirement) +#define CscFeatureTagWeb_ShowDownloadProgressOnNotification "CscFeature_Web_ShowDownloadProgressOnNotification" + +// show browser version in browser settings (China-Telecom requirement) +#define CscFeatureTagWeb_ShowVersionInSetting "CscFeature_Web_ShowVersionInSetting" + +// support "exit browser" option (China-Telecom requirement) +#define CscFeatureTagWeb_AddOptionToTerminate "CscFeature_Web_AddOptionToTerminate" +// Add "Delete-all" function at Download list (China-Telecom requirement) +#define CscFeatureTagWeb_EnableDeleteAllOnDownloadList "CscFeature_Web_EnableDeleteAllOnDownloadList" +// Support save-as function and default folder by mime-type (China-Telecom requirement) +#define CscFeatureTagWeb_SupportDownloadSaveAs "CscFeature_Web_SupportDownloadSaveAs" +// support delete-all option in bookmarks page (China-Telecom requirement) +#define CscFeatureTagWeb_EnableDeleteAllBookmarks "CscFeature_Web_EnableDeleteAllBookmarks" +// Add "FullHandwriting IME issue "(China-Common requirement) +#define CscFeatureTagWeb_EnableOptionEditTextDuringFullHwr "CscFeature_Web_EnableOptionEditTextDuringFullHwr" +// support offline-startup page includes bookmarks, history, search dialog (China-Telecom requirement) +#define CscFeatureTagWeb_SupportOfflineStartupPage "CscFeature_Web_SupportOfflineStartupPage" + +// support not to set factory-reset-homepage to PREF_HOMEPAGE +#define CscFeatureTagWeb_Bool_DisableSetFactoryResetHomeToPrefHome "CscFeature_Web_Bool_DisableSetFactoryResetHomeToPrefHome" + +// Show roaming dialog (ATT Requirement) +#define CscFeatureTagWeb_Bool_ShowRoamingDialog "CscFeature_Web_EnableRoamingDialog" + +// set download folder by mime-type for China-Telecom requirement +#define CscFeatureTagWeb_SetDownloadFolderNameByMimeType "CscFeature_Web_SetDownloadFolderNameByMimeType" + +// Disable showing activity chooser for defined string +#define CscFeature_Web_DisableChooser4 "CscFeature_Web_DisableChooser4" + +// Enable download hebrew filename +#define CscFeature_Web_SupportHebrewFileName "CscFeature_Web_SupportHebrewFileName" + +// remove google in search engine list +#define CscFeatureTagWeb_DisableGoogleInBrowserSearchEngine "CscFeature_Web_DisableGoogleInBrowserSearchEngine" + +// set off overview mode as default (CTC Requirement) +#define CscFeatureTagWeb_SetOffOverviewModeAsDefault "CscFeature_Web_SetOffOverviewModeAsDefault" + +// Disable setting homepage as it is set in APN when SIM changed +#define CscFeature_Web_EnableAutoSimHomeUrlInProfile "CscFeature_Web_EnableAutoSimHomeUrlInProfile" + +// Add download file name decode feature for China region +#define CscFeatureTagWeb_SupportDownloadedFileNameInChineseChar "CscFeature_Web_SupportDownloadedFileNameInChineseChar" + +// support multiAPN (CMCC Requirement) +#define CscFeatureTagWeb_EnableMultipleApn4 "CscFeature_Web_EnableMultipleApn4" + +// Enable Ask to exit on back (CMCC Requirement) +#define CscFeatureTagWeb_EnablePromptToExit "CscFeature_Web_EnablePromptToExit" + + +// Enable EMOJI for JPN +#define CscFeatureTagWeb_EnableEmoji "CscFeature_Web_Bool_EnableEmoji" + +// Show Wifi AP List when WIFI switch is on (CMCC Requirement) +#define CscFeatureTagWeb_ShowWifiAPList "CscFeature_Web_ShowWifiAPList" + + // Enable Operator's toolbar (ATT Requirement) +#define CscFeatureTagWeb_EnableOperatorToolbar "CscFeature_Web_EnableOperatorToolbar" + +// Set TCP Connection timout (China Requirement) +#define CscFeatureTagWeb_SetTcpConnTimeoutAs "CscFeature_Web_SetTcpConnTimeoutAs" + +// Add WML mime type to Accept Header (CMCC Requirement) +#define CscFeatureTagWeb_AddWmlToHttpAcceptHeader4 "CscFeature_Web_AddWmlToHttpAcceptHeader4" + +// change block zoom method to position based touch block zoom (Australia Requirement) +#define CscFeature_Web_BlockZoomBaseOnTouchPosition "CscFeature_Web_BlockZoomBaseOnTouchPosition" + +// Remove Partial View During Horizontal Scroll in Nav Screen (Australia Requirement) +#define CscFeature_Web_RemovePartialViewDuringHorizontalScroll "CscFeature_Web_RemovePartialViewDuringHorizontalScroll" + +// Show Popup for MaxLength reached during Url input (CMCC Requirement) +#define CscFeatureTagWeb_EnablePopup4MaxLengthReachedDuringUrlInput "CscFeature_Web_EnablePopup4MaxLengthReachedDuringUrlInput" + +// Support Tel Number in the page to go to dialing app (KOR Requirement) +#define CscFeature_Web_RecognizeTelNumber "CscFeature_Web_RecognizeTelNumber" + +// Large file transfer in Internet download (VZW Requirement) +#define CscFeature_Web_EnableWifiOption4LargeFileDownload "CscFeature_Web_EnableWifiOption4LargeFileDownload" + +// Add additional accept charset to Accept Header (CTC Requirement) +#define CscFeature_Web_AddCharSetToHttpHeader "CscFeature_Web_AddCharSetToHttpHeader" + +// max connection per host for performance +#define CscFeature_Web_MaxConnectionPerHost "CscFeature_Web_MaxConnectionPerHost" +#endif // SEC_NATIVE_FEATURE_TAG_WEB_H