Title: [126714] trunk/Source/WebCore
- Revision
- 126714
- Author
- [email protected]
- Date
- 2012-08-26 15:15:35 -0700 (Sun, 26 Aug 2012)
Log Message
Prerenderering should gracefully handle no PrerendererClient or PrerenderingPlatform being provided.
https://bugs.webkit.org/show_bug.cgi?id=95036
Reviewed by Adam Barth.
Some assertions made sure there was a prerendering platform and client, and this change should make prerendering just be a NOP when no platform is provided, and just continue without a client when there is no client provided. These assertions were causing crashes in chromium's content_shell target, and really for no good reason.
No new tests, because DumpRenderTree provides both a PrerenderingPlatform and a PrerendererClient. But there is a new layout test in chromium's WebKitBrowserTest for this behaviour, see http://codereview.chromium.org/10869068/
* loader/Prerenderer.cpp:
(WebCore::Prerenderer::Prerenderer):
(WebCore::Prerenderer::render):
(WebCore::Prerenderer::client):
* loader/Prerenderer.h:
* loader/PrerendererClient.cpp:
(WebCore::PrerendererClient::from):
* platform/chromium/Prerender.cpp:
(WebCore::Prerender::cancel):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (126713 => 126714)
--- trunk/Source/WebCore/ChangeLog 2012-08-26 21:11:54 UTC (rev 126713)
+++ trunk/Source/WebCore/ChangeLog 2012-08-26 22:15:35 UTC (rev 126714)
@@ -1,3 +1,24 @@
+2012-08-26 Gavin Peters <[email protected]>
+
+ Prerenderering should gracefully handle no PrerendererClient or PrerenderingPlatform being provided.
+ https://bugs.webkit.org/show_bug.cgi?id=95036
+
+ Reviewed by Adam Barth.
+
+ Some assertions made sure there was a prerendering platform and client, and this change should make prerendering just be a NOP when no platform is provided, and just continue without a client when there is no client provided. These assertions were causing crashes in chromium's content_shell target, and really for no good reason.
+
+ No new tests, because DumpRenderTree provides both a PrerenderingPlatform and a PrerendererClient. But there is a new layout test in chromium's WebKitBrowserTest for this behaviour, see http://codereview.chromium.org/10869068/
+
+ * loader/Prerenderer.cpp:
+ (WebCore::Prerenderer::Prerenderer):
+ (WebCore::Prerenderer::render):
+ (WebCore::Prerenderer::client):
+ * loader/Prerenderer.h:
+ * loader/PrerendererClient.cpp:
+ (WebCore::PrerendererClient::from):
+ * platform/chromium/Prerender.cpp:
+ (WebCore::Prerender::cancel):
+
2012-08-26 David Barton <[email protected]>
Streamline mathml.css
Modified: trunk/Source/WebCore/loader/Prerenderer.cpp (126713 => 126714)
--- trunk/Source/WebCore/loader/Prerenderer.cpp 2012-08-26 21:11:54 UTC (rev 126713)
+++ trunk/Source/WebCore/loader/Prerenderer.cpp 2012-08-26 22:15:35 UTC (rev 126714)
@@ -59,6 +59,7 @@
Prerenderer::Prerenderer(Document* document)
: ActiveDOMObject(document, this)
+ , m_initializedClient(false)
, m_client(0)
{
}
@@ -80,7 +81,8 @@
RefPtr<PrerenderHandle> prerenderHandle = PrerenderHandle::create(url, referrer, referrerPolicy);
- client()->willAddPrerender(prerenderHandle.get());
+ if (client())
+ client()->willAddPrerender(prerenderHandle.get());
prerenderHandle->add();
m_activeHandles.append(prerenderHandle);
@@ -131,8 +133,12 @@
PrerendererClient* Prerenderer::client()
{
- if (!m_client)
+ if (!m_initializedClient) {
+ // We can't initialize the client in our contructor, because the platform might not have
+ // provided our supplement by then.
+ m_initializedClient = true;
m_client = PrerendererClient::from(document()->page());
+ }
return m_client;
}
Modified: trunk/Source/WebCore/loader/Prerenderer.h (126713 => 126714)
--- trunk/Source/WebCore/loader/Prerenderer.h 2012-08-26 21:11:54 UTC (rev 126713)
+++ trunk/Source/WebCore/loader/Prerenderer.h 2012-08-26 22:15:35 UTC (rev 126714)
@@ -73,6 +73,7 @@
Document* document();
PrerendererClient* client();
+ bool m_initializedClient;
PrerendererClient* m_client;
HandleVector m_activeHandles;
HandleVector m_suspendedHandles;
Modified: trunk/Source/WebCore/loader/PrerendererClient.cpp (126713 => 126714)
--- trunk/Source/WebCore/loader/PrerendererClient.cpp 2012-08-26 21:11:54 UTC (rev 126713)
+++ trunk/Source/WebCore/loader/PrerendererClient.cpp 2012-08-26 22:15:35 UTC (rev 126714)
@@ -51,7 +51,6 @@
PrerendererClient* PrerendererClient::from(Page* page)
{
PrerendererClient* supplement = static_cast<PrerendererClient*>(Supplement<Page>::from(page, supplementName()));
- ASSERT(supplement);
return supplement;
}
Modified: trunk/Source/WebCore/platform/chromium/Prerender.cpp (126713 => 126714)
--- trunk/Source/WebCore/platform/chromium/Prerender.cpp 2012-08-26 21:11:54 UTC (rev 126713)
+++ trunk/Source/WebCore/platform/chromium/Prerender.cpp 2012-08-26 22:15:35 UTC (rev 126714)
@@ -65,7 +65,6 @@
void Prerender::cancel()
{
- ASSERT(WebKit::WebPrerenderingSupport::current());
WebKit::WebPrerenderingSupport* platform = WebKit::WebPrerenderingSupport::current();
if (!platform)
return;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes