]> git.sesse.net Git - vlc/commitdiff
mozilla plugin: Replace near-identical code repetitions with calls to helper.
authorJP Dinger <jpd@m2x.nl>
Wed, 13 Jan 2010 12:57:45 +0000 (13:57 +0100)
committerJP Dinger <jpd@m2x.nl>
Thu, 14 Jan 2010 08:33:32 +0000 (09:33 +0100)
projects/mozilla/control/npolibvlc.cpp
projects/mozilla/control/nporuntime.h

index 348880dcef38adff67bd8ba10a69e1f803f6a413..fd3970056ccecb112f47bb18081966cae65f1bed 100644 (file)
@@ -100,43 +100,23 @@ LibvlcRootNPObject::getProperty(int index, NPVariant &result)
         switch( index )
         {
             case ID_root_audio:
-                // create child object in lazyman fashion to avoid
-                // ownership problem with firefox
-                if( ! audioObj )
-                    audioObj = NPN_CreateObject(_instance,
-                             RuntimeNPClass<LibvlcAudioNPObject>::getClass());
+                InstantObj<LibvlcAudioNPObject>( audioObj );
                 OBJECT_TO_NPVARIANT(NPN_RetainObject(audioObj), result);
                 return INVOKERESULT_NO_ERROR;
             case ID_root_input:
-                // create child object in lazyman fashion to avoid
-                // ownership problem with firefox
-                if( ! inputObj )
-                    inputObj = NPN_CreateObject(_instance,
-                             RuntimeNPClass<LibvlcInputNPObject>::getClass());
+                InstantObj<LibvlcInputNPObject>( inputObj );
                 OBJECT_TO_NPVARIANT(NPN_RetainObject(inputObj), result);
                 return INVOKERESULT_NO_ERROR;
             case ID_root_playlist:
-                // create child object in lazyman fashion to avoid
-                // ownership problem with firefox
-                if( ! playlistObj )
-                    playlistObj = NPN_CreateObject(_instance,
-                          RuntimeNPClass<LibvlcPlaylistNPObject>::getClass());
+                InstantObj<LibvlcPlaylistNPObject>( playlistObj );
                 OBJECT_TO_NPVARIANT(NPN_RetainObject(playlistObj), result);
                 return INVOKERESULT_NO_ERROR;
             case ID_root_subtitle:
-                // create child object in lazyman fashion to avoid
-                // ownership problem with firefox
-                if( ! subtitleObj )
-                    subtitleObj = NPN_CreateObject(_instance,
-                             RuntimeNPClass<LibvlcSubtitleNPObject>::getClass());
+                InstantObj<LibvlcSubtitleNPObject>( subtitleObj );
                 OBJECT_TO_NPVARIANT(NPN_RetainObject(subtitleObj), result);
                 return INVOKERESULT_NO_ERROR;
             case ID_root_video:
-                // create child object in lazyman fashion to avoid
-                // ownership problem with firefox
-                if( ! videoObj )
-                    videoObj = NPN_CreateObject(_instance,
-                             RuntimeNPClass<LibvlcVideoNPObject>::getClass());
+                InstantObj<LibvlcVideoNPObject>( videoObj );
                 OBJECT_TO_NPVARIANT(NPN_RetainObject(videoObj), result);
                 return INVOKERESULT_NO_ERROR;
             case ID_root_VersionInfo:
@@ -757,12 +737,7 @@ LibvlcPlaylistNPObject::getProperty(int index, NPVariant &result)
             }
             case ID_playlist_items:
             {
-                // create child object in lazyman fashion to avoid
-                // ownership problem with firefox
-                if( ! playlistItemsObj )
-                    playlistItemsObj =
-                        NPN_CreateObject(_instance, RuntimeNPClass<
-                        LibvlcPlaylistItemsNPObject>::getClass());
+                InstantObj<LibvlcPlaylistItemsNPObject>( playlistItemsObj );
                 OBJECT_TO_NPVARIANT(NPN_RetainObject(playlistItemsObj), result);
                 return INVOKERESULT_NO_ERROR;
             }
@@ -1379,10 +1354,8 @@ LibvlcVideoNPObject::getProperty(int index, NPVariant &result)
             }
             case ID_video_marquee:
             {
-                if( ! marqueeObj )
-                    marqueeObj = NPN_CreateObject(_instance,
-                             RuntimeNPClass<LibvlcMarqueeNPObject>::getClass());
-               OBJECT_TO_NPVARIANT(NPN_RetainObject(marqueeObj), result);
+                InstantObj<LibvlcMarqueeNPObject>( marqueeObj );
+                OBJECT_TO_NPVARIANT(NPN_RetainObject(marqueeObj), result);
                 return INVOKERESULT_NO_ERROR;
             }
         }
index 6aba74e7c88656fe23a63fdedc1113c1c651a116..fe9bfc62936a305188162070584e99fab3112f88 100644 (file)
@@ -42,6 +42,9 @@ static bool RuntimeNPClassInvokeDefault(NPObject *npobj,
 class RuntimeNPObject : public NPObject
 {
 public:
+    // Lazy child object cration helper. Doing this avoids
+    // ownership problems with firefox.
+    template<class T> void InstantObj( NPObject *&obj );
 
     /*
     ** utility functions
@@ -174,6 +177,13 @@ private:
     NPIdentifier *methodIdentifiers;
 };
 
+template<class T>
+inline void RuntimeNPObject::InstantObj( NPObject *&obj )
+{
+    if( !obj )
+        obj = NPN_CreateObject(_instance, RuntimeNPClass<T>::getClass());
+}
+
 template<class T>
 static NPObject *RuntimeNPClassAllocate(NPP instance, NPClass *aClass)
 {