2009-03-26 Anders Carlsson <andersca@apple.com>
authorandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Mar 2009 18:48:26 +0000 (18:48 +0000)
committerandersca@apple.com <andersca@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Mar 2009 18:48:26 +0000 (18:48 +0000)
        Reviewed by Dan Bernstein.

        - Fix <rdar://problem/6687055> and <rdar://problem/6713639>.

        * Plugins/Hosted/NetscapePluginHostProxy.mm:
        (WKPCInvalidateRect):
        Call NetscapePluginInstanceProxy::invalidateRect.

        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
        (WebKit::NetscapePluginInstanceProxy::cleanup):
        Stop the request timer, set m_pluginView to nil.

        (WebKit::NetscapePluginInstanceProxy::pluginHostDied):
        No need to set m_pluginView to nil here anymore, it's now done in cleanup().

        (WebKit::NetscapePluginInstanceProxy::performRequest):
        (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
        Assert that the plug-in view is not nil.

        (WebKit::NetscapePluginInstanceProxy::invalidateRect):
        Call setNeedsDisplayInRect here.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@42010 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/mac/ChangeLog
WebKit/mac/Plugins/Hosted/NetscapePluginHostProxy.mm
WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.h
WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm

index 24f725b..ead7c18 100644 (file)
@@ -1,3 +1,28 @@
+2009-03-26  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        - Fix <rdar://problem/6687055> and <rdar://problem/6713639>.
+        
+        * Plugins/Hosted/NetscapePluginHostProxy.mm:
+        (WKPCInvalidateRect):
+        Call NetscapePluginInstanceProxy::invalidateRect.
+        
+        * Plugins/Hosted/NetscapePluginInstanceProxy.h:
+        * Plugins/Hosted/NetscapePluginInstanceProxy.mm:
+        (WebKit::NetscapePluginInstanceProxy::cleanup):
+        Stop the request timer, set m_pluginView to nil.
+        
+        (WebKit::NetscapePluginInstanceProxy::pluginHostDied):
+        No need to set m_pluginView to nil here anymore, it's now done in cleanup().
+        
+        (WebKit::NetscapePluginInstanceProxy::performRequest):
+        (WebKit::NetscapePluginInstanceProxy::requestTimerFired):
+        Assert that the plug-in view is not nil.
+        
+        (WebKit::NetscapePluginInstanceProxy::invalidateRect):
+        Call setNeedsDisplayInRect here.
+
 2009-03-25  Anders Carlsson  <andersca@apple.com>
 
         Reviewed by Darin Adler.
index 6253bdf..c0beb2f 100644 (file)
@@ -386,8 +386,7 @@ kern_return_t WKPCInvalidateRect(mach_port_t clientPort, uint32_t pluginID, doub
     if (!instanceProxy)
         return KERN_FAILURE;
 
-    [instanceProxy->pluginView() setNeedsDisplayInRect:NSMakeRect(x, y, width, height)];
-    
+    instanceProxy->invalidateRect(x, y, width, height);
     return KERN_SUCCESS;
 }
 
index acb3f8c..3f9132d 100644 (file)
@@ -99,6 +99,8 @@ public:
     void startTimers(bool throttleTimers);
     void stopTimers();
     
+    void invalidateRect(double x, double y, double width, double height);
+    
     // NPRuntime
     bool getWindowNPObject(uint32_t& objectID);
     bool getPluginElementNPObject(uint32_t& objectID);
index 593aee0..2ef921a 100644 (file)
@@ -138,6 +138,8 @@ void NetscapePluginInstanceProxy::cleanup()
 {
     stopAllStreams();
     
+    m_requestTimer.stop();
+    
     // Clear the object map, this will cause any outstanding JS objects that the plug-in had a reference to 
     // to go away when the next garbage collection takes place.
     m_objects.clear();
@@ -152,6 +154,8 @@ void NetscapePluginInstanceProxy::cleanup()
     ProxyInstanceSet::const_iterator end = instances.end();
     for (ProxyInstanceSet::const_iterator it = instances.begin(); it != end; ++it)
         (*it)->invalidate();
+    
+    m_pluginView = nil;
 }
 
 void NetscapePluginInstanceProxy::invalidate()
@@ -191,10 +195,9 @@ void NetscapePluginInstanceProxy::pluginHostDied()
 {
     m_pluginHostProxy = 0;
 
-    cleanup();
-    
     [m_pluginView pluginHostDied];
-    m_pluginView = nil;
+
+    cleanup();
 }
 
 void NetscapePluginInstanceProxy::focusChanged(bool hasFocus)
@@ -377,6 +380,8 @@ NPError NetscapePluginInstanceProxy::loadURL(const char* url, const char* target
 
 void NetscapePluginInstanceProxy::performRequest(PluginRequest* pluginRequest)
 {
+    ASSERT(m_pluginView);
+    
     NSURLRequest *request = pluginRequest->request();
     NSString *frameName = pluginRequest->frameName();
     WebFrame *frame = nil;
@@ -449,6 +454,7 @@ void NetscapePluginInstanceProxy::evaluateJavaScript(PluginRequest* pluginReques
 void NetscapePluginInstanceProxy::requestTimerFired(Timer<NetscapePluginInstanceProxy>*)
 {
     ASSERT(!m_pluginRequests.isEmpty());
+    ASSERT(m_pluginView);
     
     PluginRequest* request = m_pluginRequests.first();
     m_pluginRequests.removeFirst();
@@ -1135,6 +1141,13 @@ uint32_t NetscapePluginInstanceProxy::nextRequestID()
     return requestID;
 }
 
+void NetscapePluginInstanceProxy::invalidateRect(double x, double y, double width, double height)
+{
+    ASSERT(m_pluginView);
+    
+    [m_pluginView setNeedsDisplayInRect:NSMakeRect(x, y, width, height)];
+}
+    
 
 } // namespace WebKit