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