WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
142026
Adding support for serializing HTMLAttachment elements.
https://bugs.webkit.org/show_bug.cgi?id=142026
Summary
Adding support for serializing HTMLAttachment elements.
Enrica Casucci
Reported
2015-02-25 14:21:10 PST
Adding support to create a WebArchive with the correct resources as well as conversion to NSAttributedString.
Attachments
Patch
(12.32 KB, patch)
2015-02-25 14:29 PST
,
Enrica Casucci
no flags
Details
Formatted Diff
Diff
Patch2
(12.42 KB, patch)
2015-02-26 15:45 PST
,
Enrica Casucci
sam
: review+
Details
Formatted Diff
Diff
Patch2
(10.55 KB, patch)
2015-02-27 11:55 PST
,
Enrica Casucci
thorton
: review+
Details
Formatted Diff
Diff
Show Obsolete
(2)
View All
Add attachment
proposed patch, testcase, etc.
Enrica Casucci
Comment 1
2015-02-25 14:29:07 PST
Created
attachment 247347
[details]
Patch
Tim Horton
Comment 2
2015-02-26 13:08:15 PST
Comment on
attachment 247347
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=247347&action=review
> Source/WebCore/editing/cocoa/HTMLConverter.mm:1968 > + NSURL *url = [NSURL fileURLWithPath:[urlString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
What's up with the trimming? Though, I see the same thing happens below. Why not use _web_URLWithString: like we do below? I think it's better for some reason (other than that it takes a String instead of NSString).
> Source/WebCore/editing/mac/EditorMac.mm:514 > + else
I really don't like flow control that flows between #ifs like this. Maybe it could be written like this instead?: if (subresource->url().protocol() == String("webkit-attachment")) { attachments.append(sub resource); continue; } loader->addArchiveResource(subresource);
> Source/WebCore/editing/mac/EditorMac.mm:524 > + for (size_t i = 0; i < nodes->length(); ++i) {
No modern iterators for NodeList?
> Source/WebCore/editing/mac/EditorMac.mm:525 > + ASSERT(nodes->length() == attachments.size());
I don't think this assert should be *inside* the for loop.
> Source/WebCore/html/HTMLAttachmentElement.h:31 > +#include "File.h"
We can put filePath() in the implementation file to avoid this include.
> Source/WebCore/html/HTMLAttachmentElement.h:33 > +#include "SharedBuffer.h"
A forward declaration of the SharedBuffer type would be preferable.
Enrica Casucci
Comment 3
2015-02-26 15:24:46 PST
> Why not use _web_URLWithString: like we do below? I think it's better for > some reason (other than that it takes a String instead of NSString). >
What I have from the file object is a path and I don't get a URL if I don't use fileWithURLPath.
> > Source/WebCore/editing/mac/EditorMac.mm:514 > > + else > > I really don't like flow control that flows between #ifs like this. Maybe it > could be written like this instead?: > > if (subresource->url().protocol() == String("webkit-attachment")) { > attachments.append(sub resource); > continue; > } > > loader->addArchiveResource(subresource); >
You're right, much better.
> > Source/WebCore/editing/mac/EditorMac.mm:524 > > + for (size_t i = 0; i < nodes->length(); ++i) { > > No modern iterators for NodeList? > > > Source/WebCore/editing/mac/EditorMac.mm:525 > > + ASSERT(nodes->length() == attachments.size()); > > I don't think this assert should be *inside* the for loop. > > > Source/WebCore/html/HTMLAttachmentElement.h:31 > > +#include "File.h" > > We can put filePath() in the implementation file to avoid this include. > > > Source/WebCore/html/HTMLAttachmentElement.h:33 > > +#include "SharedBuffer.h" > > A forward declaration of the SharedBuffer type would be preferable.
Will do
Enrica Casucci
Comment 4
2015-02-26 15:29:03 PST
> > Source/WebCore/editing/mac/EditorMac.mm:524 > > + for (size_t i = 0; i < nodes->length(); ++i) { > > No modern iterators for NodeList? >
No, NodeList does not have an iterator.
Enrica Casucci
Comment 5
2015-02-26 15:45:14 PST
Created
attachment 247454
[details]
Patch2
Sam Weinig
Comment 6
2015-02-26 16:47:20 PST
Comment on
attachment 247454
[details]
Patch2 View in context:
https://bugs.webkit.org/attachment.cgi?id=247454&action=review
As discussed, let's do this with an attribute instead of an archive resource for now.
> Source/WebCore/editing/cocoa/HTMLConverter.mm:1967 > + NSString *urlString = downcast<HTMLAttachmentElement>(element).filePath();
I don't think you need the filePath function. Instead, you can just do, file().path().
> Source/WebCore/editing/cocoa/HTMLConverter.mm:1968 > + NSURL *url = [NSURL fileURLWithPath:[urlString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]];
I don't think you need the trimming here. It is necessary for other types because they are getting the path from an attribute which is user supplied.
> Source/WebCore/editing/mac/EditorMac.mm:507 > +#if ENABLE(ATTACHMENT_ELEMENT) > + Vector<RefPtr<ArchiveResource>> attachments; > +#endif
Please add a comment (not necessarily here), about why you need this extra logic.
> Source/WebCore/editing/mac/EditorMac.mm:512 > + if (subresource->url().protocol() == String("webkit-attachment")) {
You can use url().protocolIs("webkit-attachment").
> Source/WebCore/editing/mac/EditorMac.mm:527 > + HTMLAttachmentElement& element = downcast<HTMLAttachmentElement>(*nodes->item(i));
This downcast is not safe. You need to do an is<HTMLAttachmentElement>(*nodes->item(i)) first.
> Source/WebCore/editing/mac/EditorMac.mm:528 > + element.setFile(&File::create(String(attachments[i]->data()->data(), attachments[i]->data()->size())).get());
Instead of .get(), you can do .ptr(), then you don't need the &.
> Source/WebCore/html/HTMLAttachmentElement.cpp:74 > + if (file) > + m_dataBuffer = SharedBuffer::create(m_file->path().characters8(), m_file->path().length()); > + else > + m_dataBuffer = nullptr;
This can be created lazily when the buffer is necessary.
> Source/WebCore/html/HTMLAttachmentElement.cpp:80 > +const String HTMLAttachmentElement::filePath() > +{ > + return m_file ? m_file->path() : String(); > }
I don't think this helper is useful. Just have the caller grab the file.
> Source/WebCore/html/HTMLAttachmentElement.cpp:102 > + addSubresourceURL(urls, resourceURL());
I don't think this called frequently enough to warrant caching the resource URL. Let's just create it here, and instead of using a UUID, just use the path as the path.
Enrica Casucci
Comment 7
2015-02-27 11:55:35 PST
Created
attachment 247533
[details]
Patch2 Following different approach as discussed with Sam.
Tim Horton
Comment 8
2015-02-27 14:56:10 PST
Comment on
attachment 247533
[details]
Patch2 View in context:
https://bugs.webkit.org/attachment.cgi?id=247533&action=review
> Source/WebCore/html/HTMLAttachmentElement.h:40 > + virtual bool canContainRangeEndPoint() const override { return false; }
I don't think this is actually part of this patch?
> LayoutTests/editing/pasteboard/copy-paste-attachment.html:5 > +<!--<script type="text/javascript" src="../../resources/dump-as-markup.js"></script>-->
Let's not have random commented out stuff here.
Enrica Casucci
Comment 9
2015-02-27 15:08:29 PST
(In reply to
comment #8
)
> Comment on
attachment 247533
[details]
> Patch2 > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=247533&action=review
> > > Source/WebCore/html/HTMLAttachmentElement.h:40 > > + virtual bool canContainRangeEndPoint() const override { return false; } > > I don't think this is actually part of this patch? >
Yes it is, it is the change to fix the selection.
> > LayoutTests/editing/pasteboard/copy-paste-attachment.html:5 > > +<!--<script type="text/javascript" src="../../resources/dump-as-markup.js"></script>--> > > Let's not have random commented out stuff here.
Oops!
Enrica Casucci
Comment 10
2015-02-27 15:08:39 PST
Committed revision 180785.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug