async_api_function.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef EXTENSIONS_BROWSER_API_ASYNC_API_FUCTION_H_ 6#define EXTENSIONS_BROWSER_API_ASYNC_API_FUCTION_H_ 7 8#include "content/public/browser/browser_thread.h" 9#include "extensions/browser/extension_function.h" 10 11namespace extensions { 12 13// AsyncApiFunction provides convenient thread management for APIs that need to 14// do essentially all their work on a thread other than the UI thread. 15class AsyncApiFunction : public UIThreadExtensionFunction { 16 protected: 17 AsyncApiFunction(); 18 virtual ~AsyncApiFunction(); 19 20 // Like Prepare(). A useful place to put common work in an ApiFunction 21 // superclass that multiple API functions want to share. 22 virtual bool PrePrepare(); 23 24 // Set up for work (e.g., validate arguments). Guaranteed to happen on UI 25 // thread. 26 virtual bool Prepare() = 0; 27 28 // Do actual work. Guaranteed to happen on the thread specified in 29 // work_thread_id_. 30 virtual void Work(); 31 32 // Start the asynchronous work. Guraranteed to happen on requested thread. 33 virtual void AsyncWorkStart(); 34 35 // Notify AsyncIOApiFunction that the work is completed 36 void AsyncWorkCompleted(); 37 38 // Respond. Guaranteed to happen on UI thread. 39 virtual bool Respond() = 0; 40 41 // ExtensionFunction::RunImpl() 42 virtual bool RunImpl() OVERRIDE; 43 44 protected: 45 content::BrowserThread::ID work_thread_id() const { return work_thread_id_; } 46 void set_work_thread_id(content::BrowserThread::ID work_thread_id) { 47 work_thread_id_ = work_thread_id; 48 } 49 50 private: 51 void WorkOnWorkThread(); 52 void RespondOnUIThread(); 53 54 // If you don't want your Work() method to happen on the IO thread, then set 55 // this to the thread that you do want, preferably in Prepare(). 56 content::BrowserThread::ID work_thread_id_; 57}; 58 59} // namespace extensions 60 61#endif // EXTENSIONS_BROWSER_API_ASYNC_API_FUCTION_H_ 62