--- a/browserplugins/browseraudiovideoplugin/src/BavpApi.cpp Thu Aug 19 09:57:56 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,482 +0,0 @@
-/*
-* Copyright (c) 2006 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: API functions that were loaded into TLS for the Browser to use.
-*
-*/
-
-// INCLUDE FILES
-#include <Uri16.h>
-#include <mmf/common/MmfControllerFrameworkBase.h>
-#include <stdlib.h>
-
-#include "BavpLogger.h"
-#include "BavpPlugin.h"
-#include "BavpVolumeHandler.h"
-
-#include <npscript.h>
-#include "BavpNPObject.h"
-// CONSTANTS
-_LIT(KAccessPtId, "accesspointid");
-_LIT(KLoop,"loop");
-_LIT(KSrc,"src");
-_LIT(KData,"data");
-_LIT(KRtsp,"rtsp");
-_LIT(KInfinite,"infinite");
-_LIT(KVolume, "volume");
-_LIT(KHigh, "high");
-_LIT(KMiddle, "middle");
-_LIT(KLow, "low");
-
-const TInt KOneLoopValue = 1;
-const TInt KMaxLoopValue = 50;
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// BavpNewp
-// Create a new instance of a plugin. This is non-leaving method.
-// Returns: NPError: Error codes recognized by Browser
-// -----------------------------------------------------------------------------
-NPError BavpNewp( NPMIMEType /* pluginType*/, // Not used locally
- NPP aInstance, // Stores pointer to Bavp
- uint16 /* mode */, //
- CDesCArray* argn, // The number of arguments passed
- CDesCArray* argv, // The values of arguments in the array
- NPSavedData* /*saved*/ ) //
- {
-
- // Fix for TSW error ID: SLON-74588K, as ControlPanel is unsupported so for the time being
- // controlPanel plugin window shown as emplty non supported window.
-
- _LIT(KControls, "controls");
- _LIT(KControlPanel, "controlpanel");
-
- for ( TInt i=0; i < argn->Count(); i++ )
- {
- if(((*argn)[i].Compare( KControls) == 0)&&((*argv)[i].Compare(KControlPanel ) == 0))
- {
- return NPERR_INVALID_PLUGIN_ERROR;
- }
- }
- // Create BrowserAudioVideoPlugin, call this leaving method to wrap leaving methods
- TRAPD( err, BavpConstructL( aInstance, argn, argv ) );
- if ( err == KErrNoMemory )
- {
- Log( EFalse, _L("FUNCTION BavpNewp ERROR! Out of Memory Error") );
-
- return NPERR_OUT_OF_MEMORY_ERROR;
- }
-
- if ( err != KErrNone )
- {
- Log( EFalse, _L("FUNCTION BavpNewp ERROR! Module Load Failure") );
- return NPERR_MODULE_LOAD_FAILED_ERROR;
- }
-
- return NPERR_NO_ERROR;
- }
-
-// -----------------------------------------------------------------------------
-// BavpConstructL
-// This is the leaving method to create the plugin. We have leaving setters
-// that need to be wrapped.
-// Returns: void
-// -----------------------------------------------------------------------------
-void BavpConstructL( NPP aInstance, // Stores pointer to Bavp
- CDesCArray* argn, // The number of arguments passed
- CDesCArray* argv ) // The values of arguments in the array
- {
- Log( EFalse, _L("Calling FUNCTION BavpConstructL") );
-
- CBavpPlugin *pluginInstance( NULL );
-
- // Create BrowserVideoPlugin
- pluginInstance = CBavpPlugin::NewL();
-
- // Bavp functions can now be called
- aInstance->pdata = pluginInstance;
-
- // Retrieve the various attributes from the HTTP file and the
- // object/embed/bgsound/soundstart tags on that page
- //
- // Retrieve the access point attribute
- TInt accessPtIndex;
- TInt accessPtId( KUseDefaultIap );
- if ( !argn->Find( KAccessPtId, accessPtIndex, ECmpFolded ) )
- {
- // If the string is found get the access pt id and convert to TInt
- TPtrC16 accessPtValue( (*argv)[accessPtIndex] );
- TLex lex( accessPtValue );
- TInt intVal( 0 );
- if ( lex.Val( intVal ) == KErrNone)
- {
- accessPtId = intVal;
- }
- }
- pluginInstance->SetAccessPtId( accessPtId );
-
- // Retrieve the "loop" attribute value, default value is "1",
- // with infiniteFlag off. This handles the loop attribute missing
- // and loop="0" cases.
- TInt loopIndex( 0 );
- TPtrC16 loopValue;
- TBool infiniteFlag( EFalse ); // Always false, use loop="50" instead "infinite"
- TInt loop( KOneLoopValue ); // Our default loop value is "1"
-
- TInt positionLoop = argn->Find( KLoop, loopIndex, ECmpFolded );
- if ( positionLoop == 0 )
- {
- // Found a loop attribute value
- TPtrC16 pointerLoopCount( (*argv)[loopIndex] );
- loopValue.Set( pointerLoopCount );
-
- // Is the loop value equal to string "infinite"
- if ( loopValue.Compare( KInfinite ) == 0 )
- {
- // We never play true infinite, we loop max 50 times
- loop = KMaxLoopValue;
- }
- else
- {
- // Ensure that only a valid loop value is used (1 to 50)
- HBufC8* convertPointerLoopCount = HBufC8::New( pointerLoopCount.Length() );
- TPtr8 convertToByteLoop = convertPointerLoopCount->Des();
- convertToByteLoop.Copy( pointerLoopCount );
-
- loop = atoi( (char*)(convertToByteLoop.Ptr()) );
- if ( loop < KOneLoopValue )
- {
- loop = KOneLoopValue;
- }
- else if ( loop > KMaxLoopValue )
- {
- loop = KMaxLoopValue;
- }
- }
- }
-
- // Retrieve the "volume" attribute value, default is max, so that if the
- // "volume" attribute isn't present, the user preferences will not get
- // overwritten. There is a check in controller->SetVolumeByAttribute that
- // checks current and attribute volume and choses lower volume.
- TInt positionVolumeValue( 0 );
- TInt CRVolume( KCRVolumeMax );
- TPtrC16 volumeValue;
- TInt positionVol = argn->Find( KVolume, positionVolumeValue, ECmpFolded );
- if ( positionVol == 0 )
- {
- TPtrC16 pointerVolumeValue( (*argv)[positionVolumeValue] );
- volumeValue.Set( pointerVolumeValue );
- if ( !(volumeValue.Compare( KHigh )) )
- {
- CRVolume = KCRVolume10;
- }
- else if ( !(volumeValue.Compare( KMiddle )) )
- {
- CRVolume = KCRVolume5;
- }
- else if ( !(volumeValue.Compare( KLow )) )
- {
- CRVolume = KCRVolume2;
- }
- else
- {
- // Convert volume numeric string (i.e. volume="6") to CR volume
- HBufC8* convertPointerVolumeValue = HBufC8::New( pointerVolumeValue.Length() );
- TPtr8 convertToByteVolume = convertPointerVolumeValue->Des();
- convertToByteVolume.Append( pointerVolumeValue );
- CRVolume = atoi( (char*)(convertToByteVolume.Ptr()) );
- if ( CRVolume < KCRVolumeMute )
- {
- CRVolume = KCRVolumeMute;
- }
- else if ( CRVolume > KCRVolumeMax )
- {
- CRVolume = KCRVolumeMax;
- }
- }
- }
-
- // Set the Volume and Loop for plugin
- pluginInstance->SetVolumeAndLoop( CRVolume, loop, infiniteFlag );
-
- // Retrieve the "src" or "data" attribute value, if it is rtsp scheme lets
- // save it, so we can start a controller, since rtsp content is not passed
- // by WebKit. It is our (Bavp) responsibilty to load rtsp content.
- TInt srcIndex( 0 );
- TInt ret = argn->Find( KSrc, srcIndex, ECmpFolded );
- if ( ret != 0 )
- {
- // If the src attribute NOT found, try to find data attribute
- ret = argn->Find( KData, srcIndex, ECmpFolded );
- }
-
- if ( ret == 0 )
- {
- // We found either data or src attribute
- TPtrC16 srcValue( (*argv)[ srcIndex ] );
- TUriParser uriParser;
- uriParser.Parse( srcValue );
- if ( !uriParser.Extract( EUriScheme ).Compare( KRtsp ) )
- {
- // We found a RTSP scheme. Lets save it up, so when the BavpView
- // is create we can start the BavpController and load rtsp. This
- // is because rtsp will not be started by a call to BavpAsFile().
- // NOTE: Files (http) are downloaded first and then BavpAsFile()
- // is called, which starts the BavpController.
- pluginInstance->SetRtspUriL( uriParser.UriDes() );
-
- // We may have to move this to a different place if eg: the url of
- // the object is changed later (say from javascript)
- CBavpPluginEcomMain* lBavpPluginEcomMain = (CBavpPluginEcomMain*) Dll::Tls();
- NPNetscapeFuncs* funcPtr = lBavpPluginEcomMain->Funcs();
- if ( funcPtr && funcPtr->getvalue )
- {
- funcPtr->getvalue( aInstance, NPNNetworkAccess, (void *)&accessPtId);
- pluginInstance->SetAccessPtId( accessPtId );
- }
-
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// BavpDestroy(NPP aInstance, NPSavedData**)
-// Called by Browser to destroy the plugin
-// Returns: NPError: Error Code
-// -----------------------------------------------------------------------------
-NPError BavpDestroy( NPP aInstance, // Link to Browser
- NPSavedData** /*save*/ ) // Not used locally
- {
- Log( EFalse, _L("Calling FUNCTION BavpDestroy") );
-
- CBavpPlugin *pluginInstance = STATIC_CAST( CBavpPlugin*, aInstance->pdata );
- delete pluginInstance;
-
- return NPERR_NO_ERROR;
- }
-
-// -----------------------------------------------------------------------------
-// BavpSetwindow
-// This is the parent window of plugin
-// Returns: NPError: Error Code
-// -----------------------------------------------------------------------------
-NPError BavpSetwindow( NPP aInstance, // Link to Browser
- NPWindow* aWindow ) // Browser's window passed to Bavp
- {
- Log( EFalse, _L("Calling FUNCTION BavpSetwindow") );
-
- CBavpPlugin *pluginInstance = STATIC_CAST( CBavpPlugin*, aInstance->pdata );
- MPluginAdapter *pluginAdapter = STATIC_CAST( MPluginAdapter*, aWindow->window);
-
- TRAPD( err, pluginInstance->SetWindowL(pluginAdapter, aWindow, aInstance) );
- if ( err == KErrNoMemory )
- {
- Log( EFalse, _L("FUNCTION BavpSetWindow ERROR! Out of Memory Error") );
-
- // Set the error to plugin if err occurs, it's for the next create plugin check
- pluginInstance->iError = ETrue;
- return NPERR_OUT_OF_MEMORY_ERROR;
- }
-
- if ( err != KErrNone )
- {
- Log( EFalse, _L("FUNCTION BavpSetWindow ERROR: %d"), err );
-
- // Set the error to plugin if err occurs, it's for the next create plugin check
- pluginInstance->iError = ETrue;
- return NPERR_GENERIC_ERROR;
- }
-
- return NPERR_NO_ERROR;
- }
-
-// -----------------------------------------------------------------------------
-// BavpNewstream
-// Indicates start of downloading of an video file from the internet
-// Returns: NPError: Error Code
-// -----------------------------------------------------------------------------
-NPError BavpNewstream( NPP instance,
- NPMIMEType type,
- NPStream* /*stream*/, //
- NPBool /*seekable*/, //
- uint16* stype ) // Will set to NP_ASFILEONLY to notify Browser how to send data
- {
- Log( EFalse, _L("Calling FUNCTION BavpNewstream") );
-
- // Bavp needs to set stype to alert Browser to send data via Bavp_asfile
- *stype = NP_ASFILEONLY;
-
- CBavpPlugin *pluginInstance = STATIC_CAST( CBavpPlugin*, instance->pdata );
-
- pluginInstance->SetMimeType( type );
-
- return NPERR_NO_ERROR;
- }
-
-// -----------------------------------------------------------------------------
-// BavpDestroystream NOT USED
-// Indicates completion of downloading an video file from the internet
-// Returns: NPError: Error Code
-// -----------------------------------------------------------------------------
-NPError BavpDestroystream( NPP /*instance*/, // Not used locally
- NPStream* /*stream*/, //
- NPReason /*aReason*/ ) //
- {
- Log( EFalse, _L("Calling FUNCTION BavpDestroyStream") );
-
- return NPERR_NO_ERROR;
- }
-
-// -----------------------------------------------------------------------------
-// BavpAsfile
-// Called by Browser when data is copied to a file.
-// Returns: void
-// -----------------------------------------------------------------------------
-void BavpAsfile( NPP aInstance, // Link to Browser
- NPStream* stream,
- const TDesC& aFileName ) // file name and path
- {
- Log( EFalse, _L("Calling FUNCTION BavpAsfile") );
- Log( EFalse, _L("Filename:") );
- Log( EFalse, aFileName );
-
- CBavpPlugin *pluginInstance = STATIC_CAST( CBavpPlugin*, aInstance->pdata );
-
- // Get the error, and set this error to iError in plugin
- TRAPD( err, pluginInstance->OpenAndPlayFileL( aFileName, stream->url ) );
- if ( err != KErrNone )
- {
- Log( EFalse, _L("FUNCTION BavpAsfile ERROR!") );
-
- // If error, set for plugin, it's for the next create plugin check
- pluginInstance->iError = ETrue;
- }
- }
-
-// -----------------------------------------------------------------------------
-// BavpWriteready NOT SUPPORTED
-// -----------------------------------------------------------------------------
-int32 BavpWriteready( NPP /*instance*/,
- NPStream* /*stream*/ )
- {
- // Not implemented
- return NPERR_NO_ERROR;
- }
-
-// -----------------------------------------------------------------------------
-// BavpWrite NOT SUPPORTED
-// -----------------------------------------------------------------------------
-int32 BavpWrite( NPP /*instance*/,
- NPStream* /*stream*/,
- int32 /*offset*/,
- int32 /*len*/,
- void* /*buffer*/ )
- {
- // Not implemented
- return NPERR_NO_ERROR;
- }
-
-// -----------------------------------------------------------------------------
-// BavpPrint NOT SUPPORTED
-// -----------------------------------------------------------------------------
-void BavpPrint( NPP /*instance*/,
- NPPrint* /*platformPrint*/ )
- {
- // Not implemented
- }
-
-// -----------------------------------------------------------------------------
-// BavpEvent NOT SUPPORTED
-// -----------------------------------------------------------------------------
-int16 BavpEvent( NPP instance,
- void* event )
- {
- TInt ret = EFalse;
- if (instance)
- {
- CBavpPlugin *plugin = static_cast<CBavpPlugin*>(instance->pdata);
- NPEvent *ev = static_cast<NPEvent*>(event);
-
- if (plugin)
- {
- if (ev->event == ENppEventPointer)
- {
- NPEventPointer *evp =static_cast<NPEventPointer*> (ev->param);
- ret = plugin->HandleGesture(evp->reserved);
- }
- }
- }
- return ret;
- }
-
-// -----------------------------------------------------------------------------
-// BavpUrlnotify NOT SUPPORTED
-// -----------------------------------------------------------------------------
-void BavpUrlnotify( NPP /*instance*/,
- const TDesC8& /*url*/,
- NPReason /*reason*/,
- void* /*notifyData*/ )
- {
- // Not implemented
- }
-
-// -----------------------------------------------------------------------------
-// BavpSetvalue NOT SUPPORTED
-// -----------------------------------------------------------------------------
-NPError BavpSetvalue( NPP /*instance*/,
- NPNVariable /*variable*/,
- void* /*ret_value*/ )
- {
- // Not implemented
- return NPERR_NO_ERROR;
- }
-
-// -----------------------------------------------------------------------------
-// BavpGetvalue NOT SUPPORTED
-// -----------------------------------------------------------------------------
-NPError BavpGetvalue( NPP aInstance,
- NPPVariable aVariable,
- void* ret_value )
- {
- NPError err( NPERR_NO_ERROR );
-
- switch( aVariable )
- {
- case NPPVpluginInteractiveBool:
- // Interactive=0, Not Interactive=1
- *(TBool *)ret_value = EFalse;
- break;
- case NPPVpluginScriptableNPObject:
- {
- // return instance of scripting object to the browser
- BavpNPObject *pluginNPObject = BavpNPObject_new( aInstance );
-
- CBavpPlugin *bavpplugin = (CBavpPlugin*)aInstance->pdata;
- bavpplugin->SetNPObject(pluginNPObject);
-
- pluginNPObject->plugin = bavpplugin;
- pluginNPObject->nppInstance = aInstance;
- void** ret = (void**)ret_value;
- *ret = (void*)pluginNPObject;
- }
- break;
- default:
- break;
- } //end switch
-
- return err;
- }
-
-// End of File