Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / storage / StorageArea.h
index 00114d5..c68f8e8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2008 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2009 Google Inc. All Rights Reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
  *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GOOGLE INC. OR
  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 #ifndef StorageArea_h
 #define StorageArea_h
 
-#include "wtf/Forward.h"
+#include "heap/Handle.h"
+#include "wtf/OwnPtr.h"
+#include "wtf/PassOwnPtr.h"
 #include "wtf/text/WTFString.h"
 
+namespace blink {
+class WebStorageArea;
+class WebStorageNamespace;
+}
+
 namespace WebCore {
 
 class ExceptionState;
 class Frame;
+class KURL;
+class Page;
 class SecurityOrigin;
-class StorageSyncManager;
-enum StorageType { LocalStorage, SessionStorage };
+class Storage;
+
+enum StorageType {
+    LocalStorage,
+    SessionStorage
+};
 
-class StorageArea {
+class StorageArea : public NoBaseWillBeGarbageCollectedFinalized<StorageArea> {
+    DECLARE_GC_INFO;
 public:
-    virtual ~StorageArea() { }
+    StorageArea(PassOwnPtr<blink::WebStorageArea>, StorageType);
+    virtual ~StorageArea();
 
     // The HTML5 DOM Storage API
-    // FIXME: We should pass Document instead of Frame. Also, that parameter should go first.
-    virtual unsigned length(ExceptionState&, Frame* sourceFrame) = 0;
-    virtual String key(unsigned index, ExceptionState&, Frame* sourceFrame) = 0;
-    virtual String getItem(const String& key, ExceptionState&, Frame* sourceFrame) = 0;
-    virtual void setItem(const String& key, const String& value, ExceptionState&, Frame* sourceFrame) = 0;
-    virtual void removeItem(const String& key, ExceptionState&, Frame* sourceFrame) = 0;
-    virtual void clear(ExceptionState&, Frame* sourceFrame) = 0;
-    virtual bool contains(const String& key, ExceptionState&, Frame* sourceFrame) = 0;
-
-    virtual bool canAccessStorage(Frame*) = 0;
-
-    virtual size_t memoryBytesUsedByCache() = 0;
+    unsigned length(ExceptionState&, Frame* sourceFrame);
+    String key(unsigned index, ExceptionState&, Frame* sourceFrame);
+    String getItem(const String& key, ExceptionState&, Frame* sourceFrame);
+    void setItem(const String& key, const String& value, ExceptionState&, Frame* sourceFrame);
+    void removeItem(const String& key, ExceptionState&, Frame* sourceFrame);
+    void clear(ExceptionState&, Frame* sourceFrame);
+    bool contains(const String& key, ExceptionState&, Frame* sourceFrame);
+
+    bool canAccessStorage(Frame*);
+    size_t memoryBytesUsedByCache();
+
+    static void dispatchLocalStorageEvent(const String& key, const String& oldValue, const String& newValue,
+        SecurityOrigin*, const KURL& pageURL, blink::WebStorageArea* sourceAreaInstance, bool originatedInProcess);
+    static void dispatchSessionStorageEvent(const String& key, const String& oldValue, const String& newValue,
+        SecurityOrigin*, const KURL& pageURL, const blink::WebStorageNamespace&,
+        blink::WebStorageArea* sourceAreaInstance, bool originatedInProcess);
+
+    void trace(Visitor*) { }
+
+private:
+    static bool isEventSource(Storage*, blink::WebStorageArea* sourceAreaInstance);
+
+    OwnPtr<blink::WebStorageArea> m_storageArea;
+    StorageType m_storageType;
+    mutable bool m_canAccessStorageCachedResult;
+    mutable Frame* m_canAccessStorageCachedFrame;
 };
 
 } // namespace WebCore