Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5395)

Unified Diff: chrome/browser/chromeos/gdata/gdata_file_system.cc

Issue 10352004: gdata: Implement periodic file system update checks. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Bind the ui_weak_ptr_ in a callback to Timer::Start Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/gdata/gdata_file_system.cc
diff --git a/chrome/browser/chromeos/gdata/gdata_file_system.cc b/chrome/browser/chromeos/gdata/gdata_file_system.cc
index bd79a7fada83c8cb2e48f257cbe1f9bfb8cc4cde..0585925cdd5c4b2c00054bb0fe8d18eb765237d7 100644
--- a/chrome/browser/chromeos/gdata/gdata_file_system.cc
+++ b/chrome/browser/chromeos/gdata/gdata_file_system.cc
@@ -77,6 +77,13 @@ const FilePath::CharType kFilesystemProtoFile[] =
FILE_PATH_LITERAL("file_system.pb");
const FilePath::CharType kSymLinkToDevNull[] = FILE_PATH_LITERAL("/dev/null");
+// GData update check interval (in seconds).
+#ifndef NDEBUG
+const int kGDataUpdateCheckIntervalInSec = 5;
+#else
+const int kGDataUpdateCheckIntervalInSec = 60;
+#endif
+
// Schedule for dumping root file system proto buffers to disk depending its
// total protobuffer size in MB.
typedef struct {
@@ -928,6 +935,7 @@ GDataFileSystem::GDataFileSystem(Profile* profile,
true /* manual reset */, true /* initially signaled */)),
cache_initialization_started_(false),
num_pending_tasks_(0),
+ num_update_requests_(0),
hide_hosted_docs_(false),
ui_weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(
new base::WeakPtrFactory<GDataFileSystem>(this))),
@@ -961,6 +969,18 @@ void GDataFileSystem::Initialize() {
InitializePreferenceObserver();
}
+void GDataFileSystem::CheckForUpdates() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ ContentOrigin initial_origin = root_->origin();
+ if (initial_origin == FROM_SERVER) {
+ root_->set_origin(REFRESHING);
+ ReloadFeedFromServerIfNeeded(initial_origin,
+ root_->largest_changestamp(),
+ root_->GetFilePath(),
+ gdata::FindEntryCallback());
+ }
+}
+
bool GDataFileSystem::SetCacheRootPathForTesting(const FilePath& root_path) {
if (cache_initialization_started_)
return false;
@@ -1016,6 +1036,31 @@ void GDataFileSystem::RemoveObserver(Observer* observer) {
observers_.RemoveObserver(observer);
}
+void GDataFileSystem::StartUpdates() {
+ // Perform an immediate check for updates.
+ CheckForUpdates();
+ ++num_update_requests_;
+ if (num_update_requests_ == 1) {
+ // If this is the first StartUpdate request, start timer to periodically
+ // check for updates at the specified intervals.
+ update_timer_.Timer::Start(FROM_HERE,
+ base::TimeDelta::FromSeconds(
+ kGDataUpdateCheckIntervalInSec),
+ base::Bind(&GDataFileSystem::CheckForUpdates,
+ ui_weak_ptr_));
hshi 2012/05/03 18:26:37 Unfortunately I have to explicitly call base class
satorux1 2012/05/03 18:46:20 I just found this comment in timer.h: // OneShotT
hshi 2012/05/03 18:55:54 How about I just use the base::Timer class as Zel
satorux1 2012/05/03 18:59:54 Sounds good.
hshi 2012/05/03 19:09:19 Done.
+ }
+}
+
+void GDataFileSystem::StopUpdates() {
+ if (num_update_requests_ <= 0) {
+ NOTREACHED();
+ return;
+ }
satorux1 2012/05/03 18:46:20 you can replace the four lines with: DCHECK_GE(0,
hshi 2012/05/03 18:55:54 Did you mean DCHECK_GE(num_update_requests, 0)? O
satorux1 2012/05/03 18:59:54 oh I meant DCHECK_LE(). not a big deal at all, but
hshi 2012/05/03 19:09:19 Done.
+ --num_update_requests_;
+ if (num_update_requests_ == 0)
+ update_timer_.Stop();
+}
+
void GDataFileSystem::Authenticate(const AuthStatusCallback& callback) {
// TokenFetcher, used in DocumentsService, must be run on UI thread.
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -1066,16 +1111,6 @@ void GDataFileSystem::FindEntryByPathAsyncOnUIThread(
search_file_path,
callback);
return;
- } else if (root_->NeedsRefresh()) {
- // If content is stale or from disk from cache, fetch content from
- // the server.
- ContentOrigin initial_origin = root_->origin();
- root_->set_origin(REFRESHING);
- ReloadFeedFromServerIfNeeded(initial_origin,
- root_->largest_changestamp(),
- search_file_path,
- callback);
- return;
}
// Post a task to the same thread, rather than calling it here, as

Powered by Google App Engine
This is Rietveld 408576698