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 39namespace WebCore { 40 41class ArrayValue; 42class CSSFontFaceRule; 43class DOMError; 44class DOMWindow; 45class IDBKeyRange; 46class MIDIPort; 47class MediaKeyError; 48class Notification; 49class SpeechRecognitionError; 50class SpeechRecognitionResult; 51class SpeechRecognitionResultList; 52class Storage; 53class TrackBase; 54class VoidCallback; 55 56class Dictionary { 57public: 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 106private: 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