~mmach/netext73/webkit2gtk

« back to all changes in this revision

Viewing changes to Source/WebCore/platform/PreviewConverter.h

  • Committer: mmach
  • Date: 2023-06-16 17:21:37 UTC
  • Revision ID: netbit73@gmail.com-20230616172137-2rqx6yr96ga9g3kp
1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (C) 2017-2019 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
#pragma once
 
27
 
 
28
#if ENABLE(PREVIEW_CONVERTER)
 
29
 
 
30
#include "ResourceError.h"
 
31
#include "ResourceResponse.h"
 
32
#include <wtf/RefCounted.h>
 
33
#include <wtf/RetainPtr.h>
 
34
#include <wtf/WeakPtr.h>
 
35
#include <wtf/text/WTFString.h>
 
36
 
 
37
OBJC_CLASS QLPreviewConverter;
 
38
OBJC_CLASS WebPreviewConverterDelegate;
 
39
 
 
40
namespace WebCore {
 
41
 
 
42
class ResourceError;
 
43
class ResourceRequest;
 
44
class SharedBuffer;
 
45
class SharedBufferDataView;
 
46
struct PreviewConverterClient;
 
47
struct PreviewConverterProvider;
 
48
 
 
49
struct PreviewPlatformDelegate : CanMakeWeakPtr<PreviewPlatformDelegate> {
 
50
    virtual ~PreviewPlatformDelegate() = default;
 
51
 
 
52
    virtual void delegateDidReceiveData(const SharedBuffer&) = 0;
 
53
    virtual void delegateDidFinishLoading() = 0;
 
54
    virtual void delegateDidFailWithError(const ResourceError&) = 0;
 
55
};
 
56
 
 
57
class PreviewConverter final : private PreviewPlatformDelegate, public RefCounted<PreviewConverter> {
 
58
    WTF_MAKE_FAST_ALLOCATED;
 
59
    WTF_MAKE_NONCOPYABLE(PreviewConverter);
 
60
public:
 
61
    static Ref<PreviewConverter> create(const ResourceResponse& response, PreviewConverterProvider& provider)
 
62
    {
 
63
        return adoptRef(*new PreviewConverter(response, provider));
 
64
    }
 
65
 
 
66
    WEBCORE_EXPORT static bool supportsMIMEType(const String& mimeType);
 
67
 
 
68
    ~PreviewConverter();
 
69
 
 
70
    ResourceRequest safeRequest(const ResourceRequest&) const;
 
71
    ResourceResponse previewResponse() const;
 
72
    WEBCORE_EXPORT String previewFileName() const;
 
73
    WEBCORE_EXPORT String previewUTI() const;
 
74
    const ResourceError& previewError() const;
 
75
    const SharedBuffer& previewData() const;
 
76
 
 
77
    void failedUpdating();
 
78
    void finishUpdating();
 
79
    void updateMainResource();
 
80
 
 
81
    bool hasClient(PreviewConverterClient&) const;
 
82
    void addClient(PreviewConverterClient&);
 
83
    void removeClient(PreviewConverterClient&);
 
84
 
 
85
    WEBCORE_EXPORT static const String& passwordForTesting();
 
86
    WEBCORE_EXPORT static void setPasswordForTesting(const String&);
 
87
 
 
88
private:
 
89
    static HashSet<String, ASCIICaseInsensitiveHash> platformSupportedMIMETypes();
 
90
 
 
91
    PreviewConverter(const ResourceResponse&, PreviewConverterProvider&);
 
92
 
 
93
    ResourceResponse platformPreviewResponse() const;
 
94
    bool isPlatformPasswordError(const ResourceError&) const;
 
95
 
 
96
    template<typename T> void iterateClients(T&& callback);
 
97
    void appendFromBuffer(const SharedBuffer&);
 
98
    void didAddClient(PreviewConverterClient&);
 
99
    void didFailConvertingWithError(const ResourceError&);
 
100
    void didFailUpdating();
 
101
    void replayToClient(PreviewConverterClient&);
 
102
 
 
103
    void platformAppend(const SharedBufferDataView&);
 
104
    void platformFailedAppending();
 
105
    void platformFinishedAppending();
 
106
    void platformUnlockWithPassword(const String&);
 
107
 
 
108
    // PreviewPlatformDelegate
 
109
    void delegateDidReceiveData(const SharedBuffer&) final;
 
110
    void delegateDidFinishLoading() final;
 
111
    void delegateDidFailWithError(const ResourceError&) final;
 
112
 
 
113
    enum class State : uint8_t {
 
114
        Updating,
 
115
        FailedUpdating,
 
116
        Converting,
 
117
        FailedConverting,
 
118
        FinishedConverting,
 
119
    };
 
120
 
 
121
    Ref<SharedBuffer> m_previewData;
 
122
    ResourceError m_previewError;
 
123
    ResourceResponse m_originalResponse;
 
124
    State m_state { State::Updating };
 
125
    Vector<WeakPtr<PreviewConverterClient>, 1> m_clients;
 
126
    WeakPtr<PreviewConverterProvider> m_provider;
 
127
    bool m_isInClientCallback { false };
 
128
    size_t m_lengthAppended { 0 };
 
129
 
 
130
#if USE(QUICK_LOOK)
 
131
    RetainPtr<WebPreviewConverterDelegate> m_platformDelegate;
 
132
    RetainPtr<QLPreviewConverter> m_platformConverter;
 
133
#endif
 
134
};
 
135
 
 
136
} // namespace WebCore
 
137
 
 
138
#endif // ENABLE(PREVIEW_CONVERTER)