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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/web_database_observer_impl.h" 5 #include "content/common/web_database_observer_impl.h"
6 6
7 #include "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/string16.h" 8 #include "base/string16.h"
9 #include "content/common/database_messages.h" 9 #include "content/common/database_messages.h"
10 #include "third_party/sqlite/sqlite3.h"
10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDatabase.h" 11 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDatabase.h"
11 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" 12 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
12 13
13 using WebKit::WebDatabase; 14 using WebKit::WebDatabase;
14 15
15 namespace { 16 namespace {
16 17
17 const int kResultHistogramSize = 50; 18 const int kResultHistogramSize = 50;
18 const int kCallsiteHistogramSize = 10; 19 const int kCallsiteHistogramSize = 10;
19 20
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 sender_->Send(new DatabaseHostMsg_Closed( 92 sender_->Send(new DatabaseHostMsg_Closed(
92 origin_identifier, database_name)); 93 origin_identifier, database_name));
93 open_connections_->RemoveOpenConnection(origin_identifier, database_name); 94 open_connections_->RemoveOpenConnection(origin_identifier, database_name);
94 } 95 }
95 96
96 void WebDatabaseObserverImpl::reportOpenDatabaseResult( 97 void WebDatabaseObserverImpl::reportOpenDatabaseResult(
97 const WebDatabase& database, int callsite, int websql_error, 98 const WebDatabase& database, int callsite, int websql_error,
98 int sqlite_error) { 99 int sqlite_error) {
99 HISTOGRAM_WEBSQL_RESULT("OpenResult", database, callsite, 100 HISTOGRAM_WEBSQL_RESULT("OpenResult", database, callsite,
100 websql_error, sqlite_error); 101 websql_error, sqlite_error);
102 HandleSqliteError(database, sqlite_error);
101 } 103 }
102 104
103 void WebDatabaseObserverImpl::reportChangeVersionResult( 105 void WebDatabaseObserverImpl::reportChangeVersionResult(
104 const WebDatabase& database, int callsite, int websql_error, 106 const WebDatabase& database, int callsite, int websql_error,
105 int sqlite_error) { 107 int sqlite_error) {
106 HISTOGRAM_WEBSQL_RESULT("ChangeVersionResult", database, callsite, 108 HISTOGRAM_WEBSQL_RESULT("ChangeVersionResult", database, callsite,
107 websql_error, sqlite_error); 109 websql_error, sqlite_error);
110 HandleSqliteError(database, sqlite_error);
108 } 111 }
109 112
110 void WebDatabaseObserverImpl::reportStartTransactionResult( 113 void WebDatabaseObserverImpl::reportStartTransactionResult(
111 const WebDatabase& database, int callsite, int websql_error, 114 const WebDatabase& database, int callsite, int websql_error,
112 int sqlite_error) { 115 int sqlite_error) {
113 HISTOGRAM_WEBSQL_RESULT("BeginResult", database, callsite, 116 HISTOGRAM_WEBSQL_RESULT("BeginResult", database, callsite,
114 websql_error, sqlite_error); 117 websql_error, sqlite_error);
118 HandleSqliteError(database, sqlite_error);
115 } 119 }
116 120
117 void WebDatabaseObserverImpl::reportCommitTransactionResult( 121 void WebDatabaseObserverImpl::reportCommitTransactionResult(
118 const WebDatabase& database, int callsite, int websql_error, 122 const WebDatabase& database, int callsite, int websql_error,
119 int sqlite_error) { 123 int sqlite_error) {
120 HISTOGRAM_WEBSQL_RESULT("CommitResult", database, callsite, 124 HISTOGRAM_WEBSQL_RESULT("CommitResult", database, callsite,
121 websql_error, sqlite_error); 125 websql_error, sqlite_error);
126 HandleSqliteError(database, sqlite_error);
122 } 127 }
123 128
124 void WebDatabaseObserverImpl::reportExecuteStatementResult( 129 void WebDatabaseObserverImpl::reportExecuteStatementResult(
125 const WebDatabase& database, int callsite, int websql_error, 130 const WebDatabase& database, int callsite, int websql_error,
126 int sqlite_error) { 131 int sqlite_error) {
127 HISTOGRAM_WEBSQL_RESULT("StatementResult", database, callsite, 132 HISTOGRAM_WEBSQL_RESULT("StatementResult", database, callsite,
128 websql_error, sqlite_error); 133 websql_error, sqlite_error);
134 HandleSqliteError(database, sqlite_error);
129 } 135 }
130 136
131 void WebDatabaseObserverImpl::reportVacuumDatabaseResult( 137 void WebDatabaseObserverImpl::reportVacuumDatabaseResult(
132 const WebDatabase& database, int sqlite_error) { 138 const WebDatabase& database, int sqlite_error) {
133 int result = DetermineHistogramResult(-1, sqlite_error); 139 int result = DetermineHistogramResult(-1, sqlite_error);
134 if (database.isSyncDatabase()) { 140 if (database.isSyncDatabase()) {
135 UMA_HISTOGRAM_ENUMERATION("websql.Sync.VacuumResult", 141 UMA_HISTOGRAM_ENUMERATION("websql.Sync.VacuumResult",
136 result, kResultHistogramSize); 142 result, kResultHistogramSize);
137 } else { 143 } else {
138 UMA_HISTOGRAM_ENUMERATION("websql.Async.VacuumResult", 144 UMA_HISTOGRAM_ENUMERATION("websql.Async.VacuumResult",
139 result, kResultHistogramSize); 145 result, kResultHistogramSize);
140 } 146 }
147 HandleSqliteError(database, sqlite_error);
141 } 148 }
142 149
143 void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() { 150 void WebDatabaseObserverImpl::WaitForAllDatabasesToClose() {
144 open_connections_->WaitForAllDatabasesToClose(); 151 open_connections_->WaitForAllDatabasesToClose();
145 } 152 }
153
154 void WebDatabaseObserverImpl::HandleSqliteError(
155 const WebDatabase& database, int error) {
Scott Hess - ex-Googler 2012/02/10 23:34:07 Do you have a histogram out there to tell the rela
michaeln 2012/02/11 00:34:20 Yes, see histograms scattered in this file.
Scott Hess - ex-Googler 2012/02/11 19:48:24 <decoding> surprisingly few SQLITE_CORRUPT cases!
156 if (error == SQLITE_CORRUPT || error == SQLITE_NOTADB) {
157 sender_->Send(new DatabaseHostMsg_HandleSqliteError(
158 database.securityOrigin().databaseIdentifier(),
159 database.name(),
160 error));
161 }
162 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698