[safe-browsing] Database full hash matches like prefix match.
[chromium-blink-merge.git] / content / shell / renderer / test_runner / WebTask.h
blob548cf8259e562da183aa79945fc2a6f31c21f11b
1 // Copyright 2013 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 CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTASK_H_
6 #define CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTASK_H_
8 #include <vector>
10 namespace WebTestRunner {
12 class WebTaskList;
14 // WebTask represents a task which can run by WebTestDelegate::postTask() or
15 // WebTestDelegate::postDelayedTask().
16 class WebTask {
17 public:
18 explicit WebTask(WebTaskList*);
19 virtual ~WebTask();
21 // The main code of this task.
22 // An implementation of run() should return immediately if cancel() was called.
23 virtual void run() = 0;
24 virtual void cancel() = 0;
26 protected:
27 WebTaskList* m_taskList;
30 class WebTaskList {
31 public:
32 WebTaskList();
33 ~WebTaskList();
34 void registerTask(WebTask*);
35 void unregisterTask(WebTask*);
36 void revokeAll();
38 private:
39 std::vector<WebTask*> m_tasks;
42 // A task containing an object pointer of class T. Derived classes should
43 // override runIfValid() which in turn can safely invoke methods on the
44 // m_object. The Class T must have "WebTaskList* taskList()".
45 template<class T>
46 class WebMethodTask : public WebTask {
47 public:
48 explicit WebMethodTask(T* object)
49 : WebTask(object->taskList())
50 , m_object(object)
54 virtual ~WebMethodTask() { }
56 virtual void run()
58 if (m_object)
59 runIfValid();
62 virtual void cancel()
64 m_object = 0;
65 m_taskList->unregisterTask(this);
66 m_taskList = 0;
69 virtual void runIfValid() = 0;
71 protected:
72 T* m_object;
77 #endif // CONTENT_SHELL_RENDERER_TEST_RUNNER_WEBTASK_H_