Title: [188228] trunk/Source/WebKit2
Revision
188228
Author
wei...@apple.com
Date
2015-08-10 13:51:54 -0700 (Mon, 10 Aug 2015)

Log Message

Replace WebPageConfiguration with API::PageConfiguration and expose a C-SPI accessor for it
https://bugs.webkit.org/show_bug.cgi?id=147811

Reviewed by Darin Adler.

- Adds the missing pieces from WebPageConfiguration into API::PageConfiguration.
- Adds C-SPI to set and get the WebsiteDataStore on the WKPageConfigurationRef.
- Uses API::PageConfiguration to pass configuration information from WKWebView/WKView 
  to WebPageProxy.
- Stores the API::PageConfiguration on the WebPageProxy and exposes a new C-SPI function,
  WKPageCopyPageConfiguration, to get a copy of it.

* UIProcess/API/APIPageConfiguration.cpp:
(API::PageConfiguration::create):
(API::PageConfiguration::PageConfiguration):
(API::PageConfiguration::~PageConfiguration):
(API::PageConfiguration::copy):
(API::PageConfiguration::processPool):
(API::PageConfiguration::setRelatedPage):
(API::PageConfiguration::visitedLinkProvider):
(API::PageConfiguration::setVisitedLinkProvider):
(API::PageConfiguration::websiteDataStore):
(API::PageConfiguration::setWebsiteDataStore):
(API::PageConfiguration::sessionID):
(API::PageConfiguration::setSessionID):
(API::PageConfiguration::webPageConfiguration): Deleted.
* UIProcess/API/APIPageConfiguration.h:
(API::PageConfiguration::preferenceValues):
(API::PageConfiguration::treatsSHA1SignedCertificatesAsInsecure):
(API::PageConfiguration::setTreatsSHA1SignedCertificatesAsInsecure):
(API::PageConfiguration::alwaysRunsAtForegroundPriority):
(API::PageConfiguration::setAlwaysRunsAtForegroundPriority):
(API::PageConfiguration::create): Deleted.
* UIProcess/API/C/WKPage.cpp:
(WKPageGetPageGroup):
(WKPageCopyPageConfiguration):
(WKPageLoadURL):
* UIProcess/API/C/WKPage.h:
* UIProcess/API/C/WKPageConfigurationRef.cpp:
(WKPageConfigurationSetRelatedPage):
(WKPageConfigurationGetWebsiteDataStore):
(WKPageConfigurationSetWebsiteDataStore):
* UIProcess/API/C/WKPageConfigurationRef.h:
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView initWithFrame:configuration:]):
* UIProcess/API/ios/WKViewIOS.mm:
(-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]):
* UIProcess/API/mac/WKView.mm:
(-[WKView _setPrimaryTrackingArea:]):
(-[WKView initWithFrame:processPool:configuration:webView:]):
(-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
(-[WKView initWithFrame:configurationRef:]):
(-[WKView wantsUpdateLayer]):
* UIProcess/API/mac/WKViewInternal.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::create):
(WebKit::WebPageProxy::WebPageProxy):
(WebKit::WebPageProxy::~WebPageProxy):
(WebKit::WebPageProxy::configuration):
(WebKit::WebPageProxy::processIdentifier):
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::pageID):
(WebKit::WebPageProxy::sessionID):
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
(WebKit::WebProcessPool::createWebPage):
(WebKit::WebProcessPool::download):
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::webPage):
(WebKit::WebProcessProxy::createWebPage):
* UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::processPool):
* UIProcess/ios/WKContentView.h:
* UIProcess/ios/WKContentView.mm:
(-[WKContentView _commonInitializationWithProcessPool:configuration:]):
(-[WKContentView initWithFrame:processPool:configuration:webView:]):
(-[WKContentView initWithFrame:processPool:configuration:wkView:]):
(-[WKContentView dealloc]):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/CMakeLists.txt (188227 => 188228)


--- trunk/Source/WebKit2/CMakeLists.txt	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/CMakeLists.txt	2015-08-10 20:51:54 UTC (rev 188228)
@@ -393,6 +393,7 @@
     UIProcess/API/APIFrameInfo.cpp
     UIProcess/API/APINavigation.cpp
     UIProcess/API/APINavigationData.cpp
+    UIProcess/API/APIPageConfiguration.cpp
     UIProcess/API/APIProcessPoolConfiguration.cpp
     UIProcess/API/APISession.cpp
     UIProcess/API/APISessionState.cpp

Modified: trunk/Source/WebKit2/ChangeLog (188227 => 188228)


--- trunk/Source/WebKit2/ChangeLog	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/ChangeLog	2015-08-10 20:51:54 UTC (rev 188228)
@@ -1,3 +1,85 @@
+2015-08-08  Sam Weinig  <s...@webkit.org>
+
+        Replace WebPageConfiguration with API::PageConfiguration and expose a C-SPI accessor for it
+        https://bugs.webkit.org/show_bug.cgi?id=147811
+
+        Reviewed by Darin Adler.
+
+        - Adds the missing pieces from WebPageConfiguration into API::PageConfiguration.
+        - Adds C-SPI to set and get the WebsiteDataStore on the WKPageConfigurationRef.
+        - Uses API::PageConfiguration to pass configuration information from WKWebView/WKView 
+          to WebPageProxy.
+        - Stores the API::PageConfiguration on the WebPageProxy and exposes a new C-SPI function,
+          WKPageCopyPageConfiguration, to get a copy of it.
+
+        * UIProcess/API/APIPageConfiguration.cpp:
+        (API::PageConfiguration::create):
+        (API::PageConfiguration::PageConfiguration):
+        (API::PageConfiguration::~PageConfiguration):
+        (API::PageConfiguration::copy):
+        (API::PageConfiguration::processPool):
+        (API::PageConfiguration::setRelatedPage):
+        (API::PageConfiguration::visitedLinkProvider):
+        (API::PageConfiguration::setVisitedLinkProvider):
+        (API::PageConfiguration::websiteDataStore):
+        (API::PageConfiguration::setWebsiteDataStore):
+        (API::PageConfiguration::sessionID):
+        (API::PageConfiguration::setSessionID):
+        (API::PageConfiguration::webPageConfiguration): Deleted.
+        * UIProcess/API/APIPageConfiguration.h:
+        (API::PageConfiguration::preferenceValues):
+        (API::PageConfiguration::treatsSHA1SignedCertificatesAsInsecure):
+        (API::PageConfiguration::setTreatsSHA1SignedCertificatesAsInsecure):
+        (API::PageConfiguration::alwaysRunsAtForegroundPriority):
+        (API::PageConfiguration::setAlwaysRunsAtForegroundPriority):
+        (API::PageConfiguration::create): Deleted.
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageGetPageGroup):
+        (WKPageCopyPageConfiguration):
+        (WKPageLoadURL):
+        * UIProcess/API/C/WKPage.h:
+        * UIProcess/API/C/WKPageConfigurationRef.cpp:
+        (WKPageConfigurationSetRelatedPage):
+        (WKPageConfigurationGetWebsiteDataStore):
+        (WKPageConfigurationSetWebsiteDataStore):
+        * UIProcess/API/C/WKPageConfigurationRef.h:
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView initWithFrame:configuration:]):
+        * UIProcess/API/ios/WKViewIOS.mm:
+        (-[WKView _commonInitializationWithContextRef:pageGroupRef:relatedToPage:]):
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView _setPrimaryTrackingArea:]):
+        (-[WKView initWithFrame:processPool:configuration:webView:]):
+        (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
+        (-[WKView initWithFrame:configurationRef:]):
+        (-[WKView wantsUpdateLayer]):
+        * UIProcess/API/mac/WKViewInternal.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::create):
+        (WebKit::WebPageProxy::WebPageProxy):
+        (WebKit::WebPageProxy::~WebPageProxy):
+        (WebKit::WebPageProxy::configuration):
+        (WebKit::WebPageProxy::processIdentifier):
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::pageID):
+        (WebKit::WebPageProxy::sessionID):
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::createNewWebProcessRespectingProcessCountLimit):
+        (WebKit::WebProcessPool::createWebPage):
+        (WebKit::WebProcessPool::download):
+        * UIProcess/WebProcessPool.h:
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::webPage):
+        (WebKit::WebProcessProxy::createWebPage):
+        * UIProcess/WebProcessProxy.h:
+        (WebKit::WebProcessProxy::processPool):
+        * UIProcess/ios/WKContentView.h:
+        * UIProcess/ios/WKContentView.mm:
+        (-[WKContentView _commonInitializationWithProcessPool:configuration:]):
+        (-[WKContentView initWithFrame:processPool:configuration:webView:]):
+        (-[WKContentView initWithFrame:processPool:configuration:wkView:]):
+        (-[WKContentView dealloc]):
+
 2015-08-10  Commit Queue  <commit-qu...@webkit.org>
 
         Unreviewed, rolling out r187131 and r187286.

Modified: trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -37,6 +37,11 @@
 
 namespace API {
 
+Ref<PageConfiguration> PageConfiguration::create()
+{
+    return adoptRef(*new PageConfiguration);
+}
+
 PageConfiguration::PageConfiguration()
 {
 }
@@ -45,6 +50,28 @@
 {
 }
 
+Ref<PageConfiguration> PageConfiguration::copy() const
+{
+    auto copy = create();
+
+    copy->m_processPool = this->m_processPool;
+    copy->m_userContentController = this->m_userContentController;
+    copy->m_pageGroup = this->m_pageGroup;
+    copy->m_preferences = this->m_preferences;
+    copy->m_preferenceValues = this->m_preferenceValues;
+    copy->m_relatedPage = this->m_relatedPage;
+    copy->m_visitedLinkProvider = this->m_visitedLinkProvider;
+    copy->m_websiteDataStore = this->m_websiteDataStore;
+    copy->m_sessionID = this->m_sessionID;
+    copy->m_treatsSHA1SignedCertificatesAsInsecure = this->m_treatsSHA1SignedCertificatesAsInsecure;
+#if PLATFORM(IOS)
+    copy->m_alwaysRunsAtForegroundPriority = this->m_alwaysRunsAtForegroundPriority;
+#endif
+
+    return copy;
+}
+
+
 WebProcessPool* PageConfiguration::processPool()
 {
     return m_processPool.get();
@@ -95,16 +122,35 @@
     m_relatedPage = relatedPage;
 }
 
-WebKit::WebPageConfiguration PageConfiguration::webPageConfiguration()
+
+VisitedLinkProvider* PageConfiguration::visitedLinkProvider()
 {
-    WebKit::WebPageConfiguration configuration;
+    return m_visitedLinkProvider.get();
+}
 
-    configuration.userContentController = userContentController();
-    configuration.pageGroup = pageGroup();
-    configuration.preferences = preferences();
-    configuration.relatedPage = relatedPage();
+void PageConfiguration::setVisitedLinkProvider(VisitedLinkProvider* visitedLinkProvider)
+{
+    m_visitedLinkProvider = visitedLinkProvider;
+}
 
-    return configuration;
+API::WebsiteDataStore* PageConfiguration::websiteDataStore()
+{
+    return m_websiteDataStore.get();
 }
 
+void PageConfiguration::setWebsiteDataStore(API::WebsiteDataStore* websiteDataStore)
+{
+    m_websiteDataStore = websiteDataStore;
+}
+
+WebCore::SessionID PageConfiguration::sessionID()
+{
+    return m_sessionID;
+}
+
+void PageConfiguration::setSessionID(WebCore::SessionID sessionID)
+{
+    m_sessionID = sessionID;
+}
+
 } // namespace API

Modified: trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/APIPageConfiguration.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -27,27 +27,32 @@
 #define APIPageConfiguration_h
 
 #include "APIObject.h"
+#include "WebPreferencesStore.h"
+#include <WebCore/SessionID.h>
 #include <wtf/GetPtr.h>
 
 namespace WebKit {
-struct WebPageConfiguration;
-class WebUserContentControllerProxy;
-class WebProcessPool;
+class VisitedLinkProvider;
 class WebPageGroup;
+class WebPageProxy;
 class WebPreferences;
-class WebPageProxy;
+class WebProcessPool;
+class WebUserContentControllerProxy;
 }
 
 namespace API {
 
+class WebsiteDataStore;
+
 class PageConfiguration : public ObjectImpl<Object::Type::PageConfiguration> {
 public:
-    static Ref<PageConfiguration> create()
-    {
-        return adoptRef(*new PageConfiguration);
-    }
+    static Ref<PageConfiguration> create();
+
+    explicit PageConfiguration();
     virtual ~PageConfiguration();
 
+    Ref<PageConfiguration> copy() const;
+
     // FIXME: The configuration properties should return their default values
     // rather than nullptr.
     
@@ -63,19 +68,47 @@
     WebKit::WebPreferences* preferences();
     void setPreferences(WebKit::WebPreferences*);
 
+    WebKit::WebPreferencesStore::ValueMap& preferenceValues() { return m_preferenceValues; }
+
     WebKit::WebPageProxy* relatedPage();
     void setRelatedPage(WebKit::WebPageProxy*);
 
-    WebKit::WebPageConfiguration webPageConfiguration();
+    WebKit::VisitedLinkProvider* visitedLinkProvider();
+    void setVisitedLinkProvider(WebKit::VisitedLinkProvider*);
 
+    WebsiteDataStore* websiteDataStore();
+    void setWebsiteDataStore(WebsiteDataStore*);
+
+    WebCore::SessionID sessionID();
+    void setSessionID(WebCore::SessionID);
+
+    bool treatsSHA1SignedCertificatesAsInsecure() { return m_treatsSHA1SignedCertificatesAsInsecure; }
+    void setTreatsSHA1SignedCertificatesAsInsecure(bool treatsSHA1SignedCertificatesAsInsecure) { m_treatsSHA1SignedCertificatesAsInsecure = treatsSHA1SignedCertificatesAsInsecure; } 
+
+#if PLATFORM(IOS)
+    bool alwaysRunsAtForegroundPriority() { return m_alwaysRunsAtForegroundPriority; }
+    void setAlwaysRunsAtForegroundPriority(bool alwaysRunsAtForegroundPriority) { m_alwaysRunsAtForegroundPriority = alwaysRunsAtForegroundPriority; } 
+#endif
+
 private:
-    PageConfiguration();
 
     RefPtr<WebKit::WebProcessPool> m_processPool;
     RefPtr<WebKit::WebUserContentControllerProxy> m_userContentController;
     RefPtr<WebKit::WebPageGroup> m_pageGroup;
     RefPtr<WebKit::WebPreferences> m_preferences;
+    WebKit::WebPreferencesStore::ValueMap m_preferenceValues;
     RefPtr<WebKit::WebPageProxy> m_relatedPage;
+    RefPtr<WebKit::VisitedLinkProvider> m_visitedLinkProvider;
+
+    RefPtr<WebsiteDataStore> m_websiteDataStore;
+    // FIXME: We currently have to pass the session ID separately here to support the legacy private browsing session.
+    // Once we get rid of it we should get rid of this configuration parameter as well.
+    WebCore::SessionID m_sessionID;
+
+    bool m_treatsSHA1SignedCertificatesAsInsecure = false;
+#if PLATFORM(IOS)
+    bool m_alwaysRunsAtForegroundPriority = false;
+#endif
 };
 
 } // namespace API

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -37,6 +37,7 @@
 #include "APINavigationAction.h"
 #include "APINavigationClient.h"
 #include "APINavigationResponse.h"
+#include "APIPageConfiguration.h"
 #include "APIPolicyClient.h"
 #include "APISessionState.h"
 #include "APIUIClient.h"
@@ -127,6 +128,11 @@
     return toAPI(&toImpl(pageRef)->pageGroup());
 }
 
+WKPageConfigurationRef WKPageCopyPageConfiguration(WKPageRef pageRef)
+{
+    return toAPI(&toImpl(pageRef)->configuration().copy().leakRef());
+}
+
 void WKPageLoadURL(WKPageRef pageRef, WKURLRef URLRef)
 {
     toImpl(pageRef)->loadRequest(URL(URL(), toWTFString(URLRef)));

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -59,6 +59,8 @@
 WK_EXPORT WKContextRef WKPageGetContext(WKPageRef page);
 WK_EXPORT WKPageGroupRef WKPageGetPageGroup(WKPageRef page);
 
+WK_EXPORT WKPageConfigurationRef WKPageCopyPageConfiguration(WKPageRef page);
+
 // URL Requests
 WK_EXPORT void WKPageLoadURL(WKPageRef page, WKURLRef url);
 WK_EXPORT void WKPageLoadURLWithUserData(WKPageRef page, WKURLRef url, WKTypeRef userData);

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPageConfigurationRef.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPageConfigurationRef.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPageConfigurationRef.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -93,3 +93,13 @@
 {
     toImpl(configuration)->setRelatedPage(toImpl(relatedPage));
 }
+
+WKWebsiteDataStoreRef WKPageConfigurationGetWebsiteDataStore(WKPageConfigurationRef configuration)
+{
+    return toAPI(toImpl(configuration)->websiteDataStore());
+}
+
+void WKPageConfigurationSetWebsiteDataStore(WKPageConfigurationRef configuration, WKWebsiteDataStoreRef websiteDataStore)
+{
+    toImpl(configuration)->setWebsiteDataStore(toImpl(websiteDataStore));
+}

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPageConfigurationRef.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPageConfigurationRef.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPageConfigurationRef.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -51,6 +51,9 @@
 WK_EXPORT WKPageRef WKPageConfigurationGetRelatedPage(WKPageConfigurationRef configuration);
 WK_EXPORT void WKPageConfigurationSetRelatedPage(WKPageConfigurationRef configuration, WKPageRef relatedPage);
 
+WK_EXPORT WKWebsiteDataStoreRef WKPageConfigurationGetWebsiteDataStore(WKPageConfigurationRef configuration);
+WK_EXPORT void WKPageConfigurationSetWebsiteDataStore(WKPageConfigurationRef configuration, WKWebsiteDataStoreRef websiteDataStore);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2015-08-10 20:51:54 UTC (rev 188228)
@@ -29,6 +29,7 @@
 #if WK_API_ENABLED
 
 #import "APIFormClient.h"
+#import "APIPageConfiguration.h"
 #import "APISerializedScriptValue.h"
 #import "CompletionHandlerCallChecker.h"
 #import "DiagnosticLoggingClient.h"
@@ -300,36 +301,38 @@
     CGRect bounds = self.bounds;
 
     WebKit::WebProcessPool& processPool = *[_configuration processPool]->_processPool;
+    
+    auto pageConfiguration = API::PageConfiguration::create();
 
-    WebKit::WebPageConfiguration webPageConfiguration;
-    webPageConfiguration.preferences = [_configuration preferences]->_preferences.get();
+    pageConfiguration->setProcessPool(&processPool);
+    pageConfiguration->setPreferences([_configuration preferences]->_preferences.get());
     if (WKWebView *relatedWebView = [_configuration _relatedWebView])
-        webPageConfiguration.relatedPage = relatedWebView->_page.get();
+        pageConfiguration->setRelatedPage(relatedWebView->_page.get());
 
-    webPageConfiguration.userContentController = [_configuration userContentController]->_userContentControllerProxy.get();
-    webPageConfiguration.visitedLinkProvider = [_configuration _visitedLinkProvider]->_visitedLinkProvider.get();
-    webPageConfiguration.websiteDataStore = &[_configuration websiteDataStore]->_websiteDataStore->websiteDataStore();
-    webPageConfiguration.sessionID = webPageConfiguration.websiteDataStore->sessionID();
-    webPageConfiguration.treatsSHA1SignedCertificatesAsInsecure = [_configuration _treatsSHA1SignedCertificatesAsInsecure];
+    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;
     NSString *groupIdentifier = configuration._groupIdentifier;
     if (groupIdentifier.length) {
         pageGroup = WebKit::WebPageGroup::create(configuration._groupIdentifier);
-        webPageConfiguration.pageGroup = pageGroup.get();
+        pageConfiguration->setPageGroup(pageGroup.get());
     }
 
-    webPageConfiguration.preferenceValues.set(WebKit::WebPreferencesKey::suppressesIncrementalRenderingKey(), WebKit::WebPreferencesStore::Value(!![_configuration suppressesIncrementalRendering]));
+    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::suppressesIncrementalRenderingKey(), WebKit::WebPreferencesStore::Value(!![_configuration suppressesIncrementalRendering]));
 
 #if PLATFORM(IOS)
-    webPageConfiguration.alwaysRunsAtForegroundPriority = [_configuration _alwaysRunsAtForegroundPriority];
+    pageConfiguration->setAlwaysRunsAtForegroundPriority([_configuration _alwaysRunsAtForegroundPriority]);
 
-    webPageConfiguration.preferenceValues.set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsInlineMediaPlayback]));
-    webPageConfiguration.preferenceValues.set(WebKit::WebPreferencesKey::allowsPictureInPictureMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsPictureInPictureMediaPlayback] && shouldAllowPictureInPictureMediaPlayback()));
-    webPageConfiguration.preferenceValues.set(WebKit::WebPreferencesKey::requiresUserGestureForMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration requiresUserActionForMediaPlayback]));
+    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsInlineMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsInlineMediaPlayback]));
+    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsPictureInPictureMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsPictureInPictureMediaPlayback] && shouldAllowPictureInPictureMediaPlayback()));
+    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::requiresUserGestureForMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration requiresUserActionForMediaPlayback]));
 #endif
 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
-    webPageConfiguration.preferenceValues.set(WebKit::WebPreferencesKey::allowsAirPlayForMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsAirPlayForMediaPlayback]));
+    pageConfiguration->preferenceValues().set(WebKit::WebPreferencesKey::allowsAirPlayForMediaPlaybackKey(), WebKit::WebPreferencesStore::Value(!![_configuration allowsAirPlayForMediaPlayback]));
 #endif
 
 #if PLATFORM(IOS)
@@ -339,7 +342,7 @@
 
     [self addSubview:_scrollView.get()];
 
-    _contentView = adoptNS([[WKContentView alloc] initWithFrame:bounds processPool:processPool configuration:WTF::move(webPageConfiguration) webView:self]);
+    _contentView = adoptNS([[WKContentView alloc] initWithFrame:bounds processPool:processPool configuration:WTF::move(pageConfiguration) webView:self]);
 
     _page = [_contentView page];
     _page->setDeviceOrientation(deviceOrientation());
@@ -367,7 +370,7 @@
 #endif
 
 #if PLATFORM(MAC)
-    _wkView = adoptNS([[WKView alloc] initWithFrame:bounds processPool:processPool configuration:WTF::move(webPageConfiguration) webView:self]);
+    _wkView = adoptNS([[WKView alloc] initWithFrame:bounds processPool:processPool configuration:WTF::move(pageConfiguration) webView:self]);
     [self addSubview:_wkView.get()];
     _page = WebKit::toImpl([_wkView pageRef]);
 

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -21,6 +21,7 @@
 #include "WebKitWebContext.h"
 
 #include "APIDownloadClient.h"
+#include "APIPageConfiguration.h"
 #include "APIProcessPoolConfiguration.h"
 #include "APIString.h"
 #include "TextChecker.h"
@@ -1315,14 +1316,15 @@
 void webkitWebContextCreatePageForWebView(WebKitWebContext* context, WebKitWebView* webView, WebKitUserContentManager* userContentManager, WebKitWebView* relatedView)
 {
     WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(webView);
-    WebPageConfiguration webPageConfiguration;
-    webPageConfiguration.preferences = webkitSettingsGetPreferences(webkit_web_view_get_settings(webView));
-    webPageConfiguration.relatedPage = relatedView ? webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(relatedView)) : nullptr;
-    webPageConfiguration.userContentController = userContentManager ? webkitUserContentManagerGetUserContentControllerProxy(userContentManager) : nullptr;
-    webPageConfiguration.websiteDataStore = &webkitWebsiteDataManagerGetDataStore(context->priv->websiteDataManager.get());
-    webPageConfiguration.sessionID = webPageConfiguration.websiteDataStore->sessionID();
-    webkitWebViewBaseCreateWebPage(webViewBase, context->priv->context.get(), WTF::move(webPageConfiguration));
 
+    auto pageConfiguration = API::PageConfiguration::create();
+    pageConfiguration->setPreferences(webkitSettingsGetPreferences(webkit_web_view_get_settings(webView)));
+    pageConfiguration->setRelatedPage(relatedView ? webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(relatedView)) : nullptr);
+    pageConfiguration->setUserContentController(userContentManager ? webkitUserContentManagerGetUserContentControllerProxy(userContentManager) : nullptr);
+    pageConfiguration->setWebsiteDataStore(&webkitWebsiteDataManagerGetDataStore(context->priv->websiteDataManager.get()));
+    pageConfiguration->setSessionID(pageConfiguration->websiteDataStore()->websiteDataStore().sessionID());
+    webkitWebViewBaseCreateWebPage(webViewBase, context->priv->context.get(), WTF::move(pageConfiguration));
+
     WebPageProxy* page = webkitWebViewBaseGetPage(webViewBase);
     context->priv->webViews.set(page->pageID(), webView);
 }

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -29,6 +29,7 @@
 #include "config.h"
 #include "WebKitWebViewBase.h"
 
+#include "APIPageConfiguration.h"
 #include "DrawingAreaProxyImpl.h"
 #include "InputMethodFilter.h"
 #include "KeyBindingTranslator.h"
@@ -1045,12 +1046,13 @@
 WebKitWebViewBase* webkitWebViewBaseCreate(WebProcessPool* context, WebPreferences* preferences, WebPageGroup* pageGroup, WebUserContentControllerProxy* userContentController, WebPageProxy* relatedPage)
 {
     WebKitWebViewBase* webkitWebViewBase = WEBKIT_WEB_VIEW_BASE(g_object_new(WEBKIT_TYPE_WEB_VIEW_BASE, nullptr));
-    WebPageConfiguration webPageConfiguration;
-    webPageConfiguration.preferences = preferences;
-    webPageConfiguration.pageGroup = pageGroup;
-    webPageConfiguration.relatedPage = relatedPage;
-    webPageConfiguration.userContentController = userContentController;
-    webkitWebViewBaseCreateWebPage(webkitWebViewBase, context, WTF::move(webPageConfiguration));
+
+    auto pageConfiguration = API::PageConfiguration::create();
+    pageConfiguration->setPreferences(preferences);
+    pageConfiguration->setPageGroup(pageGroup);
+    pageConfiguration->setRelatedPage(relatedPage);
+    pageConfiguration->setUserContentController(userContentController);
+    webkitWebViewBaseCreateWebPage(webkitWebViewBase, context, WTF::move(pageConfiguration));
     return webkitWebViewBase;
 }
 
@@ -1071,7 +1073,7 @@
 }
 #endif // HAVE(GTK_SCALE_FACTOR)
 
-void webkitWebViewBaseCreateWebPage(WebKitWebViewBase* webkitWebViewBase, WebProcessPool* context, WebPageConfiguration&& configuration)
+void webkitWebViewBaseCreateWebPage(WebKitWebViewBase* webkitWebViewBase, WebProcessPool* context, Ref<API::PageConfiguration>&& configuration)
 {
     WebKitWebViewBasePrivate* priv = webkitWebViewBase->priv;
     priv->pageProxy = context->createWebPage(*priv->pageClient, WTF::move(configuration));

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -39,7 +39,7 @@
 WebKitWebViewBase* webkitWebViewBaseCreate(WebKit::WebProcessPool*, WebKit::WebPreferences*, WebKit::WebPageGroup*, WebKit::WebUserContentControllerProxy*, WebKit::WebPageProxy*);
 GtkIMContext* webkitWebViewBaseGetIMContext(WebKitWebViewBase*);
 WebKit::WebPageProxy* webkitWebViewBaseGetPage(WebKitWebViewBase*);
-void webkitWebViewBaseCreateWebPage(WebKitWebViewBase*, WebKit::WebProcessPool*, WebKit::WebPageConfiguration&&);
+void webkitWebViewBaseCreateWebPage(WebKitWebViewBase*, WebKit::WebProcessPool*, Ref<API::PageConfiguration>&&);
 void webkitWebViewBaseSetTooltipText(WebKitWebViewBase*, const char*);
 void webkitWebViewBaseSetTooltipArea(WebKitWebViewBase*, const WebCore::IntRect&);
 void webkitWebViewBaseForwardNextKeyEvent(WebKitWebViewBase*);

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -70,7 +70,7 @@
 };
 
 struct _WebKitWebsiteDataManagerPrivate {
-    RefPtr<WebsiteDataStore> websiteDataStore;
+    RefPtr<API::WebsiteDataStore> websiteDataStore;
     GUniquePtr<char> baseDataDirectory;
     GUniquePtr<char> baseCacheDirectory;
     GUniquePtr<char> localStorageDirectory;
@@ -299,12 +299,12 @@
 WebKitWebsiteDataManager* webkitWebsiteDataManagerCreate(WebsiteDataStore::Configuration&& configuration)
 {
     WebKitWebsiteDataManager* manager = WEBKIT_WEBSITE_DATA_MANAGER(g_object_new(WEBKIT_TYPE_WEBSITE_DATA_MANAGER, nullptr));
-    manager->priv->websiteDataStore = WebsiteDataStore::create(WTF::move(configuration));
+    manager->priv->websiteDataStore = API::WebsiteDataStore::create(WTF::move(configuration));
 
     return manager;
 }
 
-WebsiteDataStore& webkitWebsiteDataManagerGetDataStore(WebKitWebsiteDataManager* manager)
+API::WebsiteDataStore& webkitWebsiteDataManagerGetDataStore(WebKitWebsiteDataManager* manager)
 {
     WebKitWebsiteDataManagerPrivate* priv = manager->priv;
     if (!priv->websiteDataStore) {
@@ -318,7 +318,7 @@
         configuration.webSQLDatabaseDirectory = !priv->webSQLDirectory ?
             API::WebsiteDataStore::defaultWebSQLDatabaseDirectory() : WebCore::filenameToString(priv->webSQLDirectory.get());
         configuration.mediaKeysStorageDirectory = API::WebsiteDataStore::defaultMediaKeysStorageDirectory();
-        priv->websiteDataStore = WebsiteDataStore::create(WTF::move(configuration));
+        priv->websiteDataStore = API::WebsiteDataStore::create(WTF::move(configuration));
     }
 
     return *priv->websiteDataStore;

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManagerPrivate.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -20,10 +20,11 @@
 #ifndef WebKitWebsiteDataManagerPrivate_h
 #define WebKitWebsiteDataManagerPrivate_h
 
+#include "APIWebsiteDataStore.h"
 #include "WebKitPrivate.h"
 #include "WebsiteDataStore.h"
 
 WebKitWebsiteDataManager* webkitWebsiteDataManagerCreate(WebKit::WebsiteDataStore::Configuration&&);
-WebKit::WebsiteDataStore& webkitWebsiteDataManagerGetDataStore(WebKitWebsiteDataManager*);
+API::WebsiteDataStore& webkitWebsiteDataManagerGetDataStore(WebKitWebsiteDataManager*);
 
 #endif // WebKitWebsiteDataManagerPrivate_h

Modified: trunk/Source/WebKit2/UIProcess/API/ios/WKViewIOS.mm (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/ios/WKViewIOS.mm	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/ios/WKViewIOS.mm	2015-08-10 20:51:54 UTC (rev 188228)
@@ -28,6 +28,7 @@
 
 #if PLATFORM(IOS)
 
+#import "APIPageConfiguration.h"
 #import "RemoteLayerTreeTransaction.h"
 #import "UIKitSPI.h"
 #import "ViewGestureController.h"
@@ -225,11 +226,12 @@
 
     [self addSubview:_scrollView.get()];
 
-    WebKit::WebPageConfiguration webPageConfiguration;
-    webPageConfiguration.pageGroup = toImpl(pageGroupRef);
-    webPageConfiguration.relatedPage = toImpl(relatedPage);
+    auto configuration = API::PageConfiguration::create();
+    configuration->setProcessPool(toImpl(contextRef));
+    configuration->setPageGroup(toImpl(pageGroupRef));
+    configuration->setRelatedPage(toImpl(relatedPage));
 
-    _contentView = adoptNS([[WKContentView alloc] initWithFrame:bounds processPool:*toImpl(contextRef) configuration:WTF::move(webPageConfiguration) wkView:self]);
+    _contentView = adoptNS([[WKContentView alloc] initWithFrame:bounds processPool:*toImpl(contextRef) configuration:WTF::move(configuration) wkView:self]);
 
     [[_contentView layer] setAnchorPoint:CGPointZero];
     [_contentView setFrame:bounds];

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2015-08-10 20:51:54 UTC (rev 188228)
@@ -3744,7 +3744,7 @@
     [self addTrackingArea:trackingArea];
 }
 
-- (instancetype)initWithFrame:(NSRect)frame processPool:(WebProcessPool&)processPool configuration:(WebPageConfiguration)webPageConfiguration webView:(WKWebView *)webView
+- (instancetype)initWithFrame:(NSRect)frame processPool:(WebProcessPool&)processPool configuration:(Ref<API::PageConfiguration>&&)configuration webView:(WKWebView *)webView
 {
     self = [super initWithFrame:frame];
     if (!self)
@@ -3766,7 +3766,7 @@
     [self addTrackingArea:_data->_primaryTrackingArea.get()];
 
     _data->_pageClient = std::make_unique<PageClientImpl>(self, webView);
-    _data->_page = processPool.createWebPage(*_data->_pageClient, WTF::move(webPageConfiguration));
+    _data->_page = processPool.createWebPage(*_data->_pageClient, WTF::move(configuration));
     _data->_page->setAddsVisitedLinks(processPool.historyClient().addsVisitedLinks());
 
     _data->_page->setIntrinsicDeviceScaleFactor([self _intrinsicDeviceScaleFactor]);
@@ -3994,19 +3994,20 @@
 
 - (id)initWithFrame:(NSRect)frame contextRef:(WKContextRef)contextRef pageGroupRef:(WKPageGroupRef)pageGroupRef relatedToPage:(WKPageRef)relatedPage
 {
-    WebPageConfiguration webPageConfiguration;
-    webPageConfiguration.pageGroup = toImpl(pageGroupRef);
-    webPageConfiguration.relatedPage = toImpl(relatedPage);
+    auto configuration = API::PageConfiguration::create();
+    configuration->setProcessPool(toImpl(contextRef));
+    configuration->setPageGroup(toImpl(pageGroupRef));
+    configuration->setRelatedPage(toImpl(relatedPage));
 
-    return [self initWithFrame:frame processPool:*toImpl(contextRef) configuration:webPageConfiguration webView:nil];
+    return [self initWithFrame:frame processPool:*toImpl(contextRef) configuration:WTF::move(configuration) webView:nil];
 }
 
-- (id)initWithFrame:(NSRect)frame configurationRef:(WKPageConfigurationRef)configuration
+- (id)initWithFrame:(NSRect)frame configurationRef:(WKPageConfigurationRef)configurationRef
 {
-    auto& processPool = *toImpl(configuration)->processPool();
-    auto webPageConfiguration = toImpl(configuration)->webPageConfiguration();
+    Ref<API::PageConfiguration> configuration = *toImpl(configurationRef);
+    auto& processPool = *configuration->processPool();
 
-    return [self initWithFrame:frame processPool:processPool configuration:webPageConfiguration webView:nil];
+    return [self initWithFrame:frame processPool:processPool configuration:WTF::move(configuration) webView:nil];
 }
 
 - (BOOL)wantsUpdateLayer

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -38,6 +38,7 @@
 
 namespace API {
 class Object;
+class PageConfiguration;
 }
 
 namespace IPC {
@@ -58,7 +59,6 @@
 class WebProcessPool;
 struct ColorSpaceData;
 struct EditorState;
-struct WebPageConfiguration;
 }
 
 @class WKFullScreenWindowController;
@@ -68,9 +68,7 @@
 #endif
 
 @interface WKView ()
-#if WK_API_ENABLED
-- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(WebKit::WebPageConfiguration)webPageConfiguration webView:(WKWebView *)webView;
-#endif
+- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(Ref<API::PageConfiguration>&&)configuration webView:(WKWebView *)webView;
 
 - (std::unique_ptr<WebKit::DrawingAreaProxy>)_createDrawingAreaProxy;
 - (BOOL)_isFocused;

Modified: trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -29,6 +29,7 @@
 
 #include "WebView.h"
 
+#include "APIPageConfiguration.h"
 #include "CoordinatedDrawingAreaProxy.h"
 #include "CoordinatedGraphicsScene.h"
 #include "CoordinatedLayerTreeHostProxy.h"
@@ -52,11 +53,11 @@
     , m_visible(false)
     , m_opacity(1.0)
 {
-    WebPageConfiguration webPageConfiguration;
-    webPageConfiguration.pageGroup = pageGroup;
+    auto pageConfiguration = API::PageConfiguration::create();
+    pageConfiguration->setPageGroup(pageGroup);
 
     // Need to call createWebPage after other data members, specifically m_visible, are initialized.
-    m_page = context->createWebPage(*this, WTF::move(webPageConfiguration));
+    m_page = context->createWebPage(*this, WTF::move(pageConfiguration));
 
     m_page->pageGroup().preferences().setAcceleratedCompositingEnabled(true);
     m_page->pageGroup().preferences().setForceCompositingMode(true);

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -40,6 +40,7 @@
 #include "APINavigationAction.h"
 #include "APINavigationClient.h"
 #include "APINavigationResponse.h"
+#include "APIPageConfiguration.h"
 #include "APIPolicyClient.h"
 #include "APISecurityOrigin.h"
 #include "APIUIClient.h"
@@ -293,13 +294,14 @@
     PageClient& m_pageClient;
 };
 
-Ref<WebPageProxy> WebPageProxy::create(PageClient& pageClient, WebProcessProxy& process, uint64_t pageID, const WebPageConfiguration& configuration)
+Ref<WebPageProxy> WebPageProxy::create(PageClient& pageClient, WebProcessProxy& process, uint64_t pageID, Ref<API::PageConfiguration>&& configuration)
 {
-    return adoptRef(*new WebPageProxy(pageClient, process, pageID, configuration));
+    return adoptRef(*new WebPageProxy(pageClient, process, pageID, WTF::move(configuration)));
 }
 
-WebPageProxy::WebPageProxy(PageClient& pageClient, WebProcessProxy& process, uint64_t pageID, const WebPageConfiguration& configuration)
+WebPageProxy::WebPageProxy(PageClient& pageClient, WebProcessProxy& process, uint64_t pageID, Ref<API::PageConfiguration>&& configuration)
     : m_pageClient(pageClient)
+    , m_configuration(WTF::move(configuration))
     , m_loaderClient(std::make_unique<API::LoaderClient>())
     , m_policyClient(std::make_unique<API::PolicyClient>())
     , m_formClient(std::make_unique<API::FormClient>())
@@ -311,14 +313,14 @@
 #endif
     , m_navigationState(std::make_unique<WebNavigationState>())
     , m_process(process)
-    , m_pageGroup(*configuration.pageGroup)
-    , m_preferences(*configuration.preferences)
-    , m_userContentController(configuration.userContentController)
-    , m_visitedLinkProvider(*configuration.visitedLinkProvider)
-    , m_websiteDataStore(*configuration.websiteDataStore)
+    , m_pageGroup(*m_configuration->pageGroup())
+    , m_preferences(*m_configuration->preferences())
+    , m_userContentController(m_configuration->userContentController())
+    , m_visitedLinkProvider(*m_configuration->visitedLinkProvider())
+    , m_websiteDataStore(m_configuration->websiteDataStore()->websiteDataStore())
     , m_mainFrame(nullptr)
     , m_userAgent(standardUserAgent())
-    , m_treatsSHA1CertificatesAsInsecure(configuration.treatsSHA1SignedCertificatesAsInsecure)
+    , m_treatsSHA1CertificatesAsInsecure(m_configuration->treatsSHA1SignedCertificatesAsInsecure())
 #if PLATFORM(IOS)
     , m_hasReceivedLayerTreeTransactionAfterDidCommitLoad(true)
     , m_firstLayerTreeTransactionIdAfterDidCommitLoad(0)
@@ -335,7 +337,7 @@
     , m_viewState(ViewState::NoFlags)
     , m_viewWasEverInWindow(false)
 #if PLATFORM(IOS)
-    , m_alwaysRunsAtForegroundPriority(configuration.alwaysRunsAtForegroundPriority)
+    , m_alwaysRunsAtForegroundPriority(m_configuration->alwaysRunsAtForegroundPriority())
 #endif
     , m_backForwardList(WebBackForwardList::create(*this))
     , m_maintainsInactiveSelection(false)
@@ -379,7 +381,7 @@
     , m_isTrackingTouchEvents(false)
 #endif
     , m_pageID(pageID)
-    , m_sessionID(configuration.sessionID)
+    , m_sessionID(m_configuration->sessionID())
     , m_isPageSuspended(false)
     , m_addsVisitedLinks(true)
 #if ENABLE(REMOTE_INSPECTOR)
@@ -436,7 +438,7 @@
 #endif
     , m_scrollPinningBehavior(DoNotPin)
     , m_navigationID(0)
-    , m_configurationPreferenceValues(configuration.preferenceValues)
+    , m_configurationPreferenceValues(m_configuration->preferenceValues())
     , m_potentiallyChangedViewStateFlags(ViewState::NoFlags)
     , m_viewStateChangeWantsSynchronousReply(false)
 {
@@ -518,6 +520,11 @@
 #endif
 }
 
+const API::PageConfiguration& WebPageProxy::configuration() const
+{
+    return m_configuration.get();
+}
+
 PlatformProcessIdentifier WebPageProxy::processIdentifier() const
 {
     if (m_isClosed)

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -254,28 +254,6 @@
 typedef GenericCallback<const WebCore::MachSendRight&> MachSendRightCallback;
 #endif
 
-struct WebPageConfiguration {
-    WebPageGroup* pageGroup = nullptr;
-    WebPreferences* preferences = nullptr;
-    WebUserContentControllerProxy* userContentController = nullptr;
-    VisitedLinkProvider* visitedLinkProvider = nullptr;
-
-    WebsiteDataStore* websiteDataStore = nullptr;
-    // FIXME: We currently have to pass the session ID separately here to support the legacy private browsing session.
-    // Once we get rid of it we should get rid of this configuration parameter as well.
-    WebCore::SessionID sessionID;
-
-    WebPageProxy* relatedPage = nullptr;
-
-    bool treatsSHA1SignedCertificatesAsInsecure = false;
-
-#if PLATFORM(IOS)
-    bool alwaysRunsAtForegroundPriority = false;
-#endif
-
-    WebPreferencesStore::ValueMap preferenceValues;
-};
-
 class WebPageProxy : public API::ObjectImpl<API::Object::Type::Page>
 #if ENABLE(INPUT_TYPE_COLOR)
     , public WebColorPicker::Client
@@ -287,9 +265,11 @@
     , public IPC::MessageReceiver
     , public IPC::MessageSender {
 public:
-    static Ref<WebPageProxy> create(PageClient&, WebProcessProxy&, uint64_t pageID, const WebPageConfiguration&);
+    static Ref<WebPageProxy> create(PageClient&, WebProcessProxy&, uint64_t pageID, Ref<API::PageConfiguration>&&);
     virtual ~WebPageProxy();
 
+    const API::PageConfiguration& configuration() const;
+
     uint64_t pageID() const { return m_pageID; }
     WebCore::SessionID sessionID() const { return m_sessionID; }
     void setSessionID(WebCore::SessionID);
@@ -1084,7 +1064,7 @@
     void clearWheelEventTestTrigger();
 
 private:
-    WebPageProxy(PageClient&, WebProcessProxy&, uint64_t pageID, const WebPageConfiguration&);
+    WebPageProxy(PageClient&, WebProcessProxy&, uint64_t pageID, Ref<API::PageConfiguration>&&);
     void platformInitialize();
 
     void updateViewState(WebCore::ViewState::Flags flagsToUpdate = WebCore::ViewState::AllFlags);
@@ -1488,6 +1468,8 @@
     void handleSynchronousMessage(IPC::Connection&, const String& messageName, const UserData& messageBody, UserData& returnUserData);
 
     PageClient& m_pageClient;
+    Ref<API::PageConfiguration> m_configuration;
+
     std::unique_ptr<API::LoaderClient> m_loaderClient;
     std::unique_ptr<API::PolicyClient> m_policyClient;
     std::unique_ptr<API::NavigationClient> m_navigationClient;

Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -29,6 +29,7 @@
 #include "APIArray.h"
 #include "APIDownloadClient.h"
 #include "APILegacyContextHistoryClient.h"
+#include "APIPageConfiguration.h"
 #include "APIProcessPoolConfiguration.h"
 #include "CustomProtocolManagerMessages.h"
 #include "DownloadProxy.h"
@@ -831,18 +832,18 @@
     return *process;
 }
 
-PassRefPtr<WebPageProxy> WebProcessPool::createWebPage(PageClient& pageClient, WebPageConfiguration configuration)
+PassRefPtr<WebPageProxy> WebProcessPool::createWebPage(PageClient& pageClient, Ref<API::PageConfiguration>&& pageConfiguration)
 {
-    if (!configuration.pageGroup)
-        configuration.pageGroup = m_defaultPageGroup.ptr();
-    if (!configuration.preferences)
-        configuration.preferences = &configuration.pageGroup->preferences();
-    if (!configuration.visitedLinkProvider)
-        configuration.visitedLinkProvider = m_visitedLinkProvider.ptr();
-    if (!configuration.websiteDataStore) {
-        ASSERT(!configuration.sessionID.isValid());
-        configuration.websiteDataStore = &m_websiteDataStore->websiteDataStore();
-        configuration.sessionID = configuration.preferences->privateBrowsingEnabled() ? SessionID::legacyPrivateSessionID() : SessionID::defaultSessionID();
+    if (!pageConfiguration->pageGroup())
+        pageConfiguration->setPageGroup(m_defaultPageGroup.ptr());
+    if (!pageConfiguration->preferences())
+        pageConfiguration->setPreferences(&pageConfiguration->pageGroup()->preferences());
+    if (!pageConfiguration->visitedLinkProvider())
+        pageConfiguration->setVisitedLinkProvider(m_visitedLinkProvider.ptr());
+    if (!pageConfiguration->websiteDataStore()) {
+        ASSERT(!pageConfiguration->sessionID().isValid());
+        pageConfiguration->setWebsiteDataStore(m_websiteDataStore.get());
+        pageConfiguration->setSessionID(pageConfiguration->preferences()->privateBrowsingEnabled() ? SessionID::legacyPrivateSessionID() : SessionID::defaultSessionID());
     }
 
     RefPtr<WebProcessProxy> process;
@@ -852,14 +853,14 @@
         if (m_haveInitialEmptyProcess) {
             process = m_processes.last();
             m_haveInitialEmptyProcess = false;
-        } else if (configuration.relatedPage) {
+        } else if (pageConfiguration->relatedPage()) {
             // Sharing processes, e.g. when creating the page via window.open().
-            process = &configuration.relatedPage->process();
+            process = &pageConfiguration->relatedPage()->process();
         } else
             process = &createNewWebProcessRespectingProcessCountLimit();
     }
 
-    return process->createWebPage(pageClient, WTF::move(configuration));
+    return process->createWebPage(pageClient, WTF::move(pageConfiguration));
 }
 
 DownloadProxy* WebProcessPool::download(WebPageProxy* initiatingPage, const ResourceRequest& request)

Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/WebProcessPool.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -76,6 +76,7 @@
 namespace API {
 class DownloadClient;
 class LegacyContextHistoryClient;
+class PageConfiguration;
 }
 
 namespace WebKit {
@@ -86,7 +87,6 @@
 class WebPageGroup;
 class WebPageProxy;
 struct StatisticsData;
-struct WebPageConfiguration;
 struct WebProcessCreationParameters;
     
 typedef GenericCallback<API::Dictionary*> DictionaryCallback;
@@ -171,7 +171,7 @@
 
     API::WebsiteDataStore* websiteDataStore() const { return m_websiteDataStore.get(); }
 
-    PassRefPtr<WebPageProxy> createWebPage(PageClient&, WebPageConfiguration);
+    PassRefPtr<WebPageProxy> createWebPage(PageClient&, Ref<API::PageConfiguration>&&);
 
     const String& injectedBundlePath() const { return m_configuration->injectedBundlePath(); }
 

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2015-08-10 20:51:54 UTC (rev 188228)
@@ -206,10 +206,10 @@
     return globalPageMap().get(pageID);
 }
 
-Ref<WebPageProxy> WebProcessProxy::createWebPage(PageClient& pageClient, const WebPageConfiguration& configuration)
+Ref<WebPageProxy> WebProcessProxy::createWebPage(PageClient& pageClient, Ref<API::PageConfiguration>&& pageConfiguration)
 {
     uint64_t pageID = generatePageID();
-    Ref<WebPageProxy> webPage = WebPageProxy::create(pageClient, *this, pageID, configuration);
+    Ref<WebPageProxy> webPage = WebPageProxy::create(pageClient, *this, pageID, WTF::move(pageConfiguration));
 
     m_pageMap.set(pageID, webPage.ptr());
     globalPageMap().set(pageID, webPage.ptr());

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -84,7 +84,7 @@
     WebProcessPool& processPool() { return m_processPool; }
 
     static WebPageProxy* webPage(uint64_t pageID);
-    Ref<WebPageProxy> createWebPage(PageClient&, const WebPageConfiguration&);
+    Ref<WebPageProxy> createWebPage(PageClient&, Ref<API::PageConfiguration>&&);
     void addExistingWebPage(WebPageProxy*, uint64_t pageID);
     void removeWebPage(uint64_t pageID);
 

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.h (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.h	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.h	2015-08-10 20:51:54 UTC (rev 188228)
@@ -34,6 +34,10 @@
 @class WKView;
 @class WKWebView;
 
+namespace API {
+class PageConfiguration;
+}
+
 namespace WebCore {
 struct Highlight;
 }
@@ -45,7 +49,6 @@
 class WebFrameProxy;
 class WebPageProxy;
 class WebProcessPool;
-struct WebPageConfiguration;
 }
 
 @interface WKContentView : UIView {
@@ -61,8 +64,8 @@
 @property (nonatomic, getter=isShowingInspectorIndication) BOOL showingInspectorIndication;
 @property (nonatomic, readonly) BOOL isBackground;
 
-- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(WebKit::WebPageConfiguration)webPageConfiguration webView:(WKWebView *)webView;
-- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(WebKit::WebPageConfiguration)webPageConfiguration wkView:(WKView *)webView;
+- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(Ref<API::PageConfiguration>&&)configuration webView:(WKWebView *)webView;
+- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(Ref<API::PageConfiguration>&&)configuration wkView:(WKView *)webView;
 
 - (void)didUpdateVisibleRect:(CGRect)visibleRect unobscuredRect:(CGRect)unobscuredRect
     unobscuredRectInScrollViewCoordinates:(CGRect)unobscuredRectInScrollViewCoordinates

Modified: trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm (188227 => 188228)


--- trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm	2015-08-10 20:51:32 UTC (rev 188227)
+++ trunk/Source/WebKit2/UIProcess/ios/WKContentView.mm	2015-08-10 20:51:54 UTC (rev 188228)
@@ -28,6 +28,7 @@
 
 #if PLATFORM(IOS)
 
+#import "APIPageConfiguration.h"
 #import "ApplicationStateTracker.h"
 #import "PageClientImplIOS.h"
 #import "RemoteLayerTreeDrawingAreaProxy.h"
@@ -181,11 +182,11 @@
     std::unique_ptr<ApplicationStateTracker> _applicationStateTracker;
 }
 
-- (instancetype)_commonInitializationWithProcessPool:(WebKit::WebProcessPool&)processPool configuration:(WebKit::WebPageConfiguration)webPageConfiguration
+- (instancetype)_commonInitializationWithProcessPool:(WebKit::WebProcessPool&)processPool configuration:(Ref<API::PageConfiguration>&&)configuration
 {
     ASSERT(_pageClient);
 
-    _page = processPool.createWebPage(*_pageClient, WTF::move(webPageConfiguration));
+    _page = processPool.createWebPage(*_pageClient, WTF::move(configuration));
     _page->initializeWebPage();
     _page->setIntrinsicDeviceScaleFactor(WKGetScaleFactorForScreen([UIScreen mainScreen]));
     _page->setUseFixedLayout(true);
@@ -218,7 +219,7 @@
     return self;
 }
 
-- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(WebKit::WebPageConfiguration)webPageConfiguration webView:(WKWebView *)webView
+- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(Ref<API::PageConfiguration>&&)configuration webView:(WKWebView *)webView
 {
     if (!(self = [super initWithFrame:frame]))
         return nil;
@@ -228,10 +229,10 @@
     _pageClient = std::make_unique<PageClientImpl>(self, webView);
     _webView = webView;
 
-    return [self _commonInitializationWithProcessPool:processPool configuration:webPageConfiguration];
+    return [self _commonInitializationWithProcessPool:processPool configuration:WTF::move(configuration)];
 }
 
-- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(WebKit::WebPageConfiguration)webPageConfiguration wkView:(WKView *)wkView
+- (instancetype)initWithFrame:(CGRect)frame processPool:(WebKit::WebProcessPool&)processPool configuration:(Ref<API::PageConfiguration>&&)configuration wkView:(WKView *)wkView
 {
     if (!(self = [super initWithFrame:frame]))
         return nil;
@@ -240,7 +241,7 @@
 
     _pageClient = std::make_unique<PageClientImpl>(self, wkView);
 
-    return [self _commonInitializationWithProcessPool:processPool configuration:webPageConfiguration];
+    return [self _commonInitializationWithProcessPool:processPool configuration:WTF::move(configuration)];
 }
 
 - (void)dealloc
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to