| 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
 | 
| 
 |