| Index: components/sync/engine/ui_model_worker.h
|
| diff --git a/components/sync/engine/ui_model_worker.h b/components/sync/engine/ui_model_worker.h
|
| index c158e2a5cbcc14471bf839b1ecdf8101a0541c15..2306a39c52e652a3f9281a175c0b5d0cf0cf0bba 100644
|
| --- a/components/sync/engine/ui_model_worker.h
|
| +++ b/components/sync/engine/ui_model_worker.h
|
| @@ -7,7 +7,9 @@
|
|
|
| #include "base/macros.h"
|
| #include "base/memory/ref_counted.h"
|
| +#include "base/sequence_checker.h"
|
| #include "base/single_thread_task_runner.h"
|
| +#include "base/synchronization/waitable_event.h"
|
| #include "components/sync/engine/model_safe_worker.h"
|
|
|
| namespace syncer {
|
| @@ -19,7 +21,8 @@ class UIModelWorker : public ModelSafeWorker {
|
| public:
|
| explicit UIModelWorker(scoped_refptr<base::SingleThreadTaskRunner> ui_thread);
|
|
|
| - // ModelSafeWorker implementation. Called on syncapi SyncerThread.
|
| + // ModelSafeWorker implementation.
|
| + void RequestStop() override;
|
| ModelSafeGroup GetModelSafeGroup() override;
|
| bool IsOnModelThread() override;
|
|
|
| @@ -32,6 +35,20 @@ class UIModelWorker : public ModelSafeWorker {
|
| // A reference to the UI thread's task runner.
|
| const scoped_refptr<base::SingleThreadTaskRunner> ui_thread_;
|
|
|
| + // Signaled when a task posted by DoWorkAndWaitUntilDoneImpl() is deleted,
|
| + // i.e. after it runs or when it is abandoned. Reset at the beginning of every
|
| + // DoWorkAndWaitUntilDoneImpl() call.
|
| + base::WaitableEvent work_done_or_abandoned_;
|
| +
|
| + // Signaled from RequestStop(). When this is signaled,
|
| + // DoWorkAndWaitUntilDoneImpl() returns immediately. This is needed to prevent
|
| + // the UI thread from joining the sync thread while it is waiting for a
|
| + // WorkCallback to run on the UI thread. See crbug.com/663600.
|
| + base::WaitableEvent stop_requested_;
|
| +
|
| + // Verifies that calls to DoWorkAndWaitUntilDoneImpl() are sequenced.
|
| + base::SequenceChecker sequence_checker_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(UIModelWorker);
|
| };
|
|
|
|
|