073a44ce4486cafd62e25cbde8e9fbc93bcc7f46
[WebKit-https.git] / Source / WebKit / UIProcess / API / APIAttachment.cpp
1 /*
2  * Copyright (C) 2017 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "APIAttachment.h"
28
29 #if ENABLE(ATTACHMENT_ELEMENT)
30
31 #include <WebCore/AttachmentTypes.h>
32 #include <WebCore/SharedBuffer.h>
33 #include <wtf/text/WTFString.h>
34
35 namespace API {
36
37 Ref<Attachment> Attachment::create(const WTF::String& identifier, WebKit::WebPageProxy& webPage)
38 {
39     return adoptRef(*new Attachment(identifier, webPage));
40 }
41
42 Attachment::Attachment(const WTF::String& identifier, WebKit::WebPageProxy& webPage)
43     : m_identifier(identifier)
44     , m_webPage(makeWeakPtr(webPage))
45 {
46 }
47
48 Attachment::~Attachment()
49 {
50 }
51
52 void Attachment::setDisplayOptions(WebCore::AttachmentDisplayOptions options, Function<void(WebKit::CallbackBase::Error)>&& callback)
53 {
54     if (m_webPage)
55         m_webPage->setAttachmentDisplayOptions(m_identifier, options, WTFMove(callback));
56     else
57         callback(WebKit::CallbackBase::Error::OwnerWasInvalidated);
58 }
59
60 void Attachment::updateAttributes(Function<void(WebKit::CallbackBase::Error)>&& callback)
61 {
62     if (!m_webPage) {
63         callback(WebKit::CallbackBase::Error::OwnerWasInvalidated);
64         return;
65     }
66
67     m_webPage->updateAttachmentAttributes(*this, WTFMove(callback));
68 }
69
70 void Attachment::invalidate()
71 {
72     m_identifier = { };
73     m_filePath = { };
74     m_contentType = { };
75     m_webPage.clear();
76 #if PLATFORM(COCOA)
77     m_fileWrapper.clear();
78 #endif
79 }
80
81 #if !PLATFORM(COCOA)
82
83 WTF::String Attachment::mimeType() const
84 {
85     return m_contentType;
86 }
87
88 WTF::String Attachment::fileName() const
89 {
90     return { };
91 }
92
93 std::optional<uint64_t> Attachment::fileSizeForDisplay() const
94 {
95     return std::nullopt;
96 }
97
98 #endif // !PLATFORM(COCOA)
99
100 }
101
102 #endif // ENABLE(ATTACHMENT_ELEMENT)