1/* 2 * Copyright (C) 2011, 2012 University of Washington. All rights reserved. 3 * Copyright (C) 2014 Apple Inc. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 16 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 18 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28#ifndef NondeterministicInput_h 29#define NondeterministicInput_h 30 31#if ENABLE(WEB_REPLAY) 32 33#include <wtf/Forward.h> 34#include <wtf/Noncopyable.h> 35 36namespace JSC { 37 38class EncodedValue; 39 40enum class InputQueue { 41 ScriptMemoizedData = 0, 42 LoaderMemoizedData = 1, 43 EventLoopInput = 2, 44 Count = 3 45}; 46 47template<typename InputType> 48struct JS_EXPORT_PRIVATE InputTraits { 49 static InputQueue queue(); 50 static AtomicString& type(); 51 52 static void encode(EncodedValue& encodedInput, InputType& decodedInput); 53 static bool decode(EncodedValue& encodedInput, std::unique_ptr<InputType>& decodedInput); 54}; 55 56class NondeterministicInputBase { 57 WTF_MAKE_NONCOPYABLE(NondeterministicInputBase); 58public: 59 NondeterministicInputBase() { } 60 virtual ~NondeterministicInputBase() { } 61 62 virtual const AtomicString& type() const = 0; 63 virtual InputQueue queue() const = 0; 64}; 65 66template<typename InputType> 67class NondeterministicInput : public NondeterministicInputBase { 68 virtual const AtomicString& type() const override 69 { 70 return InputTraits<InputType>::type(); 71 } 72 73 virtual InputQueue queue() const override 74 { 75 return InputTraits<InputType>::queue(); 76 } 77}; 78 79} // namespace JSC 80 81using JSC::InputQueue; 82using JSC::InputTraits; 83using JSC::NondeterministicInput; 84using JSC::NondeterministicInputBase; 85 86#endif // ENABLE(WEB_REPLAY) 87 88#endif // NondeterministicInput_h 89