tree 6ec101678c121cdbf4fd3f333875bc9f87bd1be0
parent 8087dfe6d53c6daed3fbf48581c8594594634566
author andersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc> 1147771822 +0000
committer andersca <andersca@268f45cc-cd09-0410-ab3c-d52691b4dbfc> 1147771822 +0000

WebCore:

2006-05-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugzilla.opendarwin.org/show_bug.cgi?id=8921
        Use WebCore to render full-frame images.

        * WebCore.xcodeproj/project.pbxproj:
        Add ImageDocument.
        
        * bridge/mac/WebCoreFrameBridge.h:
        Add mainResourceURLResponse and imageTitleForFilename.
        
        * bridge/mac/WebCoreFrameBridge.mm:
        (+[WebCoreFrameBridge supportedNonImageMIMETypes]):
        This used to be supportedMIMETypes but WebKit requires that we handle the
        image MIME types separately.
        
        (+[WebCoreFrameBridge supportedImageMIMETypes]):
        Add image types from WebCoreImageRendererFactory.
        
        (-[WebCoreFrameBridge canProvideDocumentSource]):
        Return no for image types.
        
        * dom/xml_tokenizer.h:
        (WebCore::Tokenizer::wantsRawData):
        (WebCore::Tokenizer::writeRawData):
        New virtual functions which tokenizers can override if they want to get
        raw data (which isn't fed through the decoder)
        
        * html/HTMLImageElement.h:
        (WebCore::HTMLImageElement::setLoadManually):
        New function which calls HTMLImageLoader::setLoadManually
        
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        (WebCore::HTMLImageLoader::updateFromElement):
        Don't request the image from the loader if the load is set to be manual.
        
        * html/HTMLImageLoader.h:
        (WebCore::HTMLImageLoader::setLoadManually):
        New function which decides if the image data should be fed manually or loaded
        by the loader.
        
        * loader/DocLoader.h:
        Add HTMLImageLoader as a friend.
        
        * loader/ImageDocument.cpp: Added.
        (WebCore::ImageTokenizer::ImageTokenizer):
        (WebCore::ImageTokenizer::wantsRawData):
        (WebCore::ImageTokenizer::write):
        (WebCore::ImageTokenizer::writeRawData):
        (WebCore::ImageTokenizer::stopParsing):
        (WebCore::ImageTokenizer::finish):
        (WebCore::ImageTokenizer::isWaitingForScripts):
        (WebCore::ImageDocument::ImageDocument):
        (WebCore::ImageDocument::createTokenizer):
        * loader/ImageDocument.h: Added.
        Add new ImageDocument class which will feed its data to a created image element.

        * loader/TextDocument.h:
        Inherit from HTMLDocument here too, in case any broken web pages want to manipulate
        the DOM of any plain text documents.
        
        * page/Frame.cpp:
        (WebCore::Frame::begin):
        (WebCore::Frame::write):
        Don't create or use the decoder if the tokenizer is in "raw mode".
        
WebKit:

2006-05-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugzilla.opendarwin.org/show_bug.cgi?id=8921
        Use WebCore to render full-frame images
        
        * WebCoreSupport/WebFrameBridge.m:
        (-[WebFrameBridge determineObjectFromMIMEType:URL:]):
        Remove WebImageView handling.
        
        (-[WebFrameBridge mainResourceURLResponse]):
        New function which returns the URL response for the main resource. This is used by the
        manual loading of images.
        
        (-[WebFrameBridge imageTitleForFilename:size:]):
        New function which returns a correctly translated image title given a filename and a size.
        
        * WebCoreSupport/WebImageRenderer.m:
        (-[WebImageRenderer _startOrContinueAnimationIfNecessary]):
        Remove WebImageView handling.
        
        * WebKit.xcodeproj/project.pbxproj:
        Remove WebImageRepresentation and WebImageView.
        
        * WebView/WebArchiver.h:
        * WebView/WebArchiver.m:
        (+[WebArchiver archiveMainResourceForFrame:]):
        New functions which returns a WebArchive with just the main resource, ignoring any subresources.
        
        * WebView/WebDataSource.m:
        (+[WebDataSource _repTypesAllowImageTypeOmission:]):
        Use MIME types from WebHTMLRepresentation instead of WebImageRepresentation.
        
        * WebView/WebFrameView.m:
        (+[WebFrameView _viewTypesAllowImageTypeOmission:]):
        Use MIME types from WebHTMLRepresentation instead of WebImageRepresentation.
        
        (+[WebHTMLRepresentation supportedMIMETypes]):
        Create an array of image and non-image MIME Types.
        
        (+[WebHTMLRepresentation supportedNonImageMIMETypes]):
        (+[WebHTMLRepresentation supportedImageMIMETypes]):
        New functions, separating the list of MIME types into image and non-image ones.
        
        * WebView/WebHTMLView.m:
        (+[WebHTMLView supportedImageMIMETypes]):
        (+[WebHTMLView supportedNonImageMIMETypes]):
        New functions which call down to WebHTMLRepresentation.
        
        (-[WebHTMLView _startDraggingImage:at:operation:event:sourceIsDHTML:DHTMLWroteData:]):
        If the image element comes from an ImageDocument, just use an archive of the main resource
        instead of the generated HTML document.
        
        * WebView/WebHTMLViewPrivate.h:
        Declare new functions.
        
        * WebView/WebImageRepresentation.h: Removed.
        * WebView/WebImageRepresentation.m: Removed.
        * WebView/WebImageView.h: Removed.
        * WebView/WebImageView.m: Removed.
        
LayoutTests:

2006-05-16  Anders Carlsson  <acarlsson@apple.com>

        Reviewed by Maciej.

        http://bugzilla.opendarwin.org/show_bug.cgi?id=8921
        Use WebCore to render full-frame images.

        * css2.1/t0801-c412-hz-box-00-b-a-expected.txt:
        * dom/xhtml/level2/html/frame-expected.checksum:
        * dom/xhtml/level2/html/frame-expected.png:
        * dom/xhtml/level2/html/frame-expected.txt:
        * dom/xhtml/level2/html/iframe-expected.checksum:
        * dom/xhtml/level2/html/iframe-expected.png:
        * dom/xhtml/level2/html/iframe-expected.txt:
        * tables/mozilla/bugs/bug50695-2-expected.txt:
        Update tests.



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