Finish refactoring of DomCodeToUsLayoutKeyboardCode().
[chromium-blink-merge.git] / extensions / browser / api / async_api_function.h
blobf10950684a8b82eb0e9bbda280b3415672b1d1ef
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 {
16 protected:
17 AsyncApiFunction();
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
25 // thread.
26 virtual bool Prepare() = 0;
28 // Do actual work. Guaranteed to happen on the thread specified in
29 // work_thread_id_.
30 virtual void Work();
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;
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;
50 private:
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_