Index: content/child/web_database_observer_impl.cc |
diff --git a/content/child/web_database_observer_impl.cc b/content/child/web_database_observer_impl.cc |
index c0b1038cfbb8e5279b60c9f4f66f6527170dbbcf..0172152e1d493a231ef797696858f944e3458be7 100644 |
--- a/content/child/web_database_observer_impl.cc |
+++ b/content/child/web_database_observer_impl.cc |
@@ -9,10 +9,14 @@ |
#include "base/single_thread_task_runner.h" |
#include "base/strings/string16.h" |
#include "base/thread_task_runner_handle.h" |
+#include "content/child/storage_util.h" |
#include "content/common/database_messages.h" |
+#include "storage/common/database/database_identifier.h" |
+#include "third_party/WebKit/public/platform/WebSecurityOrigin.h" |
#include "third_party/WebKit/public/platform/WebString.h" |
#include "third_party/sqlite/sqlite3.h" |
+using blink::WebSecurityOrigin; |
using blink::WebString; |
namespace content { |
@@ -52,6 +56,13 @@ int DetermineHistogramResult(int websql_error, int sqlite_error) { |
callsite, kCallsiteHistogramSize); \ |
} \ |
} while (0) |
+ |
+// TODO(jsbell): Replace with use of url::Origin end-to-end. |
+// https://crbug.com/591482 |
+std::string GetIdentifierFromOrigin(const WebSecurityOrigin& origin) { |
+ return storage::GetIdentifierFromOrigin(WebSecurityOriginToGURL(origin)); |
+} |
+ |
} // namespace |
WebDatabaseObserverImpl::WebDatabaseObserverImpl(IPC::SyncMessageFilter* sender) |
@@ -66,40 +77,35 @@ WebDatabaseObserverImpl::~WebDatabaseObserverImpl() { |
} |
void WebDatabaseObserverImpl::databaseOpened( |
- const WebString& origin_identifier, |
+ const WebSecurityOrigin& origin, |
const WebString& database_name, |
const WebString& database_display_name, |
unsigned long estimated_size) { |
- open_connections_->AddOpenConnection(origin_identifier.utf8(), |
- database_name); |
+ const std::string origin_identifier = GetIdentifierFromOrigin(origin); |
+ open_connections_->AddOpenConnection(origin_identifier, database_name); |
sender_->Send(new DatabaseHostMsg_Opened( |
- origin_identifier.utf8(), database_name, |
- database_display_name, estimated_size)); |
+ origin_identifier, database_name, database_display_name, estimated_size)); |
} |
-void WebDatabaseObserverImpl::databaseModified( |
- const WebString& origin_identifier, |
- const WebString& database_name) { |
- sender_->Send(new DatabaseHostMsg_Modified( |
- origin_identifier.utf8(), database_name)); |
+void WebDatabaseObserverImpl::databaseModified(const WebSecurityOrigin& origin, |
+ const WebString& database_name) { |
+ sender_->Send(new DatabaseHostMsg_Modified(GetIdentifierFromOrigin(origin), |
+ database_name)); |
} |
-void WebDatabaseObserverImpl::databaseClosed( |
- const WebString& origin_identifier, |
- const WebString& database_name) { |
+void WebDatabaseObserverImpl::databaseClosed(const WebSecurityOrigin& origin, |
+ const WebString& database_name) { |
DCHECK(!main_thread_task_runner_->RunsTasksOnCurrentThread()); |
+ const std::string origin_identifier = GetIdentifierFromOrigin(origin); |
main_thread_task_runner_->PostTask( |
FROM_HERE, |
- base::Bind( |
- base::IgnoreResult(&IPC::SyncMessageFilter::Send), |
- sender_, |
- new DatabaseHostMsg_Closed(origin_identifier.utf8(), database_name))); |
- open_connections_->RemoveOpenConnection(origin_identifier.utf8(), |
- database_name); |
+ base::Bind(base::IgnoreResult(&IPC::SyncMessageFilter::Send), sender_, |
+ new DatabaseHostMsg_Closed(origin_identifier, database_name))); |
+ open_connections_->RemoveOpenConnection(origin_identifier, database_name); |
} |
void WebDatabaseObserverImpl::reportOpenDatabaseResult( |
- const WebString& origin_identifier, |
+ const WebSecurityOrigin& origin, |
const WebString& database_name, |
int callsite, |
int websql_error, |
@@ -107,7 +113,7 @@ void WebDatabaseObserverImpl::reportOpenDatabaseResult( |
double call_time) { |
UMA_HISTOGRAM_WEBSQL_RESULT("OpenResult", callsite, |
websql_error, sqlite_error); |
- HandleSqliteError(origin_identifier, database_name, sqlite_error); |
+ HandleSqliteError(origin, database_name, sqlite_error); |
if (websql_error == kWebSQLSuccess && sqlite_error == SQLITE_OK) { |
UMA_HISTOGRAM_TIMES("websql.Async.OpenTime.Success", |
@@ -119,50 +125,57 @@ void WebDatabaseObserverImpl::reportOpenDatabaseResult( |
} |
void WebDatabaseObserverImpl::reportChangeVersionResult( |
- const WebString& origin_identifier, |
+ const WebSecurityOrigin& origin, |
const WebString& database_name, |
- int callsite, int websql_error, int sqlite_error) { |
+ int callsite, |
+ int websql_error, |
+ int sqlite_error) { |
UMA_HISTOGRAM_WEBSQL_RESULT("ChangeVersionResult", callsite, |
websql_error, sqlite_error); |
- HandleSqliteError(origin_identifier, database_name, sqlite_error); |
+ HandleSqliteError(origin, database_name, sqlite_error); |
} |
void WebDatabaseObserverImpl::reportStartTransactionResult( |
- const WebString& origin_identifier, |
+ const WebSecurityOrigin& origin, |
const WebString& database_name, |
- int callsite, int websql_error, int sqlite_error) { |
+ int callsite, |
+ int websql_error, |
+ int sqlite_error) { |
UMA_HISTOGRAM_WEBSQL_RESULT("BeginResult", callsite, |
websql_error, sqlite_error); |
- HandleSqliteError(origin_identifier, database_name, sqlite_error); |
+ HandleSqliteError(origin, database_name, sqlite_error); |
} |
void WebDatabaseObserverImpl::reportCommitTransactionResult( |
- const WebString& origin_identifier, |
+ const WebSecurityOrigin& origin, |
const WebString& database_name, |
- int callsite, int websql_error, int sqlite_error) { |
+ int callsite, |
+ int websql_error, |
+ int sqlite_error) { |
UMA_HISTOGRAM_WEBSQL_RESULT("CommitResult", callsite, |
websql_error, sqlite_error); |
- HandleSqliteError(origin_identifier, database_name, sqlite_error); |
+ HandleSqliteError(origin, database_name, sqlite_error); |
} |
void WebDatabaseObserverImpl::reportExecuteStatementResult( |
- const WebString& origin_identifier, |
+ const WebSecurityOrigin& origin, |
const WebString& database_name, |
- int callsite, int websql_error, int sqlite_error) { |
+ int callsite, |
+ int websql_error, |
+ int sqlite_error) { |
UMA_HISTOGRAM_WEBSQL_RESULT("StatementResult", callsite, |
websql_error, sqlite_error); |
- HandleSqliteError(origin_identifier, database_name, sqlite_error); |
+ HandleSqliteError(origin, database_name, sqlite_error); |
} |
void WebDatabaseObserverImpl::reportVacuumDatabaseResult( |
- const WebString& origin_identifier, |
+ const WebSecurityOrigin& origin, |
const WebString& database_name, |
int sqlite_error) { |
int result = DetermineHistogramResult(-1, sqlite_error); |
UMA_HISTOGRAM_ENUMERATION("websql.Async.VacuumResult", |
result, kResultHistogramSize); |
- |
- HandleSqliteError(origin_identifier, database_name, sqlite_error); |
+ HandleSqliteError(origin, database_name, sqlite_error); |
} |
bool WebDatabaseObserverImpl::WaitForAllDatabasesToClose( |
@@ -171,18 +184,15 @@ bool WebDatabaseObserverImpl::WaitForAllDatabasesToClose( |
return open_connections_->WaitForAllDatabasesToClose(timeout); |
} |
-void WebDatabaseObserverImpl::HandleSqliteError( |
- const WebString& origin_identifier, |
- const WebString& database_name, |
- int error) { |
+void WebDatabaseObserverImpl::HandleSqliteError(const WebSecurityOrigin& origin, |
+ const WebString& database_name, |
+ 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( |
- origin_identifier.utf8(), |
- database_name, |
- error)); |
+ GetIdentifierFromOrigin(origin), database_name, error)); |
} |
} |