// Copyright (c) 2000-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://#include <push/pluginkiller.h>#include <push/cpushhandlerbase.h>/**Constructor.@param aPushPlugin The plugin owner to be deleted@internalComponent*/CPluginKiller::CPluginKiller(CPushHandlerBase* aPushPlugin): CActive(EPriorityStandard), iPushPlugin(aPushPlugin), iDeletePushPlugin(EFalse) { CActiveScheduler::Add(this); }/** Destructor. */CPluginKiller::~CPluginKiller() { // Responsible for Deleting Plugin Owners. Cancel(); __ASSERT_DEBUG(iDeletePushPlugin, User::Invariant()); delete iPushPlugin; }/** Deletes the plug-in.*/EXPORT_C void CPluginKiller::KillPushPlugin() { //Starts a completed asynchronous request to delete the plug-in. //When RunL() runs, it deletes the plug-in and the plug-in killer object itself. TRequestStatus* pS=&iStatus; User::RequestComplete(pS,KErrNone); SetActive(); }/**Cancel the request */void CPluginKiller::DoCancel() { }/**Handles the completion of an asynchronous request. RunL() will only be called by the plug-inkiller completing its own request in KillPushPlugin(). This method sets a flag to indicatethat it is safe to delete the plugin owner in the destructor. This ensures that the plug-inkiller object is only deleted if the push plugin is deleted.*/void CPluginKiller::RunL() { iDeletePushPlugin = ETrue; delete this; }