[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

rjw rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:41:50 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 0afd5cfb117a3273ed9dd7a8c3f882180ae9fd0e
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue May 13 00:07:27 2003 +0000

    WebCore:
            Fixed 3194614 and 3194751.  We avoid creating and render objects
            and loading any images if the document is in 'renderless' mode.
    
            Also, we now unique instances of the ObjC DOM wrappers.
    
            Reviewed by hyatt/darin.
    
            * khtml/misc/loader.cpp:
            * khtml/xml/dom_docimpl.cpp:
            * khtml/xml/dom_docimpl.h:
            * khtml/xml/dom_nodeimpl.cpp:
            * kwq/KWQLoader.h:
            * kwq/KWQLoader.mm:
            * kwq/WebCoreBridge.h:
            * kwq/WebCoreBridge.mm:
            * kwq/WebCoreDOMNode.mm:
            * kwq/WebDOMNode.h:
    
            Pass the reported MIME type of an image up to WebKit when
            creating an WebImageRenderer.  This is useful to help speed up
            the selection of an appropriate decoder.
    
            Reviewed by darin.
    
            * kwq/WebCoreImageRendererFactory.h:
            * kwq/KWQPixmap.h:
            * kwq/KWQPixmap.mm:
    
    WebKit:
            Fixed 3194614 and 3194751.  Add SPI to set 'renderless' mode
            for a frame.
    
            Reviewed by darin.
    
            * WebView.subproj/WebFramePrivate.h:
            * WebView.subproj/WebFramePrivate.m:
    
            WebImageRenderers now get a MIME type that can be used to faciliate
            selection of an appropriate decoder.
    
            Reviewed by darin.
    
            * WebCoreSupport.subproj/WebImageRenderer.h:
            * WebCoreSupport.subproj/WebImageRenderer.m:
            * WebCoreSupport.subproj/WebImageRendererFactory.m:
            * WebKit.pbproj/project.pbxproj:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@4356 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index ea7b8a5..802c35b 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,33 @@
+2003-05-12  Richard Williamson  <rjw at apple.com>
+
+        Fixed 3194614 and 3194751.  We avoid creating and render objects
+        and loading any images if the document is in 'renderless' mode.
+        
+        Also, we now unique instances of the ObjC DOM wrappers.
+        
+        Reviewed by hyatt/darin.
+
+        * khtml/misc/loader.cpp:
+        * khtml/xml/dom_docimpl.cpp:
+        * khtml/xml/dom_docimpl.h:
+        * khtml/xml/dom_nodeimpl.cpp:
+        * kwq/KWQLoader.h:
+        * kwq/KWQLoader.mm:
+        * kwq/WebCoreBridge.h:
+        * kwq/WebCoreBridge.mm:
+        * kwq/WebCoreDOMNode.mm:
+        * kwq/WebDOMNode.h:
+
+        Pass the reported MIME type of an image up to WebKit when
+        creating an WebImageRenderer.  This is useful to help speed up
+        the selection of an appropriate decoder.
+        
+        Reviewed by darin.
+
+        * kwq/WebCoreImageRendererFactory.h:
+        * kwq/KWQPixmap.h:
+        * kwq/KWQPixmap.mm:
+
 2003-05-12  Darin Adler  <darin at apple.com>
 
         Reviewed by Richard.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index ea7b8a5..802c35b 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,33 @@
+2003-05-12  Richard Williamson  <rjw at apple.com>
+
+        Fixed 3194614 and 3194751.  We avoid creating and render objects
+        and loading any images if the document is in 'renderless' mode.
+        
+        Also, we now unique instances of the ObjC DOM wrappers.
+        
+        Reviewed by hyatt/darin.
+
+        * khtml/misc/loader.cpp:
+        * khtml/xml/dom_docimpl.cpp:
+        * khtml/xml/dom_docimpl.h:
+        * khtml/xml/dom_nodeimpl.cpp:
+        * kwq/KWQLoader.h:
+        * kwq/KWQLoader.mm:
+        * kwq/WebCoreBridge.h:
+        * kwq/WebCoreBridge.mm:
+        * kwq/WebCoreDOMNode.mm:
+        * kwq/WebDOMNode.h:
+
+        Pass the reported MIME type of an image up to WebKit when
+        creating an WebImageRenderer.  This is useful to help speed up
+        the selection of an appropriate decoder.
+        
+        Reviewed by darin.
+
+        * kwq/WebCoreImageRendererFactory.h:
+        * kwq/KWQPixmap.h:
+        * kwq/KWQPixmap.mm:
+
 2003-05-12  Darin Adler  <darin at apple.com>
 
         Reviewed by Richard.
diff --git a/WebCore/khtml/misc/loader.cpp b/WebCore/khtml/misc/loader.cpp
index 003434e..e46c02c 100644
--- a/WebCore/khtml/misc/loader.cpp
+++ b/WebCore/khtml/misc/loader.cpp
@@ -923,14 +923,14 @@ void CachedImage::data ( QBuffer &_buffer, bool eof )
     // must have arrived in one chunk.  This avoids the attempt
     // to perform incremental decoding.
     if (eof && !p) {
-        p = new QPixmap(_buffer.buffer());
+        p = new QPixmap(_buffer.buffer(), KWQResponseMIMEType(m_response));
         canDraw = true;
     } else {
         // Always attempt to load the image incrementally.
         // If the AppKit is unable to decode incrementally this pixmap
         // will not be renderable until all the data has been received.
         if (!p)
-            p = new QPixmap;
+            p = new QPixmap(KWQResponseMIMEType(m_response));
         canDraw = p->receivedData(_buffer.buffer(), eof);
     }
     
@@ -1476,6 +1476,13 @@ CachedImage *Cache::requestImage( DocLoader* dl, const DOMString & url, bool rel
     }
 #endif
 
+#if APPLE_CHANGES
+    if (!dl->doc()->shouldCreateRenderers()){
+        return 0;
+    }
+#endif
+
+
     CachedObject *o = 0;
     if (!reload)
         o = cache->find(kurl.url());
diff --git a/WebCore/khtml/xml/dom_docimpl.cpp b/WebCore/khtml/xml/dom_docimpl.cpp
index 1815684..68cfc54 100644
--- a/WebCore/khtml/xml/dom_docimpl.cpp
+++ b/WebCore/khtml/xml/dom_docimpl.cpp
@@ -232,7 +232,7 @@ DocumentImpl::DocumentImpl(DOMImplementationImpl *_implementation, KHTMLView *v)
 #if APPLE_CHANGES
     , m_finishedParsing(this, SIGNAL(finishedParsing()))
     , m_inPageCache(0), m_passwordFields(0), m_secureForms(0)
-    , m_decoder(0)
+    , m_decoder(0), m_createRenderers(true)
 #endif
 {
     document->doc = this;
@@ -2279,6 +2279,19 @@ bool DocumentImpl::hasSecureForm() const
     return m_secureForms > 0;
 }
 
+#if APPLE_CHANGES
+void DocumentImpl::setShouldCreateRenderers(bool f)
+{
+    m_createRenderers = f;
+}
+
+bool DocumentImpl::shouldCreateRenderers()
+{
+    return m_createRenderers;
+}
+#endif
+    
+
 #endif // APPLE_CHANGES
 
 // ----------------------------------------------------------------------------
diff --git a/WebCore/khtml/xml/dom_docimpl.h b/WebCore/khtml/xml/dom_docimpl.h
index 4067ed8..40fce37 100644
--- a/WebCore/khtml/xml/dom_docimpl.h
+++ b/WebCore/khtml/xml/dom_docimpl.h
@@ -535,12 +535,17 @@ public:
     void secureFormRemoved();
     bool hasSecureForm() const;
 
+    void setShouldCreateRenderers(bool f);
+    bool shouldCreateRenderers();
+    
 private:
     bool m_inPageCache;
     int m_passwordFields;
     int m_secureForms;
     
     khtml::Decoder *m_decoder;
+    
+    bool m_createRenderers;
 #endif
 };
 
diff --git a/WebCore/khtml/xml/dom_nodeimpl.cpp b/WebCore/khtml/xml/dom_nodeimpl.cpp
index 3a7e671..7883b01 100644
--- a/WebCore/khtml/xml/dom_nodeimpl.cpp
+++ b/WebCore/khtml/xml/dom_nodeimpl.cpp
@@ -1017,6 +1017,11 @@ RenderObject * NodeImpl::nextRenderer()
 
 void NodeImpl::createRendererIfNeeded()
 {
+#if APPLE_CHANGES
+    if (!getDocument()->shouldCreateRenderers())
+        return;
+#endif
+        
     assert(!attached());
     assert(!m_render);
     
diff --git a/WebCore/kwq/KWQLoader.h b/WebCore/kwq/KWQLoader.h
index 466912a..008bfdf 100644
--- a/WebCore/kwq/KWQLoader.h
+++ b/WebCore/kwq/KWQLoader.h
@@ -41,6 +41,7 @@ void KWQCheckCacheObjectStatus(khtml::DocLoader *, khtml::CachedObject *);
 bool KWQCheckIfReloading(khtml::DocLoader *loader);
 void KWQRetainResponse(void *response);
 void KWQReleaseResponse(void *response);
+void *KWQResponseMIMEType(void *response);
 
 class KWQLoader
 {
diff --git a/WebCore/kwq/KWQLoader.mm b/WebCore/kwq/KWQLoader.mm
index c7e407a..343b786 100644
--- a/WebCore/kwq/KWQLoader.mm
+++ b/WebCore/kwq/KWQLoader.mm
@@ -97,6 +97,16 @@ void KWQReleaseResponse(void *response)
     [(id)response release];
 }
 
+ at interface NSObject (WebPrivateResponse)
+- (void *)MIMEType;
+ at end
+
+void *KWQResponseMIMEType(void *response)
+{
+    return [(id)response MIMEType];
+}
+
+
 KWQLoader::KWQLoader(Loader *loader)
     : _requestStarted(loader, SIGNAL(requestStarted(khtml::DocLoader *, khtml::CachedObject *)))
     , _requestDone(loader, SIGNAL(requestDone(khtml::DocLoader *, khtml::CachedObject *)))
diff --git a/WebCore/kwq/KWQPixmap.h b/WebCore/kwq/KWQPixmap.h
index 0781d53..bec7ae1 100644
--- a/WebCore/kwq/KWQPixmap.h
+++ b/WebCore/kwq/KWQPixmap.h
@@ -38,9 +38,11 @@
 #ifdef __OBJC__
 @protocol WebCoreImageRenderer;
 typedef id <WebCoreImageRenderer> WebCoreImageRendererPtr;
+ at class NSString;
 #else
 class WebCoreImageRenderer;
 typedef WebCoreImageRenderer *WebCoreImageRendererPtr;
+class NSString;
 #endif
 
 class QWMatrix;
@@ -50,8 +52,10 @@ bool canRenderImageType(const QString &type);
 class QPixmap : public QPaintDevice, public Qt {
 public:
     QPixmap();
+    QPixmap(void *MIMEType);
     QPixmap(const QSize&);
     QPixmap(const QByteArray&);
+    QPixmap(const QByteArray&, void *MIMEType);
     QPixmap(int, int);
     QPixmap(const QPixmap &);
     ~QPixmap();
@@ -81,7 +85,9 @@ private:
     WebCoreImageRendererPtr imageRenderer;
         
     mutable bool needCopyOnWrite;
-
+    
+    NSString *MIMEType;
+    
     friend class QPainter;
 
 };
diff --git a/WebCore/kwq/KWQPixmap.mm b/WebCore/kwq/KWQPixmap.mm
index b163fee..299283b 100644
--- a/WebCore/kwq/KWQPixmap.mm
+++ b/WebCore/kwq/KWQPixmap.mm
@@ -36,43 +36,64 @@ bool canRenderImageType(const QString &type)
 QPixmap::QPixmap()
 {
     imageRenderer = nil;
+    MIMEType = 0;
+    needCopyOnWrite = false;
+}
+
+QPixmap::QPixmap(void *MIME)
+{
+    imageRenderer = nil;
+    MIMEType = (NSString *)[((NSString *)MIME) copy];
     needCopyOnWrite = false;
 }
 
 QPixmap::QPixmap(const QSize &sz)
 {
     imageRenderer = [[[WebCoreImageRendererFactory sharedFactory] imageRendererWithSize:NSMakeSize(sz.width(), sz.height())] retain];
+    MIMEType = 0;
     needCopyOnWrite = false;
 }
 
 QPixmap::QPixmap(const QByteArray &bytes)
 {
     imageRenderer = [[[WebCoreImageRendererFactory sharedFactory] imageRendererWithBytes:bytes.data() length:bytes.size()] retain];
+    MIMEType = 0;
+    needCopyOnWrite = false;
+}
+
+QPixmap::QPixmap(const QByteArray &bytes, void *MIME)
+{
+    MIMEType = (NSString *)[((NSString *)MIME) copy];
+    imageRenderer = [[[WebCoreImageRendererFactory sharedFactory] imageRendererWithBytes:bytes.data() length:bytes.size() MIMEType:(NSString *)MIMEType] retain];
+    MIMEType = 0;
     needCopyOnWrite = false;
 }
 
 QPixmap::QPixmap(int w, int h)
 {
     imageRenderer = [[[WebCoreImageRendererFactory sharedFactory] imageRendererWithSize:NSMakeSize(w, h)] retain];
+    MIMEType = 0;
     needCopyOnWrite = false;
 }
 
 QPixmap::QPixmap(const QPixmap &copyFrom) : QPaintDevice(copyFrom)
 {
     imageRenderer = [copyFrom.imageRenderer retain];
+    MIMEType = [copyFrom.MIMEType copy];
     copyFrom.needCopyOnWrite = true;
     needCopyOnWrite = true;
 }
 
 QPixmap::~QPixmap()
 {
+    [MIMEType release];
     [imageRenderer release];
 }
 
 bool QPixmap::receivedData(const QByteArray &bytes, bool isComplete)
 {
     if (imageRenderer == nil) {
-        imageRenderer = [[[WebCoreImageRendererFactory sharedFactory] imageRenderer] retain];
+        imageRenderer = [[[WebCoreImageRendererFactory sharedFactory] imageRendererWithMIMEType:MIMEType] retain];
     }
     return [imageRenderer incrementalLoadWithBytes:bytes.data() length:bytes.size() complete:isComplete];
 }
@@ -153,6 +174,7 @@ QPixmap &QPixmap::operator=(const QPixmap &assignFrom)
     [assignFrom.imageRenderer retain];
     [imageRenderer release];
     imageRenderer = assignFrom.imageRenderer;
+    MIMEType = [assignFrom.MIMEType copy];
     assignFrom.needCopyOnWrite = true;
     needCopyOnWrite = true;
     return *this;
diff --git a/WebCore/kwq/WebCoreBridge.h b/WebCore/kwq/WebCoreBridge.h
index 350da62..6d7b9d6 100644
--- a/WebCore/kwq/WebCoreBridge.h
+++ b/WebCore/kwq/WebCoreBridge.h
@@ -97,6 +97,7 @@ enum FrameBorderStyle {
     KHTMLRenderPart *_renderPart;
     RenderArena *_renderPartArena;
     BOOL _drawSelectionOnly;
+    BOOL _shouldCreateRenderers;
 }
 
 - (void)initializeSettings:(WebCoreSettings *)settings;
@@ -215,6 +216,9 @@ enum FrameBorderStyle {
 
 - (BOOL)interceptKeyEvent:(NSEvent *)event toView:(NSView *)view;
 
+- (void)setShouldCreateRenderers:(BOOL)f;
+- (BOOL)shouldCreateRenderers;
+
 @end
 
 // The WebCoreBridge protocol contains methods for use by the WebCore side of the bridge.
diff --git a/WebCore/kwq/WebCoreBridge.mm b/WebCore/kwq/WebCoreBridge.mm
index 3c49e64..a75760d 100644
--- a/WebCore/kwq/WebCoreBridge.mm
+++ b/WebCore/kwq/WebCoreBridge.mm
@@ -107,6 +107,8 @@ static bool initializedObjectCacheSize = FALSE;
         initializedObjectCacheSize = TRUE;
     }
     
+    _shouldCreateRenderers = YES;
+    
     return self;
 }
 
@@ -190,6 +192,11 @@ static bool initializedObjectCacheSize = FALSE;
 
 - (void)addData:(NSData *)data
 {
+    DocumentImpl *doc = _part->xmlDocImpl();
+    
+    ASSERT (doc);
+    doc->setShouldCreateRenderers([self shouldCreateRenderers]);
+
     _part->addData((const char *)[data bytes], [data length]);
 }
 
@@ -925,4 +932,16 @@ static HTMLFormElementImpl *formElementFromDOMElement(id <WebDOMElement>element)
     return _part->usesInactiveTextBackgroundColor();
 }
 
+- (void)setShouldCreateRenderers:(BOOL)f
+{
+    _shouldCreateRenderers = f;
+}
+
+- (BOOL)shouldCreateRenderers
+{
+    return _shouldCreateRenderers;
+}
+
+
+
 @end
diff --git a/WebCore/kwq/WebCoreDOMNode.mm b/WebCore/kwq/WebCoreDOMNode.mm
index d22fd6c..278a30a 100644
--- a/WebCore/kwq/WebCoreDOMNode.mm
+++ b/WebCore/kwq/WebCoreDOMNode.mm
@@ -25,6 +25,71 @@
 
 #import "WebCoreDOMPrivate.h"
 
+// Psuedo templates for init and dealloc.
+#define INIT_WITH_IMPL(_impl) \
+    if (!_impl){\
+        [self release];\
+        return nil;\
+    }\
+    \
+    id cachedInstance;\
+    cachedInstance = wrapperForImpl(_impl);\
+    if (cachedInstance){\
+        [self release];\
+        return [cachedInstance retain];\
+    }\
+    \
+    [super init];\
+    impl = _impl;\
+    setWrapperForImpl(self, _impl);\
+    impl->ref();\
+    return self;
+
+#define DEALLOC_WITH_IMPL(impl) \
+    if (impl){\
+        removeWrapperForImpl (impl);\
+        [self impl]->deref();\
+    }\
+    [super dealloc];
+
+static Boolean WrapperKeyEqual(const void *value1, const void *value2)
+{
+    return value1 == value2;
+}
+
+static CFHashCode WrapperKeyHash(const void *value)
+{
+    return ((unsigned int)value) >> 2;
+}
+
+static CFMutableDictionaryRef wrapperCache()
+{
+    static CFMutableDictionaryRef wrapperCache = NULL;
+    if (!wrapperCache) {
+        // No need to retain/free either impl key, or id value.  Items will be removed
+        // from the cache in WebDOMNode's dealloc method.
+        static const CFDictionaryKeyCallBacks wrapperKeyCallBacks = { 0, NULL, NULL, NULL, WrapperKeyEqual, WrapperKeyHash };
+        static const CFDictionaryValueCallBacks wrapperValueCallBacks = { 0, NULL, NULL, NULL, NULL };
+        wrapperCache = CFDictionaryCreateMutable(NULL, 0, &wrapperKeyCallBacks, &wrapperValueCallBacks);
+    }
+    return wrapperCache;
+}
+
+static id wrapperForImpl (const void *impl)
+{
+    return (id)CFDictionaryGetValue(wrapperCache(), impl);
+}
+
+static void setWrapperForImpl (id wrapper, const void *impl)
+{
+    CFDictionarySetValue (wrapperCache(), (const void *)impl, wrapper);
+}
+
+static void removeWrapperForImpl (const void *impl)
+{
+    CFDictionaryRemoveValue (wrapperCache(), impl);
+}
+
 DOM::NodeList DOM::NodeListImpl::createInstance(DOM::NodeListImpl *impl)
 {
     return DOM::NodeList(impl);
@@ -70,17 +135,14 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     return [[(WebCoreDOMNode *)[[self class] alloc] initWithImpl: _impl] autorelease];
 }
 
-- initWithImpl:(DOM::NodeImpl *)coreImpl
+- initWithImpl:(DOM::NodeImpl *)_impl
 {
-    [super init];
-    if (coreImpl) {
-        impl = coreImpl;
-        impl->ref();
-        return self;
-    } else {
-        [self release];
-        return nil;
-    }
+    INIT_WITH_IMPL (_impl);
+}
+
+- (void)dealloc
+{
+    DEALLOC_WITH_IMPL (impl);
 }
 
 - (BOOL)isEqual:(id)other
@@ -100,12 +162,6 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     return impl;
 }
 
-- (void)dealloc
-{
-    [self impl]->deref();
-    [super dealloc];
-}
-
 - (NSString *)nodeName
 {
     DOM::DOMString _nodeName = [self impl]->nodeName();
@@ -177,7 +233,6 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     DOM::NamedNodeMap ret;
     
     ret = instance.attributes();
-    
     return [WebCoreDOMNamedNodeMap namedNodeMapWithImpl: (DOM::NamedNodeMapImpl *)ret.handle()];
 }
 
@@ -187,7 +242,6 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     DOM::Document ret;
     
     ret = instance.ownerDocument();
-    
     return [WebCoreDOMDocument documentWithImpl: (DOM::DocumentImpl *)ret.handle()];
 }
 
@@ -199,7 +253,6 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     DOM::Node ret;
     
     ret = instance.insertBefore (_newChild, _refChild);
-    
     return [WebCoreDOMNode nodeWithImpl: (DOM::NodeImpl *)ret.handle()];
 }
 
@@ -211,7 +264,6 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     DOM::Node ret;
     
     ret = instance.replaceChild (_newChild, _oldChild);
-    
     return [WebCoreDOMNode nodeWithImpl: (DOM::NodeImpl *)ret.handle()];
 }
 
@@ -222,7 +274,6 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     DOM::Node ret;
     
     ret = instance.removeChild (_oldChild);
-    
     return [WebCoreDOMNode nodeWithImpl: (DOM::NodeImpl *)ret.handle()];
 }
 
@@ -233,7 +284,6 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     DOM::Node ret;
     
     ret = instance.appendChild (_newChild);
-    
     return [WebCoreDOMNode nodeWithImpl: (DOM::NodeImpl *)ret.handle()];
 }
 
@@ -303,23 +353,19 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     return [[(WebCoreDOMNodeList *)[[self class] alloc] initWithImpl: _impl] autorelease];
 }
 
-- initWithImpl:(DOM::NodeListImpl *)coreImpl
+- initWithImpl:(DOM::NodeListImpl *)_impl
 {
-    [super init];
-    impl = coreImpl;
-    impl->ref();
-    return self;
+    INIT_WITH_IMPL (_impl);
 }
 
-- (DOM::NodeListImpl *)impl
+- (void)dealloc
 {
-    return impl;
+    DEALLOC_WITH_IMPL (impl);
 }
 
-- (void)dealloc
+- (DOM::NodeListImpl *)impl
 {
-    [self impl]->deref();
-    [super dealloc];
+    return impl;
 }
 
 - (unsigned long)length
@@ -344,23 +390,19 @@ DOM::ProcessingInstruction DOM::ProcessingInstructionImpl::createInstance(Proces
     return [[(WebCoreDOMNamedNodeMap *)[[self class] alloc] initWithImpl: _impl] autorelease];
 }
 
-- initWithImpl:(DOM::NamedNodeMapImpl *)coreImpl
+- initWithImpl:(DOM::NamedNodeMapImpl *)_impl
 {
-    [super init];
-    impl = coreImpl;
-    impl->ref();
-    return self;
+    INIT_WITH_IMPL (_impl);
 }
 
-- (DOM::NamedNodeMapImpl *)impl
+- (void)dealloc
 {
-    return impl;
+    DEALLOC_WITH_IMPL (impl);
 }
 
-- (void)dealloc
+- (DOM::NamedNodeMapImpl *)impl
 {
-    [self impl]->deref();
-    [super dealloc];
+    return impl;
 }
 
 - (unsigned long) length
diff --git a/WebCore/kwq/WebCoreImageRendererFactory.h b/WebCore/kwq/WebCoreImageRendererFactory.h
index 375e3ed..fd85125 100644
--- a/WebCore/kwq/WebCoreImageRendererFactory.h
+++ b/WebCore/kwq/WebCoreImageRendererFactory.h
@@ -30,7 +30,9 @@
 @protocol WebCoreImageRendererFactory
 
 - (id <WebCoreImageRenderer>)imageRenderer;
+- (id <WebCoreImageRenderer>)imageRendererWithMIMEType:(NSString *)MIMEType;
 - (id <WebCoreImageRenderer>)imageRendererWithBytes:(const void *)bytes length:(unsigned)length;
+- (id <WebCoreImageRenderer>)imageRendererWithBytes:(const void *)bytes length:(unsigned)length MIMEType:(NSString *)MIMEType;
 - (id <WebCoreImageRenderer>)imageRendererWithSize:(NSSize)size;
 - (NSArray *)supportedMIMETypes;
 
diff --git a/WebCore/kwq/WebDOMNode.h b/WebCore/kwq/WebDOMNode.h
index 1992f61..01f5189 100644
--- a/WebCore/kwq/WebDOMNode.h
+++ b/WebCore/kwq/WebDOMNode.h
@@ -54,7 +54,7 @@ enum WebNodeType {
 - (id<WebDOMNodeList>)childNodes;
 - (id<WebDOMNode>)firstChild;
 - (id<WebDOMNode>)lastChild;
-- (id<WebDOMNode>) previousSibling;
+- (id<WebDOMNode>)previousSibling;
 - (id<WebDOMNode>)nextSibling;
 - (id<WebDOMNamedNodeMap>)attributes;
 - (id<WebDOMDocument>)ownerDocument;
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index f2094a2..9a80c5f 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,23 @@
+2003-05-12  Richard Williamson  <rjw at apple.com>
+
+        Fixed 3194614 and 3194751.  Add SPI to set 'renderless' mode
+        for a frame.
+        
+        Reviewed by darin.  
+
+        * WebView.subproj/WebFramePrivate.h:
+        * WebView.subproj/WebFramePrivate.m:
+        
+        WebImageRenderers now get a MIME type that can be used to faciliate
+        selection of an appropriate decoder.
+        
+        Reviewed by darin.
+
+        * WebCoreSupport.subproj/WebImageRenderer.h:
+        * WebCoreSupport.subproj/WebImageRenderer.m:
+        * WebCoreSupport.subproj/WebImageRendererFactory.m:
+        * WebKit.pbproj/project.pbxproj:
+
 2003-05-12  John Sullivan  <sullivan at apple.com>
 
 	- addition to Darin's previous patch; when checking whether a request can
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRenderer.h b/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
index 3fb61e2..09c3432 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
+++ b/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
@@ -24,8 +24,12 @@
     BOOL sawGIFExtensionSignature;
     char GIFExtensionBuffer[10];
     int GIFExtensionBufferLength;
+    
+    NSString *MIMEType;
 }
 
+- (id)initWithMIMEType:(NSString *)MIME;
+- (id)initWithData:(NSData *)data MIMEType:(NSString *)MIME;
 + (void)stopAnimationsInView:(NSView *)aView;
 
 @end
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
index 91e98be..046dcc1 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
+++ b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
@@ -89,11 +89,20 @@ static NSMutableArray *activeImageRenderers;
     }
 }
 
+- (id)initWithMIMEType:(NSString *)MIME
+{
+    [super init];
+    MIMEType = [MIME copy];
+    return self;
+}
+
 // Part of the workaround for bug 3090341.
-- initWithData:(NSData *)data
+- (id)initWithData:(NSData *)data MIMEType:(NSString *)MIME
 {
     [self checkDataForGIFExtensionSignature:data];
-    return [super initWithData:data];
+    [super initWithData:data];
+    MIMEType = [MIME copy];
+    return self;
 }
 
 #endif
@@ -107,16 +116,19 @@ static NSMutableArray *activeImageRenderers;
     copy->frameTimer = nil;
     copy->frameView = nil;
     copy->patternColor = nil;
-    
+    copy->MIMEType = [MIMEType copy];
+        
     return copy;
 }
 
+
 - (BOOL)incrementalLoadWithBytes:(const void *)bytes length:(unsigned)length complete:(BOOL)isComplete
 {
     NSBitmapImageRep *imageRep = [[self representations] objectAtIndex:0];
     NSData *data = [[NSData alloc] initWithBytes:bytes length:length];
     NSSize size;
-    
+
+
 #if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_2
     // Part of the workaround for bug 3090341.
     [self checkDataForGIFExtensionSignature:data];
@@ -161,6 +173,7 @@ static NSMutableArray *activeImageRenderers;
     ASSERT(frameTimer == nil);
     ASSERT(frameView == nil);
     [patternColor release];
+    [MIMEType release];
     [super dealloc];
 }
 
@@ -344,12 +357,6 @@ static NSMutableArray *activeImageRenderers;
     [activeImageRenderers removeObject:self];
 }
 
-- (void)resize:(NSSize)s
-{
-    [self setScalesWhenResized:YES];
-    [self setSize:s];
-}
-
 - (void)tileInRect:(NSRect)rect fromPoint:(NSPoint)point
 {
     // These calculations are only correct for the flipped case.
@@ -406,6 +413,12 @@ static NSMutableArray *activeImageRenderers;
     [NSGraphicsContext restoreGraphicsState];
 }
 
+- (void)resize:(NSSize)s
+{
+    [self setScalesWhenResized:YES];
+    [self setSize:s];
+}
+
 // required by protocol -- apparently inherited methods don't count
 
 - (NSSize)size
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
index 7e03eb0..7a205d9 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
+++ b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
@@ -44,9 +44,9 @@
     return (WebImageRendererFactory *)[super sharedFactory];
 }
 
-- (id <WebCoreImageRenderer>)imageRenderer
+- (id <WebCoreImageRenderer>)imageRendererWithMIMEType:(NSString *)MIMEType
 {
-    NSImage *imageRenderer = [[WebImageRenderer alloc] init];
+    NSImage *imageRenderer = [[WebImageRenderer alloc] initWithMIMEType:MIMEType];
 
     NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initForIncrementalLoad];
     [imageRenderer addRepresentation:rep];
@@ -57,13 +57,17 @@
     return [imageRenderer autorelease];
 }
 
+- (id <WebCoreImageRenderer>)imageRenderer
+{
+    return [self imageRendererWithMIMEType:nil];
+}
 
-- (id <WebCoreImageRenderer>)imageRendererWithBytes:(const void *)bytes length:(unsigned)length
+- (id <WebCoreImageRenderer>)imageRendererWithBytes:(const void *)bytes length:(unsigned)length MIMEType:(NSString *)MIMEType
 {
     // FIXME: Why must we copy the data here?
     //NSData *data = [[NSData alloc] initWithBytesNoCopy:(void *)bytes length:length freeWhenDone:NO];
     NSData *data = [[NSData alloc] initWithBytes:(void *)bytes length:length];
-    WebImageRenderer *imageRenderer = [[WebImageRenderer alloc] initWithData:data];
+    WebImageRenderer *imageRenderer = [[WebImageRenderer alloc] initWithData:data MIMEType:MIMEType];
     [imageRenderer setScalesWhenResized:NO];
     NSArray *reps = [imageRenderer representations];
     NSImageRep *rep = [reps objectAtIndex:0];
@@ -74,6 +78,11 @@
     return [imageRenderer autorelease];
 }
 
+- (id <WebCoreImageRenderer>)imageRendererWithBytes:(const void *)bytes length:(unsigned)length
+{
+    return [self imageRendererWithBytes:bytes length:length MIMEType:nil];
+}
+
 - (id <WebCoreImageRenderer>)imageRendererWithSize:(NSSize)s
 {
     WebImageRenderer *imageRenderer = [[[WebImageRenderer alloc] initWithSize:s] autorelease];
diff --git a/WebKit/WebView.subproj/WebFramePrivate.h b/WebKit/WebView.subproj/WebFramePrivate.h
index a958e92..364e44a 100644
--- a/WebKit/WebView.subproj/WebFramePrivate.h
+++ b/WebKit/WebView.subproj/WebFramePrivate.h
@@ -180,4 +180,7 @@ typedef enum {
 - (WebFrame *)_nextFrameWithWrap:(BOOL)wrapFlag;
 - (WebFrame *)_previousFrameWithWrap:(BOOL)wrapFlag;
 
+- (void)_setShouldCreateRenderers:(BOOL)f;
+- (BOOL)_shouldCreateRenderers;
+
 @end
diff --git a/WebKit/WebView.subproj/WebFramePrivate.m b/WebKit/WebView.subproj/WebFramePrivate.m
index 584e2ae..421260f 100644
--- a/WebKit/WebView.subproj/WebFramePrivate.m
+++ b/WebKit/WebView.subproj/WebFramePrivate.m
@@ -2148,6 +2148,17 @@ static CFAbsoluteTime _timeOfLastCompletedLoad;
     }
 }
 
+- (void)_setShouldCreateRenderers:(BOOL)f
+{
+    [_private->bridge setShouldCreateRenderers:f];
+}
+
+- (BOOL)_shouldCreateRenderers
+{
+    return [_private->bridge shouldCreateRenderers];
+}
+
+
 @end
 
 @implementation WebFormState : NSObject

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list