18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
38f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
48f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2009 Google Inc. All rights reserved.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1.  Redistributions of source code must retain the above copyright
118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *     notice, this list of conditions and the following disclaimer.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2.  Redistributions in binary form must reproduce the above copyright
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     notice, this list of conditions and the following disclaimer in the
148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *     documentation and/or other materials provided with the distribution.
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     its contributors may be used to endorse or promote products derived
178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian *     from this software without specific prior written permission.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#ifndef InspectorDOMStorageResource_h
328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#define InspectorDOMStorageResource_h
338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(DOM_STORAGE)
358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "EventListener.h"
3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "InspectorFrontend.h"
388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/PassRefPtr.h>
408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/RefCounted.h>
418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/RefPtr.h>
428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
438f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace WebCore {
448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    class Storage;
468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    class Frame;
47e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block    class InspectorFrontend;
488f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    class InspectorDOMStorageResource : public EventListener {
508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    public:
518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        static PassRefPtr<InspectorDOMStorageResource> create(Storage* domStorage, bool isLocalStorage, Frame* frame)
528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        {
538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian            return adoptRef(new InspectorDOMStorageResource(domStorage, isLocalStorage, frame));
548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        }
552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        static const InspectorDOMStorageResource* cast(const EventListener* listener)
57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        {
58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            return listener->type() == InspectorDOMStorageResourceType ? static_cast<const InspectorDOMStorageResource*>(listener) : 0;
59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        }
608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
61e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block        void bind(InspectorFrontend* frontend);
628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        void unbind();
63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        void startReportingChangesToFrontend();
64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
65231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual void handleEvent(ScriptExecutionContext*, Event*);
66231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        virtual bool operator==(const EventListener& listener);
678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        bool isSameHostAndType(Frame*, bool isLocalStorage) const;
692bde8e466a4451c7319e3a072d118917957d6554Steve Block        int id() const { return m_id; }
70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        Storage* domStorage() const { return m_domStorage.get(); }
718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    private:
738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        InspectorDOMStorageResource(Storage*, bool isLocalStorage, Frame*);
758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        RefPtr<Storage> m_domStorage;
778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        bool m_isLocalStorage;
788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        RefPtr<Frame> m_frame;
7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        InspectorFrontend::DOMStorage* m_frontend;
802bde8e466a4451c7319e3a072d118917957d6554Steve Block        int m_id;
81231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        bool m_reportingChangesToFrontend;
828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
832bde8e466a4451c7319e3a072d118917957d6554Steve Block        static int s_nextUnusedId;
84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    };
85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} // namespace WebCore
878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif
898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif // InspectorDOMStorageResource_h
91