Changeset 19406 for S60/trunk/WebCore

Show
Ignore:
Timestamp:
02/05/07 09:24:12 (2 years ago)
Author:
brmorris
Message:

bujtas, merged of r19405 to s60/trunk by mbradley, reviewed by yongjun.

DESC: browser is crashing if it is closed while a page is loading and closing and opening a new window crashes the browser as well TMCN-6XRQP2
fix:

  1. cancel parsing when the document is being closed
  2. flush static image decoder queue. remove images associated with the the view being destroyed


http://bugs.webkit.org/show_bug.cgi?id=12542

Location:
S60/trunk/WebCore
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • S60/trunk/WebCore/ChangeLog

    r19368 r19406  
     1bujtas, merged of r19405 to s60/trunk by mbradley, reviewed by yongjun. 
     2        DESC: browser is crashing if it is closed while a page is loading and closing and opening a new window crashes the browser as well TMCN-6XRQP2  
     3        fix:  
     4        1. cancel parsing when the document is being closed 
     5        2. flush static image decoder queue. remove images associated with the the view being destroyed 
     6         
     7        http://bugs.webkit.org/show_bug.cgi?id=12542 
     8 
     9        * bridge/WebCoreBridge.cpp: 
     10        (CWebCoreBridge::RemoveFromFrame): 
     11        * bridge/WebCoreImageRendererFactory.h: 
     12        * khtml/khtml_part.cpp: 
     13        (KHTMLPart::clear): 
     14        * khtml/xml/dom_docimpl.cpp: 
     15        (DocumentImpl::cancelParsing): 
     16        * khtml/xml/dom_docimpl.h: 
     17 
    118bujtas, Reviewed by yongjun. 
    219        DESC: browser crashes on www.tays.fi. when multiple layers are referring to the same background image, the render_object does not do proper deref on the image. 
  • S60/trunk/WebCore/bridge/WebCoreBridge.cpp

    r19307 r19406  
    8383 
    8484#include "WebCoreImageRenderer.h" 
     85#include "WebCoreImageRendererFactory.h" 
    8586//#include "WebCoreTextRendererFactory.h" 
    8687//#include "WebCoreViewFactory.h" 
     
    870871        iPart->view()->setView(0); 
    871872    iPart->setView(0); 
    872  
    873873    // tell image renderers this frame does not exist any more 
    874     MWebCoreScrollView* view = &Client().DocumentView(); 
    875     QDictIterator<khtml::CachedObject> it( *khtml::Cache::cache ); 
    876     khtml::CachedObject* o = 0; 
    877     while( ( o = it.current() ) != NULL ) { 
    878         if( o->type() == khtml::CachedObject::Image ) { 
    879             const QPixmap& pm = static_cast<khtml::CachedImage *>(o)->pixmap(); 
    880             if (pm.image()) 
    881                 pm.image()->RemoveFromScrollView(view); 
    882         } 
    883         ++it; 
    884     } 
     874    TWebCoreImageRendererFactory::Factory()->RemoveImagesInView( Client().DocumentView() ); 
    885875} 
    886876 
  • S60/trunk/WebCore/bridge/WebCoreImageRendererFactory.h

    r14549 r19406  
    4343 
    4444class MWebCoreImageRenderer; 
     45class MWebCoreScrollView; 
    4546 
    4647// CLASS DECLARATION 
     
    6162        virtual MWebCoreImageRenderer* ImageRendererWithName(const TDesC& aName) = 0; 
    6263        virtual CArrayFix<TPtrC>* SupportedMIMETypes() = 0; 
     64        virtual void RemoveImagesInView(MWebCoreScrollView& aView) = 0; 
    6365        //  virtual int CGCompositeOperationInContext((CGContextRef)context); 
    6466        //    virtual void setCGCompositeOperation((int)op, (CGContextRef)context ) = 0; 
  • S60/trunk/WebCore/khtml/khtml_part.cpp

    r18935 r19406  
    10951095 
    10961096 
    1097   if ( d->m_doc ) 
    1098     d->m_doc->detach(); 
    1099  
     1097  if ( d->m_doc ) {     
     1098    d->m_doc->cancelParsing(); 
     1099    d->m_doc->detach();     
     1100    } 
    11001101  // Moving past doc so that onUnload works. 
    11011102  if ( d->m_jscript ) 
  • S60/trunk/WebCore/khtml/xml/dom_docimpl.cpp

    r16142 r19406  
    15091509} 
    15101510 
     1511void DocumentImpl::cancelParsing() 
     1512{ 
     1513    if (m_tokenizer) { 
     1514        // We have to clear the tokenizer to avoid possibly triggering 
     1515        // the onload handler when closing as a side effect of a cancel-style 
     1516        // change, such as opening a new document or closing the window while 
     1517        // still parsing 
     1518        delete m_tokenizer; 
     1519        m_tokenizer = 0; 
     1520        close(); 
     1521    } 
     1522} 
     1523 
    15111524void DocumentImpl::implicitOpen() 
    15121525{ 
  • S60/trunk/WebCore/khtml/xml/dom_docimpl.h

    r16142 r19406  
    314314 
    315315    void open(); 
     316    void cancelParsing(); 
    316317    void implicitOpen(); 
    317318    void close();