webengine/osswebengine/WebKit/s60/plugins/NpnImplementation.cpp
branchRCL_3
changeset 49 919f36ff910f
parent 48 79859ed3eea9
--- a/webengine/osswebengine/WebKit/s60/plugins/NpnImplementation.cpp	Tue Aug 31 16:17:46 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/plugins/NpnImplementation.cpp	Wed Sep 01 12:28:30 2010 +0100
@@ -21,7 +21,7 @@
 #include "NpnImplementation.h"
 #include "PluginWin.h"
 #include "PluginSkin.h"
-#include <CUserAgent.h>
+#include <cuseragent.h>
 #include <Element.h>
 #include <HTMLPlugInElement.h>
 #include <HTMLNames.h>
@@ -332,13 +332,13 @@
         
         case NPNVPluginElementNPObject: {
 		PluginWin* pluginWin = (PluginWin*)aInstance->ndata;
-        WebCore::Element* pluginElement;
+        WebCore::Element* pluginElement = NULL;
         if (pluginWin) {
         	pluginElement = pluginWin->pluginSkin()->getElement();
         }
             
         NPObject* pluginScriptObject = 0;
-        if (pluginElement->hasTagName(appletTag) || pluginElement->hasTagName(embedTag) || pluginElement->hasTagName(objectTag))
+        if (pluginElement && (pluginElement->hasTagName(appletTag) || pluginElement->hasTagName(embedTag) || pluginElement->hasTagName(objectTag)))
 			pluginScriptObject = static_cast<WebCore::HTMLPlugInElement*>(pluginElement)->getNPObject();
             
         if (pluginScriptObject)
@@ -369,13 +369,14 @@
         case NPNVisOfflineBool:     // Tells whether offline mode is enabled;
                                     // true=offline mode enabled, false=not enabled
             
-        case NPNNetworkAccess:
+        case NPNNetworkAccess: {
             PluginWin* pluginWin = (PluginWin*)aInstance->ndata;
             TInt apId = -1;
             if (pluginWin) {
                 apId = pluginWin->pluginSkin()->handleNetworkAccess();
             }
             *((TInt*) aRetValue) = apId;
+        }
             break;
             
        case NPNVGenericParameter: {   
@@ -477,12 +478,40 @@
             }
             break;
             }
+        case NPPVPluginBitmap :
+            {
+            PluginWin* pluginWin = (PluginWin*)aInstance->ndata;
+            if (pluginWin) {
+                TInt* bitMapHandle = (TInt*)aSetValue;
+                if (*bitMapHandle) {
+                    TInt handle = *bitMapHandle; 
+                    pluginWin->SetBitmapFromPlugin(handle);
+                }
+                else 
+                    { 
+                    pluginWin->SetBitmapFromPlugin(KErrNone);
+                    }
+               }
+            }
+            break; 
         case NPPVPluginDeactivate:
             {
             PluginWin* pluginWin = (PluginWin*)aInstance->ndata;
             if (pluginWin) {
-                TPoint* cursorPos = static_cast<TPoint*>(aSetValue);
-                pluginWin->pluginDeactivate(*cursorPos);
+            TPoint* cursorPos; 
+            
+            //EPMR-7XPHXV aSetValue is set as "(void*) 1" from
+            //"CBrowserPluginControl::GoNormalScreenL" from the flash plugin
+            //to avoid the Invalid pointer access, we are checking for 
+            //aSetValue and setting point as (0,0) and also for NULL Value 
+            if((aSetValue == (void*)1) || (!aSetValue)) {
+                TPoint position(0,0);
+                cursorPos = static_cast<TPoint*>(&position);
+                }
+                else {
+                cursorPos = static_cast<TPoint*>(aSetValue);
+                }
+            pluginWin->pluginDeactivate(*cursorPos);
             }
         }
         break;