Diff
Modified: trunk/Source/WebKit2/ChangeLog (176844 => 176845)
--- trunk/Source/WebKit2/ChangeLog 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/ChangeLog 2014-12-05 17:33:29 UTC (rev 176845)
@@ -1,3 +1,38 @@
+2014-12-05 Anders Carlsson <[email protected]>
+
+ Make WebPageProxy hold on to a SessionID instead of an API:Session
+ https://bugs.webkit.org/show_bug.cgi?id=139302
+
+ Reviewed by Sam Weinig.
+
+ This is in preparation for adding API::WebsiteDataStore. Currently we have to keep the
+ Session ID and the WebsiteDataStore separate because we still need to support toggling private browsing.
+
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageSetSession):
+ * UIProcess/API/C/WKSessionRef.cpp:
+ (WKSessionCreate):
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView initWithFrame:configuration:]):
+ * UIProcess/API/Cocoa/_WKWebsiteDataStore.mm:
+ (+[_WKWebsiteDataStore nonPersistentDataStore]):
+ * UIProcess/APISession.cpp:
+ (API::generateID):
+ (API::Session::Session):
+ (API::Session::createEphemeral):
+ (API::Session::legacyPrivateSession): Deleted.
+ (API::Session::create): Deleted.
+ * UIProcess/APISession.h:
+ * UIProcess/WebContext.cpp:
+ (WebKit::WebContext::createWebPage):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::WebPageProxy):
+ (WebKit::WebPageProxy::setSessionID):
+ (WebKit::WebPageProxy::creationParameters):
+ (WebKit::WebPageProxy::setSession): Deleted.
+ * UIProcess/WebPageProxy.h:
+ (WebKit::WebPageProxy::sessionID):
+
2014-12-05 Eric Carlson <[email protected]>
[iOS] allow host application to opt-out of alternate fullscreen pt. 2
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (176844 => 176845)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp 2014-12-05 17:33:29 UTC (rev 176845)
@@ -1640,7 +1640,7 @@
void WKPageSetSession(WKPageRef pageRef, WKSessionRef session)
{
- toImpl(pageRef)->setSession(*toImpl(session));
+ toImpl(pageRef)->setSessionID(toImpl(session)->getID());
}
void WKPageRunJavaScriptInMainFrame(WKPageRef pageRef, WKStringRef scriptRef, void* context, WKPageRunJavaScriptFunction callback)
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKSessionRef.cpp (176844 => 176845)
--- trunk/Source/WebKit2/UIProcess/API/C/WKSessionRef.cpp 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKSessionRef.cpp 2014-12-05 17:33:29 UTC (rev 176845)
@@ -33,7 +33,11 @@
WKSessionRef WKSessionCreate(bool isEphemeral)
{
- RefPtr<API::Session> session = API::Session::create(isEphemeral);
+ // The implementation doesn't support non-ephemeral
+ if (!isEphemeral)
+ return nullptr;
+
+ RefPtr<API::Session> session = API::Session::createEphemeral();
return toAPI(session.release().leakRef());
}
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (176844 => 176845)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2014-12-05 17:33:29 UTC (rev 176845)
@@ -271,7 +271,7 @@
webPageConfiguration.userContentController = [_configuration userContentController]->_userContentControllerProxy.get();
webPageConfiguration.visitedLinkProvider = [_configuration _visitedLinkProvider]->_visitedLinkProvider.get();
- webPageConfiguration.session = [_configuration _websiteDataStore]->_session.get();
+ webPageConfiguration.sessionID = [_configuration _websiteDataStore]->_session->getID();
RefPtr<WebKit::WebPageGroup> pageGroup;
NSString *groupIdentifier = configuration._groupIdentifier;
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm (176844 => 176845)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStore.mm 2014-12-05 17:33:29 UTC (rev 176845)
@@ -39,7 +39,7 @@
+ (instancetype)nonPersistentDataStore
{
- RefPtr<API::Session> session = API::Session::create(true);
+ RefPtr<API::Session> session = API::Session::createEphemeral();
return [wrapper(*session.release().leakRef()) autorelease];
}
Modified: trunk/Source/WebKit2/UIProcess/APISession.cpp (176844 => 176845)
--- trunk/Source/WebKit2/UIProcess/APISession.cpp 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/UIProcess/APISession.cpp 2014-12-05 17:33:29 UTC (rev 176845)
@@ -30,12 +30,12 @@
namespace API {
-static uint64_t generateID(bool isEphemeral)
+static uint64_t generateID()
{
ASSERT(RunLoop::isMain());
static uint64_t uniqueSessionID = WebCore::SessionID::legacyPrivateSessionID().sessionID();
- ASSERT_UNUSED(isEphemeral, isEphemeral);
+
return ++uniqueSessionID;
}
@@ -47,28 +47,20 @@
return *defaultSession;
}
-Session& Session::legacyPrivateSession()
+Session::Session()
+ : m_sessionID(generateID())
{
- ASSERT(RunLoop::isMain());
-
- static Session* legacyPrivateSession = new Session(WebCore::SessionID::legacyPrivateSessionID());
- return *legacyPrivateSession;
}
-Session::Session(bool isEphemeral)
- : m_sessionID(generateID(isEphemeral))
-{
-}
-
Session::Session(WebCore::SessionID sessionID)
: m_sessionID(sessionID)
{
}
-PassRefPtr<Session> Session::create(bool isEphemeral)
+PassRefPtr<Session> Session::createEphemeral()
{
// FIXME: support creation of non-default, non-ephemeral sessions
- return adoptRef(new Session(isEphemeral));
+ return adoptRef(new Session());
}
bool Session::isEphemeral() const
Modified: trunk/Source/WebKit2/UIProcess/APISession.h (176844 => 176845)
--- trunk/Source/WebKit2/UIProcess/APISession.h 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/UIProcess/APISession.h 2014-12-05 17:33:29 UTC (rev 176845)
@@ -34,17 +34,17 @@
class Session : public API::ObjectImpl<API::Object::Type::Session> {
public:
- // FIXME: We can create sessions on demand, because we hardcode the fact that all sessions but the default one are ephemeral. We'll need to create them explicitly once sessions have more configuration options.
- static PassRefPtr<Session> create(bool isEphemeral);
+ static PassRefPtr<Session> createEphemeral();
+ virtual ~Session();
+
static Session& defaultSession();
- static Session& legacyPrivateSession();
bool isEphemeral() const;
WebCore::SessionID getID() const;
- virtual ~Session();
private:
- explicit Session(bool isEphemeral);
+ Session();
explicit Session(WebCore::SessionID);
+
WebCore::SessionID m_sessionID;
};
Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (176844 => 176845)
--- trunk/Source/WebKit2/UIProcess/WebContext.cpp 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp 2014-12-05 17:33:29 UTC (rev 176845)
@@ -860,8 +860,8 @@
configuration.preferences = &configuration.pageGroup->preferences();
if (!configuration.visitedLinkProvider)
configuration.visitedLinkProvider = m_visitedLinkProvider.get();
- if (!configuration.session)
- configuration.session = configuration.preferences->privateBrowsingEnabled() ? &API::Session::legacyPrivateSession() : &API::Session::defaultSession();
+ if (!configuration.sessionID.isValid())
+ configuration.sessionID = configuration.preferences->privateBrowsingEnabled() ? SessionID::legacyPrivateSessionID() : SessionID::defaultSessionID();
RefPtr<WebProcessProxy> process;
if (m_processModel == ProcessModelSharedSecondaryProcess) {
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (176844 => 176845)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2014-12-05 17:33:29 UTC (rev 176845)
@@ -321,7 +321,7 @@
, m_isTrackingTouchEvents(false)
#endif
, m_pageID(pageID)
- , m_session(*configuration.session)
+ , m_sessionID(configuration.sessionID)
, m_isPageSuspended(false)
, m_addsVisitedLinks(true)
#if ENABLE(REMOTE_INSPECTOR)
@@ -418,7 +418,7 @@
// FIXME: If we ever expose the session storage size as a preference, we need to pass it here.
IPC::Connection* connection = m_process->state() == WebProcessProxy::State::Running ? m_process->connection() : nullptr;
m_process->context().storageManager().createSessionStorageNamespace(m_pageID, connection, std::numeric_limits<unsigned>::max());
- setSession(*configuration.session);
+ setSessionID(configuration.sessionID);
#if PLATFORM(COCOA)
const CFIndex viewStateChangeRunLoopOrder = (CFIndex)RunLoopObserver::WellKnownRunLoopOrders::CoreAnimationCommit - 1;
@@ -611,14 +611,14 @@
return navigationID;
}
-void WebPageProxy::setSession(API::Session& session)
+void WebPageProxy::setSessionID(SessionID sessionID)
{
- m_session = session;
- m_process->send(Messages::WebPage::SetSessionID(session.getID()), m_pageID);
+ m_sessionID = sessionID;
+ m_process->send(Messages::WebPage::SetSessionID(sessionID), m_pageID);
#if ENABLE(NETWORK_PROCESS)
- if (session.isEphemeral())
- m_process->context().sendToNetworkingProcess(Messages::NetworkProcess::EnsurePrivateBrowsingSession(session.getID()));
+ if (sessionID.isEphemeral())
+ m_process->context().sendToNetworkingProcess(Messages::NetworkProcess::EnsurePrivateBrowsingSession(sessionID));
#endif
}
@@ -4602,7 +4602,7 @@
parameters.gapBetweenPages = m_gapBetweenPages;
parameters.userAgent = userAgent();
parameters.itemStates = m_backForwardList->itemStates();
- parameters.sessionID = m_session->getID();
+ parameters.sessionID = m_sessionID;
parameters.highestUsedBackForwardItemID = WebBackForwardListItem::highedUsedItemID();
parameters.userContentControllerID = m_userContentController ? m_userContentController->identifier() : 0;
parameters.visitedLinkTableID = m_visitedLinkProvider->identifier();
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (176844 => 176845)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-12-05 17:26:03 UTC (rev 176844)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2014-12-05 17:33:29 UTC (rev 176845)
@@ -227,7 +227,7 @@
WebUserContentControllerProxy* userContentController = nullptr;
VisitedLinkProvider* visitedLinkProvider = nullptr;
- API::Session* session = nullptr;
+ WebCore::SessionID sessionID;
WebPageProxy* relatedPage = nullptr;
WebPreferencesStore::ValueMap preferenceValues;
@@ -244,10 +244,9 @@
static PassRefPtr<WebPageProxy> create(PageClient&, WebProcessProxy&, uint64_t pageID, const WebPageConfiguration&);
virtual ~WebPageProxy();
- void setSession(API::Session&);
-
uint64_t pageID() const { return m_pageID; }
- WebCore::SessionID sessionID() const { return m_session->getID(); }
+ WebCore::SessionID sessionID() const { return m_sessionID; }
+ void setSessionID(WebCore::SessionID);
WebFrameProxy* mainFrame() const { return m_mainFrame.get(); }
WebFrameProxy* focusedFrame() const { return m_focusedFrame.get(); }
@@ -1492,7 +1491,7 @@
#endif
const uint64_t m_pageID;
- Ref<API::Session> m_session;
+ WebCore::SessionID m_sessionID;
bool m_isPageSuspended;
bool m_addsVisitedLinks;