SandboxExtension.h revision 65f03d4f644ce73618e5f4f50dd694b26f55ae12
1/*
2 * Copyright (C) 2010 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#ifndef SandboxExtension_h
27#define SandboxExtension_h
28
29#include <wtf/Forward.h>
30#include <wtf/Noncopyable.h>
31#include <wtf/PassRefPtr.h>
32#include <wtf/RefCounted.h>
33#include <wtf/text/WTFString.h>
34
35#if ENABLE(WEB_PROCESS_SANDBOX)
36typedef struct __WKSandboxExtension* WKSandboxExtensionRef;
37#endif
38
39namespace CoreIPC {
40    class ArgumentEncoder;
41    class ArgumentDecoder;
42}
43
44namespace WebKit {
45
46class SandboxExtension : public RefCounted<SandboxExtension> {
47public:
48    enum Type {
49        ReadOnly,
50        WriteOnly,
51        ReadWrite,
52    };
53
54    class Handle {
55        WTF_MAKE_NONCOPYABLE(Handle);
56
57    public:
58        Handle();
59        ~Handle();
60
61        void encode(CoreIPC::ArgumentEncoder*) const;
62        static bool decode(CoreIPC::ArgumentDecoder*, Handle&);
63
64    private:
65        friend class SandboxExtension;
66#if ENABLE(WEB_PROCESS_SANDBOX)
67        mutable WKSandboxExtensionRef m_sandboxExtension;
68#endif
69    };
70
71    static PassRefPtr<SandboxExtension> create(const Handle&);
72    static void createHandle(const String& path, Type type, Handle&);
73    static String createHandleForTemporaryFile(const String& prefix, Type type, Handle&);
74    ~SandboxExtension();
75
76    bool invalidate();
77    bool consume();
78    bool consumePermanently();
79
80private:
81    explicit SandboxExtension(const Handle&);
82
83#if ENABLE(WEB_PROCESS_SANDBOX)
84    mutable WKSandboxExtensionRef m_sandboxExtension;
85#endif
86};
87
88#if !ENABLE(WEB_PROCESS_SANDBOX)
89inline SandboxExtension::Handle::Handle() { }
90inline SandboxExtension::Handle::~Handle() { }
91inline void SandboxExtension::Handle::encode(CoreIPC::ArgumentEncoder*) const { }
92inline bool SandboxExtension::Handle::decode(CoreIPC::ArgumentDecoder*, Handle&) { return true; }
93inline PassRefPtr<SandboxExtension> SandboxExtension::create(const Handle&) { return 0; }
94inline void SandboxExtension::createHandle(const String& path, Type type, Handle&) { }
95inline String SandboxExtension::createHandleForTemporaryFile(const String& prefix, Type type, Handle&) {return String();}
96inline SandboxExtension::~SandboxExtension() { }
97inline bool SandboxExtension::invalidate() { return true; }
98inline bool SandboxExtension::consume() { return true; }
99inline bool SandboxExtension::consumePermanently() { return true; }
100#endif
101
102} // namespace WebKit
103
104
105#endif // SandboxExtension_h
106