Diff
Modified: trunk/Source/WebKit2/ChangeLog (178424 => 178425)
--- trunk/Source/WebKit2/ChangeLog 2015-01-14 18:25:44 UTC (rev 178424)
+++ trunk/Source/WebKit2/ChangeLog 2015-01-14 18:39:03 UTC (rev 178425)
@@ -1,3 +1,25 @@
+2015-01-14 Anders Carlsson <[email protected]>
+
+ Add willOpen and didClose member functions to WebProcessLifetimeObserver
+ https://bugs.webkit.org/show_bug.cgi?id=140449
+
+ Reviewed by Andreas Kling.
+
+ * UIProcess/VisitedLinkProvider.cpp:
+ (WebKit::VisitedLinkProvider::addVisitedLinkHash):
+ (WebKit::VisitedLinkProvider::webProcessWillOpenConnection):
+ (WebKit::VisitedLinkProvider::webProcessDidCloseConnection):
+ * UIProcess/VisitedLinkProvider.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::WebPageProxy):
+ (WebKit::WebPageProxy::close):
+ * UIProcess/WebProcessLifetimeObserver.cpp:
+ (WebKit::WebProcessLifetimeObserver::addWebPage):
+ (WebKit::WebProcessLifetimeObserver::removeWebPage):
+ * UIProcess/WebProcessLifetimeObserver.h:
+ (WebKit::WebProcessLifetimeObserver::webProcessWillOpenConnection):
+ (WebKit::WebProcessLifetimeObserver::webProcessDidCloseConnection):
+
2015-01-14 Dan Bernstein <[email protected]>
Added availability annotations to some modern Cocoa SPI.
Modified: trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp (178424 => 178425)
--- trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp 2015-01-14 18:25:44 UTC (rev 178424)
+++ trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.cpp 2015-01-14 18:39:03 UTC (rev 178425)
@@ -91,6 +91,14 @@
process.removeMessageReceiver(Messages::VisitedLinkProvider::messageReceiverName(), m_identifier);
}
+void VisitedLinkProvider::addVisitedLinkHash(LinkHash linkHash)
+{
+ m_pendingVisitedLinks.add(linkHash);
+
+ if (!m_pendingVisitedLinksTimer.isActive())
+ m_pendingVisitedLinksTimer.startOneShot(0);
+}
+
void VisitedLinkProvider::removeAll()
{
m_pendingVisitedLinksTimer.stop();
@@ -105,12 +113,14 @@
}
}
-void VisitedLinkProvider::addVisitedLinkHash(LinkHash linkHash)
+void VisitedLinkProvider::webProcessWillOpenConnection(WebProcessProxy&, IPC::Connection&)
{
- m_pendingVisitedLinks.add(linkHash);
+ // FIXME: Implement.
+}
- if (!m_pendingVisitedLinksTimer.isActive())
- m_pendingVisitedLinksTimer.startOneShot(0);
+void VisitedLinkProvider::webProcessDidCloseConnection(WebProcessProxy&, IPC::Connection&)
+{
+ // FIXME: Implement.
}
void VisitedLinkProvider::addVisitedLinkHashFromPage(uint64_t pageID, LinkHash linkHash)
Modified: trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.h (178424 => 178425)
--- trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.h 2015-01-14 18:25:44 UTC (rev 178424)
+++ trunk/Source/WebKit2/UIProcess/VisitedLinkProvider.h 2015-01-14 18:39:03 UTC (rev 178425)
@@ -59,6 +59,10 @@
// IPC::MessageReceiver
virtual void didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&) override;
+ // WebProcessLifetimeObserver
+ virtual void webProcessWillOpenConnection(WebProcessProxy&, IPC::Connection&) override;
+ virtual void webProcessDidCloseConnection(WebProcessProxy&, IPC::Connection&) override;
+
void addVisitedLinkHashFromPage(uint64_t pageID, WebCore::LinkHash);
void pendingVisitedLinksTimerFired();
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (178424 => 178425)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-01-14 18:25:44 UTC (rev 178424)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2015-01-14 18:39:03 UTC (rev 178425)
@@ -380,6 +380,8 @@
, m_viewStateChangeWantsSynchronousReply(false)
, m_isPlayingAudio(false)
{
+ m_webProcessLifetimeTracker.addObserver(m_visitedLinkProvider);
+
m_websiteDataStore->addWebPage(*this);
if (m_process->state() == WebProcessProxy::State::Running) {
@@ -708,6 +710,8 @@
m_contextMenuClient.initialize(0);
#endif
+ m_webProcessLifetimeTracker.pageWasInvalidated();
+
m_process->send(Messages::WebPage::Close(), m_pageID);
m_process->removeWebPage(m_pageID);
m_process->removeMessageReceiver(Messages::WebPageProxy::messageReceiverName(), m_pageID);
@@ -715,8 +719,6 @@
m_process->processPool().supplement<WebNotificationManagerProxy>()->clearNotifications(this);
m_websiteDataStore->removeWebPage(*this);
-
- m_webProcessLifetimeTracker.pageWasInvalidated();
}
bool WebPageProxy::tryClose()
Modified: trunk/Source/WebKit2/UIProcess/WebProcessLifetimeObserver.cpp (178424 => 178425)
--- trunk/Source/WebKit2/UIProcess/WebProcessLifetimeObserver.cpp 2015-01-14 18:25:44 UTC (rev 178424)
+++ trunk/Source/WebKit2/UIProcess/WebProcessLifetimeObserver.cpp 2015-01-14 18:39:03 UTC (rev 178425)
@@ -41,12 +41,24 @@
void WebProcessLifetimeObserver::addWebPage(WebPageProxy& webPageProxy)
{
- ASSERT(webPageProxy.process().state() == WebProcessProxy::State::Running);
+ auto& process = webPageProxy.process();
+
+ ASSERT(process.state() == WebProcessProxy::State::Running);
+
+ if (m_processes.add(&process).isNewEntry)
+ webProcessWillOpenConnection(process, *process.connection());
}
void WebProcessLifetimeObserver::removeWebPage(WebPageProxy& webPageProxy)
{
- ASSERT(webPageProxy.isClosed() || webPageProxy.process().state() != WebProcessProxy::State::Running);
+ auto& process = webPageProxy.process();
+
+ // FIXME: This should assert that the page is either closed or that the process is no longer running,
+ // but we have to make sure that removeWebPage is called after the connection has been removed in that case.
+ ASSERT(m_processes.contains(&process));
+
+ if (m_processes.remove(&process))
+ webProcessDidCloseConnection(process, *process.connection());
}
}
Modified: trunk/Source/WebKit2/UIProcess/WebProcessLifetimeObserver.h (178424 => 178425)
--- trunk/Source/WebKit2/UIProcess/WebProcessLifetimeObserver.h 2015-01-14 18:25:44 UTC (rev 178424)
+++ trunk/Source/WebKit2/UIProcess/WebProcessLifetimeObserver.h 2015-01-14 18:39:03 UTC (rev 178425)
@@ -26,6 +26,12 @@
#ifndef WebProcessLifetimeObserver_h
#define WebProcessLifetimeObserver_h
+#include <wtf/HashCountedSet.h>
+
+namespace IPC {
+class Connection;
+}
+
namespace WebKit {
class WebPageProxy;
@@ -40,6 +46,10 @@
void removeWebPage(WebPageProxy&);
private:
+ virtual void webProcessWillOpenConnection(WebProcessProxy&, IPC::Connection&) { }
+ virtual void webProcessDidCloseConnection(WebProcessProxy&, IPC::Connection&) { }
+
+ HashCountedSet<WebProcessProxy*> m_processes;
};
}