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

Unified Diff: content/browser/renderer_host/database_message_filter.cc

Issue 1832473002: WebSQL: Use url::Origin rather than database identifiers for IPC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 6 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/browser/renderer_host/database_message_filter.h ('k') | content/child/OWNERS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/database_message_filter.cc
diff --git a/content/browser/renderer_host/database_message_filter.cc b/content/browser/renderer_host/database_message_filter.cc
index 5f9a8ae5d721979ce16d2accacca7e37a4a05512..8bf1adbb41ab6338cc48b20c6382395fd6f26bc4 100644
--- a/content/browser/renderer_host/database_message_filter.cc
+++ b/content/browser/renderer_host/database_message_filter.cc
@@ -25,6 +25,7 @@
#include "storage/browser/quota/quota_manager_proxy.h"
#include "storage/common/database/database_identifier.h"
#include "third_party/sqlite/sqlite3.h"
+#include "url/origin.h"
#if defined(OS_POSIX)
#include "base/file_descriptor_posix.h"
@@ -42,6 +43,10 @@ namespace {
const int kNumDeleteRetries = 2;
const int kDelayDeleteRetryMs = 100;
+bool IsOriginValid(const url::Origin& origin) {
+ return !origin.unique();
+}
+
} // namespace
DatabaseMessageFilter::DatabaseMessageFilter(
@@ -249,10 +254,17 @@ void DatabaseMessageFilter::OnDatabaseGetFileSize(
}
void DatabaseMessageFilter::OnDatabaseGetSpaceAvailable(
- const std::string& origin_identifier, IPC::Message* reply_msg) {
+ const url::Origin& origin,
+ IPC::Message* reply_msg) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK(db_tracker_->quota_manager_proxy());
+ if (!IsOriginValid(origin)) {
+ bad_message::ReceivedBadMessage(
+ this, bad_message::DBMF_INVALID_ORIGIN_ON_GET_SPACE);
+ return;
+ }
+
QuotaManager* quota_manager =
db_tracker_->quota_manager_proxy()->quota_manager();
if (!quota_manager) {
@@ -267,10 +279,9 @@ void DatabaseMessageFilter::OnDatabaseGetSpaceAvailable(
TRACE_EVENT0("io", "DatabaseMessageFilter::OnDatabaseGetSpaceAvailable");
quota_manager->GetUsageAndQuota(
- storage::GetOriginFromIdentifier(origin_identifier),
- storage::kStorageTypeTemporary,
- base::Bind(
- &DatabaseMessageFilter::OnDatabaseGetUsageAndQuota, this, reply_msg));
+ GURL(origin.Serialize()), storage::kStorageTypeTemporary,
+ base::Bind(&DatabaseMessageFilter::OnDatabaseGetUsageAndQuota, this,
+ reply_msg));
}
void DatabaseMessageFilter::OnDatabaseGetUsageAndQuota(
@@ -298,36 +309,45 @@ void DatabaseMessageFilter::OnDatabaseSetFileSize(
}
void DatabaseMessageFilter::OnDatabaseOpened(
- const std::string& origin_identifier,
+ const url::Origin& origin,
const base::string16& database_name,
const base::string16& description,
int64_t estimated_size) {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- if (!storage::IsValidOriginIdentifier(origin_identifier)) {
+ if (!IsOriginValid(origin)) {
bad_message::ReceivedBadMessage(this,
bad_message::DBMF_INVALID_ORIGIN_ON_OPEN);
return;
}
- UMA_HISTOGRAM_BOOLEAN(
- "websql.OpenDatabase",
- IsOriginSecure(storage::GetOriginFromIdentifier(origin_identifier)));
+ GURL origin_url(origin.Serialize());
+ UMA_HISTOGRAM_BOOLEAN("websql.OpenDatabase", IsOriginSecure(origin_url));
int64_t database_size = 0;
+ std::string origin_identifier(storage::GetIdentifierFromOrigin(origin_url));
db_tracker_->DatabaseOpened(origin_identifier, database_name, description,
estimated_size, &database_size);
+
database_connections_.AddConnection(origin_identifier, database_name);
- Send(new DatabaseMsg_UpdateSize(origin_identifier, database_name,
- database_size));
+ Send(new DatabaseMsg_UpdateSize(origin, database_name, database_size));
}
void DatabaseMessageFilter::OnDatabaseModified(
- const std::string& origin_identifier,
+ const url::Origin& origin,
const base::string16& database_name) {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- if (!database_connections_.IsDatabaseOpened(
- origin_identifier, database_name)) {
+
+ if (!IsOriginValid(origin)) {
+ bad_message::ReceivedBadMessage(
+ this, bad_message::DBMF_INVALID_ORIGIN_ON_MODIFIED);
+ return;
+ }
+
+ std::string origin_identifier(
+ storage::GetIdentifierFromOrigin(GURL(origin.Serialize())));
+ if (!database_connections_.IsDatabaseOpened(origin_identifier,
+ database_name)) {
bad_message::ReceivedBadMessage(this,
bad_message::DBMF_DB_NOT_OPEN_ON_MODIFY);
return;
@@ -337,9 +357,18 @@ void DatabaseMessageFilter::OnDatabaseModified(
}
void DatabaseMessageFilter::OnDatabaseClosed(
- const std::string& origin_identifier,
+ const url::Origin& origin,
const base::string16& database_name) {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
+
+ if (!IsOriginValid(origin)) {
+ bad_message::ReceivedBadMessage(this,
+ bad_message::DBMF_INVALID_ORIGIN_ON_CLOSED);
+ return;
+ }
+
+ std::string origin_identifier(
+ storage::GetIdentifierFromOrigin(GURL(origin.Serialize())));
if (!database_connections_.IsDatabaseOpened(
origin_identifier, database_name)) {
bad_message::ReceivedBadMessage(this,
@@ -352,17 +381,18 @@ void DatabaseMessageFilter::OnDatabaseClosed(
}
void DatabaseMessageFilter::OnHandleSqliteError(
- const std::string& origin_identifier,
+ const url::Origin& origin,
const base::string16& database_name,
int error) {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- if (!storage::IsValidOriginIdentifier(origin_identifier)) {
+ if (!IsOriginValid(origin)) {
bad_message::ReceivedBadMessage(
this, bad_message::DBMF_INVALID_ORIGIN_ON_SQLITE_ERROR);
return;
}
-
- db_tracker_->HandleSqliteError(origin_identifier, database_name, error);
+ db_tracker_->HandleSqliteError(
+ storage::GetIdentifierFromOrigin(GURL(origin.Serialize())), database_name,
+ error);
}
void DatabaseMessageFilter::OnDatabaseSizeChanged(
@@ -371,8 +401,9 @@ void DatabaseMessageFilter::OnDatabaseSizeChanged(
int64_t database_size) {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
if (database_connections_.IsOriginUsed(origin_identifier)) {
- Send(new DatabaseMsg_UpdateSize(origin_identifier, database_name,
- database_size));
+ Send(new DatabaseMsg_UpdateSize(
+ url::Origin(storage::GetOriginFromIdentifier(origin_identifier)),
+ database_name, database_size));
}
}
@@ -380,7 +411,9 @@ void DatabaseMessageFilter::OnDatabaseScheduledForDeletion(
const std::string& origin_identifier,
const base::string16& database_name) {
DCHECK_CURRENTLY_ON(BrowserThread::FILE);
- Send(new DatabaseMsg_CloseImmediately(origin_identifier, database_name));
+ Send(new DatabaseMsg_CloseImmediately(
+ url::Origin(storage::GetOriginFromIdentifier(origin_identifier)),
+ database_name));
}
} // namespace content
« no previous file with comments | « content/browser/renderer_host/database_message_filter.h ('k') | content/child/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698