diff -r 000000000000 -r 6474c204b198 dom/plugins/ipc/NestedLoopTimer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dom/plugins/ipc/NestedLoopTimer.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * vim: sw=4 ts=4 et : + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include + +#include "NestedLoopTimer.h" +#include "mozilla/plugins/PluginModuleChild.h" + +namespace mozilla { +namespace plugins { + +NestedLoopTimer::NestedLoopTimer(PluginModuleChild *pmc): + QObject(), mModule(pmc), mQTimer(nullptr) +{ +} + +NestedLoopTimer::~NestedLoopTimer() +{ + if (mQTimer) { + mQTimer->stop(); + delete mQTimer; + mQTimer = nullptr; + } +} + +void NestedLoopTimer::timeOut() +{ + // just detected a nested loop; start a timer that will + // periodically rpc-call back into the browser and process some + // events + mQTimer = new QTimer(this); + QObject::connect(mQTimer, SIGNAL(timeout()), this, + SLOT(processSomeEvents())); + mQTimer->setInterval(kNestedLoopDetectorIntervalMs); + mQTimer->start(); +} + +void NestedLoopTimer::processSomeEvents() +{ + if (mModule) + mModule->CallProcessSomeEvents(); +} + +} /* namespace plugins */ +} /* namespace mozilla */