1 /* 2 * Copyright (C) 2010 Google 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 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 16 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 18 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 19 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 20 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef Dictionary_h 27 #define Dictionary_h 28 29 #include "bindings/v8/ScriptValue.h" 30 #include "core/dom/EventListener.h" 31 #include "core/dom/MessagePort.h" 32 #include <v8.h> 33 #include "wtf/HashMap.h" 34 #include "wtf/HashSet.h" 35 #include "wtf/Vector.h" 36 #include "wtf/text/AtomicString.h" 37 #include "wtf/text/WTFString.h" 38 39 namespace WebCore { 40 41 class ArrayValue; 42 class CSSFontFaceRule; 43 class DOMError; 44 class DOMWindow; 45 class IDBKeyRange; 46 class MIDIPort; 47 class MediaKeyError; 48 class Notification; 49 class SpeechRecognitionError; 50 class SpeechRecognitionResult; 51 class SpeechRecognitionResultList; 52 class Storage; 53 class TrackBase; 54 class VoidCallback; 55 56 class Dictionary { 57 public: 58 Dictionary(); 59 Dictionary(const v8::Local<v8::Value>& options, v8::Isolate*); 60 ~Dictionary(); 61 62 Dictionary& operator=(const Dictionary&); 63 64 bool isObject() const; 65 bool isUndefinedOrNull() const; 66 67 bool get(const String&, bool&) const; 68 bool get(const String&, int32_t&) const; 69 bool get(const String&, double&) const; 70 bool get(const String&, String&) const; 71 bool get(const String&, ScriptValue&) const; 72 bool get(const String&, short&) const; 73 bool get(const String&, unsigned short&) const; 74 bool get(const String&, unsigned&) const; 75 bool get(const String&, unsigned long&) const; 76 bool get(const String&, unsigned long long&) const; 77 bool get(const String&, RefPtr<DOMWindow>&) const; 78 bool get(const String&, RefPtr<Storage>&) const; 79 bool get(const String&, MessagePortArray&) const; 80 bool get(const String&, RefPtr<Uint8Array>&) const; 81 bool get(const String&, RefPtr<ArrayBufferView>&) const; 82 bool get(const String&, RefPtr<MIDIPort>&) const; 83 bool get(const String&, RefPtr<MediaKeyError>&) const; 84 bool get(const String&, RefPtr<TrackBase>&) const; 85 bool get(const String&, RefPtr<SpeechRecognitionError>&) const; 86 bool get(const String&, RefPtr<SpeechRecognitionResult>&) const; 87 bool get(const String&, RefPtr<SpeechRecognitionResultList>&) const; 88 bool get(const String&, RefPtr<MediaStream>&) const; 89 bool get(const String&, RefPtr<EventTarget>&) const; 90 bool get(const String&, HashSet<AtomicString>&) const; 91 bool get(const String&, Dictionary&) const; 92 bool get(const String&, Vector<String>&) const; 93 bool get(const String&, ArrayValue&) const; 94 bool get(const String&, RefPtr<CSSFontFaceRule>&) const; 95 bool get(const String&, RefPtr<DOMError>&) const; 96 bool get(const String&, RefPtr<VoidCallback>&) const; 97 bool get(const String&, v8::Local<v8::Value>&) const; 98 99 bool getOwnPropertiesAsStringHashMap(HashMap<String, String>&) const; 100 bool getOwnPropertyNames(Vector<String>&) const; 101 102 bool getWithUndefinedOrNullCheck(const String&, String&) const; 103 104 PassRefPtr<EventListener> getEventListener(const String&, Notification*) const { return 0; } 105 106 private: 107 bool getKey(const String& key, v8::Local<v8::Value>&) const; 108 109 // This object can only be used safely when stack allocated because of v8::Local. 110 static void* operator new(size_t); 111 static void* operator new[](size_t); 112 static void operator delete(void *); 113 114 v8::Local<v8::Value> m_options; 115 v8::Isolate* m_isolate; 116 }; 117 118 } 119 120 #endif // Dictionary_h 121