Index: chrome/browser/extensions/api/api_function.cc |
diff --git a/chrome/browser/extensions/api/api_function.cc b/chrome/browser/extensions/api/api_function.cc |
index c61c82ac641a4613bdcfa67b1ffb8562525683a2..18f53204ee3cbf7a9a6f0296a4b9c578777ae32e 100644 |
--- a/chrome/browser/extensions/api/api_function.cc |
+++ b/chrome/browser/extensions/api/api_function.cc |
@@ -15,6 +15,49 @@ using content::BrowserThread; |
namespace extensions { |
+bool AsyncIOAPIFunction::RunImpl() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ extension_service_ = profile()->GetExtensionService(); |
+ |
+ if (!Prepare()) { |
+ return false; |
+ } |
+ bool rv = BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&AsyncIOAPIFunction::WorkOnIOThread, this)); |
+ DCHECK(rv); |
+ return true; |
+} |
+ |
+void AsyncIOAPIFunction::Work() { |
+} |
+ |
+void AsyncIOAPIFunction::AsyncWorkStart() { |
+ Work(); |
+ AsyncWorkCompleted(); |
+} |
+ |
+void AsyncIOAPIFunction::AsyncWorkCompleted() { |
+ if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
+ bool rv = BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&AsyncIOAPIFunction::RespondOnUIThread, this)); |
+ DCHECK(rv); |
+ } else { |
+ SendResponse(Respond()); |
+ } |
+} |
+ |
+void AsyncIOAPIFunction::WorkOnIOThread() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ AsyncWorkStart(); |
+} |
+ |
+void AsyncIOAPIFunction::RespondOnUIThread() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ SendResponse(Respond()); |
+} |
+ |
int AsyncIOAPIFunction::ExtractSrcId(size_t argument_position) { |
scoped_ptr<DictionaryValue> options(new DictionaryValue()); |
if (args_->GetSize() > argument_position) { |
@@ -47,32 +90,4 @@ APIResourceController* AsyncIOAPIFunction::controller() { |
return extension_service_->api_resource_controller(); |
} |
-bool AsyncIOAPIFunction::RunImpl() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- extension_service_ = profile()->GetExtensionService(); |
- |
- if (!Prepare()) { |
- return false; |
- } |
- bool rv = BrowserThread::PostTask( |
- BrowserThread::IO, FROM_HERE, |
- base::Bind(&AsyncIOAPIFunction::WorkOnIOThread, this)); |
- DCHECK(rv); |
- return true; |
-} |
- |
-void AsyncIOAPIFunction::WorkOnIOThread() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- Work(); |
- bool rv = BrowserThread::PostTask( |
- BrowserThread::UI, FROM_HERE, |
- base::Bind(&AsyncIOAPIFunction::RespondOnUIThread, this)); |
- DCHECK(rv); |
-} |
- |
-void AsyncIOAPIFunction::RespondOnUIThread() { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- SendResponse(Respond()); |
-} |
- |
} // namespace extensions |