diff options
author | Kristian Monsen <kristianm@google.com> | 2011-05-31 20:30:28 +0100 |
---|---|---|
committer | Kristian Monsen <kristianm@google.com> | 2011-06-14 20:31:41 -0700 |
commit | 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801 (patch) | |
tree | 382278a54ce7a744d62fa510a9a80688cc12434b /chrome/browser/browsing_data_database_helper.cc | |
parent | c4becdd46e31d261b930e4b5a539cbc1d45c23a6 (diff) | |
download | external_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.cc | 154 |
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)); } |