import com.stoutner.privacybrowser.R
// The private constants.
-private const val SCHEMA_VERSION = 13
+private const val SCHEMA_VERSION = 14
class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(appContext, DOMAINS_DATABASE, null, SCHEMA_VERSION) {
// Define the public companion object constants. These can be moved to public class constants once the entire project has migrated to Kotlin.
const val ENABLE_ULTRAPRIVACY = "enableultraprivacy"
const val BLOCK_ALL_THIRD_PARTY_REQUESTS = "blockallthirdpartyrequests"
const val USER_AGENT = "useragent"
+ const val X_REQUESTED_WITH_HEADER = "x_requested_with_header"
const val FONT_SIZE = "fontsize"
const val SWIPE_TO_REFRESH = "swipetorefresh"
const val WEBVIEW_THEME = "webview_theme"
const val IP_ADDRESSES = "ip_addresses"
// The table creation constant.
- const val CREATE_DOMAINS_TABLE = "CREATE TABLE " + DOMAINS_TABLE + " (" +
- ID + " INTEGER PRIMARY KEY, " +
- DOMAIN_NAME + " TEXT, " +
- ENABLE_JAVASCRIPT + " BOOLEAN, " +
- COOKIES + " BOOLEAN, " +
- ENABLE_DOM_STORAGE + " BOOLEAN, " +
- ENABLE_FORM_DATA + " BOOLEAN, " +
- ENABLE_EASYLIST + " BOOLEAN, " +
- ENABLE_EASYPRIVACY + " BOOLEAN, " +
- ENABLE_FANBOYS_ANNOYANCE_LIST + " BOOLEAN, " +
- ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST + " BOOLEAN, " +
- ULTRALIST + " BOOLEAN, " +
- ENABLE_ULTRAPRIVACY + " BOOLEAN, " +
- BLOCK_ALL_THIRD_PARTY_REQUESTS + " BOOLEAN, " +
- USER_AGENT + " TEXT, " +
- FONT_SIZE + " INTEGER, " +
- SWIPE_TO_REFRESH + " INTEGER, " +
- WEBVIEW_THEME + " INTEGER, " +
- WIDE_VIEWPORT + " INTEGER, " +
- DISPLAY_IMAGES + " INTEGER, " +
- PINNED_SSL_CERTIFICATE + " BOOLEAN, " +
- SSL_ISSUED_TO_COMMON_NAME + " TEXT, " +
- SSL_ISSUED_TO_ORGANIZATION + " TEXT, " +
- SSL_ISSUED_TO_ORGANIZATIONAL_UNIT + " TEXT, " +
- SSL_ISSUED_BY_COMMON_NAME + " TEXT, " +
- SSL_ISSUED_BY_ORGANIZATION + " TEXT, " +
- SSL_ISSUED_BY_ORGANIZATIONAL_UNIT + " TEXT, " +
- SSL_START_DATE + " INTEGER, " +
- SSL_END_DATE + " INTEGER, " +
- PINNED_IP_ADDRESSES + " BOOLEAN, " +
- IP_ADDRESSES + " TEXT)"
+ const val CREATE_DOMAINS_TABLE = "CREATE TABLE $DOMAINS_TABLE (" +
+ "$ID INTEGER PRIMARY KEY, " +
+ "$DOMAIN_NAME TEXT, " +
+ "$ENABLE_JAVASCRIPT BOOLEAN, " +
+ "$COOKIES BOOLEAN, " +
+ "$ENABLE_DOM_STORAGE BOOLEAN, " +
+ "$ENABLE_FORM_DATA BOOLEAN, " +
+ "$ENABLE_EASYLIST BOOLEAN, " +
+ "$ENABLE_EASYPRIVACY BOOLEAN, " +
+ "$ENABLE_FANBOYS_ANNOYANCE_LIST BOOLEAN, " +
+ "$ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST BOOLEAN, " +
+ "$ULTRALIST BOOLEAN, " +
+ "$ENABLE_ULTRAPRIVACY BOOLEAN, " +
+ "$BLOCK_ALL_THIRD_PARTY_REQUESTS BOOLEAN, " +
+ "$USER_AGENT TEXT, " +
+ "$X_REQUESTED_WITH_HEADER INTEGER, " +
+ "$FONT_SIZE INTEGER, " +
+ "$SWIPE_TO_REFRESH INTEGER, " +
+ "$WEBVIEW_THEME INTEGER, " +
+ "$WIDE_VIEWPORT INTEGER, " +
+ "$DISPLAY_IMAGES INTEGER, " +
+ "$PINNED_SSL_CERTIFICATE BOOLEAN, " +
+ "$SSL_ISSUED_TO_COMMON_NAME TEXT, " +
+ "$SSL_ISSUED_TO_ORGANIZATION TEXT, " +
+ "$SSL_ISSUED_TO_ORGANIZATIONAL_UNIT TEXT, " +
+ "$SSL_ISSUED_BY_COMMON_NAME TEXT, " +
+ "$SSL_ISSUED_BY_ORGANIZATION TEXT, " +
+ "$SSL_ISSUED_BY_ORGANIZATIONAL_UNIT TEXT, " +
+ "$SSL_START_DATE INTEGER, " +
+ "$SSL_END_DATE INTEGER, " +
+ "$PINNED_IP_ADDRESSES BOOLEAN, " +
+ "$IP_ADDRESSES TEXT)"
}
override fun onCreate(domainsDatabase: SQLiteDatabase) {
// Copy the data from the old column to the new one.
domainsDatabase.execSQL("UPDATE $DOMAINS_TABLE SET $COOKIES = enablefirstpartycookies")
}
+
+ // Upgrade from schema version 13, first used in Privacy Browser 3.8, to schema version 14, first used in Privacy Browser 3.11.
+ if (oldVersion < 14) {
+ // Add the X-Requested-With header column. This defaults to `0`, which is `System default`, so a separate step isn't needed to populate the column.
+ domainsDatabase.execSQL("ALTER TABLE $DOMAINS_TABLE ADD COLUMN $X_REQUESTED_WITH_HEADER INTEGER")
+ }
}
val completeCursorOrderedByDomain: Cursor
domainContentValues.put(ENABLE_ULTRAPRIVACY, ultraPrivacy)
domainContentValues.put(BLOCK_ALL_THIRD_PARTY_REQUESTS, blockAllThirdPartyRequests)
domainContentValues.put(USER_AGENT, "System default user agent")
+ domainContentValues.put(X_REQUESTED_WITH_HEADER, 0)
domainContentValues.put(FONT_SIZE, 0)
domainContentValues.put(SWIPE_TO_REFRESH, 0)
domainContentValues.put(WEBVIEW_THEME, 0)
}
fun updateDomain(databaseId: Int, domainName: String, javaScript: Boolean, cookies: Boolean, domStorage: Boolean, formData: Boolean, easyList: Boolean, easyPrivacy: Boolean, fanboysAnnoyance: Boolean,
- fanboysSocialBlocking: Boolean, ultraList: Boolean, ultraPrivacy: Boolean, blockAllThirdPartyRequests: Boolean, userAgent: String, fontSize: Int, swipeToRefresh: Int, webViewTheme: Int,
- wideViewport: Int, displayImages: Int, pinnedSslCertificate: Boolean, pinnedIpAddresses: Boolean) {
+ fanboysSocialBlocking: Boolean, ultraList: Boolean, ultraPrivacy: Boolean, blockAllThirdPartyRequests: Boolean, userAgent: String, xRequestedWithHeader: Int, fontSize: Int,
+ swipeToRefresh: Int, webViewTheme: Int, wideViewport: Int, displayImages: Int, pinnedSslCertificate: Boolean, pinnedIpAddresses: Boolean) {
+
// Instantiate a content values.
val domainContentValues = ContentValues()
domainContentValues.put(ENABLE_ULTRAPRIVACY, ultraPrivacy)
domainContentValues.put(BLOCK_ALL_THIRD_PARTY_REQUESTS, blockAllThirdPartyRequests)
domainContentValues.put(USER_AGENT, userAgent)
+ domainContentValues.put(X_REQUESTED_WITH_HEADER, xRequestedWithHeader)
domainContentValues.put(FONT_SIZE, fontSize)
domainContentValues.put(SWIPE_TO_REFRESH, swipeToRefresh)
domainContentValues.put(WEBVIEW_THEME, webViewTheme)