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); |
} |