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.
5 #ifndef EXTENSIONS_BROWSER_API_ASYNC_API_FUCTION_H_
6 #define EXTENSIONS_BROWSER_API_ASYNC_API_FUCTION_H_
8 #include "content/public/browser/browser_thread.h"
9 #include "extensions/browser/extension_function.h"
11 namespace extensions
{
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.
15 class AsyncApiFunction
: public AsyncExtensionFunction
{
18 ~AsyncApiFunction() override
;
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();
24 // Set up for work (e.g., validate arguments). Guaranteed to happen on UI
26 virtual bool Prepare() = 0;
28 // Do actual work. Guaranteed to happen on the thread specified in
32 // Start the asynchronous work. Guraranteed to happen on requested thread.
33 virtual void AsyncWorkStart();
35 // Notify AsyncIOApiFunction that the work is completed
36 void AsyncWorkCompleted();
38 // Respond. Guaranteed to happen on UI thread.
39 virtual bool Respond() = 0;
41 // ExtensionFunction::RunAsync()
42 bool RunAsync() override
;
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
;
51 void WorkOnWorkThread();
52 void RespondOnUIThread();
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_
;
59 } // namespace extensions
61 #endif // EXTENSIONS_BROWSER_API_ASYNC_API_FUCTION_H_