Changeset 52619 in webkit
- Timestamp:
- Dec 29, 2009 5:52:57 AM (14 years ago)
- Location:
- trunk/WebKit/mac
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebKit/mac/ChangeLog
r52507 r52619 1 2009-12-27 Maciej Stachowiak <mjs@apple.com> 2 3 Reviewed by Alexey Proskuryakov. 4 5 plugins/get-url-with-iframe-target.html fails on SnowLeopard (64-bit) 6 https://bugs.webkit.org/show_bug.cgi?id=32982 7 8 This test has been failing on SnowLeopard since it was landed. 9 10 The problem is that we never delivered the notification for 11 NPN_GetURLNotify, in the frame-targeting case, for out-of-process 12 plugins on Mac. 13 14 I implemented support for this based on how in-process Mac plugins 15 do it. 16 17 * Plugins/Hosted/HostedNetscapePluginStream.h: 18 * Plugins/Hosted/HostedNetscapePluginStream.mm: 19 (WebKit::HostedNetscapePluginStream::reasonForError): 20 * Plugins/Hosted/NetscapePluginInstanceProxy.h: 21 * Plugins/Hosted/NetscapePluginInstanceProxy.mm: 22 (WebKit::NetscapePluginInstanceProxy::PluginRequest::create): 23 (WebKit::NetscapePluginInstanceProxy::PluginRequest::PluginRequest): 24 (WebKit::NetscapePluginInstanceProxy::destroy): 25 (WebKit::NetscapePluginInstanceProxy::performRequest): 26 (WebKit::NetscapePluginInstanceProxy::webFrameDidFinishLoadWithReason): 27 (WebKit::NetscapePluginInstanceProxy::requestTimerFired): 28 (WebKit::NetscapePluginInstanceProxy::loadRequest): 29 * Plugins/Hosted/WebHostedNetscapePluginView.h: 30 * Plugins/Hosted/WebHostedNetscapePluginView.mm: 31 (-[WebHostedNetscapePluginView webFrame:didFinishLoadWithReason:]): 32 (-[WebHostedNetscapePluginView webFrame:didFinishLoadWithError:]): 33 1 34 2009-12-22 Darin Adler <darin@apple.com> 2 35 -
trunk/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.h
r47551 r52619 71 71 void cancelLoad(NPReason reason); 72 72 73 static NPReason reasonForError(NSError* error); 74 73 75 private: 74 76 NSError *errorForReason(NPReason) const; -
trunk/WebKit/mac/Plugins/Hosted/HostedNetscapePluginStream.mm
r49212 r52619 184 184 } 185 185 186 static NPReasonreasonForError(NSError *error)186 NPReason HostedNetscapePluginStream::reasonForError(NSError *error) 187 187 { 188 188 if (!error) -
trunk/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.h
r49512 r52619 50 50 } 51 51 @class WebHostedNetscapePluginView; 52 @class WebFrame; 52 53 53 54 namespace WebKit { … … 55 56 class HostedNetscapePluginStream; 56 57 class NetscapePluginHostProxy; 58 class PluginRequest; 57 59 class ProxyInstance; 58 60 … … 258 260 } 259 261 262 void webFrameDidFinishLoadWithReason(WebFrame*, NPReason); 263 260 264 private: 261 NetscapePluginInstanceProxy(NetscapePluginHostProxy*, WebHostedNetscapePluginView 262 263 NPError loadRequest(NSURLRequest 265 NetscapePluginInstanceProxy(NetscapePluginHostProxy*, WebHostedNetscapePluginView*, bool fullFramePlugin); 266 267 NPError loadRequest(NSURLRequest*, const char* cTarget, bool currentEventIsUserGesture, uint32_t& streamID); 264 268 265 269 class PluginRequest; … … 275 279 void requestTimerFired(WebCore::Timer<NetscapePluginInstanceProxy>*); 276 280 WebCore::Timer<NetscapePluginInstanceProxy> m_requestTimer; 277 Deque< PluginRequest*> m_pluginRequests;281 Deque<RefPtr<PluginRequest> > m_pluginRequests; 278 282 279 283 HashMap<uint32_t, RefPtr<HostedNetscapePluginStream> > m_streams; … … 314 318 315 319 RefPtr<HostedNetscapePluginStream> m_manualStream; 320 321 typedef HashMap<WebFrame*, RefPtr<PluginRequest> > FrameLoadMap; 322 FrameLoadMap m_pendingFrameLoads; 316 323 }; 317 324 -
trunk/WebKit/mac/Plugins/Hosted/NetscapePluginInstanceProxy.mm
r49965 r52619 73 73 namespace WebKit { 74 74 75 class NetscapePluginInstanceProxy::PluginRequest {75 class NetscapePluginInstanceProxy::PluginRequest : public RefCounted<NetscapePluginInstanceProxy::PluginRequest> { 76 76 public: 77 PluginRequest(uint32_t requestID, NSURLRequest *request, NSString *frameName, bool allowPopups) 77 static PassRefPtr<PluginRequest> create(uint32_t requestID, NSURLRequest* request, NSString* frameName, bool allowPopups) 78 { 79 return adoptRef(new PluginRequest(requestID, request, frameName, allowPopups)); 80 } 81 82 uint32_t requestID() const { return m_requestID; } 83 NSURLRequest* request() const { return m_request.get(); } 84 NSString* frameName() const { return m_frameName.get(); } 85 bool allowPopups() const { return m_allowPopups; } 86 87 private: 88 PluginRequest(uint32_t requestID, NSURLRequest* request, NSString* frameName, bool allowPopups) 78 89 : m_requestID(requestID) 79 90 , m_request(request) … … 83 94 } 84 95 85 uint32_t requestID() const { return m_requestID; }86 NSURLRequest *request() const { return m_request.get(); }87 NSString *frameName() const { return m_frameName.get(); }88 bool allowPopups() const { return m_allowPopups; }89 90 private:91 96 uint32_t m_requestID; 92 RetainPtr<NSURLRequest 93 RetainPtr<NSString 97 RetainPtr<NSURLRequest*> m_request; 98 RetainPtr<NSString*> m_frameName; 94 99 bool m_allowPopups; 95 100 }; … … 213 218 m_inDestroy = true; 214 219 220 FrameLoadMap::iterator end = m_pendingFrameLoads.end(); 221 for (FrameLoadMap::iterator it = m_pendingFrameLoads.begin(); it != end; ++it) 222 [(it->first) _setInternalLoadDelegate:nil]; 223 215 224 _WKPHDestroyPluginInstance(m_pluginHostProxy->port(), m_pluginID, requestID); 216 225 … … 518 527 ASSERT(!frame || [m_pluginView webFrame] == frame); 519 528 evaluateJavaScript(pluginRequest); 520 } else 529 } else { 521 530 [frame loadRequest:request]; 531 532 // Check if another plug-in view or even this view is waiting for the frame to load. 533 // If it is, tell it that the load was cancelled because it will be anyway. 534 WebHostedNetscapePluginView *view = [frame _internalLoadDelegate]; 535 if (view != nil) { 536 ASSERT([view isKindOfClass:[WebHostedNetscapePluginView class]]); 537 [view webFrame:frame didFinishLoadWithReason:NPRES_USER_BREAK]; 538 } 539 m_pendingFrameLoads.set(frame, pluginRequest); 540 [frame _setInternalLoadDelegate:m_pluginView]; 541 } 542 543 } 544 545 void NetscapePluginInstanceProxy::webFrameDidFinishLoadWithReason(WebFrame* webFrame, NPReason reason) 546 { 547 FrameLoadMap::iterator it = m_pendingFrameLoads.find(webFrame); 548 ASSERT(it != m_pendingFrameLoads.end()); 549 550 PluginRequest* pluginRequest = it->second.get(); 551 _WKPHLoadURLNotify(m_pluginHostProxy->port(), m_pluginID, pluginRequest->requestID(), reason); 552 553 m_pendingFrameLoads.remove(it); 554 555 [webFrame _setInternalLoadDelegate:nil]; 522 556 } 523 557 … … 558 592 ASSERT(m_pluginView); 559 593 560 PluginRequest*request = m_pluginRequests.first();594 RefPtr<PluginRequest> request = m_pluginRequests.first(); 561 595 m_pluginRequests.removeFirst(); 562 596 … … 564 598 m_requestTimer.startOneShot(0); 565 599 566 performRequest(request); 567 delete request; 600 performRequest(request.get()); 568 601 } 569 602 … … 617 650 } 618 651 619 PluginRequest* pluginRequest = new PluginRequest(requestID, request, target, allowPopups);620 m_pluginRequests.append(pluginRequest );652 RefPtr<PluginRequest> pluginRequest = PluginRequest::create(requestID, request, target, allowPopups); 653 m_pluginRequests.append(pluginRequest.release()); 621 654 m_requestTimer.startOneShot(0); 622 655 } else { -
trunk/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.h
r45678 r52619 60 60 61 61 - (void)pluginHostDied; 62 63 - (void)webFrame:(WebFrame *)webFrame didFinishLoadWithReason:(NPReason)reason; 64 62 65 @end 63 66 -
trunk/WebKit/mac/Plugins/Hosted/WebHostedNetscapePluginView.mm
r49806 r52619 442 442 } 443 443 444 - (void)webFrame:(WebFrame *)webFrame didFinishLoadWithReason:(NPReason)reason 445 { 446 if (_isStarted && _proxy) 447 _proxy->webFrameDidFinishLoadWithReason(webFrame, reason); 448 } 449 450 - (void)webFrame:(WebFrame *)webFrame didFinishLoadWithError:(NSError *)error 451 { 452 NPReason reason = NPRES_DONE; 453 if (error) 454 reason = HostedNetscapePluginStream::reasonForError(error); 455 [self webFrame:webFrame didFinishLoadWithReason:reason]; 456 } 457 444 458 @end 445 459
Note: See TracChangeset
for help on using the changeset viewer.