summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/history
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-05-13 16:23:25 +0100
committerBen Murdoch <benm@google.com>2011-05-16 11:35:02 +0100
commit65f03d4f644ce73618e5f4f50dd694b26f55ae12 (patch)
treef478babb801e720de7bfaee23443ffe029f58731 /Source/WebCore/history
parent47de4a2fb7262c7ebdb9cd133ad2c54c187454d0 (diff)
downloadexternal_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.zip
external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.gz
external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.bz2
Merge WebKit at r75993: Initial merge by git.
Change-Id: I602bbdc3974787a3b0450456a30a7868286921c3
Diffstat (limited to 'Source/WebCore/history')
-rw-r--r--Source/WebCore/history/BackForwardListChromium.cpp157
-rw-r--r--Source/WebCore/history/BackForwardListImpl.h28
-rw-r--r--Source/WebCore/history/HistoryItem.cpp22
-rw-r--r--Source/WebCore/history/HistoryItem.h5
-rw-r--r--Source/WebCore/history/PageCache.cpp8
5 files changed, 31 insertions, 189 deletions
diff --git a/Source/WebCore/history/BackForwardListChromium.cpp b/Source/WebCore/history/BackForwardListChromium.cpp
deleted file mode 100644
index a22a147..0000000
--- a/Source/WebCore/history/BackForwardListChromium.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2005, 2006 Apple Computer, Inc. All rights reserved.
- * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
- * 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
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * 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
- * 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
- * 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
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "BackForwardListImpl.h"
-
-#include "HistoryItem.h"
-#include "Logging.h"
-
-namespace WebCore {
-
-static const unsigned DefaultCapacity = 100;
-static const unsigned NoCurrentItemIndex = UINT_MAX;
-
-BackForwardListImpl::BackForwardListImpl(Page* page)
- : m_page(page)
- , m_client(0)
- , m_capacity(DefaultCapacity)
- , m_closed(true)
- , m_enabled(true)
-{
-}
-
-BackForwardListImpl::~BackForwardListImpl()
-{
- ASSERT(m_closed);
-}
-
-void BackForwardListImpl::addItem(PassRefPtr<HistoryItem> prpItem)
-{
- ASSERT(prpItem);
- if (m_capacity == 0 || !m_enabled)
- return;
-
- m_client->addItem(prpItem);
-}
-
-void BackForwardListImpl::goToItem(HistoryItem* item)
-{
- m_client->goToItem(item);
-}
-
-int BackForwardListImpl::capacity()
-{
- return m_capacity;
-}
-
-void BackForwardListImpl::setCapacity(int size)
-{
- m_capacity = size;
-}
-
-bool BackForwardListImpl::enabled()
-{
- return m_enabled;
-}
-
-void BackForwardListImpl::setEnabled(bool enabled)
-{
- m_enabled = enabled;
- if (!enabled) {
- int capacity = m_capacity;
- setCapacity(0);
- setCapacity(capacity);
- }
-}
-
-int BackForwardListImpl::backListCount()
-{
- return m_client->backListCount();
-}
-
-int BackForwardListImpl::forwardListCount()
-{
- return m_client->forwardListCount();
-}
-
-HistoryItem* BackForwardListImpl::itemAtIndex(int index)
-{
- return m_client->itemAtIndex(index);
-}
-
-HistoryItemVector& BackForwardListImpl::entries()
-{
- static HistoryItemVector noEntries;
- return noEntries;
-}
-
-void BackForwardListImpl::close()
-{
- if (m_client)
- m_client->close();
- m_page = 0;
- m_closed = true;
-}
-
-bool BackForwardListImpl::closed()
-{
- return m_closed;
-}
-
-void BackForwardListImpl::goBack()
-{
- ASSERT_NOT_REACHED();
-}
-
-void BackForwardListImpl::goForward()
-{
- ASSERT_NOT_REACHED();
-}
-
-void BackForwardListImpl::backListWithLimit(int, HistoryItemVector&)
-{
- ASSERT_NOT_REACHED();
-}
-
-void BackForwardListImpl::forwardListWithLimit(int, HistoryItemVector&)
-{
- ASSERT_NOT_REACHED();
-}
-
-bool BackForwardListImpl::containsItem(HistoryItem*)
-{
- ASSERT_NOT_REACHED();
- return false;
-}
-
-void BackForwardListImpl::removeItem(HistoryItem*)
-{
- ASSERT_NOT_REACHED();
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/history/BackForwardListImpl.h b/Source/WebCore/history/BackForwardListImpl.h
index 30043fa..7b1a422 100644
--- a/Source/WebCore/history/BackForwardListImpl.h
+++ b/Source/WebCore/history/BackForwardListImpl.h
@@ -39,25 +39,6 @@ class Page;
typedef Vector<RefPtr<HistoryItem> > HistoryItemVector;
typedef HashSet<RefPtr<HistoryItem> > HistoryItemHashSet;
-// FIXME: Change Chromium to use its own BackForwardList implementation
-// and not use BackForwardListImpl at all, then remove this
-// BackForwardListClient feature entirely and just don't use this
-// class on Chromium.
-#if PLATFORM(CHROMIUM)
-// In the Chromium port, the back/forward list is managed externally.
-// See BackForwardListChromium.cpp
-class BackForwardListClient {
-public:
- virtual ~BackForwardListClient() { }
- virtual void addItem(PassRefPtr<HistoryItem>) = 0;
- virtual void goToItem(HistoryItem*) = 0;
- virtual HistoryItem* itemAtIndex(int) = 0;
- virtual int backListCount() = 0;
- virtual int forwardListCount() = 0;
- virtual void close() = 0;
-};
-#endif
-
// FIXME: After renaming BackForwardList to BackForwardClient,
// rename this to BackForwardList.
class BackForwardListImpl : public BackForwardList {
@@ -65,11 +46,6 @@ public:
static PassRefPtr<BackForwardListImpl> create(Page* page) { return adoptRef(new BackForwardListImpl(page)); }
virtual ~BackForwardListImpl();
-#if PLATFORM(CHROMIUM)
- // Must be called before any other methods.
- void setClient(BackForwardListClient* client) { m_client = client; }
-#endif
-
Page* page() { return m_page; }
virtual void addItem(PassRefPtr<HistoryItem>);
@@ -109,13 +85,9 @@ private:
virtual bool isActive() { return enabled() && capacity(); }
Page* m_page;
-#if PLATFORM(CHROMIUM)
- BackForwardListClient* m_client;
-#else
HistoryItemVector m_entries;
HistoryItemHashSet m_entryHash;
unsigned m_current;
-#endif
unsigned m_capacity;
bool m_closed;
bool m_enabled;
diff --git a/Source/WebCore/history/HistoryItem.cpp b/Source/WebCore/history/HistoryItem.cpp
index 0995913..f9e6c96 100644
--- a/Source/WebCore/history/HistoryItem.cpp
+++ b/Source/WebCore/history/HistoryItem.cpp
@@ -40,7 +40,7 @@
namespace WebCore {
-const uint32_t backForwardTreeEncodingVersion = 0;
+const uint32_t backForwardTreeEncodingVersion = 1;
static long long generateSequenceNumber()
{
@@ -59,6 +59,7 @@ void (*notifyHistoryItemChanged)(HistoryItem*) = defaultNotifyHistoryItemChanged
HistoryItem::HistoryItem()
: m_lastVisitedTime(0)
, m_lastVisitWasHTTPNonGet(false)
+ , m_pageScaleFactor(1)
, m_lastVisitWasFailure(false)
, m_isTargetItem(false)
, m_visitCount(0)
@@ -73,6 +74,7 @@ HistoryItem::HistoryItem(const String& urlString, const String& title, double ti
, m_title(title)
, m_lastVisitedTime(time)
, m_lastVisitWasHTTPNonGet(false)
+ , m_pageScaleFactor(1)
, m_lastVisitWasFailure(false)
, m_isTargetItem(false)
, m_visitCount(0)
@@ -89,6 +91,7 @@ HistoryItem::HistoryItem(const String& urlString, const String& title, const Str
, m_displayTitle(alternateTitle)
, m_lastVisitedTime(time)
, m_lastVisitWasHTTPNonGet(false)
+ , m_pageScaleFactor(1)
, m_lastVisitWasFailure(false)
, m_isTargetItem(false)
, m_visitCount(0)
@@ -106,6 +109,7 @@ HistoryItem::HistoryItem(const KURL& url, const String& target, const String& pa
, m_title(title)
, m_lastVisitedTime(0)
, m_lastVisitWasHTTPNonGet(false)
+ , m_pageScaleFactor(1)
, m_lastVisitWasFailure(false)
, m_isTargetItem(false)
, m_visitCount(0)
@@ -137,6 +141,7 @@ inline HistoryItem::HistoryItem(const HistoryItem& item)
, m_lastVisitedTime(item.m_lastVisitedTime)
, m_lastVisitWasHTTPNonGet(item.m_lastVisitWasHTTPNonGet)
, m_scrollPoint(item.m_scrollPoint)
+ , m_pageScaleFactor(item.m_pageScaleFactor)
, m_lastVisitWasFailure(item.m_lastVisitWasFailure)
, m_isTargetItem(item.m_isTargetItem)
, m_visitCount(item.m_visitCount)
@@ -379,6 +384,16 @@ void HistoryItem::clearScrollPoint()
m_scrollPoint.setY(0);
}
+float HistoryItem::pageScaleFactor() const
+{
+ return m_pageScaleFactor;
+}
+
+void HistoryItem::setPageScaleFactor(float scaleFactor)
+{
+ m_pageScaleFactor = scaleFactor;
+}
+
void HistoryItem::setDocumentState(const Vector<String>& state)
{
m_documentState = state;
@@ -667,6 +682,8 @@ void HistoryItem::encodeBackForwardTreeNode(Encoder& encoder) const
encoder.encodeInt32(m_scrollPoint.x());
encoder.encodeInt32(m_scrollPoint.y());
+
+ encoder.encodeFloat(m_pageScaleFactor);
encoder.encodeBool(m_stateObject);
if (m_stateObject) {
@@ -776,6 +793,9 @@ resume:
if (!decoder.decodeInt32(y))
return 0;
node->m_scrollPoint = IntPoint(x, y);
+
+ if (!decoder.decodeFloat(node->m_pageScaleFactor))
+ return 0;
bool hasStateObject;
if (!decoder.decodeBool(hasStateObject))
diff --git a/Source/WebCore/history/HistoryItem.h b/Source/WebCore/history/HistoryItem.h
index 19b33ad..a4622c0 100644
--- a/Source/WebCore/history/HistoryItem.h
+++ b/Source/WebCore/history/HistoryItem.h
@@ -123,6 +123,10 @@ public:
const IntPoint& scrollPoint() const;
void setScrollPoint(const IntPoint&);
void clearScrollPoint();
+
+ float pageScaleFactor() const;
+ void setPageScaleFactor(float);
+
const Vector<String>& documentState() const;
void setDocumentState(const Vector<String>&);
void clearDocumentState();
@@ -245,6 +249,7 @@ private:
bool m_lastVisitWasHTTPNonGet;
IntPoint m_scrollPoint;
+ float m_pageScaleFactor;
Vector<String> m_documentState;
HistoryItemVector m_children;
diff --git a/Source/WebCore/history/PageCache.cpp b/Source/WebCore/history/PageCache.cpp
index 7375a9c..a5dfb1e 100644
--- a/Source/WebCore/history/PageCache.cpp
+++ b/Source/WebCore/history/PageCache.cpp
@@ -252,6 +252,8 @@ bool PageCache::canCachePageContainingThisFrame(Frame* frame)
return frame->loader()->documentLoader()
&& frame->loader()->documentLoader()->mainDocumentError().isNull()
+ // Do not cache error pages (these can be recognized as pages with substitute data or unreachable URLs).
+ && !(frame->loader()->documentLoader()->substituteData().isValid() && !frame->loader()->documentLoader()->substituteData().failingURL().isEmpty())
// FIXME: If we ever change this so that frames with plug-ins will be cached,
// we need to make sure that we don't cache frames that have outstanding NPObjects
// (objects created by the plug-in). Since there is no way to pause/resume a Netscape plug-in,
@@ -453,7 +455,7 @@ void PageCache::releaseAutoreleasedPagesNow()
m_autoreleaseTimer.stop();
// Postpone dead pruning until all our resources have gone dead.
- cache()->setPruneEnabled(false);
+ memoryCache()->setPruneEnabled(false);
CachedPageSet tmp;
tmp.swap(m_autoreleaseSet);
@@ -463,8 +465,8 @@ void PageCache::releaseAutoreleasedPagesNow()
(*it)->destroy();
// Now do the prune.
- cache()->setPruneEnabled(true);
- cache()->prune();
+ memoryCache()->setPruneEnabled(true);
+ memoryCache()->prune();
}
void PageCache::autorelease(PassRefPtr<CachedPage> page)