controlpanel/src/cpframework/src/cpwatchdog.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 15:29:50 +0300
branchRCL_3
changeset 24 8ee96d21d9bf
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0""
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  
*
*/

#ifndef CPWATCHDOG_H
#define CPWATCHDOG_H

#include <QObject>
#include <QVector>

#define gWatchDog CpWatchDog::instance()

#define BEGIN_WATCHDOG_QUARANTINE(PLUGINID) \
        gWatchDog->quarantine(PLUGINID);

#define END_WATCHDOG_QUARANTINE(PLUGINID) \
        gWatchDog->removeFromQuarantine(PLUGINID);

class QSettings;
class CpWatchDog : public QObject
{
    Q_OBJECT
public:
    static CpWatchDog *instance();
    void quarantine(int uid);
    void removeFromQuarantine(int uid);
    bool isActive() const;
    bool wasCleanExit() const;
    void reportCleanExit();
    bool isInBlackList(int uid);
private:
    void init();
    void readState();
    void storeState();
    void readQuarantine();
    void storeQuarantine();
    void readBlackList();
    void storeBlackList();
    void updateBlackListedPluginRunCounters();
public slots:
    void destroy();
private:
    Q_DISABLE_COPY(CpWatchDog)
    CpWatchDog();
    virtual ~CpWatchDog();
private:
    struct PluginQuarantine
    {
        PluginQuarantine();
        void read(QSettings &settings);
        void store(QSettings &settings);
        int mUid;
        int mRunsAfterCrash;
    };
private:
    bool mActive;
    int mCrashCounter;
    bool mAppRunning;
    int mMaxPluginBlackListedRuns;
    int mWatchdogActivationLimit;
    QVector<PluginQuarantine> mBlackList;
    QVector<int> mQuarantine;
    static CpWatchDog *self;
};

#endif /* CPWATCHDOG_H */