| Index: chrome/browser/browsing_data/browsing_data_indexed_db_helper.cc
|
| diff --git a/chrome/browser/browsing_data/browsing_data_indexed_db_helper.cc b/chrome/browser/browsing_data/browsing_data_indexed_db_helper.cc
|
| index afbd30d60fceaf50a0e7d0b958333416fa1c5cc1..5b95e6d0e0f53cdbe8470de9a6b0818954270046 100644
|
| --- a/chrome/browser/browsing_data/browsing_data_indexed_db_helper.cc
|
| +++ b/chrome/browser/browsing_data/browsing_data_indexed_db_helper.cc
|
| @@ -10,7 +10,6 @@
|
| #include "base/callback.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/memory/scoped_ptr.h"
|
| -#include "base/message_loop/message_loop.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "chrome/browser/browsing_data/browsing_data_helper.h"
|
| @@ -21,61 +20,17 @@ using content::BrowserThread;
|
| using content::IndexedDBContext;
|
| using content::IndexedDBInfo;
|
|
|
| -namespace {
|
| -
|
| -class BrowsingDataIndexedDBHelperImpl : public BrowsingDataIndexedDBHelper {
|
| - public:
|
| - explicit BrowsingDataIndexedDBHelperImpl(
|
| - IndexedDBContext* indexed_db_context);
|
| -
|
| - virtual void StartFetching(
|
| - const base::Callback<void(const std::list<IndexedDBInfo>&)>&
|
| - callback) OVERRIDE;
|
| - virtual void DeleteIndexedDB(const GURL& origin) OVERRIDE;
|
| -
|
| - private:
|
| - virtual ~BrowsingDataIndexedDBHelperImpl();
|
| -
|
| - // Enumerates all indexed database files in the IndexedDB thread.
|
| - void FetchIndexedDBInfoInIndexedDBThread();
|
| - // Notifies the completion callback in the UI thread.
|
| - void NotifyInUIThread();
|
| - // Delete a single indexed database in the IndexedDB thread.
|
| - void DeleteIndexedDBInIndexedDBThread(const GURL& origin);
|
| -
|
| - scoped_refptr<IndexedDBContext> indexed_db_context_;
|
| -
|
| - // Access to |indexed_db_info_| is triggered indirectly via the UI thread and
|
| - // guarded by |is_fetching_|. This means |indexed_db_info_| is only accessed
|
| - // while |is_fetching_| is true. The flag |is_fetching_| is only accessed on
|
| - // the UI thread.
|
| - // In the context of this class |indexed_db_info_| is only accessed on the
|
| - // context's IndexedDB thread.
|
| - std::list<IndexedDBInfo> indexed_db_info_;
|
| -
|
| - // This only mutates on the UI thread.
|
| - base::Callback<void(const std::list<IndexedDBInfo>&)> completion_callback_;
|
| -
|
| - // Indicates whether or not we're currently fetching information:
|
| - // it's true when StartFetching() is called in the UI thread, and it's reset
|
| - // after we notified the callback in the UI thread.
|
| - // This only mutates on the UI thread.
|
| - bool is_fetching_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BrowsingDataIndexedDBHelperImpl);
|
| -};
|
| -
|
| -BrowsingDataIndexedDBHelperImpl::BrowsingDataIndexedDBHelperImpl(
|
| +BrowsingDataIndexedDBHelper::BrowsingDataIndexedDBHelper(
|
| IndexedDBContext* indexed_db_context)
|
| : indexed_db_context_(indexed_db_context),
|
| is_fetching_(false) {
|
| DCHECK(indexed_db_context_.get());
|
| }
|
|
|
| -BrowsingDataIndexedDBHelperImpl::~BrowsingDataIndexedDBHelperImpl() {
|
| +BrowsingDataIndexedDBHelper::~BrowsingDataIndexedDBHelper() {
|
| }
|
|
|
| -void BrowsingDataIndexedDBHelperImpl::StartFetching(
|
| +void BrowsingDataIndexedDBHelper::StartFetching(
|
| const base::Callback<void(const std::list<IndexedDBInfo>&)>& callback) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(!is_fetching_);
|
| @@ -86,22 +41,22 @@ void BrowsingDataIndexedDBHelperImpl::StartFetching(
|
| indexed_db_context_->TaskRunner()->PostTask(
|
| FROM_HERE,
|
| base::Bind(
|
| - &BrowsingDataIndexedDBHelperImpl::FetchIndexedDBInfoInIndexedDBThread,
|
| + &BrowsingDataIndexedDBHelper::FetchIndexedDBInfoInIndexedDBThread,
|
| this));
|
| }
|
|
|
| -void BrowsingDataIndexedDBHelperImpl::DeleteIndexedDB(
|
| +void BrowsingDataIndexedDBHelper::DeleteIndexedDB(
|
| const GURL& origin) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| indexed_db_context_->TaskRunner()->PostTask(
|
| FROM_HERE,
|
| base::Bind(
|
| - &BrowsingDataIndexedDBHelperImpl::DeleteIndexedDBInIndexedDBThread,
|
| + &BrowsingDataIndexedDBHelper::DeleteIndexedDBInIndexedDBThread,
|
| this,
|
| origin));
|
| }
|
|
|
| -void BrowsingDataIndexedDBHelperImpl::FetchIndexedDBInfoInIndexedDBThread() {
|
| +void BrowsingDataIndexedDBHelper::FetchIndexedDBInfoInIndexedDBThread() {
|
| DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
|
| std::vector<IndexedDBInfo> origins = indexed_db_context_->GetAllOriginsInfo();
|
| for (std::vector<IndexedDBInfo>::const_iterator iter = origins.begin();
|
| @@ -115,10 +70,10 @@ void BrowsingDataIndexedDBHelperImpl::FetchIndexedDBInfoInIndexedDBThread() {
|
|
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| - base::Bind(&BrowsingDataIndexedDBHelperImpl::NotifyInUIThread, this));
|
| + base::Bind(&BrowsingDataIndexedDBHelper::NotifyInUIThread, this));
|
| }
|
|
|
| -void BrowsingDataIndexedDBHelperImpl::NotifyInUIThread() {
|
| +void BrowsingDataIndexedDBHelper::NotifyInUIThread() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(is_fetching_);
|
| completion_callback_.Run(indexed_db_info_);
|
| @@ -126,21 +81,12 @@ void BrowsingDataIndexedDBHelperImpl::NotifyInUIThread() {
|
| is_fetching_ = false;
|
| }
|
|
|
| -void BrowsingDataIndexedDBHelperImpl::DeleteIndexedDBInIndexedDBThread(
|
| +void BrowsingDataIndexedDBHelper::DeleteIndexedDBInIndexedDBThread(
|
| const GURL& origin) {
|
| DCHECK(indexed_db_context_->TaskRunner()->RunsTasksOnCurrentThread());
|
| indexed_db_context_->DeleteForOrigin(origin);
|
| }
|
|
|
| -} // namespace
|
| -
|
| -
|
| -// static
|
| -BrowsingDataIndexedDBHelper* BrowsingDataIndexedDBHelper::Create(
|
| - IndexedDBContext* indexed_db_context) {
|
| - return new BrowsingDataIndexedDBHelperImpl(indexed_db_context);
|
| -}
|
| -
|
| CannedBrowsingDataIndexedDBHelper::
|
| PendingIndexedDBInfo::PendingIndexedDBInfo(const GURL& origin,
|
| const base::string16& name)
|
| @@ -159,8 +105,9 @@ bool CannedBrowsingDataIndexedDBHelper::PendingIndexedDBInfo::operator<(
|
| return origin < other.origin;
|
| }
|
|
|
| -CannedBrowsingDataIndexedDBHelper::CannedBrowsingDataIndexedDBHelper()
|
| - : is_fetching_(false) {
|
| +CannedBrowsingDataIndexedDBHelper::CannedBrowsingDataIndexedDBHelper(
|
| + content::IndexedDBContext* context)
|
| + : BrowsingDataIndexedDBHelper(context) {
|
| }
|
|
|
| CannedBrowsingDataIndexedDBHelper::~CannedBrowsingDataIndexedDBHelper() {}
|
| @@ -168,7 +115,7 @@ CannedBrowsingDataIndexedDBHelper::~CannedBrowsingDataIndexedDBHelper() {}
|
| CannedBrowsingDataIndexedDBHelper* CannedBrowsingDataIndexedDBHelper::Clone() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| CannedBrowsingDataIndexedDBHelper* clone =
|
| - new CannedBrowsingDataIndexedDBHelper();
|
| + new CannedBrowsingDataIndexedDBHelper(indexed_db_context_);
|
|
|
| clone->pending_indexed_db_info_ = pending_indexed_db_info_;
|
| clone->indexed_db_info_ = indexed_db_info_;
|
| @@ -204,32 +151,30 @@ CannedBrowsingDataIndexedDBHelper::GetIndexedDBInfo() const {
|
| void CannedBrowsingDataIndexedDBHelper::StartFetching(
|
| const base::Callback<void(const std::list<IndexedDBInfo>&)>& callback) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - DCHECK(!is_fetching_);
|
| - DCHECK_EQ(false, callback.is_null());
|
| + DCHECK(!callback.is_null());
|
|
|
| - is_fetching_ = true;
|
| - completion_callback_ = callback;
|
| -
|
| - // We post a task to emulate async fetching behavior.
|
| - base::MessageLoop::current()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&CannedBrowsingDataIndexedDBHelper::
|
| - ConvertPendingInfo,
|
| - this));
|
| -}
|
| -
|
| -void CannedBrowsingDataIndexedDBHelper::ConvertPendingInfo() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| - indexed_db_info_.clear();
|
| + std::list<IndexedDBInfo> result;
|
| for (std::set<PendingIndexedDBInfo>::const_iterator
|
| pending_info = pending_indexed_db_info_.begin();
|
| pending_info != pending_indexed_db_info_.end(); ++pending_info) {
|
| IndexedDBInfo info(
|
| pending_info->origin, 0, base::Time(), base::FilePath(), 0);
|
| - indexed_db_info_.push_back(info);
|
| + result.push_back(info);
|
| }
|
|
|
| - completion_callback_.Run(indexed_db_info_);
|
| - completion_callback_.Reset();
|
| - is_fetching_ = false;
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE, base::Bind(callback, result));
|
| +}
|
| +
|
| +void CannedBrowsingDataIndexedDBHelper::DeleteIndexedDB(
|
| + const GURL& origin) {
|
| + for (std::set<PendingIndexedDBInfo>::iterator it =
|
| + pending_indexed_db_info_.begin();
|
| + it != pending_indexed_db_info_.end(); ) {
|
| + if (it->origin == origin)
|
| + pending_indexed_db_info_.erase(it++);
|
| + else
|
| + ++it;
|
| + }
|
| + BrowsingDataIndexedDBHelper::DeleteIndexedDB(origin);
|
| }
|
|
|