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

Unified Diff: chrome/common/important_file_writer.cc

Issue 6713032: Provide lazy CommitPendingWrites in addition to eager SavePersistentPrefs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: for test Created 9 years, 9 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/common/important_file_writer.cc
diff --git a/chrome/common/important_file_writer.cc b/chrome/common/important_file_writer.cc
index f5c5fc115c1dcee81bc86f71d7c32235b8264c76..076689bca9cce6a7fa852815c236c13943aeab53 100644
--- a/chrome/common/important_file_writer.cc
+++ b/chrome/common/important_file_writer.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.
@@ -16,6 +16,8 @@
#include "base/task.h"
#include "base/threading/thread.h"
#include "base/time.h"
+#include "content/browser/browser_thread.h"
+#include "content/common/notification_service.h"
using base::TimeDelta;
@@ -23,11 +25,37 @@ namespace {
const int kDefaultCommitIntervalMs = 10000;
+class CommitNotificationTask: public Task {
+ public:
+ CommitNotificationTask(bool success, NotificationSource source)
+ : success_(success),
+ source_(source) {
+ }
+
+ virtual void Run() {
+ // At this moment we do not send notification in case of failure but we may
+ // want to send it including additional information in details.
+ if (success_ && NotificationService::current()) {
+ NotificationService::current()->Notify(
+ NotificationType::PREF_COMMITTED,
+ source_,
+ NotificationService::NoDetails());
+ }
+ }
+
+ private:
+ bool success_;
+ NotificationSource source_;
+};
+
class WriteToDiskTask : public Task {
public:
- WriteToDiskTask(const FilePath& path, const std::string& data)
+ WriteToDiskTask(const FilePath& path,
+ const std::string& data,
+ NotificationSource source)
: path_(path),
- data_(data) {
+ data_(data),
+ source_(source) {
}
virtual void Run() {
@@ -61,6 +89,11 @@ class WriteToDiskTask : public Task {
file_util::Delete(tmp_file_path, false);
return;
}
+#if defined(OS_CHROMEOS)
+ BrowserThread::PostTask(
+ BrowserThread::UI, FROM_HERE,
+ new CommitNotificationTask(true, source_));
+#endif
}
private:
@@ -71,6 +104,7 @@ class WriteToDiskTask : public Task {
const FilePath path_;
const std::string data_;
+ const NotificationSource source_;
DISALLOW_COPY_AND_ASSIGN(WriteToDiskTask);
};
@@ -83,7 +117,8 @@ ImportantFileWriter::ImportantFileWriter(
file_message_loop_proxy_(file_message_loop_proxy),
serializer_(NULL),
commit_interval_(TimeDelta::FromMilliseconds(
- kDefaultCommitIntervalMs)) {
+ kDefaultCommitIntervalMs)),
+ source_(NotificationService::AllSources()) {
DCHECK(CalledOnValidThread());
DCHECK(file_message_loop_proxy_.get());
}
@@ -106,14 +141,14 @@ void ImportantFileWriter::WriteNow(const std::string& data) {
if (HasPendingWrite())
timer_.Stop();
- if (!file_message_loop_proxy_->PostTask(FROM_HERE,
- new WriteToDiskTask(path_, data))) {
+ if (!file_message_loop_proxy_->PostTask(
+ FROM_HERE, new WriteToDiskTask(path_, data, source_))) {
// Posting the task to background message loop is not expected
// to fail, but if it does, avoid losing data and just hit the disk
// on the current thread.
NOTREACHED();
- WriteToDiskTask write_task(path_, data);
+ WriteToDiskTask write_task(path_, data, source_);
write_task.Run();
}
}

Powered by Google App Engine
This is Rietveld 408576698