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

Unified Diff: chrome/browser/sync/glue/bookmark_model_worker.h

Issue 160542: Rolling back 22317 (Closed) Base URL: svn://chrome-svn.corp.google.com/chrome/trunk/src/
Patch Set: Created 11 years, 5 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
« no previous file with comments | « chrome/browser/sync/engine/syncapi.h ('k') | chrome/browser/sync/glue/bookmark_model_worker.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/glue/bookmark_model_worker.h
===================================================================
--- chrome/browser/sync/glue/bookmark_model_worker.h (revision 22320)
+++ chrome/browser/sync/glue/bookmark_model_worker.h (working copy)
@@ -1,134 +0,0 @@
-// Copyright (c) 2006-2008 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.
-
-#ifdef CHROME_PERSONALIZATION
-
-#ifndef CHROME_BROWSER_SYNC_GLUE_BOOKMARK_MODEL_WORKER_H_
-#define CHROME_BROWSER_SYNC_GLUE_BOOKMARK_MODEL_WORKER_H_
-
-#include "base/lock.h"
-#include "base/task.h"
-#include "base/waitable_event.h"
-#include "chrome/browser/sync/engine/syncapi.h"
-
-class MessageLoop;
-
-namespace browser_sync {
-
-// A ModelSafeWorker for bookmarks that accepts work requests from the syncapi
-// that need to be fulfilled from the MessageLoop home to the BookmarkModel
-// (this is typically the "main" UI thread).
-//
-// Lifetime note: Instances of this class will generally be owned by the
-// SyncerThread. When the SyncerThread _object_ is destroyed, the
-// BookmarkModelWorker will be destroyed. The SyncerThread object is destroyed
-// after the actual syncer pthread has exited.
-class BookmarkModelWorker :
- public sync_api::ModelSafeWorkerInterface {
- public:
- explicit BookmarkModelWorker(MessageLoop* bookmark_model_loop)
- : state_(WORKING),
- pending_work_(NULL),
- syncapi_has_shutdown_(false),
- bookmark_model_loop_(bookmark_model_loop),
- syncapi_event_(false, false) {
- }
- virtual ~BookmarkModelWorker();
-
- // A simple task to signal a waitable event after calling DoWork on a visitor.
- class CallDoWorkAndSignalTask : public Task {
- public:
- CallDoWorkAndSignalTask(ModelSafeWorkerInterface::Visitor* visitor,
- base::WaitableEvent* work_done,
- BookmarkModelWorker* scheduler)
- : visitor_(visitor), work_done_(work_done), scheduler_(scheduler) {
- }
- virtual ~CallDoWorkAndSignalTask() { }
-
- // Task implementation.
- virtual void Run();
-
- private:
- // Task data - a visitor that knows how to DoWork, and a waitable event
- // to signal after the work has been done.
- ModelSafeWorkerInterface::Visitor* visitor_;
- base::WaitableEvent* work_done_;
-
- // The BookmarkModelWorker responsible for scheduling us.
- BookmarkModelWorker* const scheduler_;
-
- DISALLOW_COPY_AND_ASSIGN(CallDoWorkAndSignalTask);
- };
-
- // Called by the UI thread on shutdown of the sync service. Blocks until
- // the BookmarkModelWorker has safely met termination conditions, namely that
- // no task scheduled by CallDoWorkFromModelSafeThreadAndWait remains un-
- // processed and that syncapi will not schedule any further work for us to do.
- void Stop();
-
- // ModelSafeWorkerInterface implementation. Called on syncapi SyncerThread.
- virtual void CallDoWorkFromModelSafeThreadAndWait(
- ModelSafeWorkerInterface::Visitor* visitor);
-
- // Upon receiving this idempotent call, the ModelSafeWorkerInterface can
- // assume no work will ever be scheduled again from now on. If it has any work
- // that it has not yet completed, it must make sure to run it as soon as
- // possible as the Syncer is trying to shut down. Called from the CoreThread.
- void OnSyncerShutdownComplete();
-
- // Callback from |pending_work_| to notify us that it has been run.
- // Called on |bookmark_model_loop_|.
- void OnTaskCompleted() { pending_work_ = NULL; }
-
- private:
- // The life-cycle of a BookmarkModelWorker in three states.
- enum State {
- // We hit the ground running in this state and remain until
- // the UI loop calls Stop().
- WORKING,
- // Stop() sequence has been initiated, but we have not received word that
- // the SyncerThread has terminated and doesn't need us anymore. Since the
- // UI MessageLoop is not running at this point, we manually process any
- // last pending_task_ that the Syncer throws at us, effectively dedicating
- // the UI thread to terminating the Syncer.
- RUNNING_MANUAL_SHUTDOWN_PUMP,
- // We have come to a complete stop, no scheduled work remains, and no work
- // will be scheduled from now until our destruction.
- STOPPED,
- };
-
- // This is set by the UI thread, but is not explicitly thread safe, so only
- // read this value from other threads when you know it is absolutely safe (e.g
- // there is _no_ way we can be in CallDoWork with state_ = STOPPED, so it is
- // safe to read / compare in this case).
- State state_;
-
- // We keep a reference to any task we have scheduled so we can gracefully
- // force them to run if the syncer is trying to shutdown.
- Task* pending_work_;
- Lock pending_work_lock_;
-
- // Set by the SyncCoreThread when Syncapi shutdown has completed and the
- // SyncerThread has terminated, so no more work will be scheduled. Read by
- // the UI thread in Stop().
- bool syncapi_has_shutdown_;
-
- // The BookmarkModel's home-sweet-home MessageLoop.
- MessageLoop* const bookmark_model_loop_;
-
- // Used as a barrier at shutdown to ensure the SyncerThread terminates before
- // we allow the UI thread to return from Stop(). This gets signalled whenever
- // one of two events occur: a new pending_work_ task was scheduled, or the
- // SyncerThread has terminated. We only care about (1) when we are in Stop(),
- // because we have to manually Run() the task.
- base::WaitableEvent syncapi_event_;
-
- DISALLOW_COPY_AND_ASSIGN(BookmarkModelWorker);
-};
-
-} // namespace browser_sync
-
-#endif // CHROME_BROWSER_SYNC_GLUE_BOOKMARK_MODEL_WORKER_H_
-
-#endif // CHROME_PERSONALIZATION
« no previous file with comments | « chrome/browser/sync/engine/syncapi.h ('k') | chrome/browser/sync/glue/bookmark_model_worker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698