summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browsing_data_database_helper.cc
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2011-05-31 20:30:28 +0100
committerKristian Monsen <kristianm@google.com>2011-06-14 20:31:41 -0700
commit72a454cd3513ac24fbdd0e0cb9ad70b86a99b801 (patch)
tree382278a54ce7a744d62fa510a9a80688cc12434b /chrome/browser/browsing_data_database_helper.cc
parentc4becdd46e31d261b930e4b5a539cbc1d45c23a6 (diff)
downloadexternal_chromium-72a454cd3513ac24fbdd0e0cb9ad70b86a99b801.zip
external_chromium-72a454cd3513ac24fbdd0e0cb9ad70b86a99b801.tar.gz
external_chromium-72a454cd3513ac24fbdd0e0cb9ad70b86a99b801.tar.bz2
Merge Chromium.org at r11.0.672.0: Initial merge by git.
Change-Id: I8b4aaf611a2a405fe3fe10e8a94ea7658645c192
Diffstat (limited to 'chrome/browser/browsing_data_database_helper.cc')
-rw-r--r--chrome/browser/browsing_data_database_helper.cc154
1 files changed, 113 insertions, 41 deletions
diff --git a/chrome/browser/browsing_data_database_helper.cc b/chrome/browser/browsing_data_database_helper.cc
index ad822bc..9f2ecd3 100644
--- a/chrome/browser/browsing_data_database_helper.cc
+++ b/chrome/browser/browsing_data_database_helper.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -11,14 +11,43 @@
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/profiles/profile.h"
#include "net/base/net_errors.h"
-#include "third_party/WebKit/WebKit/chromium/public/WebCString.h"
-#include "third_party/WebKit/WebKit/chromium/public/WebSecurityOrigin.h"
-#include "third_party/WebKit/WebKit/chromium/public/WebString.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebCString.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
+
+using WebKit::WebSecurityOrigin;
+
+BrowsingDataDatabaseHelper::DatabaseInfo::DatabaseInfo() {}
+
+BrowsingDataDatabaseHelper::DatabaseInfo::DatabaseInfo(
+ const std::string& host,
+ const std::string& database_name,
+ const std::string& origin_identifier,
+ const std::string& description,
+ const std::string& origin,
+ int64 size,
+ base::Time last_modified)
+ : host(host),
+ database_name(database_name),
+ origin_identifier(origin_identifier),
+ description(description),
+ origin(origin),
+ size(size),
+ last_modified(last_modified) {
+}
+
+BrowsingDataDatabaseHelper::DatabaseInfo::~DatabaseInfo() {}
+
+bool BrowsingDataDatabaseHelper::DatabaseInfo::IsFileSchemeData() {
+ return StartsWithASCII(origin_identifier,
+ std::string(chrome::kFileScheme),
+ true);
+}
BrowsingDataDatabaseHelper::BrowsingDataDatabaseHelper(Profile* profile)
- : tracker_(profile->GetDatabaseTracker()),
- completion_callback_(NULL),
- is_fetching_(false) {
+ : completion_callback_(NULL),
+ is_fetching_(false),
+ tracker_(profile->GetDatabaseTracker()) {
}
BrowsingDataDatabaseHelper::~BrowsingDataDatabaseHelper() {
@@ -32,8 +61,8 @@ void BrowsingDataDatabaseHelper::StartFetching(
is_fetching_ = true;
database_info_.clear();
completion_callback_.reset(callback);
- BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, NewRunnableMethod(
- this, &BrowsingDataDatabaseHelper::FetchDatabaseInfoInFileThread));
+ BrowserThread::PostTask(BrowserThread::WEBKIT, FROM_HERE, NewRunnableMethod(
+ this, &BrowsingDataDatabaseHelper::FetchDatabaseInfoInWebKitThread));
}
void BrowsingDataDatabaseHelper::CancelNotification() {
@@ -44,13 +73,13 @@ void BrowsingDataDatabaseHelper::CancelNotification() {
void BrowsingDataDatabaseHelper::DeleteDatabase(const std::string& origin,
const std::string& name) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, NewRunnableMethod(
- this, &BrowsingDataDatabaseHelper::DeleteDatabaseInFileThread, origin,
+ BrowserThread::PostTask(BrowserThread::WEBKIT, FROM_HERE, NewRunnableMethod(
+ this, &BrowsingDataDatabaseHelper::DeleteDatabaseInWebKitThread, origin,
name));
}
-void BrowsingDataDatabaseHelper::FetchDatabaseInfoInFileThread() {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+void BrowsingDataDatabaseHelper::FetchDatabaseInfoInWebKitThread() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT));
std::vector<webkit_database::OriginInfo> origins_info;
if (tracker_.get() && tracker_->GetAllOriginsInfo(&origins_info)) {
for (std::vector<webkit_database::OriginInfo>::const_iterator ori =
@@ -62,8 +91,8 @@ void BrowsingDataDatabaseHelper::FetchDatabaseInfoInFileThread() {
// Extension state is not considered browsing data.
continue;
}
- WebKit::WebSecurityOrigin web_security_origin =
- WebKit::WebSecurityOrigin::createFromDatabaseIdentifier(
+ WebSecurityOrigin web_security_origin =
+ WebSecurityOrigin::createFromDatabaseIdentifier(
ori->GetOrigin());
std::vector<string16> databases;
ori->GetAllDatabaseNames(&databases);
@@ -102,15 +131,28 @@ void BrowsingDataDatabaseHelper::NotifyInUIThread() {
database_info_.clear();
}
-void BrowsingDataDatabaseHelper::DeleteDatabaseInFileThread(
+void BrowsingDataDatabaseHelper::DeleteDatabaseInWebKitThread(
const std::string& origin,
const std::string& name) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT));
if (!tracker_.get())
return;
tracker_->DeleteDatabase(UTF8ToUTF16(origin), UTF8ToUTF16(name), NULL);
}
+CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo::PendingDatabaseInfo() {}
+
+CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo::PendingDatabaseInfo(
+ const GURL& origin,
+ const std::string& name,
+ const std::string& description)
+ : origin(origin),
+ name(name),
+ description(description) {
+}
+
+CannedBrowsingDataDatabaseHelper::PendingDatabaseInfo::~PendingDatabaseInfo() {}
+
CannedBrowsingDataDatabaseHelper::CannedBrowsingDataDatabaseHelper(
Profile* profile)
: BrowsingDataDatabaseHelper(profile) {
@@ -120,39 +162,69 @@ void CannedBrowsingDataDatabaseHelper::AddDatabase(
const GURL& origin,
const std::string& name,
const std::string& description) {
- WebKit::WebSecurityOrigin web_security_origin =
- WebKit::WebSecurityOrigin::createFromString(
- UTF8ToUTF16(origin.spec()));
- std::string origin_identifier =
- web_security_origin.databaseIdentifier().utf8();
-
- for (std::vector<DatabaseInfo>::iterator database = database_info_.begin();
- database != database_info_.end(); ++database) {
- if (database->origin_identifier == origin_identifier &&
- database->database_name == name)
- return;
- }
-
- database_info_.push_back(DatabaseInfo(
- web_security_origin.host().utf8(),
- name,
- origin_identifier,
- description,
- web_security_origin.toString().utf8(),
- 0,
- base::Time()));
+ base::AutoLock auto_lock(lock_);
+ pending_database_info_.push_back(PendingDatabaseInfo(
+ origin, name, description));
}
void CannedBrowsingDataDatabaseHelper::Reset() {
+ base::AutoLock auto_lock(lock_);
database_info_.clear();
+ pending_database_info_.clear();
}
bool CannedBrowsingDataDatabaseHelper::empty() const {
- return database_info_.empty();
+ base::AutoLock auto_lock(lock_);
+ return database_info_.empty() && pending_database_info_.empty();
}
void CannedBrowsingDataDatabaseHelper::StartFetching(
Callback1<const std::vector<DatabaseInfo>& >::Type* callback) {
- callback->Run(database_info_);
- delete callback;
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ DCHECK(!is_fetching_);
+ DCHECK(callback);
+ is_fetching_ = true;
+ completion_callback_.reset(callback);
+ BrowserThread::PostTask(BrowserThread::WEBKIT, FROM_HERE, NewRunnableMethod(
+ this, &CannedBrowsingDataDatabaseHelper::ConvertInfoInWebKitThread));
+}
+
+CannedBrowsingDataDatabaseHelper::~CannedBrowsingDataDatabaseHelper() {}
+
+void CannedBrowsingDataDatabaseHelper::ConvertInfoInWebKitThread() {
+ base::AutoLock auto_lock(lock_);
+ for (std::vector<PendingDatabaseInfo>::const_iterator
+ info = pending_database_info_.begin();
+ info != pending_database_info_.end(); ++info) {
+ WebSecurityOrigin web_security_origin =
+ WebSecurityOrigin::createFromString(
+ UTF8ToUTF16(info->origin.spec()));
+ std::string origin_identifier =
+ web_security_origin.databaseIdentifier().utf8();
+
+ bool duplicate = false;
+ for (std::vector<DatabaseInfo>::iterator database = database_info_.begin();
+ database != database_info_.end(); ++database) {
+ if (database->origin_identifier == origin_identifier &&
+ database->database_name == info->name) {
+ duplicate = true;
+ break;
+ }
+ }
+ if (duplicate)
+ continue;
+
+ database_info_.push_back(DatabaseInfo(
+ web_security_origin.host().utf8(),
+ info->name,
+ origin_identifier,
+ info->description,
+ web_security_origin.toString().utf8(),
+ 0,
+ base::Time()));
+ }
+ pending_database_info_.clear();
+
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, NewRunnableMethod(
+ this, &CannedBrowsingDataDatabaseHelper::NotifyInUIThread));
}