Skip to content

Commit fead0e1

Browse files
Ben MurdochAndroid (Google) Code Review
authored andcommitted
Merge changes I59323dc5,I31a01aa3 into ics-mr1
* changes: WebViewDatabase v11 for ICS. Fix a bug in the database upgrade process, and refactor slightly.
2 parents b9df01d + cd0dd93 commit fead0e1

File tree

1 file changed

+95
-52
lines changed

1 file changed

+95
-52
lines changed

core/java/android/webkit/WebViewDatabase.java

Lines changed: 95 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class WebViewDatabase {
4242
// log tag
4343
protected static final String LOGTAG = "webviewdatabase";
4444

45-
private static final int DATABASE_VERSION = 10;
45+
private static final int DATABASE_VERSION = 11;
4646
// 2 -> 3 Modified Cache table to allow cache of redirects
4747
// 3 -> 4 Added Oma-Downloads table
4848
// 4 -> 5 Modified Cache table to support persistent contentLength
@@ -52,6 +52,9 @@ public class WebViewDatabase {
5252
// 7 -> 8 Move cache to its own db
5353
// 8 -> 9 Store both scheme and host when storing passwords
5454
// 9 -> 10 Update httpauth table UNIQUE
55+
// 10 -> 11 Drop cookies and cache now managed by the chromium stack,
56+
// and update the form data table to use the new format
57+
// implemented for b/5265606.
5558
private static final int CACHE_DATABASE_VERSION = 4;
5659
// 1 -> 2 Add expires String
5760
// 2 -> 3 Add content-disposition
@@ -204,7 +207,9 @@ private synchronized void init(Context context) {
204207
}
205208

206209
initDatabase(context);
207-
if (!JniUtil.useChromiumHttpStack()) {
210+
if (JniUtil.useChromiumHttpStack()) {
211+
context.deleteDatabase(CACHE_DATABASE_FILE);
212+
} else {
208213
initCacheDatabase(context);
209214
}
210215

@@ -327,15 +332,59 @@ private void initCacheDatabase(Context context) {
327332
}
328333

329334
private static void upgradeDatabase() {
335+
upgradeDatabaseToV10();
336+
upgradeDatabaseFromV10ToV11();
337+
// Add future database upgrade functions here, one version at a
338+
// time.
339+
mDatabase.setVersion(DATABASE_VERSION);
340+
}
341+
342+
private static void upgradeDatabaseFromV10ToV11() {
343+
int oldVersion = mDatabase.getVersion();
344+
345+
if (oldVersion >= 11) {
346+
// Nothing to do.
347+
return;
348+
}
349+
350+
if (JniUtil.useChromiumHttpStack()) {
351+
// Clear out old java stack cookies - this data is now stored in
352+
// a separate database managed by the Chrome stack.
353+
mDatabase.execSQL("DROP TABLE IF EXISTS " + mTableNames[TABLE_COOKIES_ID]);
354+
355+
// Likewise for the old cache table.
356+
mDatabase.execSQL("DROP TABLE IF EXISTS cache");
357+
}
358+
359+
// Update form autocomplete URLs to match new ICS formatting.
360+
Cursor c = mDatabase.query(mTableNames[TABLE_FORMURL_ID], null, null,
361+
null, null, null, null);
362+
while (c.moveToNext()) {
363+
String urlId = Long.toString(c.getLong(c.getColumnIndex(ID_COL)));
364+
String url = c.getString(c.getColumnIndex(FORMURL_URL_COL));
365+
ContentValues cv = new ContentValues(1);
366+
cv.put(FORMURL_URL_COL, WebTextView.urlForAutoCompleteData(url));
367+
mDatabase.update(mTableNames[TABLE_FORMURL_ID], cv, ID_COL + "=?",
368+
new String[] { urlId });
369+
}
370+
c.close();
371+
}
372+
373+
private static void upgradeDatabaseToV10() {
330374
int oldVersion = mDatabase.getVersion();
375+
376+
if (oldVersion >= 10) {
377+
// Nothing to do.
378+
return;
379+
}
380+
331381
if (oldVersion != 0) {
332382
Log.i(LOGTAG, "Upgrading database from version "
333383
+ oldVersion + " to "
334384
+ DATABASE_VERSION + ", which will destroy old data");
335385
}
336-
boolean justPasswords = 8 == oldVersion && 9 == DATABASE_VERSION;
337-
boolean justAuth = 9 == oldVersion && 10 == DATABASE_VERSION;
338-
if (justAuth) {
386+
387+
if (9 == oldVersion) {
339388
mDatabase.execSQL("DROP TABLE IF EXISTS "
340389
+ mTableNames[TABLE_HTTPAUTH_ID]);
341390
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_HTTPAUTH_ID]
@@ -348,55 +397,49 @@ private static void upgradeDatabase() {
348397
return;
349398
}
350399

351-
if (!justPasswords) {
352-
mDatabase.execSQL("DROP TABLE IF EXISTS "
353-
+ mTableNames[TABLE_COOKIES_ID]);
354-
mDatabase.execSQL("DROP TABLE IF EXISTS cache");
355-
mDatabase.execSQL("DROP TABLE IF EXISTS "
356-
+ mTableNames[TABLE_FORMURL_ID]);
357-
mDatabase.execSQL("DROP TABLE IF EXISTS "
358-
+ mTableNames[TABLE_FORMDATA_ID]);
359-
mDatabase.execSQL("DROP TABLE IF EXISTS "
360-
+ mTableNames[TABLE_HTTPAUTH_ID]);
361-
}
400+
mDatabase.execSQL("DROP TABLE IF EXISTS "
401+
+ mTableNames[TABLE_COOKIES_ID]);
402+
mDatabase.execSQL("DROP TABLE IF EXISTS cache");
403+
mDatabase.execSQL("DROP TABLE IF EXISTS "
404+
+ mTableNames[TABLE_FORMURL_ID]);
405+
mDatabase.execSQL("DROP TABLE IF EXISTS "
406+
+ mTableNames[TABLE_FORMDATA_ID]);
407+
mDatabase.execSQL("DROP TABLE IF EXISTS "
408+
+ mTableNames[TABLE_HTTPAUTH_ID]);
362409
mDatabase.execSQL("DROP TABLE IF EXISTS "
363410
+ mTableNames[TABLE_PASSWORD_ID]);
364411

365-
mDatabase.setVersion(DATABASE_VERSION);
366-
367-
if (!justPasswords) {
368-
// cookies
369-
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_COOKIES_ID]
370-
+ " (" + ID_COL + " INTEGER PRIMARY KEY, "
371-
+ COOKIES_NAME_COL + " TEXT, " + COOKIES_VALUE_COL
372-
+ " TEXT, " + COOKIES_DOMAIN_COL + " TEXT, "
373-
+ COOKIES_PATH_COL + " TEXT, " + COOKIES_EXPIRES_COL
374-
+ " INTEGER, " + COOKIES_SECURE_COL + " INTEGER" + ");");
375-
mDatabase.execSQL("CREATE INDEX cookiesIndex ON "
376-
+ mTableNames[TABLE_COOKIES_ID] + " (path)");
377-
378-
// formurl
379-
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_FORMURL_ID]
380-
+ " (" + ID_COL + " INTEGER PRIMARY KEY, " + FORMURL_URL_COL
381-
+ " TEXT" + ");");
382-
383-
// formdata
384-
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_FORMDATA_ID]
385-
+ " (" + ID_COL + " INTEGER PRIMARY KEY, "
386-
+ FORMDATA_URLID_COL + " INTEGER, " + FORMDATA_NAME_COL
387-
+ " TEXT, " + FORMDATA_VALUE_COL + " TEXT," + " UNIQUE ("
388-
+ FORMDATA_URLID_COL + ", " + FORMDATA_NAME_COL + ", "
389-
+ FORMDATA_VALUE_COL + ") ON CONFLICT IGNORE);");
412+
// cookies
413+
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_COOKIES_ID]
414+
+ " (" + ID_COL + " INTEGER PRIMARY KEY, "
415+
+ COOKIES_NAME_COL + " TEXT, " + COOKIES_VALUE_COL
416+
+ " TEXT, " + COOKIES_DOMAIN_COL + " TEXT, "
417+
+ COOKIES_PATH_COL + " TEXT, " + COOKIES_EXPIRES_COL
418+
+ " INTEGER, " + COOKIES_SECURE_COL + " INTEGER" + ");");
419+
mDatabase.execSQL("CREATE INDEX cookiesIndex ON "
420+
+ mTableNames[TABLE_COOKIES_ID] + " (path)");
421+
422+
// formurl
423+
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_FORMURL_ID]
424+
+ " (" + ID_COL + " INTEGER PRIMARY KEY, " + FORMURL_URL_COL
425+
+ " TEXT" + ");");
426+
427+
// formdata
428+
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_FORMDATA_ID]
429+
+ " (" + ID_COL + " INTEGER PRIMARY KEY, "
430+
+ FORMDATA_URLID_COL + " INTEGER, " + FORMDATA_NAME_COL
431+
+ " TEXT, " + FORMDATA_VALUE_COL + " TEXT," + " UNIQUE ("
432+
+ FORMDATA_URLID_COL + ", " + FORMDATA_NAME_COL + ", "
433+
+ FORMDATA_VALUE_COL + ") ON CONFLICT IGNORE);");
390434

391-
// httpauth
392-
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_HTTPAUTH_ID]
393-
+ " (" + ID_COL + " INTEGER PRIMARY KEY, "
394-
+ HTTPAUTH_HOST_COL + " TEXT, " + HTTPAUTH_REALM_COL
395-
+ " TEXT, " + HTTPAUTH_USERNAME_COL + " TEXT, "
396-
+ HTTPAUTH_PASSWORD_COL + " TEXT," + " UNIQUE ("
397-
+ HTTPAUTH_HOST_COL + ", " + HTTPAUTH_REALM_COL
398-
+ ") ON CONFLICT REPLACE);");
399-
}
435+
// httpauth
436+
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_HTTPAUTH_ID]
437+
+ " (" + ID_COL + " INTEGER PRIMARY KEY, "
438+
+ HTTPAUTH_HOST_COL + " TEXT, " + HTTPAUTH_REALM_COL
439+
+ " TEXT, " + HTTPAUTH_USERNAME_COL + " TEXT, "
440+
+ HTTPAUTH_PASSWORD_COL + " TEXT," + " UNIQUE ("
441+
+ HTTPAUTH_HOST_COL + ", " + HTTPAUTH_REALM_COL
442+
+ ") ON CONFLICT REPLACE);");
400443
// passwords
401444
mDatabase.execSQL("CREATE TABLE " + mTableNames[TABLE_PASSWORD_ID]
402445
+ " (" + ID_COL + " INTEGER PRIMARY KEY, "
@@ -411,7 +454,7 @@ private static void upgradeCacheDatabase() {
411454
if (oldVersion != 0) {
412455
Log.i(LOGTAG, "Upgrading cache database from version "
413456
+ oldVersion + " to "
414-
+ DATABASE_VERSION + ", which will destroy all old data");
457+
+ CACHE_DATABASE_VERSION + ", which will destroy all old data");
415458
}
416459
mCacheDatabase.execSQL("DROP TABLE IF EXISTS cache");
417460
mCacheDatabase.setVersion(CACHE_DATABASE_VERSION);
@@ -1150,7 +1193,7 @@ ArrayList<String> getFormData(String url, String name) {
11501193
cursor = mDatabase.query(mTableNames[TABLE_FORMURL_ID],
11511194
ID_PROJECTION, urlSelection, new String[] { url }, null,
11521195
null, null);
1153-
if (cursor.moveToFirst()) {
1196+
while (cursor.moveToNext()) {
11541197
long urlid = cursor.getLong(cursor.getColumnIndex(ID_COL));
11551198
Cursor dataCursor = null;
11561199
try {

0 commit comments

Comments
 (0)