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

Side by Side Diff: chrome/browser/sync/glue/browser_thread_model_worker.cc

Issue 8366030: Introduce the plumbing necessary to report Unrecoverable error from model safe workers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: For review. Created 9 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync/glue/browser_thread_model_worker.h" 5 #include "chrome/browser/sync/glue/browser_thread_model_worker.h"
6 6
7 #include "base/synchronization/waitable_event.h" 7 #include "base/synchronization/waitable_event.h"
8 #include "content/browser/browser_thread.h" 8 #include "content/browser/browser_thread.h"
9 9
10 using base::WaitableEvent; 10 using base::WaitableEvent;
11 11
12 namespace browser_sync { 12 namespace browser_sync {
13 13 using sessions::UnrecoverableErrorInfo;
14 BrowserThreadModelWorker::BrowserThreadModelWorker( 14 BrowserThreadModelWorker::BrowserThreadModelWorker(
15 BrowserThread::ID thread, ModelSafeGroup group) 15 BrowserThread::ID thread, ModelSafeGroup group)
16 : thread_(thread), group_(group) {} 16 : thread_(thread), group_(group) {}
17 17
18 BrowserThreadModelWorker::~BrowserThreadModelWorker() {} 18 BrowserThreadModelWorker::~BrowserThreadModelWorker() {}
19 19
20 void BrowserThreadModelWorker::DoWorkAndWaitUntilDone(Callback0::Type* work) { 20 UnrecoverableErrorInfo BrowserThreadModelWorker::DoWorkAndWaitUntilDone(
21 Callback1<UnrecoverableErrorInfo*>::Type* work) {
22 UnrecoverableErrorInfo error_info;
21 if (BrowserThread::CurrentlyOn(thread_)) { 23 if (BrowserThread::CurrentlyOn(thread_)) {
22 DLOG(WARNING) << "Already on thread " << thread_; 24 DLOG(WARNING) << "Already on thread " << thread_;
23 work->Run(); 25 work->Run(&error_info);
24 return; 26 return error_info;
25 } 27 }
26 WaitableEvent done(false, false); 28 WaitableEvent done(false, false);
27 if (!BrowserThread::PostTask( 29 if (!BrowserThread::PostTask(
28 thread_, 30 thread_,
29 FROM_HERE, 31 FROM_HERE,
30 NewRunnableMethod( 32 NewRunnableMethod(
31 this, 33 this,
32 &BrowserThreadModelWorker::CallDoWorkAndSignalTask, 34 &BrowserThreadModelWorker::CallDoWorkAndSignalTask,
33 work, 35 work,
34 &done))) { 36 &done,
37 &error_info))) {
35 NOTREACHED() << "Failed to post task to thread " << thread_; 38 NOTREACHED() << "Failed to post task to thread " << thread_;
36 return; 39 return error_info;
37 } 40 }
38 done.Wait(); 41 done.Wait();
42 return error_info;
39 } 43 }
40 44
41 void BrowserThreadModelWorker::CallDoWorkAndSignalTask( 45 void BrowserThreadModelWorker::CallDoWorkAndSignalTask(
42 Callback0::Type* work, WaitableEvent* done) { 46 Callback1<UnrecoverableErrorInfo*>::Type* work,
47 WaitableEvent* done,
48 UnrecoverableErrorInfo* error_info) {
43 DCHECK(BrowserThread::CurrentlyOn(thread_)); 49 DCHECK(BrowserThread::CurrentlyOn(thread_));
44 work->Run(); 50 work->Run(error_info);
45 done->Signal(); 51 done->Signal();
46 } 52 }
47 53
48 ModelSafeGroup BrowserThreadModelWorker::GetModelSafeGroup() { 54 ModelSafeGroup BrowserThreadModelWorker::GetModelSafeGroup() {
49 return group_; 55 return group_;
50 } 56 }
51 57
52 DatabaseModelWorker::DatabaseModelWorker() 58 DatabaseModelWorker::DatabaseModelWorker()
53 : BrowserThreadModelWorker(BrowserThread::DB, GROUP_DB) {} 59 : BrowserThreadModelWorker(BrowserThread::DB, GROUP_DB) {}
54 60
55 DatabaseModelWorker::~DatabaseModelWorker() {} 61 DatabaseModelWorker::~DatabaseModelWorker() {}
56 62
57 void DatabaseModelWorker::CallDoWorkAndSignalTask( 63 void DatabaseModelWorker::CallDoWorkAndSignalTask(
58 Callback0::Type* work, WaitableEvent* done) { 64 Callback1<UnrecoverableErrorInfo*>::Type* work,
59 BrowserThreadModelWorker::CallDoWorkAndSignalTask(work, done); 65 WaitableEvent* done,
66 UnrecoverableErrorInfo* error_info) {
67 BrowserThreadModelWorker::CallDoWorkAndSignalTask(work, done, error_info);
60 } 68 }
61 69
62 FileModelWorker::FileModelWorker() 70 FileModelWorker::FileModelWorker()
63 : BrowserThreadModelWorker(BrowserThread::FILE, GROUP_FILE) {} 71 : BrowserThreadModelWorker(BrowserThread::FILE, GROUP_FILE) {}
64 72
65 FileModelWorker::~FileModelWorker() {} 73 FileModelWorker::~FileModelWorker() {}
66 74
67 void FileModelWorker::CallDoWorkAndSignalTask( 75 void FileModelWorker::CallDoWorkAndSignalTask(
68 Callback0::Type* work, WaitableEvent* done) { 76 Callback1<UnrecoverableErrorInfo*>::Type* work,
69 BrowserThreadModelWorker::CallDoWorkAndSignalTask(work, done); 77 WaitableEvent* done,
78 UnrecoverableErrorInfo* error_info) {
79 BrowserThreadModelWorker::CallDoWorkAndSignalTask(work, done, error_info);
70 } 80 }
71 81
72 } // namespace browser_sync 82 } // namespace browser_sync
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698