1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/*
25abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick * Copyright (C) 2010 Google Inc. All rights reserved.
35abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick *
4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without
5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are
6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met:
75abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick *
8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions of source code must retain the above copyright
9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer.
10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Redistributions in binary form must reproduce the above
11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer
12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the
13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution.
14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project *     * Neither the name of Google Inc. nor the names of its
15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from
16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission.
175abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick *
18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */
30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
315abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "config.h"
325abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#include "Task.h"
33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
34a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebKit.h"
35a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "WebKitClient.h"
36635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
375abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain MerrickWebTask::WebTask(TaskList* list): m_taskList(list) { m_taskList->registerTask(this); }
38f05b935882198ccf7d81675736e3aeb089c5113aBen MurdochWebTask::~WebTask()
39f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
40f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    if (m_taskList)
41f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        m_taskList->unregisterTask(this);
42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
445abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickvoid TaskList::unregisterTask(WebTask* task)
455abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
465abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    size_t index = m_tasks.find(task);
475abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    if (index != notFound)
485abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick        m_tasks.remove(index);
495abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
50635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
515abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickvoid TaskList::revokeAll()
525abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    while (!m_tasks.isEmpty())
54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch        m_tasks[0]->cancel();
555abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
575abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickstatic void invokeTask(void* context)
585abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
595abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    WebTask* task = static_cast<WebTask*>(context);
605abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    task->run();
615abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    delete task;
625abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
63db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
645abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickvoid postTask(WebTask* task)
655abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick    WebKit::webKitClient()->callOnMainThread(invokeTask, static_cast<void*>(task));
675abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick}
68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
695abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickvoid postDelayedTask(WebTask* task, int64_t ms)
705abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{
7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    webkit_support::PostDelayedTask(task, ms);
72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
745abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick
75