- Revision
- 188543
- Author
- wei...@apple.com
- Date
- 2015-08-17 14:50:24 -0700 (Mon, 17 Aug 2015)
Log Message
API::PageConfiguration's sessionID needs to be set whenever the API::WebsiteDataStore is set
https://bugs.webkit.org/show_bug.cgi?id=148097
Reviewed by Anders Carlsson.
Source/WebKit2:
We were getting an empty SessionID set on the WebPageProxy (and crashing asserting down the line)
when using a WKPageConfiguration with a WKWebsiteDataStore set on it.
Tests:
WebKit2.WKPageConfigurationBasicWithDataStore
WebKit2.WKPageConfigurationBasicWithNonPersistentDataStore
* UIProcess/API/APIPageConfiguration.cpp:
(API::PageConfiguration::setWebsiteDataStore):
Set the sessionID member whenever changing the WebsiteDataStore.
* UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
(WKWebsiteDataStoreGetDefaultDataStore):
(WKWebsiteDataStoreCreateNonPersistentDataStore):
* UIProcess/API/C/WKWebsiteDataStoreRef.h:
Expose functions for getting default and new non-persistent data stores via the C-SPI. Useful
for testing and transitioning users of the C-SPI to the new model.
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView initWithFrame:configuration:]):
Remove explicit setting of the sessionID. This is handled by the above call to setWebsiteDataStore().
Tools:
* TestWebKitAPI/Tests/WebKit2/WKPageConfiguration.cpp:
Add tests for WebsiteDataStores in the WKPageConfiguration.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (188542 => 188543)
--- trunk/Source/WebKit2/ChangeLog 2015-08-17 21:40:30 UTC (rev 188542)
+++ trunk/Source/WebKit2/ChangeLog 2015-08-17 21:50:24 UTC (rev 188543)
@@ -1,3 +1,32 @@
+2015-08-17 Sam Weinig <s...@webkit.org>
+
+ API::PageConfiguration's sessionID needs to be set whenever the API::WebsiteDataStore is set
+ https://bugs.webkit.org/show_bug.cgi?id=148097
+
+ Reviewed by Anders Carlsson.
+
+ We were getting an empty SessionID set on the WebPageProxy (and crashing asserting down the line)
+ when using a WKPageConfiguration with a WKWebsiteDataStore set on it.
+
+ Tests:
+ WebKit2.WKPageConfigurationBasicWithDataStore
+ WebKit2.WKPageConfigurationBasicWithNonPersistentDataStore
+
+ * UIProcess/API/APIPageConfiguration.cpp:
+ (API::PageConfiguration::setWebsiteDataStore):
+ Set the sessionID member whenever changing the WebsiteDataStore.
+
+ * UIProcess/API/C/WKWebsiteDataStoreRef.cpp:
+ (WKWebsiteDataStoreGetDefaultDataStore):
+ (WKWebsiteDataStoreCreateNonPersistentDataStore):
+ * UIProcess/API/C/WKWebsiteDataStoreRef.h:
+ Expose functions for getting default and new non-persistent data stores via the C-SPI. Useful
+ for testing and transitioning users of the C-SPI to the new model.
+
+ * UIProcess/API/Cocoa/WKWebView.mm:
+ (-[WKWebView initWithFrame:configuration:]):
+ Remove explicit setting of the sessionID. This is handled by the above call to setWebsiteDataStore().
+
2015-08-17 Wenson Hsieh <wenson_hs...@apple.com>
Cannot change WKWebView scrollView deceleration rate
Modified: trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.cpp (188542 => 188543)
--- trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.cpp 2015-08-17 21:40:30 UTC (rev 188542)
+++ trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.cpp 2015-08-17 21:50:24 UTC (rev 188543)
@@ -141,6 +141,11 @@
void PageConfiguration::setWebsiteDataStore(API::WebsiteDataStore* websiteDataStore)
{
m_websiteDataStore = websiteDataStore;
+
+ if (m_websiteDataStore)
+ m_sessionID = m_websiteDataStore->websiteDataStore().sessionID();
+ else
+ m_sessionID = WebCore::SessionID();
}
WebCore::SessionID PageConfiguration::sessionID()
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKWebsiteDataStoreRef.cpp (188542 => 188543)
--- trunk/Source/WebKit2/UIProcess/API/C/WKWebsiteDataStoreRef.cpp 2015-08-17 21:40:30 UTC (rev 188542)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKWebsiteDataStoreRef.cpp 2015-08-17 21:50:24 UTC (rev 188543)
@@ -33,3 +33,13 @@
{
return WebKit::toAPI(API::WebsiteDataStore::APIType);
}
+
+WKWebsiteDataStoreRef WKWebsiteDataStoreGetDefaultDataStore()
+{
+ return WebKit::toAPI(API::WebsiteDataStore::defaultDataStore().get());
+}
+
+WKWebsiteDataStoreRef WKWebsiteDataStoreCreateNonPersistentDataStore()
+{
+ return WebKit::toAPI(&API::WebsiteDataStore::createNonPersistentDataStore().leakRef());
+}
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKWebsiteDataStoreRef.h (188542 => 188543)
--- trunk/Source/WebKit2/UIProcess/API/C/WKWebsiteDataStoreRef.h 2015-08-17 21:40:30 UTC (rev 188542)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKWebsiteDataStoreRef.h 2015-08-17 21:50:24 UTC (rev 188543)
@@ -34,6 +34,9 @@
WK_EXPORT WKTypeID WKWebsiteDataStoreGetTypeID();
+WK_EXPORT WKWebsiteDataStoreRef WKWebsiteDataStoreGetDefaultDataStore();
+WK_EXPORT WKWebsiteDataStoreRef WKWebsiteDataStoreCreateNonPersistentDataStore();
+
#ifdef __cplusplus
}
#endif
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (188542 => 188543)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2015-08-17 21:40:30 UTC (rev 188542)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm 2015-08-17 21:50:24 UTC (rev 188543)
@@ -312,7 +312,6 @@
pageConfiguration->setUserContentController([_configuration userContentController]->_userContentControllerProxy.get());
pageConfiguration->setVisitedLinkProvider([_configuration _visitedLinkProvider]->_visitedLinkProvider.get());
pageConfiguration->setWebsiteDataStore([_configuration websiteDataStore]->_websiteDataStore.get());
- pageConfiguration->setSessionID(pageConfiguration->websiteDataStore()->websiteDataStore().sessionID());
pageConfiguration->setTreatsSHA1SignedCertificatesAsInsecure([_configuration _treatsSHA1SignedCertificatesAsInsecure]);
RefPtr<WebKit::WebPageGroup> pageGroup;
Modified: trunk/Tools/ChangeLog (188542 => 188543)
--- trunk/Tools/ChangeLog 2015-08-17 21:40:30 UTC (rev 188542)
+++ trunk/Tools/ChangeLog 2015-08-17 21:50:24 UTC (rev 188543)
@@ -1,3 +1,13 @@
+2015-08-17 Sam Weinig <s...@webkit.org>
+
+ API::PageConfiguration's sessionID needs to be set whenever the API::WebsiteDataStore is set
+ https://bugs.webkit.org/show_bug.cgi?id=148097
+
+ Reviewed by Anders Carlsson.
+
+ * TestWebKitAPI/Tests/WebKit2/WKPageConfiguration.cpp:
+ Add tests for WebsiteDataStores in the WKPageConfiguration.
+
2015-08-17 Brian Burg <bb...@apple.com>
Web Inspector: load ProtocolTestStub from the WebInspectorUI bundle
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2/WKPageConfiguration.cpp (188542 => 188543)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit2/WKPageConfiguration.cpp 2015-08-17 21:40:30 UTC (rev 188542)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2/WKPageConfiguration.cpp 2015-08-17 21:50:24 UTC (rev 188543)
@@ -31,6 +31,8 @@
#include "PlatformWebView.h"
#include "Test.h"
+#include <WebKit/WKWebsiteDataStoreRef.h>
+
namespace TestWebKitAPI {
TEST(WebKit2, WKPageConfigurationEmpty)
@@ -70,13 +72,61 @@
PlatformWebView webView(configuration.get());
setPageLoaderClient(webView.page());
+
+ WKRetainPtr<WKPageConfigurationRef> copiedConfiguration = adoptWK(WKPageCopyPageConfiguration(webView.page()));
+ ASSERT_EQ(context.get(), WKPageConfigurationGetContext(copiedConfiguration.get()));
WKRetainPtr<WKURLRef> url = "" "html"));
WKPageLoadURL(webView.page(), url.get());
+ didFinishLoad = false;
Util::run(&didFinishLoad);
}
+TEST(WebKit2, WKPageConfigurationBasicWithDataStore)
+{
+ WKRetainPtr<WKPageConfigurationRef> configuration = adoptWK(WKPageConfigurationCreate());
+ WKRetainPtr<WKContextRef> context = adoptWK(WKContextCreate());
+ WKPageConfigurationSetContext(configuration.get(), context.get());
+ WKRetainPtr<WKWebsiteDataStoreRef> websiteDataStore = WKWebsiteDataStoreGetDefaultDataStore();
+ WKPageConfigurationSetWebsiteDataStore(configuration.get(), websiteDataStore.get());
+
+ PlatformWebView webView(configuration.get());
+ setPageLoaderClient(webView.page());
+
+ WKRetainPtr<WKPageConfigurationRef> copiedConfiguration = adoptWK(WKPageCopyPageConfiguration(webView.page()));
+ ASSERT_EQ(context.get(), WKPageConfigurationGetContext(copiedConfiguration.get()));
+ ASSERT_EQ(WKWebsiteDataStoreGetDefaultDataStore(), WKPageConfigurationGetWebsiteDataStore(copiedConfiguration.get()));
+
+ WKRetainPtr<WKURLRef> url = "" "html"));
+ WKPageLoadURL(webView.page(), url.get());
+
+ didFinishLoad = false;
+ Util::run(&didFinishLoad);
+}
+
+TEST(WebKit2, WKPageConfigurationBasicWithNonPersistentDataStore)
+{
+ WKRetainPtr<WKPageConfigurationRef> configuration = adoptWK(WKPageConfigurationCreate());
+ WKRetainPtr<WKContextRef> context = adoptWK(WKContextCreate());
+ WKPageConfigurationSetContext(configuration.get(), context.get());
+ WKRetainPtr<WKWebsiteDataStoreRef> websiteDataStore = adoptWK(WKWebsiteDataStoreCreateNonPersistentDataStore());
+ WKPageConfigurationSetWebsiteDataStore(configuration.get(), websiteDataStore.get());
+
+ PlatformWebView webView(configuration.get());
+ setPageLoaderClient(webView.page());
+
+ WKRetainPtr<WKPageConfigurationRef> copiedConfiguration = adoptWK(WKPageCopyPageConfiguration(webView.page()));
+ ASSERT_EQ(context.get(), WKPageConfigurationGetContext(copiedConfiguration.get()));
+ ASSERT_EQ(websiteDataStore.get(), WKPageConfigurationGetWebsiteDataStore(copiedConfiguration.get()));
+
+ WKRetainPtr<WKURLRef> url = "" "html"));
+ WKPageLoadURL(webView.page(), url.get());
+
+ didFinishLoad = false;
+ Util::run(&didFinishLoad);
+}
+
} // namespace TestWebKitAPI
#endif