Changeset 222119 in webkit


Ignore:
Timestamp:
Sep 15, 2017 4:59:35 PM (7 years ago)
Author:
rniwa@webkit.org
Message:

iOS: Use blob URL instead of a WebKit fake URL when pasting an image
https://bugs.webkit.org/show_bug.cgi?id=176986
<rdar://problem/34455052>

Reviewed by Wenson Hsieh.

Source/WebCore:

Fixed the bug that pasting an image on iOS resulted in an img element with src attribute
set to a WebKit fake URL so that the Web content could never save it.

Like r208451 on Mac, use a Blob URL instead.

This patch also removes createFragmentForImageResourceAndAddResource since it's no longer used.

Tests: LayoutTests/editing/pasteboard/paste-image-as-blob-url.html

  • editing/cocoa/WebContentReaderCocoa.mm:

(WebCore::WebContentReader::readImage): Moved the code here from WebContentReaderMac.mm.

  • editing/ios/WebContentReaderIOS.mm:

(WebCore::WebContentReader::readImage): Deleted. This is the code

  • editing/mac/WebContentReaderMac.mm:

(WebCore::WebContentReader::readImage): Moved to WebContentReaderCocoa.mm. Note that
typeAsFilenameWithExtension was dead code after r208451

  • editing/markup.cpp:

(WebCore::createFragmentForImageResourceAndAddResource): Deleted.

  • editing/markup.h:

LayoutTests:

Removed the failing expectation on the test added by r208451 now that it passes on iOS.

  • platform/ios/TestExpectations:
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r222117 r222119  
     12017-09-15  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        iOS: Use blob URL instead of a WebKit fake URL when pasting an image
     4        https://bugs.webkit.org/show_bug.cgi?id=176986
     5        <rdar://problem/34455052>
     6
     7        Reviewed by Wenson Hsieh.
     8
     9        Removed the failing expectation on the test added by r208451 now that it passes on iOS.
     10
     11        * platform/ios/TestExpectations:
     12
    1132017-09-15  Ryan Haddad  <ryanhaddad@apple.com>
    214
  • trunk/LayoutTests/platform/ios/TestExpectations

    r222100 r222119  
    22592259editing/pasteboard/paste-blockquote-3.html [ Failure ]
    22602260editing/pasteboard/paste-global-selection.html [ Failure ]
    2261 editing/pasteboard/paste-image-as-blob-url.html [ Failure ]
    22622261editing/pasteboard/paste-list-004.html [ Failure ]
    22632262editing/pasteboard/paste-placeholder-input.html [ Failure ]
  • trunk/Source/WebCore/ChangeLog

    r222114 r222119  
     12017-09-15  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        iOS: Use blob URL instead of a WebKit fake URL when pasting an image
     4        https://bugs.webkit.org/show_bug.cgi?id=176986
     5        <rdar://problem/34455052>
     6
     7        Reviewed by Wenson Hsieh.
     8
     9        Fixed the bug that pasting an image on iOS resulted in an img element with src attribute
     10        set to a WebKit fake URL so that the Web content could never save it.
     11
     12        Like r208451 on Mac, use a Blob URL instead.
     13
     14        This patch also removes createFragmentForImageResourceAndAddResource since it's no longer used.
     15
     16        Tests: LayoutTests/editing/pasteboard/paste-image-as-blob-url.html
     17
     18        * editing/cocoa/WebContentReaderCocoa.mm:
     19        (WebCore::WebContentReader::readImage): Moved the code here from WebContentReaderMac.mm.
     20        * editing/ios/WebContentReaderIOS.mm:
     21        (WebCore::WebContentReader::readImage): Deleted. This is the code
     22        * editing/mac/WebContentReaderMac.mm:
     23        (WebCore::WebContentReader::readImage): Moved to WebContentReaderCocoa.mm. Note that
     24        typeAsFilenameWithExtension was dead code after r208451
     25        * editing/markup.cpp:
     26        (WebCore::createFragmentForImageResourceAndAddResource): Deleted.
     27        * editing/markup.h:
     28
    1292017-09-15  Wenson Hsieh  <wenson_hsieh@apple.com>
    230
  • trunk/Source/WebCore/editing/cocoa/WebContentReaderCocoa.mm

    r222062 r222119  
    2828
    2929#include "ArchiveResource.h"
     30#include "Blob.h"
    3031#include "CachedResourceLoader.h"
     32#include "DOMURL.h"
    3133#include "Document.h"
    3234#include "DocumentFragment.h"
     
    167169}
    168170
     171bool WebContentReader::readImage(Ref<SharedBuffer>&& buffer, const String& type)
     172{
     173    Vector<uint8_t> data;
     174    data.append(buffer->data(), buffer->size());
     175    auto blob = Blob::create(WTFMove(data), type);
     176    ASSERT(frame.document());
     177    auto& document = *frame.document();
     178    String blobURL = DOMURL::createObjectURL(document, blob);
     179    addFragment(createFragmentForImageAndURL(document, blobURL));
     180    return true;
    169181}
     182
     183}
  • trunk/Source/WebCore/editing/ios/WebContentReaderIOS.mm

    r222062 r222119  
    2828
    2929#import "ArchiveResource.h"
    30 #import "DOMURL.h"
    3130#import "Document.h"
    3231#import "DocumentFragment.h"
     
    6362}
    6463
    65 bool WebContentReader::readImage(Ref<SharedBuffer>&& buffer, const String& type)
    66 {
    67     RetainPtr<CFStringRef> stringType = type.createCFString();
    68     RetainPtr<NSString> filenameExtension = adoptNS((NSString *)UTTypeCopyPreferredTagWithClass(stringType.get(), kUTTagClassFilenameExtension));
    69     NSString *relativeURLPart = [@"image" stringByAppendingString:filenameExtension.get()];
    70     String mimeType = MIMETypeFromUTI(type);
    71 
    72     // FIXME: Use a blob URL instead.
    73     auto archive = ArchiveResource::create(WTFMove(buffer), URL::fakeURLWithRelativePart(relativeURLPart), mimeType, emptyString(), emptyString());
    74     ASSERT(archive);
    75     auto fragment = createFragmentForImageResourceAndAddResource(frame, *archive);
    76     if (!fragment)
    77         return false;
    78     addFragment(fragment.releaseNonNull());
    79     return true;
    80 }
    81 
    8264bool WebContentReader::readURL(const URL& url, const String& title)
    8365{
  • trunk/Source/WebCore/editing/mac/WebContentReaderMac.mm

    r222062 r222119  
    2828
    2929#import "ArchiveResource.h"
    30 #import "DOMURL.h"
    3130#import "Document.h"
    3231#import "DocumentFragment.h"
     
    101100}
    102101
    103 bool WebContentReader::readImage(Ref<SharedBuffer>&& buffer, const String& type)
    104 {
    105     ASSERT(type.contains('/'));
    106     String typeAsFilenameWithExtension = type;
    107     typeAsFilenameWithExtension.replace('/', '.');
    108 
    109     Vector<uint8_t> data;
    110     data.append(buffer->data(), buffer->size());
    111     auto blob = Blob::create(WTFMove(data), type);
    112     ASSERT(frame.document());
    113     Document& document = *frame.document();
    114     String blobURL = DOMURL::createObjectURL(document, blob);
    115 
    116     fragment = createFragmentForImageAndURL(document, blobURL);
    117     return fragment;
    118 }
    119 
    120102bool WebContentReader::readURL(const URL& url, const String& title)
    121103{
  • trunk/Source/WebCore/editing/markup.cpp

    r221960 r222119  
    934934}
    935935
    936 RefPtr<DocumentFragment> createFragmentForImageResourceAndAddResource(Frame& frame, Ref<ArchiveResource>&& resource)
    937 {
    938     if (!frame.document())
    939         return nullptr;
    940 
    941     Ref<Document> document = *frame.document();
    942     String resourceURL = resource->url().string();
    943 
    944     if (DocumentLoader* loader = frame.loader().documentLoader())
    945         loader->addArchiveResource(WTFMove(resource));
    946 
    947     auto imageElement = HTMLImageElement::create(document.get());
    948     imageElement->setAttributeWithoutSynchronization(HTMLNames::srcAttr, resourceURL);
    949 
    950     auto fragment = document->createDocumentFragment();
    951     fragment->appendChild(imageElement);
    952 
    953     return WTFMove(fragment);
    954 }
    955 
    956936static Vector<Ref<HTMLElement>> collectElementsToRemoveFromFragment(ContainerNode& container)
    957937{
  • trunk/Source/WebCore/editing/markup.h

    r222113 r222119  
    5454RefPtr<DocumentFragment> createFragmentForTransformToFragment(Document&, const String& sourceString, const String& sourceMIMEType);
    5555Ref<DocumentFragment> createFragmentForImageAndURL(Document&, const String&);
    56 RefPtr<DocumentFragment> createFragmentForImageResourceAndAddResource(Frame&, Ref<ArchiveResource>&&);
    5756ExceptionOr<Ref<DocumentFragment>> createContextualFragment(Element&, const String& markup, ParserContentPolicy);
    5857
Note: See TracChangeset for help on using the changeset viewer.