Move URL from WebCore to WTF
[WebKit-https.git] / Source / WebCore / page / History.h
index bd50fcc..d6e934a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ * Copyright (C) 2007-2018 Apple 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 COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE 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 COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE 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
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef History_h
-#define History_h
+#pragma once
 
 #include "DOMWindowProperty.h"
-#include "KURL.h"
-#include <wtf/Forward.h>
-#include <wtf/PassRefPtr.h>
-#include <wtf/RefCounted.h>
+#include "ExceptionOr.h"
+#include "JSValueInWrappedObject.h"
+#include "ScriptWrappable.h"
+#include "SerializedScriptValue.h"
+#include <wtf/WallTime.h>
 
 namespace WebCore {
 
-class Frame;
-class ScriptExecutionContext;
-class SerializedScriptValue;
-typedef int ExceptionCode;
+class Document;
 
-class History : public RefCounted<History>, public DOMWindowProperty {
+class History final : public ScriptWrappable, public RefCounted<History>, public DOMWindowProperty {
 public:
-    static PassRefPtr<History> create(Frame* frame) { return adoptRef(new History(frame)); }
+    static Ref<History> create(DOMWindow& window) { return adoptRef(*new History(window)); }
 
     unsigned length() const;
+    
+    enum class ScrollRestoration {
+        Auto,
+        Manual
+    };
+
+    ExceptionOr<ScrollRestoration> scrollRestoration() const;
+    ExceptionOr<void> setScrollRestoration(ScrollRestoration);
+
+    SerializedScriptValue* state();
+    JSValueInWrappedObject& cachedState();
+
     void back();
     void forward();
-    void go(int distance);
+    void go(int);
 
-    void back(ScriptExecutionContext*);
-    void forward(ScriptExecutionContext*);
-    void go(ScriptExecutionContext*, int distance);
+    void back(Document&);
+    void forward(Document&);
+    void go(Document&, int);
 
-    enum StateObjectType {
-        StateObjectPush,
-        StateObjectReplace
-    };
-    void stateObjectAdded(PassRefPtr<SerializedScriptValue>, const String& title, const String& url, StateObjectType, ExceptionCode&);
+    bool isSameAsCurrentState(SerializedScriptValue*) const;
+
+    ExceptionOr<void> pushState(RefPtr<SerializedScriptValue>&& data, const String& title, const String& urlString);
+    ExceptionOr<void> replaceState(RefPtr<SerializedScriptValue>&& data, const String& title, const String& urlString);
 
 private:
-    explicit History(Frame*);
+    explicit History(DOMWindow&);
+
+    enum class StateObjectType { Push, Replace };
+    ExceptionOr<void> stateObjectAdded(RefPtr<SerializedScriptValue>&&, const String& title, const String& url, StateObjectType);
+    bool stateChanged() const;
+
+    URL urlForState(const String& url);
 
-    KURL urlForState(const String& url);
+    SerializedScriptValue* stateInternal() const;
+
+    RefPtr<SerializedScriptValue> m_lastStateObjectRequested;
+    JSValueInWrappedObject m_cachedState;
+
+    unsigned m_currentStateObjectTimeSpanObjectsAdded { 0 };
+    WallTime m_currentStateObjectTimeSpanStart;
+
+    // For the main frame's History object to keep track of all state object usage.
+    uint64_t m_totalStateObjectUsage { 0 };
+
+    // For each individual History object to keep track of the most recent state object added.
+    uint64_t m_mostRecentStateObjectUsage { 0 };
 };
 
-} // namespace WebCore
+inline ExceptionOr<void> History::pushState(RefPtr<SerializedScriptValue>&& data, const String& title, const String& urlString)
+{
+    return stateObjectAdded(WTFMove(data), title, urlString, StateObjectType::Push);
+}
+
+inline ExceptionOr<void> History::replaceState(RefPtr<SerializedScriptValue>&& data, const String& title, const String& urlString)
+{
+    return stateObjectAdded(WTFMove(data), title, urlString, StateObjectType::Replace);
+}
 
-#endif // History_h
+} // namespace WebCore