10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Torch Mobile, Inc. All rights reserved. 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Redistribution and use in source and binary forms, with or without 50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modification, are permitted provided that the following conditions 60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * are met: 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 1. Redistributions of source code must retain the above copyright 80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * notice, this list of conditions and the following disclaimer. 90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * notice, this list of conditions and the following disclaimer in the 110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * documentation and/or other materials provided with the distribution. 120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * This library is distributed in the hope that i will be useful, 140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of 150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Library General Public License for more details. 170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * You should have received a copy of the GNU Library General Public License 190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * along with this library; see the file COPYING.LIB. If not, write to 200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Boston, MA 02110-1301, USA. 220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */ 230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "config.h" 250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "LocalStorageThread.h" 260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "LocalStorageTask.h" 280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "StorageAreaSync.h" 290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore { 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochLocalStorageThread::LocalStorageThread() 330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch: m_timer(this, &LocalStorageThread::timerFired) 340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochLocalStorageThread::~LocalStorageThread() 380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool LocalStorageThread::start() 420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LocalStorageThread::timerFired(Timer<LocalStorageThread>*) 470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_queue.isEmpty()) { 490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RefPtr<LocalStorageTask> task = m_queue.first(); 500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch task->performTask(); 510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_queue.removeFirst(); 520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_queue.isEmpty()) 530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_timer.startOneShot(0); 540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LocalStorageThread::scheduleImport(PassRefPtr<StorageAreaSync> area) 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_queue.append(LocalStorageTask::createImport(area)); 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_timer.isActive()) 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_timer.startOneShot(0); 620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LocalStorageThread::scheduleSync(PassRefPtr<StorageAreaSync> area) 650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_queue.append(LocalStorageTask::createSync(area)); 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!m_timer.isActive()) 680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_timer.startOneShot(0); 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LocalStorageThread::terminate() 720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_queue.clear(); 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_timer.stop(); 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid LocalStorageThread::performTerminate() 780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_queue.clear(); 800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_timer.stop(); 810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8368513a70bcd92384395513322f1b801e7bf9c729Steve Block} // namespace WebCore 84