<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[186005] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/186005">186005</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2015-06-26 11:26:19 -0700 (Fri, 26 Jun 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Prevent new loads while in PageCache (or being added to PageCache)
https://bugs.webkit.org/show_bug.cgi?id=146299
&lt;rdar://problem/21523788&gt;

Reviewed by Darin Adler.

Generalize the change in <a href="http://trac.webkit.org/projects/webkit/changeset/185337">r185337</a> to prevent new loads while in the
PageCache (or being added to the PageCache), instead of merely
preventing new loads in pagehide event handlers. We should never
have any pages that are still loading inside the PageCache.

The fix in <a href="http://trac.webkit.org/projects/webkit/changeset/185337">r185337</a> was apparently insufficient to address the
problem so generalizing the check / policy will hopefully catch
more cases where content is able to start loads while being added
to the PageCache. This patch also removes some of the complexity
added in <a href="http://trac.webkit.org/projects/webkit/changeset/185337">r185337</a> as it is no longer needed.

No new tests, already covered by:
http/tests/navigation/image-load-in-pagehide-handler.html
http/tests/navigation/subframe-pagehide-handler-starts-load.html
http/tests/navigation/subframe-pagehide-handler-starts-load2.html

* loader/FrameLoader.cpp:
(WebCore::FrameLoader::stopLoading):
(WebCore::FrameLoader::loadURL):
(WebCore::FrameLoader::loadWithDocumentLoader):
(WebCore::FrameLoader::stopAllLoaders):
(WebCore::FrameLoader::handleBeforeUnloadEvent):
(WebCore::FrameLoader::FrameLoader): Deleted.
* loader/FrameLoader.h:
(WebCore::FrameLoader::pageDismissalEventBeingDispatched):
* loader/ImageLoader.cpp:
(WebCore::pageIsBeingDismissed):
* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::load):
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::requestImage):
* page/Page.cpp:
(WebCore::Page::inPageCache):
* page/Page.h:
(WebCore::Page::group): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoadercpp">trunk/Source/WebCore/loader/FrameLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderFrameLoaderh">trunk/Source/WebCore/loader/FrameLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderImageLoadercpp">trunk/Source/WebCore/loader/ImageLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloadercacheCachedResourcecpp">trunk/Source/WebCore/loader/cache/CachedResource.cpp</a></li>
<li><a href="#trunkSourceWebCoreloadercacheCachedResourceLoadercpp">trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePagecpp">trunk/Source/WebCore/page/Page.cpp</a></li>
<li><a href="#trunkSourceWebCorepagePageh">trunk/Source/WebCore/page/Page.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (186004 => 186005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-06-26 18:23:18 UTC (rev 186004)
+++ trunk/Source/WebCore/ChangeLog        2015-06-26 18:26:19 UTC (rev 186005)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2015-06-26  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Prevent new loads while in PageCache (or being added to PageCache)
+        https://bugs.webkit.org/show_bug.cgi?id=146299
+        &lt;rdar://problem/21523788&gt;
+
+        Reviewed by Darin Adler.
+
+        Generalize the change in r185337 to prevent new loads while in the
+        PageCache (or being added to the PageCache), instead of merely
+        preventing new loads in pagehide event handlers. We should never
+        have any pages that are still loading inside the PageCache.
+
+        The fix in r185337 was apparently insufficient to address the
+        problem so generalizing the check / policy will hopefully catch
+        more cases where content is able to start loads while being added
+        to the PageCache. This patch also removes some of the complexity
+        added in r185337 as it is no longer needed.
+
+        No new tests, already covered by:
+        http/tests/navigation/image-load-in-pagehide-handler.html
+        http/tests/navigation/subframe-pagehide-handler-starts-load.html
+        http/tests/navigation/subframe-pagehide-handler-starts-load2.html
+
+        * loader/FrameLoader.cpp:
+        (WebCore::FrameLoader::stopLoading):
+        (WebCore::FrameLoader::loadURL):
+        (WebCore::FrameLoader::loadWithDocumentLoader):
+        (WebCore::FrameLoader::stopAllLoaders):
+        (WebCore::FrameLoader::handleBeforeUnloadEvent):
+        (WebCore::FrameLoader::FrameLoader): Deleted.
+        * loader/FrameLoader.h:
+        (WebCore::FrameLoader::pageDismissalEventBeingDispatched):
+        * loader/ImageLoader.cpp:
+        (WebCore::pageIsBeingDismissed):
+        * loader/cache/CachedResource.cpp:
+        (WebCore::CachedResource::load):
+        * loader/cache/CachedResourceLoader.cpp:
+        (WebCore::CachedResourceLoader::requestImage):
+        * page/Page.cpp:
+        (WebCore::Page::inPageCache):
+        * page/Page.h:
+        (WebCore::Page::group): Deleted.
+
</ins><span class="cx"> 2015-06-26  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [OS X] Change the layer tiling threshold from 2000 to 2048 pixels
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.cpp (186004 => 186005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.cpp        2015-06-26 18:23:18 UTC (rev 186004)
+++ trunk/Source/WebCore/loader/FrameLoader.cpp        2015-06-26 18:26:19 UTC (rev 186005)
</span><span class="lines">@@ -225,7 +225,6 @@
</span><span class="cx">     , m_isExecutingJavaScriptFormAction(false)
</span><span class="cx">     , m_didCallImplicitClose(true)
</span><span class="cx">     , m_wasUnloadEventEmitted(false)
</span><del>-    , m_pageDismissalEventBeingDispatched(frame)
</del><span class="cx">     , m_isComplete(false)
</span><span class="cx">     , m_needsClear(false)
</span><span class="cx">     , m_checkTimer(*this, &amp;FrameLoader::checkTimerFired)
</span><span class="lines">@@ -424,9 +423,9 @@
</span><span class="cx">                 Element* currentFocusedElement = m_frame.document()-&gt;focusedElement();
</span><span class="cx">                 if (currentFocusedElement &amp;&amp; currentFocusedElement-&gt;toInputElement())
</span><span class="cx">                     currentFocusedElement-&gt;toInputElement()-&gt;endEditing();
</span><del>-                if (m_pageDismissalEventBeingDispatched == Page::DismissalType::None) {
</del><ins>+                if (m_pageDismissalEventBeingDispatched == PageDismissalType::None) {
</ins><span class="cx">                     if (unloadEventPolicy == UnloadEventPolicyUnloadAndPageHide) {
</span><del>-                        m_pageDismissalEventBeingDispatched = Page::DismissalType::PageHide;
</del><ins>+                        m_pageDismissalEventBeingDispatched = PageDismissalType::PageHide;
</ins><span class="cx">                         m_frame.document()-&gt;domWindow()-&gt;dispatchEvent(PageTransitionEvent::create(eventNames().pagehideEvent, m_frame.document()-&gt;inPageCache()), m_frame.document());
</span><span class="cx">                     }
</span><span class="cx"> 
</span><span class="lines">@@ -439,7 +438,7 @@
</span><span class="cx">                         // while dispatching the event, so protect it to prevent writing the end
</span><span class="cx">                         // time into freed memory.
</span><span class="cx">                         RefPtr&lt;DocumentLoader&gt; documentLoader = m_provisionalDocumentLoader;
</span><del>-                        m_pageDismissalEventBeingDispatched = Page::DismissalType::Unload;
</del><ins>+                        m_pageDismissalEventBeingDispatched = PageDismissalType::Unload;
</ins><span class="cx">                         if (documentLoader &amp;&amp; !documentLoader-&gt;timing().unloadEventStart() &amp;&amp; !documentLoader-&gt;timing().unloadEventEnd()) {
</span><span class="cx">                             DocumentLoadTiming&amp; timing = documentLoader-&gt;timing();
</span><span class="cx">                             ASSERT(timing.navigationStart());
</span><span class="lines">@@ -450,7 +449,7 @@
</span><span class="cx">                             m_frame.document()-&gt;domWindow()-&gt;dispatchEvent(unloadEvent, m_frame.document());
</span><span class="cx">                     }
</span><span class="cx">                 }
</span><del>-                m_pageDismissalEventBeingDispatched = Page::DismissalType::None;
</del><ins>+                m_pageDismissalEventBeingDispatched = PageDismissalType::None;
</ins><span class="cx">                 if (m_frame.document())
</span><span class="cx">                     m_frame.document()-&gt;updateStyleIfNeeded();
</span><span class="cx">                 m_wasUnloadEventEmitted = true;
</span><span class="lines">@@ -1226,7 +1225,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (m_pageDismissalEventBeingDispatched != Page::DismissalType::None)
</del><ins>+    if (m_pageDismissalEventBeingDispatched != PageDismissalType::None)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     NavigationAction action(request, newLoadType, isFormSubmission, event, frameLoadRequest.shouldOpenExternalURLsPolicy());
</span><span class="lines">@@ -1417,7 +1416,7 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(m_frame.view());
</span><span class="cx"> 
</span><del>-    if (m_pageDismissalEventBeingDispatched != Page::DismissalType::None)
</del><ins>+    if (m_pageDismissalEventBeingDispatched != PageDismissalType::None)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (m_frame.document())
</span><span class="lines">@@ -1591,7 +1590,7 @@
</span><span class="cx"> void FrameLoader::stopAllLoaders(ClearProvisionalItemPolicy clearProvisionalItemPolicy)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_frame.document() || !m_frame.document()-&gt;inPageCache());
</span><del>-    if (m_pageDismissalEventBeingDispatched != Page::DismissalType::None)
</del><ins>+    if (m_pageDismissalEventBeingDispatched != PageDismissalType::None)
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     // If this method is called from within this method, infinite recursion can occur (3442218). Avoid this.
</span><span class="lines">@@ -2847,7 +2846,7 @@
</span><span class="cx">         return true;
</span><span class="cx">     
</span><span class="cx">     RefPtr&lt;BeforeUnloadEvent&gt; beforeUnloadEvent = BeforeUnloadEvent::create();
</span><del>-    m_pageDismissalEventBeingDispatched = Page::DismissalType::BeforeUnload;
</del><ins>+    m_pageDismissalEventBeingDispatched = PageDismissalType::BeforeUnload;
</ins><span class="cx"> 
</span><span class="cx">     // We store the frame's page in a local variable because the frame might get detached inside dispatchEvent.
</span><span class="cx">     Page* page = m_frame.page();
</span><span class="lines">@@ -2855,7 +2854,7 @@
</span><span class="cx">     domWindow-&gt;dispatchEvent(beforeUnloadEvent.get(), domWindow-&gt;document());
</span><span class="cx">     page-&gt;decrementFrameHandlingBeforeUnloadEventCount();
</span><span class="cx"> 
</span><del>-    m_pageDismissalEventBeingDispatched = Page::DismissalType::None;
</del><ins>+    m_pageDismissalEventBeingDispatched = PageDismissalType::None;
</ins><span class="cx"> 
</span><span class="cx">     if (!beforeUnloadEvent-&gt;defaultPrevented())
</span><span class="cx">         document-&gt;defaultEventHandler(beforeUnloadEvent.get());
</span><span class="lines">@@ -3553,14 +3552,4 @@
</span><span class="cx">     return WTF::move(frame);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-auto FrameLoader::PageDismissalEventType::operator=(Page::DismissalType dismissalType) -&gt; PageDismissalEventType&amp;
-{
-    m_dismissalEventBeingDispatched = dismissalType;
-
-    if (auto* page = m_frame.page())
-        page-&gt;setDismissalEventBeingDispatched(dismissalType);
-
-    return *this;
-}
-
</del><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderFrameLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/FrameLoader.h (186004 => 186005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/FrameLoader.h        2015-06-26 18:23:18 UTC (rev 186004)
+++ trunk/Source/WebCore/loader/FrameLoader.h        2015-06-26 18:26:19 UTC (rev 186005)
</span><span class="lines">@@ -272,7 +272,8 @@
</span><span class="cx">     
</span><span class="cx">     void started();
</span><span class="cx"> 
</span><del>-    Page::DismissalType pageDismissalEventBeingDispatched() const { return m_pageDismissalEventBeingDispatched; }
</del><ins>+    enum class PageDismissalType { None, BeforeUnload, PageHide, Unload };
+    PageDismissalType pageDismissalEventBeingDispatched() const { return m_pageDismissalEventBeingDispatched; }
</ins><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT NetworkingContext* networkingContext() const;
</span><span class="cx"> 
</span><span class="lines">@@ -413,21 +414,7 @@
</span><span class="cx">     bool m_didCallImplicitClose;
</span><span class="cx">     bool m_wasUnloadEventEmitted;
</span><span class="cx"> 
</span><del>-    class PageDismissalEventType {
-    public:
-        PageDismissalEventType(Frame&amp; frame)
-            : m_frame(frame)
-        { }
-
-        PageDismissalEventType&amp; operator=(Page::DismissalType);
-        operator Page::DismissalType() const { return m_dismissalEventBeingDispatched; }
-
-    private:
-        Frame&amp; m_frame;
-        Page::DismissalType m_dismissalEventBeingDispatched { Page::DismissalType::None };
-    };
-
-    PageDismissalEventType m_pageDismissalEventBeingDispatched;
</del><ins>+    PageDismissalType m_pageDismissalEventBeingDispatched { PageDismissalType::None };
</ins><span class="cx">     bool m_isComplete;
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;SerializedScriptValue&gt; m_pendingStateObject;
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderImageLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ImageLoader.cpp (186004 => 186005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ImageLoader.cpp        2015-06-26 18:23:18 UTC (rev 186004)
+++ trunk/Source/WebCore/loader/ImageLoader.cpp        2015-06-26 18:26:19 UTC (rev 186005)
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx"> static inline bool pageIsBeingDismissed(Document&amp; document)
</span><span class="cx"> {
</span><span class="cx">     Frame* frame = document.frame();
</span><del>-    return frame &amp;&amp; frame-&gt;loader().pageDismissalEventBeingDispatched() != Page::DismissalType::None;
</del><ins>+    return frame &amp;&amp; frame-&gt;loader().pageDismissalEventBeingDispatched() != FrameLoader::PageDismissalType::None;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ImageLoader::ImageLoader(Element&amp; element)
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheCachedResourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (186004 => 186005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/CachedResource.cpp        2015-06-26 18:23:18 UTC (rev 186004)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp        2015-06-26 18:26:19 UTC (rev 186005)
</span><span class="lines">@@ -214,8 +214,8 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    // Prevent 'pagehide' event handlers from starting new loads as we are in the PageCache.
-    if (cachedResourceLoader.frame()-&gt;page() &amp;&amp; cachedResourceLoader.frame()-&gt;page()-&gt;dismissalEventBeingDispatched() == Page::DismissalType::PageHide) {
</del><ins>+    // Prevent new loads if we are in the PageCache or being added to the PageCache.
+    if (cachedResourceLoader.frame()-&gt;page() &amp;&amp; cachedResourceLoader.frame()-&gt;page()-&gt;inPageCache()) {
</ins><span class="cx">         failBeforeStarting();
</span><span class="cx">         return;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheCachedResourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (186004 => 186005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp        2015-06-26 18:23:18 UTC (rev 186004)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp        2015-06-26 18:26:19 UTC (rev 186005)
</span><span class="lines">@@ -176,7 +176,7 @@
</span><span class="cx"> CachedResourceHandle&lt;CachedImage&gt; CachedResourceLoader::requestImage(CachedResourceRequest&amp; request)
</span><span class="cx"> {
</span><span class="cx">     if (Frame* frame = this-&gt;frame()) {
</span><del>-        if (frame-&gt;loader().pageDismissalEventBeingDispatched() != Page::DismissalType::None) {
</del><ins>+        if (frame-&gt;loader().pageDismissalEventBeingDispatched() != FrameLoader::PageDismissalType::None) {
</ins><span class="cx">             URL requestURL = request.resourceRequest().url();
</span><span class="cx">             if (requestURL.isValid() &amp;&amp; canRequest(CachedResource::ImageResource, requestURL, request.options(), request.forPreload()))
</span><span class="cx">                 PingLoader::loadImage(*frame, requestURL);
</span></span></pre></div>
<a id="trunkSourceWebCorepagePagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.cpp (186004 => 186005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.cpp        2015-06-26 18:23:18 UTC (rev 186004)
+++ trunk/Source/WebCore/page/Page.cpp        2015-06-26 18:26:19 UTC (rev 186005)
</span><span class="lines">@@ -562,6 +562,12 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool Page::inPageCache() const
+{
+    auto* document = mainFrame().document();
+    return document &amp;&amp; document-&gt;inPageCache();
+}
+
</ins><span class="cx"> static Frame* incrementFrame(Frame* curr, bool forward, bool wrapFlag)
</span><span class="cx"> {
</span><span class="cx">     return forward
</span></span></pre></div>
<a id="trunkSourceWebCorepagePageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Page.h (186004 => 186005)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Page.h        2015-06-26 18:23:18 UTC (rev 186004)
+++ trunk/Source/WebCore/page/Page.h        2015-06-26 18:26:19 UTC (rev 186005)
</span><span class="lines">@@ -156,14 +156,7 @@
</span><span class="cx">     MainFrame&amp; mainFrame() { ASSERT(m_mainFrame); return *m_mainFrame; }
</span><span class="cx">     const MainFrame&amp; mainFrame() const { ASSERT(m_mainFrame); return *m_mainFrame; }
</span><span class="cx"> 
</span><del>-    enum class DismissalType {
-        None,
-        BeforeUnload,
-        PageHide,
-        Unload
-    };
-    DismissalType dismissalEventBeingDispatched() const { return m_dismissalEventBeingDispatched; }
-    void setDismissalEventBeingDispatched(DismissalType dismissalType) { m_dismissalEventBeingDispatched = dismissalType; }
</del><ins>+    bool inPageCache() const;
</ins><span class="cx"> 
</span><span class="cx">     bool openedByDOM() const;
</span><span class="cx">     void setOpenedByDOM();
</span><span class="lines">@@ -627,7 +620,6 @@
</span><span class="cx">     bool m_isClosing;
</span><span class="cx"> 
</span><span class="cx">     MediaProducer::MediaStateFlags m_mediaState { MediaProducer::IsNotPlaying };
</span><del>-    DismissalType m_dismissalEventBeingDispatched { DismissalType::None };
</del><span class="cx">     
</span><span class="cx">     bool m_userContentExtensionsEnabled { true };
</span><span class="cx"> };
</span></span></pre>
</div>
</div>

</body>
</html>