browserplugins/browsersysteminfoplugin/src/SystemInfoPlugin.cpp
changeset 51 48e827313edd
parent 37 481242ead638
child 53 f427d27b98d8
--- a/browserplugins/browsersysteminfoplugin/src/SystemInfoPlugin.cpp	Tue Feb 02 00:12:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,624 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:  Interface to Browser for handling embedded system info requests.
-*
-*/
-
-
-// INCLUDE FILES
-#include <e32std.h>
-#include <npupp.h>
-#include <string.h>
-#include <utf.h>
-#include <MProfileEngine.h>
-#include <MProfile.h>
-#include "SystemInfoPlugin.h"
-#include "NetworkObserver.h"
-#include "PowerObserver.h"
-#include "SystemInfoMisc.h"
-
-// CONSTANTS
-
-enum TIdentifiersNames
-    {
-    EIdChargeLevel,
-    EIdOnChargeLevel,
-    EIdChargerConnected,
-    EIdOnChargerConnected,
-    EIdSignalBars,
-    EIdNetworkName,
-    EIdNetworkRegistrationStatus,
-    EIdOnNetworkRegistrationStatus,
-    EIdLightMinIntensity,
-    EIdLightMaxIntensity,
-    EIdLightDefaultIntensity,
-    EIdLightInfiniteDuration,
-    EIdLightMaxDuration,
-    EIdLightDefaultCycleTime,
-    EIdLightTargetPrimaryDisplayAndKeyboard,
-    EIdLightTargetSystem,
-    EIdLightOn,
-    EIdLightBlink,
-    EIdLightOff,
-    EIdVibraMinIntensity,
-    EIdVibraMaxIntensity,
-    EIdVibraMaxDuration,
-    EIdVibraSettings,
-    EIdStartVibra,
-    EIdStopVibra,
-    EIdBeep,
-    EIdTotalRam,
-    EIdFreeRam,
-    EIdDriveList,
-    EIdDriveSize,
-    EIdDriveFree,
-    EIdLanguage,
-    EIdLast
-    };
-
-const NPUTF8 *systemInfoPluginIdentifierNames[EIdLast] =
-    {
-    "chargelevel",
-    "onchargelevel",
-    "chargerconnected",
-    "onchargerconnected",
-    "signalbars",
-    "networkname",
-    "networkregistrationstatus",
-    "onnetworkregistrationstatus",
-    "lightminintensity",
-    "lightmaxintensity",
-    "lightdefaultintensity",
-    "lightinfiniteduration",
-    "lightmaxduration",
-    "lightdefaultcycletime",
-    "lighttargetprimarydisplayandkeyboard",
-    "lighttargetsystem",
-    "lighton",
-    "lightblink",
-    "lightoff",
-    "vibraminintensity",
-    "vibramaxintensity",
-    "vibramaxduration",
-    "vibrasettings",
-    "startvibra",
-    "stopvibra",
-    "beep",
-    "totalram",
-    "freeram",
-    "drivelist",
-    "drivesize",
-    "drivefree",
-    "language"
-    };
-
-const TBool IsMethod[EIdLast] =
-    {
-    EFalse, // "chargelevel"
-    EFalse, // "onchargelevel"
-    EFalse, // "chargerconnected"
-    EFalse, // "onchargerconnected"
-    EFalse, // "signalbars"
-    EFalse, // "networkname"
-    EFalse, // "networkregistrationstatus"
-    EFalse, // "onnetworkregistrationstatus"
-    EFalse, // "lightminintensity"
-    EFalse, // "lightmaxintensity"
-    EFalse, // "lightdefaultintensity"
-    EFalse, // "lightinfiniteduration"
-    EFalse, // "lightmaxduration"
-    EFalse, // "lightdefaultcycletime"
-    EFalse, // "lighttargetprimarydisplayandkeyboard"
-    EFalse, // "lighttargetsystem"
-    ETrue, // "lighton"
-    ETrue, // "lightblink"
-    ETrue, // "lightoff"
-    EFalse, // "vibraminintensity"
-    EFalse, // "vibramaxintensity"
-    EFalse, // "vibramaxduration"
-    EFalse, // "vibrasettings"
-    ETrue, // "startvibra"
-    ETrue, // "stopvibra"
-    ETrue, // "beep"
-    EFalse, // "totalram"
-    EFalse, // "freeram"
-    EFalse, // "drivelist"
-    ETrue, // "drivesize"
-    ETrue, // "drivefree"
-    EFalse  // "language"
-    };
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::CSystemInfoPlugin
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// ----------------------------------------------------------------------------
-CSystemInfoPlugin::CSystemInfoPlugin()
-    {
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::ConstructL
-// Symbian 2nd phase constructor can leave.
-// ----------------------------------------------------------------------------
-void CSystemInfoPlugin::ConstructL()
-    {
-    iSystemInfoPluginIdentifiers = new (ELeave) NPIdentifier[EIdLast];
-    NPN_GetStringIdentifiers( systemInfoPluginIdentifierNames, EIdLast,
-                              iSystemInfoPluginIdentifiers );
-    iUid = RProcess().SecureId();
-
-    // need profile to determine silent mode for beep control
-    iProfileEngine = CreateProfileEngineL();
-
-    // sysinfo feature class instances
-    iPowerObserver = CPowerObserver::NewL( this );
-    iNetworkObserver = CNetworkObserver::NewL( this );
-    iSystemInfoMisc = CSystemInfoMisc::NewL();
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::NewL
-// Two-phased constructor.
-// ----------------------------------------------------------------------------
-CSystemInfoPlugin* CSystemInfoPlugin::NewL()
-
-    {
-    CSystemInfoPlugin* self = new (ELeave) CSystemInfoPlugin;
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::Destructor
-// ----------------------------------------------------------------------------
-CSystemInfoPlugin::~CSystemInfoPlugin()
-    {
-    delete [] iSystemInfoPluginIdentifiers;
-
-    if (iProfileEngine != NULL)
-        {
-        iProfileEngine->Release();
-        }
-    // sysinfo feature class instances
-    delete iPowerObserver;
-    delete iNetworkObserver;
-    delete iSystemInfoMisc;
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::Deallocate
-//
-// ----------------------------------------------------------------------------
-void CSystemInfoPlugin::Deallocate()
-    {
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::InvokeCallback
-//
-// ----------------------------------------------------------------------------
-bool CSystemInfoPlugin::InvokeCallback( TDesC8& name, const NPVariant *args, uint32_t argCount )
-    {
-    CSystemInfoPluginEcomMain* lSystemInfoPPluginEcomMain
-        = (CSystemInfoPluginEcomMain*) Dll::Tls();
-    NPNetscapeFuncs* lNetscapeFuncs = lSystemInfoPPluginEcomMain->Funcs();
-    if ( lNetscapeFuncs && iInstanceHandle )
-        {
-        void* value = 0;
-        NPError npErr = lNetscapeFuncs->getvalue( iInstanceHandle, NPNVWindowNPObject,
-                                                 (void*)&value );
-        if ( npErr == NPERR_NO_ERROR )
-            {
-            NPVariant resultVariant;
-            VOID_TO_NPVARIANT( resultVariant );
-            NPIdentifier ident = NPN_GetStringIdentifier( (const NPUTF8 *)(name.Ptr()) );
-            return NPN_Invoke( iInstanceHandle, (NPObject*)value, ident,
-                               args, argCount, &resultVariant );
-            }
-        }
-    return false;
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::HasMethod
-//
-// ----------------------------------------------------------------------------
-bool CSystemInfoPlugin::HasMethod( NPIdentifier name )
-    {
-    for (TInt i= 0; i < EIdLast; i++)
-        {
-        if ( name == iSystemInfoPluginIdentifiers[i] )
-            {
-            return IsMethod[i];
-            }
-        }
-    return false;
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::VariantToInt
-//
-// ----------------------------------------------------------------------------
-void CSystemInfoPlugin::VariantToInt( NPVariant& v, TInt& i )
-    {
-    if ( NPVARIANT_IS_INT32( v ) )
-        {
-        i = NPVARIANT_TO_INT32( v );
-        }
-    else if ( NPVARIANT_IS_DOUBLE( v ) )
-        {
-        double d = NPVARIANT_TO_DOUBLE( v );
-        i = d;
-        }
-    // leave unchanged if some other type tag on variant
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::Invoke
-//
-// ----------------------------------------------------------------------------
-bool CSystemInfoPlugin::Invoke( NPIdentifier name,
-                                NPVariant* args,
-                                uint32_t argCount,
-                                NPVariant *result )
-    {
-    bool ret = false;
-    VOID_TO_NPVARIANT( *result );
-
-    if ( name == iSystemInfoPluginIdentifiers[EIdBeep] )
-        {
-        // don't beep if profile is silent
-        MProfile* profile = NULL;
-        TRAPD( error,
-               profile = iProfileEngine->ActiveProfileL() );
-        if ( KErrNone != error )
-            {
-            return true;
-            }
-        if ( EFalse == profile->IsSilent() )
-            {
-            TInt f = 440; // default 440 hertz
-            TInt d = 500; // default 0.5 seconds (in milliseconds)
-            if ( argCount > 0 ) VariantToInt( args[0], f );
-            if ( argCount > 1 ) VariantToInt( args[1], d );
-            // convert duration from milliseconds to microseconds, the
-            // underlying functionality doesn't really handle microseconds
-            // even though the interface specs it as microseconds
-            d = d * 1000;
-            // Note that d = 0 seems to mean "forever". Also, there
-            // are max and min frequencies but they are not defined.
-            // Below min there is silence, above max the equation
-            // seems to be f = min( max_freq, f)
-            iSystemInfoMisc->Beep( f, d );
-            }
-        profile->Release();
-        ret = true;
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightOn] )
-        {
-        TInt l = iSystemInfoMisc->LightTargetSystem();
-        TInt d = iSystemInfoMisc->LightInfiniteDuration();
-        TInt i = iSystemInfoMisc->LightDefaultIntensity();
-        TInt f = 1;
-        if ( argCount > 0 ) VariantToInt( args[0], l );
-        if ( argCount > 1 ) VariantToInt( args[1], d );
-        if ( argCount > 2 ) VariantToInt( args[2], i );
-        if ( argCount > 3 ) VariantToInt( args[3], f );
-        iSystemInfoMisc->LightOn( l, d, i, f );
-        ret = true;
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightBlink] )
-        {
-        TInt l = iSystemInfoMisc->LightTargetSystem();
-        TInt d = iSystemInfoMisc->LightInfiniteDuration();
-        TInt don = iSystemInfoMisc->LightDefaultCycleTime();
-        TInt doff = iSystemInfoMisc->LightDefaultCycleTime();
-        TInt i = iSystemInfoMisc->LightDefaultIntensity();
-        if ( argCount > 0 ) VariantToInt( args[0], l );
-        if ( argCount > 1 ) VariantToInt( args[1], d );
-        if ( argCount > 2 ) VariantToInt( args[2], don );
-        if ( argCount > 3 ) VariantToInt( args[3], doff );
-        if ( argCount > 4 ) VariantToInt( args[4], i );
-        iSystemInfoMisc->LightBlink( l, d, don, doff, i );
-        ret = true;
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightOff] )
-        {
-        TInt l = iSystemInfoMisc->LightTargetSystem();
-        TInt d = iSystemInfoMisc->LightInfiniteDuration();
-        TInt f = 1;
-        if ( argCount > 0 ) VariantToInt( args[0], l );
-        if ( argCount > 1 ) VariantToInt( args[1], d );
-        if ( argCount > 2 ) VariantToInt( args[2], f );
-        iSystemInfoMisc->LightOff( l, d, f );
-        ret = true;
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdStartVibra] )
-        {
-        TInt d = iSystemInfoMisc->VibraMaxDuration();
-        TInt i = iSystemInfoMisc->VibraMaxIntensity();
-        if ( argCount > 0 ) VariantToInt( args[0], d );
-        if ( argCount > 1 ) VariantToInt( args[1], i );
-        iSystemInfoMisc->StartVibra( d, i );
-        ret = true;
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdStopVibra] )
-        {
-        iSystemInfoMisc->StopVibra();
-        ret = true;
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdDriveSize] )
-        {
-        TUint c = 0;
-        if ( argCount > 0 && NPVARIANT_IS_STRING( args[0] ) )
-            {
-            NPString nps = NPVARIANT_TO_STRING( args[0] );
-            if ( nps.UTF8Characters ) c = nps.UTF8Characters[0];
-            }
-        if ( c > 0 )
-            {
-            TChar drive( c );
-            TReal size = iSystemInfoMisc->DriveSize( drive );
-            DOUBLE_TO_NPVARIANT( size, *result );
-            ret = true;
-            }
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdDriveFree] )
-        {
-        TUint c = 0;
-        if ( argCount > 0 && NPVARIANT_IS_STRING( args[0] ) )
-            {
-            NPString nps = NPVARIANT_TO_STRING( args[0] );
-            if ( nps.UTF8Characters ) c = nps.UTF8Characters[0];
-            }
-        if ( c > 0 )
-            {
-            TChar drive( c );
-            TReal free = iSystemInfoMisc->DriveFree( drive );
-            DOUBLE_TO_NPVARIANT( free, *result );
-            ret = true;
-            }
-        }
-
-    return ret;
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::HasProperty
-//
-// ----------------------------------------------------------------------------
-bool CSystemInfoPlugin::HasProperty (NPIdentifier name)
-    {
-    for ( TInt i= 0; i < EIdLast; i++ )
-        {
-        if ( name == iSystemInfoPluginIdentifiers[i] )
-            {
-            return !IsMethod[i];
-            }
-        }
-    return false;
-    }
-
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::GetProperty
-//
-// ----------------------------------------------------------------------------
-bool CSystemInfoPlugin::GetProperty( NPIdentifier name, NPVariant *variant )
-    {
-    // default variant value maps to javascript undefined
-    VOID_TO_NPVARIANT( *variant );
-
-    if ( name == iSystemInfoPluginIdentifiers[EIdChargeLevel] )
-        {
-        INT32_TO_NPVARIANT( iPowerObserver->ChargeLevel(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdChargerConnected] )
-        {
-        INT32_TO_NPVARIANT( iPowerObserver->ChargerConnected(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdSignalBars] )
-        {
-        INT32_TO_NPVARIANT( iNetworkObserver->SignalBars(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdNetworkRegistrationStatus] )
-        {
-        INT32_TO_NPVARIANT( iNetworkObserver->RegistrationStatus(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdNetworkName] )
-        {
-        const TDesC& inBuf = iNetworkObserver->NetworkName();
-        HBufC8* outBuf = HBufC8::New( inBuf.Length() + 1 );
-        if ( outBuf )
-            {
-            TPtr8 ptr( outBuf->Des() );
-            TInt ret = CnvUtfConverter::ConvertFromUnicodeToUtf8( ptr, inBuf );
-            DesToNpvariant(ptr, variant);
-            delete outBuf;
-            }
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightMinIntensity] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->LightMinIntensity(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightMaxIntensity] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->LightMaxIntensity(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightDefaultIntensity] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->LightDefaultIntensity(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightInfiniteDuration] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->LightInfiniteDuration(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightMaxDuration] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->LightMaxDuration(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightDefaultCycleTime] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->LightDefaultCycleTime(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightTargetPrimaryDisplayAndKeyboard] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->LightTargetPrimaryDisplayAndKeyboard(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLightTargetSystem] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->LightTargetSystem(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdVibraMinIntensity] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->VibraMinIntensity(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdVibraMaxIntensity] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->VibraMaxIntensity(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdVibraMaxDuration] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->VibraMaxDuration(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdVibraSettings] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->VibraSettings(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdTotalRam] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->TotalRam(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdFreeRam] )
-        {
-        INT32_TO_NPVARIANT( iSystemInfoMisc->FreeRam(), *variant );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdDriveList] )
-        {
-        HBufC8* drives = HBufC8::New( KMaxDrives*2 );
-        if ( drives )
-            {
-            TPtr8 ptr( drives->Des() );
-            iSystemInfoMisc->DriveList( ptr );
-            DesToNpvariant(ptr, variant);
-            delete drives;
-            }
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdLanguage] )
-        {
-        TBuf<64> langCode;
-        iSystemInfoMisc->Language( langCode );
-        HBufC8* outBuf = HBufC8::New( langCode.Length() + 1 );
-        if ( outBuf )
-            {
-            TPtr8 ptr( outBuf->Des() );
-            ptr.SetLength( 0 );
-            // Note: the copy below goes from 16-bit to 8-bit by
-            // dropping the high 8-bits.  This will work since all
-            // codes are made from 7-bit ASCII characters see
-            // http://www.rfc-editor.org/rfc/rfc4646.txt section 7
-            // "Character Set Considerations".  Also see
-            // http://www.w3.org/International/questions/qa-lang-2or3
-            ptr.Copy( langCode );
-            ptr.ZeroTerminate();
-            DesToNpvariant( ptr, variant );
-            delete outBuf;
-            }
-        }
-    else
-        {
-        return EFalse;
-        }
-    return ETrue;
-    }
-
-// ----------------------------------------------------------------------------
-// CSystemInfoPlugin::SetProperty
-// ----------------------------------------------------------------------------
-bool CSystemInfoPlugin::SetPropertyL( NPIdentifier name, NPVariant *variant )
-    {
-    // all writeable properties are names of callback functions
-    HBufC8* pFunctionText = NULL;
-
-    // anything but a string will result in nulling out the callback
-    if ( NPVARIANT_IS_STRING( *variant ) )
-        {
-        // canonicalize function name string: only fname (no args) and zero terminate
-        NPString str = NPVARIANT_TO_STRING( *variant );
-
-        if ( (const TUint8 *)str.UTF8Characters )
-            {
-            // allocate a copy
-            TInt length = str.UTF8Length;
-            pFunctionText = HBufC8::NewL( length+1 );
-            TPtr8 tptr = pFunctionText->Des();
-            tptr.Copy( (const TUint8 *)str.UTF8Characters, length );
-
-            //Remove any arguments passed in the with the function name
-            TInt pos = pFunctionText->Locate(TChar('('));
-            if ( pos != KErrNotFound )
-                {
-                length = pos;
-                }
-            tptr.SetLength(length);
-            tptr.ZeroTerminate();
-            }
-        }
-
-    // NOTE: pFunctionText can be NULL
-
-    if ( name == iSystemInfoPluginIdentifiers[EIdOnChargeLevel] )
-        {
-        iPowerObserver->RequestNotificationL( CPowerObserver::EIdBatteryInfo,
-                                              pFunctionText );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdOnChargerConnected] )
-        {
-        iPowerObserver->RequestNotificationL( CPowerObserver::EIdIndicator,
-                                              pFunctionText );
-        }
-    else if ( name == iSystemInfoPluginIdentifiers[EIdOnNetworkRegistrationStatus] )
-        {
-        iNetworkObserver->RequestNotificationL( CNetworkObserver::EIdRegistrationStatus,
-                                                pFunctionText );
-        }
-    else
-        {
-        delete pFunctionText;
-        return EFalse;
-        }
-    return ETrue;
-    }
-
-void CSystemInfoPlugin::DesToNpvariant(TPtr8& string, NPVariant*& variant)
-{
-    char* newString = NULL;
-    if (string.Length()) {
-        newString = new char[string.Length()];
-    }
-    if (newString) {
-        Mem::Copy(newString, string.Ptr(), string.Length());
-        STRINGN_TO_NPVARIANT(newString, string.Length(), *variant);
-    }
-}
-
-
-
-//  End of File