Changeset 20721 for S60/trunk/WebKit

Show
Ignore:
Timestamp:
04/05/07 08:24:50 (22 months ago)
Author:
yongjzha
Message:

hongzhao, reviewed by yongjun.zhang@nokia.com

DESC: [S60]Animated images with DRM content won't be displayed in Browser in 3.2
Fix: Handle DRM image content during construct the content.
http://bugs.webkit.org/show_bug.cgi?id=13258

  • BrowserCore/Renderers/inc/AnimationDecoder.h:
  • BrowserCore/Renderers/inc/StaticImageDecoder.h:
  • BrowserCore/Renderers/src/StaticImageDecoder.cpp: (CRawData::ConstructL): (CRawData::DecodeDRMImageContentL): (CStaticImageDecoder::LoadNextImage):
Location:
S60/trunk/WebKit
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • S60/trunk/WebKit/BrowserCore/Renderers/inc/AnimationDecoder.h

    r14725 r20721  
    6666_LIT(KMimeOTA, "image/vnd.nokia.ota-bitmap"); 
    6767_LIT(KMimeICO, "image/x-icon"); 
     68_LIT(KMimeDRM, "application/vnd.oma.drm.content");  //DRM content 
    6869 
    6970 
  • S60/trunk/WebKit/BrowserCore/Renderers/inc/StaticImageDecoder.h

    r20583 r20721  
    4141    void ConstructL(const TDesC8& aData, TDesC* aMime,  
    4242        CMaskedBitmap* aTarget, CImageRenderer* aObserv ); 
     43    HBufC8* DecodeDRMImageContentL(const TDesC8& aData); 
    4344     
    4445    TAny*           iData; 
     
    8384        void  LoadOneFrame(); 
    8485        void StartLoading(); 
    85         void DecodeDRMImageL(); 
    8686        TDisplayMode GetBestDisplayMode(TDisplayMode) const; 
    8787        TBool CheckBitmapMemoryConsumption( const TFrameInfo& aFrameInfo ) const; 
  • S60/trunk/WebKit/BrowserCore/Renderers/src/StaticImageDecoder.cpp

    r20583 r20721  
    3939const TInt KMaxBitmapRamPercent = 25; 
    4040 
    41 _LIT(KMimeDRM, "application/vnd.oma.drm.content");  //DRM content 
    42 _LIT8(KMimeDRMImage, "application/vnd.oma.drm.content");  //DRM content 
    4341//============================================================================= 
    4442// CRawData 
     
    6058        // it is safer to ignore the server supplied mime type and just recognize 
    6159        // the image type from the data headers. this does not work for all formats though 
    62         if ( *aMIMEType==KMimeWBMP || *aMIMEType==KMimeOTA || *aMIMEType==KMimeWMF || *aMIMEType==KMimeDRM) 
     60        if ( *aMIMEType==KMimeWBMP || *aMIMEType==KMimeOTA || *aMIMEType==KMimeWMF) 
    6361            { 
    6462            // convert to 8 bit 
     
    6866        } 
    6967     
     68  if ( *aMIMEType==KMimeDRM ) 
     69    { 
     70    HBufC8* drmContent = DecodeDRMImageContentL(aData); 
     71    TInt drmContentLength = drmContent->Des().Length(); 
     72    const TUint8* src = drmContent->Des().Ptr(); 
     73    iData = MemoryManager::Alloc( drmContentLength ); 
     74    Mem::Copy( iData, src, drmContentLength ); 
     75    iDataPtr.Set((TUint8*)iData, drmContentLength, drmContentLength ); 
     76    delete drmContent; 
     77    } 
     78    else 
     79      { 
    7080    // data 
    7181    const TUint8* src = aData.Ptr(); 
     
    7383    Mem::Copy( iData, src, aData.Length() ); 
    7484    iDataPtr.Set((TUint8*)iData, aData.Length(), aData.Length() ); 
     85      } 
    7586    iObserver = aObserv; 
    7687    iTarget = aTarget; 
     
    8192    MemoryManager::Free( iData ); 
    8293    delete iMime;     
     94    } 
     95//============================================================================= 
     96// DecodeDRMImageContentL : Function for handling the DRM image content 
     97//============================================================================= 
     98HBufC8* CRawData::DecodeDRMImageContentL(const TDesC8& aData) 
     99{ 
     100    // input buffers for image conversion 
     101    HBufC8* bufInput = HBufC8::NewLC( aData.Length() + 1 ); 
     102    TPtr8 ptrInput = bufInput->Des(); 
     103    //Reader intends to view content 
     104    ptrInput.Append( EView ); 
     105    ptrInput.Append( aData ); 
     106 
     107    // output buffer for image conversion 
     108    HBufC8* animatedDRMdata = HBufC8::NewLC( aData.Length() + 256 ); 
     109    TPtr8 ptrOutput = animatedDRMdata->Des(); 
     110 
     111  //Find DRM agent 
     112    TAgent agentDRM; 
     113    RArray<ContentAccess::TAgent> agents; 
     114    ContentAccess::CManager* manager = CManager::NewLC(); 
     115    manager->ListAgentsL( agents ); 
     116    for ( TInt i = 0; i < agents.Count(); i++ ) 
     117      { 
     118    if ( agents[i].Name().Compare( KOmaDrm2AgentName ) == 0) 
     119      { 
     120       agentDRM = agents[i]; 
     121       break; 
     122      } 
     123    } 
     124 
     125    // convert the DRM image 
     126  manager->AgentSpecificCommand( agentDRM, EDecryptOma1DcfBuffer, ptrInput, 
     127                ptrOutput); 
     128 
     129    CleanupStack::PopAndDestroy(manager); 
     130    //keep animatedDRMdata to return 
     131    CleanupStack::Pop(animatedDRMdata); 
     132    CleanupStack::PopAndDestroy(bufInput); 
     133 
     134    return animatedDRMdata; 
    83135    } 
    84136 
     
    123175        if( data->iMime ) 
    124176      { 
    125       if (data->iMime->Des().Compare(KMimeDRMImage) == 0) //DRM content 
    126         { 
    127         TRAP_IGNORE( DecodeDRMImageL() );  
    128         } 
    129       else 
    130         { 
    131177        TRAP_IGNORE(iDecoder->OpenL( data->iDataPtr, *(data->iMime), CImageDecoder::EOptionNone));   
    132         } 
    133178      }     
    134179    else 
     
    183228 
    184229    return ETrue; 
    185     } 
    186      
    187 //============================================================================= 
    188 // DecodeDRMImageL : Function for handling the DRM images. 
    189 //============================================================================= 
    190 void CStaticImageDecoder::DecodeDRMImageL() 
    191 { 
    192     TInt error(KErrNone); 
    193   CRawData* data = iQueue[0]; 
    194    
    195   // Input buffer length 
    196     TInt inputBufLen = data->iDataPtr.Size() + 1;  
    197     // input buffers for image conversion 
    198     HBufC8* bufInput = HBufC8::NewLC( inputBufLen + 1 ); 
    199     TPtr8 ptrInput = bufInput->Des(); 
    200     //Reader intends to view content  
    201     ptrInput.Append( EView ); 
    202     ptrInput.Append( data->iDataPtr ); 
    203      
    204     // Output buffer length 
    205     TInt outputBufLen = data->iDataPtr.Size() + 256;  
    206     // output buffer for image conversion 
    207     HBufC8* bufOutput = HBufC8::NewLC( outputBufLen ); 
    208     TPtr8 ptrOutput = bufOutput->Des(); 
    209      
    210     // Do we have a DRM image? 
    211     TAgent agentDRM; 
    212     RArray<ContentAccess::TAgent> agents; 
    213     ContentAccess::CManager* manager = CManager::NewLC(); 
    214     manager->ListAgentsL( agents ); 
    215     for ( TInt i = 0; i < agents.Count(); i++ ) 
    216       { 
    217     if ( agents[i].Name().Compare( KOmaDrm2AgentName ) == 0) 
    218       { 
    219        agentDRM = agents[i]; 
    220        break; 
    221       } 
    222     } 
    223      
    224     // convert the DRM image 
    225           error = manager->AgentSpecificCommand(    
    226                                   agentDRM, 
    227                                   EDecryptOma1DcfBuffer, 
    228                   ptrInput, 
    229                     ptrOutput); 
    230                      
    231         if ( error == KErrNone) 
    232             {                 
    233     Reset(); 
    234       // Decrypted ok (if not image is skipped) 
    235           iDecoder->OpenL( ptrOutput, CImageDecoder::EOptionNone ); 
    236         } 
    237      
    238     CleanupStack::Pop(3); //  manager, bufOutput,bufInput 
    239230} 
    240231     
  • S60/trunk/WebKit/ChangeLog

    r20686 r20721  
     1hongzhao, reviewed by yongjun.zhang@nokia.com 
     2 DESC: [S60]Animated images with DRM content won't be displayed in Browser in 3.2 
     3 Fix: Handle DRM image content during construct the content. 
     4 http://bugs.webkit.org/show_bug.cgi?id=13258 
     5 
     6        * BrowserCore/Renderers/inc/AnimationDecoder.h: 
     7        * BrowserCore/Renderers/inc/StaticImageDecoder.h: 
     8        * BrowserCore/Renderers/src/StaticImageDecoder.cpp: 
     9        (CRawData::ConstructL): 
     10        (CRawData::DecodeDRMImageContentL): 
     11        (CStaticImageDecoder::LoadNextImage): 
     12 
    1132007-03-30  ligman  <joseph.ligman@nokia.com> 
    214