Chromium Code Reviews| Index: chrome/browser/browsing_data_database_helper.cc |
| diff --git a/chrome/browser/browsing_data_database_helper.cc b/chrome/browser/browsing_data_database_helper.cc |
| index 338e58ca39049a53b89465de7683cf3d0eb47f41..dbbb0a43b28645ba1ff91fab3f26f9ea870edc60 100644 |
| --- a/chrome/browser/browsing_data_database_helper.cc |
| +++ b/chrome/browser/browsing_data_database_helper.cc |
| @@ -43,9 +43,9 @@ bool BrowsingDataDatabaseHelper::DatabaseInfo::IsFileSchemeData() { |
| } |
| BrowsingDataDatabaseHelper::BrowsingDataDatabaseHelper(Profile* profile) |
| - : tracker_(profile->GetDatabaseTracker()), |
| - completion_callback_(NULL), |
| - is_fetching_(false) { |
| + : completion_callback_(NULL), |
| + is_fetching_(false), |
| + tracker_(profile->GetDatabaseTracker()) { |
| } |
| BrowsingDataDatabaseHelper::~BrowsingDataDatabaseHelper() { |
| @@ -59,8 +59,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() { |
| @@ -71,13 +71,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 = |
| @@ -129,15 +129,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) { |
| @@ -147,39 +160,67 @@ 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)); |
| +} |
| + |
| +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) { |
| + WebKit::WebSecurityOrigin web_security_origin = |
| + WebKit::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(), |
|
Bernhard Bauer
2011/02/08 10:49:08
Nit: Indent by two spaces less?
|
| + 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)); |
| } |