Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1392)

Unified Diff: content/common/web_database_observer_impl.cc

Issue 9371008: Nuke from orbit corrupt websql databases. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/common/web_database_observer_impl.h ('k') | webkit/database/database_tracker.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/web_database_observer_impl.cc
===================================================================
--- content/common/web_database_observer_impl.cc (revision 122554)
+++ content/common/web_database_observer_impl.cc (working copy)
@@ -7,6 +7,7 @@
#include "base/metrics/histogram.h"
#include "base/string16.h"
#include "content/common/database_messages.h"
+#include "third_party/sqlite/sqlite3.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebDatabase.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
@@ -98,6 +99,7 @@
int sqlite_error) {
HISTOGRAM_WEBSQL_RESULT("OpenResult", database, callsite,
websql_error, sqlite_error);
+ HandleSqliteError(database, sqlite_error);
}
void WebDatabaseObserverImpl::reportChangeVersionResult(
@@ -105,6 +107,7 @@
int sqlite_error) {
HISTOGRAM_WEBSQL_RESULT("ChangeVersionResult", database, callsite,
websql_error, sqlite_error);
+ HandleSqliteError(database, sqlite_error);
}
void WebDatabaseObserverImpl::reportStartTransactionResult(
@@ -112,6 +115,7 @@
int sqlite_error) {
HISTOGRAM_WEBSQL_RESULT("BeginResult", database, callsite,
websql_error, sqlite_error);
+ HandleSqliteError(database, sqlite_error);
}
void WebDatabaseObserverImpl::reportCommitTransactionResult(
@@ -119,6 +123,7 @@
int sqlite_error) {
HISTOGRAM_WEBSQL_RESULT("CommitResult", database, callsite,
websql_error, sqlite_error);
+ HandleSqliteError(database, sqlite_error);
}
void WebDatabaseObserverImpl::reportExecuteStatementResult(
@@ -126,6 +131,7 @@
int sqlite_error) {
HISTOGRAM_WEBSQL_RESULT("StatementResult", database, callsite,
websql_error, sqlite_error);
+ HandleSqliteError(database, sqlite_error);
}
void WebDatabaseObserverImpl::reportVacuumDatabaseResult(
@@ -138,8 +144,22 @@
UMA_HISTOGRAM_ENUMERATION("websql.Async.VacuumResult",
result, kResultHistogramSize);
}
+ HandleSqliteError(database, sqlite_error);
}
void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() {
open_connections_->WaitForAllDatabasesToClose();
}
+
+void WebDatabaseObserverImpl::HandleSqliteError(
+ const WebDatabase& database, int error) {
+ // We filter out errors which the backend doesn't act on to avoid
+ // a unnecessary ipc traffic, this method can get called at a fairly
+ // high frequency (per-sqlstatement).
+ if (error == SQLITE_CORRUPT || error == SQLITE_NOTADB) {
+ sender_->Send(new DatabaseHostMsg_HandleSqliteError(
+ database.securityOrigin().databaseIdentifier(),
+ database.name(),
+ error));
+ }
+}
« no previous file with comments | « content/common/web_database_observer_impl.h ('k') | webkit/database/database_tracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698