1/*
2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
4 * Copyright (C) 2009 Google Inc. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1.  Redistributions of source code must retain the above copyright
11 *     notice, this list of conditions and the following disclaimer.
12 * 2.  Redistributions in binary form must reproduce the above copyright
13 *     notice, this list of conditions and the following disclaimer in the
14 *     documentation and/or other materials provided with the distribution.
15 * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
16 *     its contributors may be used to endorse or promote products derived
17 *     from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef InspectorDOMStorageResource_h
32#define InspectorDOMStorageResource_h
33
34#if ENABLE(DOM_STORAGE)
35
36#include "EventListener.h"
37#include "InspectorFrontend.h"
38
39#include <wtf/PassRefPtr.h>
40#include <wtf/RefCounted.h>
41#include <wtf/RefPtr.h>
42
43namespace WebCore {
44
45    class Storage;
46    class Frame;
47    class InspectorFrontend;
48
49    class InspectorDOMStorageResource : public EventListener {
50    public:
51        static PassRefPtr<InspectorDOMStorageResource> create(Storage* domStorage, bool isLocalStorage, Frame* frame)
52        {
53            return adoptRef(new InspectorDOMStorageResource(domStorage, isLocalStorage, frame));
54        }
55
56        static const InspectorDOMStorageResource* cast(const EventListener* listener)
57        {
58            return listener->type() == InspectorDOMStorageResourceType ? static_cast<const InspectorDOMStorageResource*>(listener) : 0;
59        }
60
61        void bind(InspectorFrontend* frontend);
62        void unbind();
63        void startReportingChangesToFrontend();
64
65        virtual void handleEvent(ScriptExecutionContext*, Event*);
66        virtual bool operator==(const EventListener& listener);
67
68        bool isSameHostAndType(Frame*, bool isLocalStorage) const;
69        int id() const { return m_id; }
70        Storage* domStorage() const { return m_domStorage.get(); }
71
72    private:
73
74        InspectorDOMStorageResource(Storage*, bool isLocalStorage, Frame*);
75
76        RefPtr<Storage> m_domStorage;
77        bool m_isLocalStorage;
78        RefPtr<Frame> m_frame;
79        InspectorFrontend::DOMStorage* m_frontend;
80        int m_id;
81        bool m_reportingChangesToFrontend;
82
83        static int s_nextUnusedId;
84    };
85
86} // namespace WebCore
87
88#endif
89
90#endif // InspectorDOMStorageResource_h
91