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