| Index: chrome/browser/browsing_data_file_system_helper.cc
|
| diff --git a/chrome/browser/browsing_data_file_system_helper.cc b/chrome/browser/browsing_data_file_system_helper.cc
|
| index 065645b5a8612a14533ff838070c01e7fb51adca..a93f1428b8685bb6b735516d48fe3636b61f828f 100644
|
| --- a/chrome/browser/browsing_data_file_system_helper.cc
|
| +++ b/chrome/browser/browsing_data_file_system_helper.cc
|
| @@ -11,24 +11,20 @@
|
| #include "base/utf_string_conversions.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "content/browser/browser_thread.h"
|
| -#include "content/browser/in_process_webkit/webkit_context.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"
|
| #include "webkit/fileapi/file_system_quota_util.h"
|
| #include "webkit/fileapi/file_system_context.h"
|
| #include "webkit/fileapi/file_system_types.h"
|
| #include "webkit/fileapi/sandbox_mount_point_provider.h"
|
| -#include "webkit/glue/webkit_glue.h"
|
| -
|
| -using WebKit::WebSecurityOrigin;
|
|
|
| namespace {
|
|
|
| +// An implementation of the BrowsingDataFileSystemHelper interface that pulls
|
| +// data from a given |profile| and returns a list of FileSystemInfo items to a
|
| +// client.
|
| class BrowsingDataFileSystemHelperImpl : public BrowsingDataFileSystemHelper {
|
| public:
|
| + // BrowsingDataFileSystemHelper implementation
|
| explicit BrowsingDataFileSystemHelperImpl(Profile* profile);
|
| -
|
| virtual void StartFetching(
|
| Callback1<const std::vector<FileSystemInfo>& >::Type* callback);
|
| virtual void CancelNotification();
|
| @@ -37,26 +33,36 @@ class BrowsingDataFileSystemHelperImpl : public BrowsingDataFileSystemHelper {
|
| private:
|
| virtual ~BrowsingDataFileSystemHelperImpl();
|
|
|
| - // Enumerates all filesystem files in the FILE thread.
|
| + // Enumerates all filesystem files, storing the resulting list into
|
| + // file_system_file_ for later use. This must be called on the FILE thread.
|
| void FetchFileSystemInfoInFileThread();
|
| - // Notifies the completion callback in the UI thread.
|
| - void NotifyInUIThread();
|
| - // Delete data for an origin on the FILE thread.
|
| +
|
| + // Triggers the success callback as the end of a StartFetching workflow. This
|
| + // must be called on the UI thread.
|
| + void NotifyOnUIThread();
|
| +
|
| + // Deletes all file systems associated with |origin|. This must be called on
|
| + // the FILE thread.
|
| void DeleteFileSystemOriginInFileThread(const GURL& origin);
|
|
|
| + // We don't own the Profile object. Clients are responsible for destroying the
|
| + // object when it's no longer used.
|
| Profile* profile_;
|
|
|
| - // This only mutates in the FILE thread.
|
| + // Holds the current list of file systems returned to the client after
|
| + // StartFetching is called. This only mutates in the FILE thread.
|
| std::vector<FileSystemInfo> file_system_info_;
|
|
|
| - // This only mutates on the UI thread.
|
| + // Holds the callback passed in at the beginning of the StartFetching workflow
|
| + // so that it can be triggered via NotifyOnUIThread. This only mutates on the
|
| + // UI thread.
|
| scoped_ptr<Callback1<const std::vector<FileSystemInfo>& >::Type >
|
| 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.
|
| + // Indicates whether or not we're currently fetching information: set to true
|
| + // when StartFetching is called on the UI thread, and reset to false when
|
| + // NotifyOnUIThread triggers the success callback.
|
| + // This property only mutates on the UI thread.
|
| bool is_fetching_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(BrowsingDataFileSystemHelperImpl);
|
| @@ -109,7 +115,9 @@ void BrowsingDataFileSystemHelperImpl::FetchFileSystemInfoInFileThread() {
|
| scoped_ptr<fileapi::SandboxMountPointProvider::OriginEnumerator>
|
| origin_enumerator(profile_->GetFileSystemContext()->path_manager()->
|
| sandbox_provider()->CreateOriginEnumerator());
|
| - // We don't own this pointer; deleting it would be a bad idea.
|
| +
|
| + // We don't own this pointer; it's a magic singleton generated by the
|
| + // profile's FileSystemContext. Deleting it would be a bad idea.
|
| fileapi::FileSystemQuotaUtil* quota_util = profile_->
|
| GetFileSystemContext()->GetQuotaUtil(fileapi::kFileSystemTypeTemporary);
|
|
|
| @@ -119,6 +127,8 @@ void BrowsingDataFileSystemHelperImpl::FetchFileSystemInfoInFileThread() {
|
| // Extension state is not considered browsing data.
|
| continue;
|
| }
|
| + // We can call these synchronous methods as we've already verified that
|
| + // we're running on the FILE thread.
|
| int64 persistent_usage = quota_util->GetOriginUsageOnFileThread(current,
|
| fileapi::kFileSystemTypePersistent);
|
| int64 temporary_usage = quota_util->GetOriginUsageOnFileThread(current,
|
| @@ -137,14 +147,14 @@ void BrowsingDataFileSystemHelperImpl::FetchFileSystemInfoInFileThread() {
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| NewRunnableMethod(
|
| - this, &BrowsingDataFileSystemHelperImpl::NotifyInUIThread));
|
| + this, &BrowsingDataFileSystemHelperImpl::NotifyOnUIThread));
|
| }
|
|
|
| -void BrowsingDataFileSystemHelperImpl::NotifyInUIThread() {
|
| +void BrowsingDataFileSystemHelperImpl::NotifyOnUIThread() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(is_fetching_);
|
| - // Note: completion_callback_ mutates only in the UI thread, so it's safe to
|
| - // test it here.
|
| + // completion_callback_ mutates only in the UI thread, so we're safe to test
|
| + // it here.
|
| if (completion_callback_ != NULL) {
|
| completion_callback_->Run(file_system_info_);
|
| completion_callback_.reset();
|
| @@ -182,27 +192,30 @@ BrowsingDataFileSystemHelper* BrowsingDataFileSystemHelper::Create(
|
| }
|
|
|
| CannedBrowsingDataFileSystemHelper::
|
| -PendingFileSystemInfo::PendingFileSystemInfo() {
|
| + PendingFileSystemInfo::PendingFileSystemInfo() {
|
| }
|
|
|
| CannedBrowsingDataFileSystemHelper::
|
| -PendingFileSystemInfo::PendingFileSystemInfo(const GURL& origin,
|
| - const fileapi::FileSystemType type,
|
| - int64 size)
|
| + PendingFileSystemInfo::PendingFileSystemInfo(
|
| + const GURL& origin,
|
| + const fileapi::FileSystemType type,
|
| + int64 size)
|
| : origin(origin),
|
| type(type),
|
| size(size) {
|
| }
|
|
|
| CannedBrowsingDataFileSystemHelper::
|
| -PendingFileSystemInfo::~PendingFileSystemInfo() {
|
| + PendingFileSystemInfo::~PendingFileSystemInfo() {
|
| }
|
|
|
| CannedBrowsingDataFileSystemHelper::CannedBrowsingDataFileSystemHelper(
|
| - Profile* profile)
|
| - : profile_(profile),
|
| - is_fetching_(false) {
|
| - DCHECK(profile);
|
| + Profile* /* profile */)
|
| + : is_fetching_(false) {
|
| +}
|
| +
|
| +CannedBrowsingDataFileSystemHelper::CannedBrowsingDataFileSystemHelper()
|
| + : is_fetching_(false) {
|
| }
|
|
|
| CannedBrowsingDataFileSystemHelper::~CannedBrowsingDataFileSystemHelper() {}
|
| @@ -211,8 +224,7 @@ CannedBrowsingDataFileSystemHelper*
|
| CannedBrowsingDataFileSystemHelper::Clone() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| CannedBrowsingDataFileSystemHelper* clone =
|
| - new CannedBrowsingDataFileSystemHelper(profile_);
|
| -
|
| + new CannedBrowsingDataFileSystemHelper();
|
| clone->pending_file_system_info_ = pending_file_system_info_;
|
| clone->file_system_info_ = file_system_info_;
|
| return clone;
|
| @@ -242,8 +254,9 @@ void CannedBrowsingDataFileSystemHelper::StartFetching(
|
| completion_callback_.reset(callback);
|
|
|
| for (std::vector<PendingFileSystemInfo>::const_iterator
|
| - info = pending_file_system_info_.begin();
|
| - info != pending_file_system_info_.end(); ++info) {
|
| + info = pending_file_system_info_.begin();
|
| + info != pending_file_system_info_.end();
|
| + ++info) {
|
| bool duplicate = false;
|
| for (std::vector<FileSystemInfo>::iterator
|
| file_system = file_system_info_.begin();
|
| @@ -273,16 +286,13 @@ void CannedBrowsingDataFileSystemHelper::StartFetching(
|
| }
|
| pending_file_system_info_.clear();
|
|
|
| -// MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod(this,
|
| -// &CannedBrowsingDataFileSystemHelper::Notify));
|
| -
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| NewRunnableMethod(
|
| - this, &CannedBrowsingDataFileSystemHelper::Notify));
|
| + this, &CannedBrowsingDataFileSystemHelper::NotifyOnUIThread));
|
| }
|
|
|
| -void CannedBrowsingDataFileSystemHelper::Notify() {
|
| +void CannedBrowsingDataFileSystemHelper::NotifyOnUIThread() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| DCHECK(is_fetching_);
|
| if (completion_callback_ != NULL) {
|
|
|