summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-15 18:54:03 +0000
committerakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-15 18:54:03 +0000
commita76bf96db2cb5aef56de46860630da6a0a6c2477 (patch)
treec33b548b166d92b1168220bb32d058d23818e42a /chrome
parent6d1fe886978abb15f41c4946049d2cd42b0cb470 (diff)
downloadchromium_src-a76bf96db2cb5aef56de46860630da6a0a6c2477.zip
chromium_src-a76bf96db2cb5aef56de46860630da6a0a6c2477.tar.gz
chromium_src-a76bf96db2cb5aef56de46860630da6a0a6c2477.tar.bz2
Add GROUP_FILE ModelSafeGroup
Original patch by kalman@chromium.org BUG= TEST=Added FileModelWorkerUnittest TBR=kalman@chromium.org Review URL: http://codereview.chromium.org/7908010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@101346 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/sync/engine/mock_model_safe_workers.cc2
-rw-r--r--chrome/browser/sync/engine/mock_model_safe_workers.h5
-rw-r--r--chrome/browser/sync/engine/model_safe_worker.cc2
-rw-r--r--chrome/browser/sync/engine/model_safe_worker.h1
-rw-r--r--chrome/browser/sync/glue/browser_thread_model_worker.cc52
-rw-r--r--chrome/browser/sync/glue/browser_thread_model_worker.h44
-rw-r--r--chrome/browser/sync/glue/browser_thread_model_worker_unittest.cc (renamed from chrome/browser/sync/glue/database_model_worker_unittest.cc)39
-rw-r--r--chrome/browser/sync/glue/database_model_worker.cc41
-rw-r--r--chrome/browser/sync/glue/database_model_worker.h37
-rw-r--r--chrome/browser/sync/glue/sync_backend_registrar.cc9
-rw-r--r--chrome/browser/sync/glue/sync_backend_registrar_unittest.cc4
-rw-r--r--chrome/chrome_browser.gypi4
-rw-r--r--chrome/chrome_tests.gypi2
13 files changed, 140 insertions, 102 deletions
diff --git a/chrome/browser/sync/engine/mock_model_safe_workers.cc b/chrome/browser/sync/engine/mock_model_safe_workers.cc
index 8e121af..44aebdd 100644
--- a/chrome/browser/sync/engine/mock_model_safe_workers.cc
+++ b/chrome/browser/sync/engine/mock_model_safe_workers.cc
@@ -10,6 +10,8 @@ ModelSafeGroup MockUIModelWorker::GetModelSafeGroup() { return GROUP_UI; }
ModelSafeGroup MockDBModelWorker::GetModelSafeGroup() { return GROUP_DB; }
+ModelSafeGroup MockFileModelWorker::GetModelSafeGroup() { return GROUP_FILE; }
+
MockModelSafeWorkerRegistrar::~MockModelSafeWorkerRegistrar() {}
// static
diff --git a/chrome/browser/sync/engine/mock_model_safe_workers.h b/chrome/browser/sync/engine/mock_model_safe_workers.h
index e5526cf..efe2a1e 100644
--- a/chrome/browser/sync/engine/mock_model_safe_workers.h
+++ b/chrome/browser/sync/engine/mock_model_safe_workers.h
@@ -24,6 +24,11 @@ class MockDBModelWorker : public ModelSafeWorker {
virtual ModelSafeGroup GetModelSafeGroup();
};
+class MockFileModelWorker : public ModelSafeWorker {
+ public:
+ virtual ModelSafeGroup GetModelSafeGroup();
+};
+
class MockModelSafeWorkerRegistrar : public ModelSafeWorkerRegistrar {
public:
virtual ~MockModelSafeWorkerRegistrar();
diff --git a/chrome/browser/sync/engine/model_safe_worker.cc b/chrome/browser/sync/engine/model_safe_worker.cc
index d879bb2..8142be2 100644
--- a/chrome/browser/sync/engine/model_safe_worker.cc
+++ b/chrome/browser/sync/engine/model_safe_worker.cc
@@ -59,6 +59,8 @@ std::string ModelSafeGroupToString(ModelSafeGroup group) {
return "GROUP_UI";
case GROUP_DB:
return "GROUP_DB";
+ case GROUP_FILE:
+ return "GROUP_FILE";
case GROUP_HISTORY:
return "GROUP_HISTORY";
case GROUP_PASSIVE:
diff --git a/chrome/browser/sync/engine/model_safe_worker.h b/chrome/browser/sync/engine/model_safe_worker.h
index 4b8e4e7..f4829ec 100644
--- a/chrome/browser/sync/engine/model_safe_worker.h
+++ b/chrome/browser/sync/engine/model_safe_worker.h
@@ -26,6 +26,7 @@ enum ModelSafeGroup {
// native model.
GROUP_UI, // Models that live on UI thread and are being synced.
GROUP_DB, // Models that live on DB thread and are being synced.
+ GROUP_FILE, // Models that live on FILE thread and are being synced.
GROUP_HISTORY, // Models that live on history thread and are being
// synced.
GROUP_PASSWORD, // Models that live on the password thread and are
diff --git a/chrome/browser/sync/glue/browser_thread_model_worker.cc b/chrome/browser/sync/glue/browser_thread_model_worker.cc
new file mode 100644
index 0000000..49bdfb8
--- /dev/null
+++ b/chrome/browser/sync/glue/browser_thread_model_worker.cc
@@ -0,0 +1,52 @@
+// 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.
+
+#include "chrome/browser/sync/glue/browser_thread_model_worker.h"
+
+#include "base/synchronization/waitable_event.h"
+#include "content/browser/browser_thread.h"
+
+using base::WaitableEvent;
+
+namespace browser_sync {
+
+BrowserThreadModelWorker::BrowserThreadModelWorker(
+ BrowserThread::ID thread, ModelSafeGroup group)
+ : thread_(thread), group_(group) {}
+
+BrowserThreadModelWorker::~BrowserThreadModelWorker() {}
+
+void BrowserThreadModelWorker::DoWorkAndWaitUntilDone(Callback0::Type* work) {
+ if (BrowserThread::CurrentlyOn(thread_)) {
+ DLOG(WARNING) << "Already on thread " << thread_;
+ work->Run();
+ return;
+ }
+ WaitableEvent done(false, false);
+ if (!BrowserThread::PostTask(
+ thread_,
+ FROM_HERE,
+ NewRunnableMethod(
+ this,
+ &BrowserThreadModelWorker::CallDoWorkAndSignalTask,
+ work,
+ &done))) {
+ NOTREACHED() << "Failed to post task to thread " << thread_;
+ return;
+ }
+ done.Wait();
+}
+
+void BrowserThreadModelWorker::CallDoWorkAndSignalTask(
+ Callback0::Type* work, WaitableEvent* done) {
+ DCHECK(BrowserThread::CurrentlyOn(thread_));
+ work->Run();
+ done->Signal();
+}
+
+ModelSafeGroup BrowserThreadModelWorker::GetModelSafeGroup() {
+ return group_;
+}
+
+} // namespace browser_sync
diff --git a/chrome/browser/sync/glue/browser_thread_model_worker.h b/chrome/browser/sync/glue/browser_thread_model_worker.h
new file mode 100644
index 0000000..51670a1
--- /dev/null
+++ b/chrome/browser/sync/glue/browser_thread_model_worker.h
@@ -0,0 +1,44 @@
+// 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.
+
+#ifndef CHROME_BROWSER_SYNC_GLUE_BROWSER_THREAD_MODEL_WORKER_H_
+#define CHROME_BROWSER_SYNC_GLUE_BROWSER_THREAD_MODEL_WORKER_H_
+#pragma once
+
+#include "base/callback.h"
+#include "base/basictypes.h"
+#include "chrome/browser/sync/engine/model_safe_worker.h"
+#include "content/browser/browser_thread.h"
+
+namespace base {
+class WaitableEvent;
+}
+
+namespace browser_sync {
+
+// A ModelSafeWorker for models that accept requests from the syncapi that need
+// to be fulfilled on a browser thread, for example autofill on the DB thread.
+// TODO(sync): Try to generalize other ModelWorkers (e.g. history, etc).
+class BrowserThreadModelWorker : public browser_sync::ModelSafeWorker {
+ public:
+ BrowserThreadModelWorker(BrowserThread::ID thread, ModelSafeGroup group);
+ virtual ~BrowserThreadModelWorker();
+
+ // ModelSafeWorker implementation. Called on the sync thread.
+ virtual void DoWorkAndWaitUntilDone(Callback0::Type* work);
+ virtual ModelSafeGroup GetModelSafeGroup();
+
+ private:
+ void CallDoWorkAndSignalTask(
+ Callback0::Type* work, base::WaitableEvent* done);
+
+ BrowserThread::ID thread_;
+ ModelSafeGroup group_;
+
+ DISALLOW_COPY_AND_ASSIGN(BrowserThreadModelWorker);
+};
+
+} // namespace browser_sync
+
+#endif // CHROME_BROWSER_SYNC_GLUE_BROWSER_THREAD_MODEL_WORKER_H_
diff --git a/chrome/browser/sync/glue/database_model_worker_unittest.cc b/chrome/browser/sync/glue/browser_thread_model_worker_unittest.cc
index 150dd31..3501e53 100644
--- a/chrome/browser/sync/glue/database_model_worker_unittest.cc
+++ b/chrome/browser/sync/glue/browser_thread_model_worker_unittest.cc
@@ -6,40 +6,45 @@
#include "base/memory/scoped_ptr.h"
#include "base/message_loop.h"
#include "base/threading/thread.h"
+#include "base/test/test_timeouts.h"
#include "base/timer.h"
-#include "chrome/browser/sync/glue/database_model_worker.h"
+#include "chrome/browser/sync/glue/browser_thread_model_worker.h"
#include "content/browser/browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::OneShotTimer;
using base::Thread;
using base::TimeDelta;
-using browser_sync::DatabaseModelWorker;
+using browser_sync::BrowserThreadModelWorker;
+using browser_sync::GROUP_DB;
namespace {
-class DatabaseModelWorkerTest : public testing::Test {
+class BrowserThreadModelWorkerTest : public testing::Test {
public:
- DatabaseModelWorkerTest() :
+ BrowserThreadModelWorkerTest() :
did_do_work_(false),
db_thread_(BrowserThread::DB),
io_thread_(BrowserThread::IO, &io_loop_),
ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {}
bool did_do_work() { return did_do_work_; }
- DatabaseModelWorker* worker() { return worker_.get(); }
- OneShotTimer<DatabaseModelWorkerTest>* timer() { return &timer_; }
- ScopedRunnableMethodFactory<DatabaseModelWorkerTest>* factory() {
+ BrowserThreadModelWorker* worker() { return worker_.get(); }
+ OneShotTimer<BrowserThreadModelWorkerTest>* timer() { return &timer_; }
+ ScopedRunnableMethodFactory<BrowserThreadModelWorkerTest>* factory() {
return &method_factory_;
}
// Schedule DoWork to be executed on the DB thread and have the test fail if
- // DoWork hasn't executed within 10 seconds.
+ // DoWork hasn't executed within action_timeout_ms() ms.
void ScheduleWork() {
scoped_ptr<Callback0::Type> c(NewCallback(this,
- &DatabaseModelWorkerTest::DoWork));
- timer()->Start(FROM_HERE, TimeDelta::FromSeconds(10),
- this, &DatabaseModelWorkerTest::Timeout);
+ &BrowserThreadModelWorkerTest::DoWork));
+ timer()->Start(
+ FROM_HERE,
+ TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms()),
+ this,
+ &BrowserThreadModelWorkerTest::Timeout);
worker()->DoWorkAndWaitUntilDone(c.get());
}
@@ -63,7 +68,7 @@ class DatabaseModelWorkerTest : public testing::Test {
protected:
virtual void SetUp() {
db_thread_.Start();
- worker_ = new DatabaseModelWorker();
+ worker_ = new BrowserThreadModelWorker(BrowserThread::DB, GROUP_DB);
}
virtual void Teardown() {
@@ -73,19 +78,19 @@ class DatabaseModelWorkerTest : public testing::Test {
private:
bool did_do_work_;
- scoped_refptr<DatabaseModelWorker> worker_;
- OneShotTimer<DatabaseModelWorkerTest> timer_;
+ scoped_refptr<BrowserThreadModelWorker> worker_;
+ OneShotTimer<BrowserThreadModelWorkerTest> timer_;
BrowserThread db_thread_;
MessageLoopForIO io_loop_;
BrowserThread io_thread_;
- ScopedRunnableMethodFactory<DatabaseModelWorkerTest> method_factory_;
+ ScopedRunnableMethodFactory<BrowserThreadModelWorkerTest> method_factory_;
};
-TEST_F(DatabaseModelWorkerTest, DoesWorkOnDatabaseThread) {
+TEST_F(BrowserThreadModelWorkerTest, DoesWorkOnDatabaseThread) {
MessageLoop::current()->PostTask(FROM_HERE, factory()->NewRunnableMethod(
- &DatabaseModelWorkerTest::ScheduleWork));
+ &BrowserThreadModelWorkerTest::ScheduleWork));
MessageLoop::current()->Run();
EXPECT_TRUE(did_do_work());
}
diff --git a/chrome/browser/sync/glue/database_model_worker.cc b/chrome/browser/sync/glue/database_model_worker.cc
deleted file mode 100644
index 83330af..0000000
--- a/chrome/browser/sync/glue/database_model_worker.cc
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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.
-
-#include "chrome/browser/sync/glue/database_model_worker.h"
-
-#include "base/synchronization/waitable_event.h"
-#include "content/browser/browser_thread.h"
-
-using base::WaitableEvent;
-
-namespace browser_sync {
-
-void DatabaseModelWorker::DoWorkAndWaitUntilDone(Callback0::Type* work) {
- if (BrowserThread::CurrentlyOn(BrowserThread::DB)) {
- DLOG(WARNING) << "DoWorkAndWaitUntilDone called from the DB thread.";
- work->Run();
- return;
- }
- WaitableEvent done(false, false);
- if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
- NewRunnableMethod(this, &DatabaseModelWorker::CallDoWorkAndSignalTask,
- work, &done))) {
- NOTREACHED() << "Failed to post task to the db thread.";
- return;
- }
- done.Wait();
-}
-
-void DatabaseModelWorker::CallDoWorkAndSignalTask(Callback0::Type* work,
- WaitableEvent* done) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
- work->Run();
- done->Signal();
-}
-
-ModelSafeGroup DatabaseModelWorker::GetModelSafeGroup() {
- return GROUP_DB;
-}
-
-} // namespace browser_sync
diff --git a/chrome/browser/sync/glue/database_model_worker.h b/chrome/browser/sync/glue/database_model_worker.h
deleted file mode 100644
index b23b052..0000000
--- a/chrome/browser/sync/glue/database_model_worker.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// 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.
-
-#ifndef CHROME_BROWSER_SYNC_GLUE_DATABASE_MODEL_WORKER_H_
-#define CHROME_BROWSER_SYNC_GLUE_DATABASE_MODEL_WORKER_H_
-#pragma once
-
-#include "base/callback.h"
-#include "chrome/browser/sync/engine/model_safe_worker.h"
-
-namespace base {
-class WaitableEvent;
-}
-
-namespace browser_sync {
-
-// A ModelSafeWorker for database models (eg. autofill) that accepts requests
-// from the syncapi that need to be fulfilled on the database thread.
-class DatabaseModelWorker : public browser_sync::ModelSafeWorker {
- public:
- explicit DatabaseModelWorker() {}
-
- // ModelSafeWorker implementation. Called on syncapi SyncerThread.
- virtual void DoWorkAndWaitUntilDone(Callback0::Type* work);
- virtual ModelSafeGroup GetModelSafeGroup();
-
- private:
- void CallDoWorkAndSignalTask(Callback0::Type* work,
- base::WaitableEvent* done);
-
- DISALLOW_COPY_AND_ASSIGN(DatabaseModelWorker);
-};
-
-} // namespace browser_sync
-
-#endif // CHROME_BROWSER_SYNC_GLUE_DATABASE_MODEL_WORKER_H_
diff --git a/chrome/browser/sync/glue/sync_backend_registrar.cc b/chrome/browser/sync/glue/sync_backend_registrar.cc
index 376ab5b..5edf2b7 100644
--- a/chrome/browser/sync/glue/sync_backend_registrar.cc
+++ b/chrome/browser/sync/glue/sync_backend_registrar.cc
@@ -11,7 +11,7 @@
#include "base/message_loop.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/glue/change_processor.h"
-#include "chrome/browser/sync/glue/database_model_worker.h"
+#include "chrome/browser/sync/glue/browser_thread_model_worker.h"
#include "chrome/browser/sync/glue/history_model_worker.h"
#include "chrome/browser/sync/glue/password_model_worker.h"
#include "chrome/browser/sync/glue/ui_model_worker.h"
@@ -31,6 +31,8 @@ bool IsOnThreadForGroup(ModelSafeGroup group) {
return BrowserThread::CurrentlyOn(BrowserThread::UI);
case GROUP_DB:
return BrowserThread::CurrentlyOn(BrowserThread::DB);
+ case GROUP_FILE:
+ return BrowserThread::CurrentlyOn(BrowserThread::FILE);
case GROUP_HISTORY:
// TODO(ncarter): How to determine this?
return true;
@@ -57,7 +59,10 @@ SyncBackendRegistrar::SyncBackendRegistrar(
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
CHECK(profile_);
DCHECK(sync_loop_);
- workers_[GROUP_DB] = new DatabaseModelWorker();
+ workers_[GROUP_DB] =
+ new BrowserThreadModelWorker(BrowserThread::DB, GROUP_DB);
+ workers_[GROUP_FILE] =
+ new BrowserThreadModelWorker(BrowserThread::FILE, GROUP_FILE);
workers_[GROUP_UI] = ui_worker_;
workers_[GROUP_PASSIVE] = new ModelSafeWorker();
diff --git a/chrome/browser/sync/glue/sync_backend_registrar_unittest.cc b/chrome/browser/sync/glue/sync_backend_registrar_unittest.cc
index 806ff12..4f9da66 100644
--- a/chrome/browser/sync/glue/sync_backend_registrar_unittest.cc
+++ b/chrome/browser/sync/glue/sync_backend_registrar_unittest.cc
@@ -79,7 +79,7 @@ TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) {
{
std::vector<ModelSafeWorker*> workers;
registrar.GetWorkers(&workers);
- EXPECT_EQ(3u, workers.size());
+ EXPECT_EQ(4u, workers.size());
}
ExpectRoutingInfo(&registrar, ModelSafeRoutingInfo());
ExpectHasProcessorsForTypes(&registrar, ModelTypeSet());
@@ -98,7 +98,7 @@ TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) {
{
std::vector<ModelSafeWorker*> workers;
registrar.GetWorkers(&workers);
- EXPECT_EQ(3u, workers.size());
+ EXPECT_EQ(4u, workers.size());
}
{
ModelSafeRoutingInfo expected_routing_info;
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index cb4742f..4b3183c 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -2074,6 +2074,8 @@
'browser/sync/glue/bookmark_data_type_controller.h',
'browser/sync/glue/bookmark_model_associator.cc',
'browser/sync/glue/bookmark_model_associator.h',
+ 'browser/sync/glue/browser_thread_model_worker.cc',
+ 'browser/sync/glue/browser_thread_model_worker.h',
'browser/sync/glue/change_processor.cc',
'browser/sync/glue/change_processor.h',
'browser/sync/glue/data_type_controller.h',
@@ -2081,8 +2083,6 @@
'browser/sync/glue/data_type_manager.h',
'browser/sync/glue/data_type_manager_impl.cc',
'browser/sync/glue/data_type_manager_impl.h',
- 'browser/sync/glue/database_model_worker.cc',
- 'browser/sync/glue/database_model_worker.h',
'browser/sync/glue/do_optimistic_refresh_task.cc',
'browser/sync/glue/do_optimistic_refresh_task.h',
'browser/sync/glue/extension_data_type_controller.cc',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 88235ff..f610189 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1467,6 +1467,7 @@
'browser/sync/glue/autofill_model_associator_unittest.cc',
'browser/sync/glue/autofill_profile_syncable_service_unittest.cc',
'browser/sync/glue/bookmark_data_type_controller_unittest.cc',
+ 'browser/sync/glue/browser_thread_model_worker_unittest.cc',
'browser/sync/glue/change_processor_mock.cc',
'browser/sync/glue/change_processor_mock.h',
'browser/sync/glue/data_type_controller_mock.cc',
@@ -1474,7 +1475,6 @@
'browser/sync/glue/data_type_manager_impl_unittest.cc',
'browser/sync/glue/data_type_manager_mock.cc',
'browser/sync/glue/data_type_manager_mock.h',
- 'browser/sync/glue/database_model_worker_unittest.cc',
'browser/sync/glue/extension_data_type_controller_unittest.cc',
'browser/sync/glue/frontend_data_type_controller_mock.cc',
'browser/sync/glue/frontend_data_type_controller_mock.h',