Changeset 159965 in webkit


Ignore:
Timestamp:
Dec 2, 2013 2:35:51 PM (10 years ago)
Author:
andersca@apple.com
Message:

WKPageLoaderClient should be versioned
https://bugs.webkit.org/show_bug.cgi?id=125104

Reviewed by Sam Weinig.

Add multiple versions of the WKPageLoaderClient struct. In a subsequent patch,
WKPageLoaderClient and kWKPageLoaderClientCurrentVersion will be deprecated. Instead,
users of the API are supposed to explicitly choose a version and a versioned struct.

  • Shared/APIClient.h:

Add a new API::Client class with a new ClientTraits template that uses std::tuple for versions.

  • Shared/APIClientTraits.cpp:
  • Shared/APIClientTraits.h:

Remove WKPageLoaderClient interface sizes.

  • UIProcess/API/C/WKPage.cpp:

(WKPageSetPageLoaderClient):
Add an explicit cast to WKPageLoaderClientBase. In an upcoming patch, WKPageSetPageLoaderClient
will be changed to take a WKPageLoaderClientBase instead.

  • UIProcess/API/C/WKPageLoaderClient.h:

Add new versions.

  • UIProcess/API/Cocoa/WKBrowsingContextController.mm:

(setUpPageLoaderClient):
Use an explicit version.

  • UIProcess/WebLoaderClient.cpp:

(WebKit::WebLoaderClient::didStartProvisionalLoadForFrame):
(WebKit::WebLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
(WebKit::WebLoaderClient::didFailProvisionalLoadWithErrorForFrame):
(WebKit::WebLoaderClient::didCommitLoadForFrame):
(WebKit::WebLoaderClient::didFinishDocumentLoadForFrame):
(WebKit::WebLoaderClient::didFinishLoadForFrame):
(WebKit::WebLoaderClient::didFailLoadWithErrorForFrame):
(WebKit::WebLoaderClient::didSameDocumentNavigationForFrame):
(WebKit::WebLoaderClient::didReceiveTitleForFrame):
(WebKit::WebLoaderClient::didFirstLayoutForFrame):
(WebKit::WebLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame):
(WebKit::WebLoaderClient::didLayout):
(WebKit::WebLoaderClient::didRemoveFrameFromHierarchy):
(WebKit::WebLoaderClient::didDisplayInsecureContentForFrame):
(WebKit::WebLoaderClient::didRunInsecureContentForFrame):
(WebKit::WebLoaderClient::didDetectXSSForFrame):
(WebKit::WebLoaderClient::canAuthenticateAgainstProtectionSpaceInFrame):
(WebKit::WebLoaderClient::didReceiveAuthenticationChallengeInFrame):
(WebKit::WebLoaderClient::didStartProgress):
(WebKit::WebLoaderClient::didChangeProgress):
(WebKit::WebLoaderClient::didFinishProgress):
(WebKit::WebLoaderClient::processDidBecomeUnresponsive):
(WebKit::WebLoaderClient::interactionOccurredWhileProcessUnresponsive):
(WebKit::WebLoaderClient::processDidBecomeResponsive):
(WebKit::WebLoaderClient::processDidCrash):
(WebKit::WebLoaderClient::didChangeBackForwardList):
(WebKit::WebLoaderClient::shouldGoToBackForwardListItem):
(WebKit::WebLoaderClient::willGoToBackForwardListItem):
(WebKit::WebLoaderClient::didFailToInitializePlugin):
(WebKit::WebLoaderClient::didBlockInsecurePluginVersion):
(WebKit::WebLoaderClient::pluginLoadPolicy):
Go through client.base everywhere.

  • UIProcess/WebLoaderClient.h:

Add API::ClientTraits specialization. Change WebLoaderClient to derive from API::Client<WKPageLoaderClientBase>.

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::initializeLoaderClient):
This now takes a WKPageLoaderClientBase*.

Location:
trunk/Source/WebKit2
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r159960 r159965  
     12013-12-02  Anders Carlsson  <andersca@apple.com>
     2
     3        WKPageLoaderClient should be versioned
     4        https://bugs.webkit.org/show_bug.cgi?id=125104
     5
     6        Reviewed by Sam Weinig.
     7
     8        Add multiple versions of the WKPageLoaderClient struct. In a subsequent patch,
     9        WKPageLoaderClient and kWKPageLoaderClientCurrentVersion will be deprecated. Instead,
     10        users of the API are supposed to explicitly choose a version and a versioned struct.
     11
     12        * Shared/APIClient.h:
     13        Add a new API::Client class with a new ClientTraits template that uses std::tuple for versions.
     14
     15        * Shared/APIClientTraits.cpp:
     16        * Shared/APIClientTraits.h:
     17        Remove WKPageLoaderClient interface sizes.
     18
     19        * UIProcess/API/C/WKPage.cpp:
     20        (WKPageSetPageLoaderClient):
     21        Add an explicit cast to WKPageLoaderClientBase. In an upcoming patch, WKPageSetPageLoaderClient
     22        will be changed to take a WKPageLoaderClientBase instead.
     23
     24        * UIProcess/API/C/WKPageLoaderClient.h:
     25        Add new versions.
     26
     27        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
     28        (setUpPageLoaderClient):
     29        Use an explicit version.
     30
     31        * UIProcess/WebLoaderClient.cpp:
     32        (WebKit::WebLoaderClient::didStartProvisionalLoadForFrame):
     33        (WebKit::WebLoaderClient::didReceiveServerRedirectForProvisionalLoadForFrame):
     34        (WebKit::WebLoaderClient::didFailProvisionalLoadWithErrorForFrame):
     35        (WebKit::WebLoaderClient::didCommitLoadForFrame):
     36        (WebKit::WebLoaderClient::didFinishDocumentLoadForFrame):
     37        (WebKit::WebLoaderClient::didFinishLoadForFrame):
     38        (WebKit::WebLoaderClient::didFailLoadWithErrorForFrame):
     39        (WebKit::WebLoaderClient::didSameDocumentNavigationForFrame):
     40        (WebKit::WebLoaderClient::didReceiveTitleForFrame):
     41        (WebKit::WebLoaderClient::didFirstLayoutForFrame):
     42        (WebKit::WebLoaderClient::didFirstVisuallyNonEmptyLayoutForFrame):
     43        (WebKit::WebLoaderClient::didLayout):
     44        (WebKit::WebLoaderClient::didRemoveFrameFromHierarchy):
     45        (WebKit::WebLoaderClient::didDisplayInsecureContentForFrame):
     46        (WebKit::WebLoaderClient::didRunInsecureContentForFrame):
     47        (WebKit::WebLoaderClient::didDetectXSSForFrame):
     48        (WebKit::WebLoaderClient::canAuthenticateAgainstProtectionSpaceInFrame):
     49        (WebKit::WebLoaderClient::didReceiveAuthenticationChallengeInFrame):
     50        (WebKit::WebLoaderClient::didStartProgress):
     51        (WebKit::WebLoaderClient::didChangeProgress):
     52        (WebKit::WebLoaderClient::didFinishProgress):
     53        (WebKit::WebLoaderClient::processDidBecomeUnresponsive):
     54        (WebKit::WebLoaderClient::interactionOccurredWhileProcessUnresponsive):
     55        (WebKit::WebLoaderClient::processDidBecomeResponsive):
     56        (WebKit::WebLoaderClient::processDidCrash):
     57        (WebKit::WebLoaderClient::didChangeBackForwardList):
     58        (WebKit::WebLoaderClient::shouldGoToBackForwardListItem):
     59        (WebKit::WebLoaderClient::willGoToBackForwardListItem):
     60        (WebKit::WebLoaderClient::didFailToInitializePlugin):
     61        (WebKit::WebLoaderClient::didBlockInsecurePluginVersion):
     62        (WebKit::WebLoaderClient::pluginLoadPolicy):
     63        Go through client.base everywhere.
     64
     65        * UIProcess/WebLoaderClient.h:
     66        Add API::ClientTraits specialization. Change WebLoaderClient to derive from API::Client<WKPageLoaderClientBase>.
     67
     68        * UIProcess/WebPageProxy.cpp:
     69        (WebKit::WebPageProxy::initializeLoaderClient):
     70        This now takes a WKPageLoaderClientBase*.
     71       
    1722013-12-02  Beth Dakin  <bdakin@apple.com>
    273
  • trunk/Source/WebKit2/Shared/APIClient.h

    r136095 r159965  
    2828
    2929#include "APIClientTraits.h"
     30#include <array>
     31
     32// FIXME: Transition all clients from WebKit::APIClient to API::Client.
     33namespace API {
     34
     35template<typename ClientInterface> struct ClientTraits;
     36
     37template<typename ClientInterface> class Client {
     38    typedef typename ClientTraits<ClientInterface>::Versions ClientVersions;
     39    static const int latestClientVersion = std::tuple_size<ClientVersions>::value - 1;
     40    typedef typename std::tuple_element<latestClientVersion, ClientVersions>::type LatestClientInterface;
     41
     42    // Helper class that can return an std::array of element sizes in a tuple.
     43    template<typename> struct InterfaceSizes;
     44    template<typename... Interfaces> struct InterfaceSizes<std::tuple<Interfaces...>> {
     45        static std::array<size_t, sizeof...(Interfaces)> sizes()
     46        {
     47#if COMPILER(CLANG)
     48// Workaround for http://llvm.org/bugs/show_bug.cgi?id=18117
     49#pragma clang diagnostic push
     50#pragma clang diagnostic ignored "-Wmissing-braces"
     51#endif
     52            return { sizeof(Interfaces)... };
     53#if COMPILER(CLANG)
     54#pragma clang diagnostic pop
     55#endif
     56        }
     57    };
     58
     59public:
     60    Client()
     61    {
     62#if !ASSERT_DISABLED
     63        auto interfaceSizes = InterfaceSizes<ClientVersions>::sizes();
     64        ASSERT(std::is_sorted(interfaceSizes.begin(), interfaceSizes.end()));
     65#endif
     66
     67        initialize(nullptr);
     68    }
     69
     70    void initialize(const ClientInterface* client)
     71    {
     72        if (client && client->version == latestClientVersion) {
     73            m_client = *reinterpret_cast<const LatestClientInterface*>(client);
     74            return;
     75        }
     76
     77        memset(&m_client, 0, sizeof(m_client));
     78
     79        if (client && client->version < latestClientVersion) {
     80            auto interfaceSizes = InterfaceSizes<ClientVersions>::sizes();
     81
     82            memcpy(&m_client, client, interfaceSizes[client->version]);
     83        }
     84    }
     85
     86    const LatestClientInterface& client() const { return m_client; }
     87
     88protected:
     89    LatestClientInterface m_client;
     90};
     91
     92} // namespace API
    3093
    3194namespace WebKit {
  • trunk/Source/WebKit2/Shared/APIClientTraits.cpp

    r159358 r159965  
    6565};
    6666
    67 const size_t APIClientTraits<WKPageLoaderClient>::interfaceSizesByVersion[] = {
    68     offsetof(WKPageLoaderClient, didDetectXSSForFrame),
    69     offsetof(WKPageLoaderClient, didReceiveIntentForFrame_unavailable),
    70     offsetof(WKPageLoaderClient, pluginLoadPolicy),
    71     sizeof(WKPageLoaderClient)
    72 };
    73 
    7467const size_t APIClientTraits<WKPagePolicyClient>::interfaceSizesByVersion[] = {
    7568    offsetof(WKPagePolicyClient, decidePolicyForNavigationAction),
  • trunk/Source/WebKit2/Shared/APIClientTraits.h

    r159358 r159965  
    6565};
    6666
    67 template<> struct APIClientTraits<WKPageLoaderClient> {
    68     static const size_t interfaceSizesByVersion[4];
    69 };
    70 
    7167template<> struct APIClientTraits<WKPagePolicyClient> {
    7268    static const size_t interfaceSizesByVersion[2];
  • trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp

    r159903 r159965  
    654654void WKPageSetPageLoaderClient(WKPageRef pageRef, const WKPageLoaderClient* wkClient)
    655655{
    656     toImpl(pageRef)->initializeLoaderClient(wkClient);
     656    toImpl(pageRef)->initializeLoaderClient(reinterpret_cast<const WKPageLoaderClientBase*>(wkClient));
    657657}
    658658
  • trunk/Source/WebKit2/UIProcess/API/C/WKPageLoaderClient.h

    r159788 r159965  
    7373typedef WKPluginLoadPolicy (*WKPagePluginLoadPolicyCallback_deprecatedForUseWithV2)(WKPageRef page, WKPluginLoadPolicy currentPluginLoadPolicy, WKDictionaryRef pluginInfoDictionary, const void* clientInfo);
    7474
    75 struct WKPageLoaderClient {
     75typedef struct WKPageLoaderClientBase {
    7676    int                                                                 version;
    7777    const void *                                                        clientInfo;
     78} WKPageLoaderClientBase;
     79
     80typedef struct WKPageLoaderClientV0 {
     81    WKPageLoaderClientBase                                              base;
     82    WKPageDidStartProvisionalLoadForFrameCallback                       didStartProvisionalLoadForFrame;
     83    WKPageDidReceiveServerRedirectForProvisionalLoadForFrameCallback    didReceiveServerRedirectForProvisionalLoadForFrame;
     84    WKPageDidFailProvisionalLoadWithErrorForFrameCallback               didFailProvisionalLoadWithErrorForFrame;
     85    WKPageDidCommitLoadForFrameCallback                                 didCommitLoadForFrame;
     86    WKPageDidFinishDocumentLoadForFrameCallback                         didFinishDocumentLoadForFrame;
     87    WKPageDidFinishLoadForFrameCallback                                 didFinishLoadForFrame;
     88    WKPageDidFailLoadWithErrorForFrameCallback                          didFailLoadWithErrorForFrame;
     89    WKPageDidSameDocumentNavigationForFrameCallback                     didSameDocumentNavigationForFrame;
     90    WKPageDidReceiveTitleForFrameCallback                               didReceiveTitleForFrame;
     91    WKPageDidFirstLayoutForFrameCallback                                didFirstLayoutForFrame;
     92    WKPageDidFirstVisuallyNonEmptyLayoutForFrameCallback                didFirstVisuallyNonEmptyLayoutForFrame;
     93    WKPageDidRemoveFrameFromHierarchyCallback                           didRemoveFrameFromHierarchy;
     94    WKPageDidDisplayInsecureContentForFrameCallback                     didDisplayInsecureContentForFrame;
     95    WKPageDidRunInsecureContentForFrameCallback                         didRunInsecureContentForFrame;
     96    WKPageCanAuthenticateAgainstProtectionSpaceInFrameCallback          canAuthenticateAgainstProtectionSpaceInFrame;
     97    WKPageDidReceiveAuthenticationChallengeInFrameCallback              didReceiveAuthenticationChallengeInFrame;
     98
     99    // FIXME: Move to progress client.
     100    WKPageLoaderClientCallback                                          didStartProgress;
     101    WKPageLoaderClientCallback                                          didChangeProgress;
     102    WKPageLoaderClientCallback                                          didFinishProgress;
     103
     104    // FIXME: These three functions should not be part of this client.
     105    WKPageLoaderClientCallback                                          processDidBecomeUnresponsive;
     106    WKPageLoaderClientCallback                                          processDidBecomeResponsive;
     107    WKPageLoaderClientCallback                                          processDidCrash;
     108    WKPageDidChangeBackForwardListCallback                              didChangeBackForwardList;
     109    WKPageShouldGoToBackForwardListItemCallback                         shouldGoToBackForwardListItem;
     110    WKPageDidFailToInitializePluginCallback_deprecatedForUseWithV0      didFailToInitializePlugin_deprecatedForUseWithV0;
     111} WKPageLoaderClientV0;
     112
     113typedef struct WKPageLoaderClientV1 {
     114    WKPageLoaderClientBase                                              base;
     115    WKPageDidStartProvisionalLoadForFrameCallback                       didStartProvisionalLoadForFrame;
     116    WKPageDidReceiveServerRedirectForProvisionalLoadForFrameCallback    didReceiveServerRedirectForProvisionalLoadForFrame;
     117    WKPageDidFailProvisionalLoadWithErrorForFrameCallback               didFailProvisionalLoadWithErrorForFrame;
     118    WKPageDidCommitLoadForFrameCallback                                 didCommitLoadForFrame;
     119    WKPageDidFinishDocumentLoadForFrameCallback                         didFinishDocumentLoadForFrame;
     120    WKPageDidFinishLoadForFrameCallback                                 didFinishLoadForFrame;
     121    WKPageDidFailLoadWithErrorForFrameCallback                          didFailLoadWithErrorForFrame;
     122    WKPageDidSameDocumentNavigationForFrameCallback                     didSameDocumentNavigationForFrame;
     123    WKPageDidReceiveTitleForFrameCallback                               didReceiveTitleForFrame;
     124    WKPageDidFirstLayoutForFrameCallback                                didFirstLayoutForFrame;
     125    WKPageDidFirstVisuallyNonEmptyLayoutForFrameCallback                didFirstVisuallyNonEmptyLayoutForFrame;
     126    WKPageDidRemoveFrameFromHierarchyCallback                           didRemoveFrameFromHierarchy;
     127    WKPageDidDisplayInsecureContentForFrameCallback                     didDisplayInsecureContentForFrame;
     128    WKPageDidRunInsecureContentForFrameCallback                         didRunInsecureContentForFrame;
     129    WKPageCanAuthenticateAgainstProtectionSpaceInFrameCallback          canAuthenticateAgainstProtectionSpaceInFrame;
     130    WKPageDidReceiveAuthenticationChallengeInFrameCallback              didReceiveAuthenticationChallengeInFrame;
     131
     132    // FIXME: Move to progress client.
     133    WKPageLoaderClientCallback                                          didStartProgress;
     134    WKPageLoaderClientCallback                                          didChangeProgress;
     135    WKPageLoaderClientCallback                                          didFinishProgress;
     136
     137    // FIXME: These three functions should not be part of this client.
     138    WKPageLoaderClientCallback                                          processDidBecomeUnresponsive;
     139    WKPageLoaderClientCallback                                          processDidBecomeResponsive;
     140    WKPageLoaderClientCallback                                          processDidCrash;
     141    WKPageDidChangeBackForwardListCallback                              didChangeBackForwardList;
     142    WKPageShouldGoToBackForwardListItemCallback                         shouldGoToBackForwardListItem;
     143    WKPageDidFailToInitializePluginCallback_deprecatedForUseWithV0      didFailToInitializePlugin_deprecatedForUseWithV0;
     144
     145    // Version 1
     146    WKPageDidDetectXSSForFrameCallback                                  didDetectXSSForFrame;
     147
     148    void*                                                               didNewFirstVisuallyNonEmptyLayout_unavailable;
     149
     150    WKPageWillGoToBackForwardListItemCallback                           willGoToBackForwardListItem;
     151
     152    WKPageLoaderClientCallback                                          interactionOccurredWhileProcessUnresponsive;
     153    WKPagePluginDidFailCallback_deprecatedForUseWithV1                  pluginDidFail_deprecatedForUseWithV1;
     154} WKPageLoaderClientV1;
     155
     156typedef struct WKPageLoaderClientV2 {
     157    WKPageLoaderClientBase                                              base;
    78158    WKPageDidStartProvisionalLoadForFrameCallback                       didStartProvisionalLoadForFrame;
    79159    WKPageDidReceiveServerRedirectForProvisionalLoadForFrameCallback    didReceiveServerRedirectForProvisionalLoadForFrame;
     
    123203    WKPagePluginLoadPolicyCallback_deprecatedForUseWithV2               pluginLoadPolicy_deprecatedForUseWithV2;
    124204    WKPagePluginDidFailCallback                                         pluginDidFail;
     205} WKPageLoaderClientV2;
     206
     207typedef struct WKPageLoaderClientV3 {
     208    WKPageLoaderClientBase                                              base;
     209    WKPageDidStartProvisionalLoadForFrameCallback                       didStartProvisionalLoadForFrame;
     210    WKPageDidReceiveServerRedirectForProvisionalLoadForFrameCallback    didReceiveServerRedirectForProvisionalLoadForFrame;
     211    WKPageDidFailProvisionalLoadWithErrorForFrameCallback               didFailProvisionalLoadWithErrorForFrame;
     212    WKPageDidCommitLoadForFrameCallback                                 didCommitLoadForFrame;
     213    WKPageDidFinishDocumentLoadForFrameCallback                         didFinishDocumentLoadForFrame;
     214    WKPageDidFinishLoadForFrameCallback                                 didFinishLoadForFrame;
     215    WKPageDidFailLoadWithErrorForFrameCallback                          didFailLoadWithErrorForFrame;
     216    WKPageDidSameDocumentNavigationForFrameCallback                     didSameDocumentNavigationForFrame;
     217    WKPageDidReceiveTitleForFrameCallback                               didReceiveTitleForFrame;
     218    WKPageDidFirstLayoutForFrameCallback                                didFirstLayoutForFrame;
     219    WKPageDidFirstVisuallyNonEmptyLayoutForFrameCallback                didFirstVisuallyNonEmptyLayoutForFrame;
     220    WKPageDidRemoveFrameFromHierarchyCallback                           didRemoveFrameFromHierarchy;
     221    WKPageDidDisplayInsecureContentForFrameCallback                     didDisplayInsecureContentForFrame;
     222    WKPageDidRunInsecureContentForFrameCallback                         didRunInsecureContentForFrame;
     223    WKPageCanAuthenticateAgainstProtectionSpaceInFrameCallback          canAuthenticateAgainstProtectionSpaceInFrame;
     224    WKPageDidReceiveAuthenticationChallengeInFrameCallback              didReceiveAuthenticationChallengeInFrame;
     225
     226    // FIXME: Move to progress client.
     227    WKPageLoaderClientCallback                                          didStartProgress;
     228    WKPageLoaderClientCallback                                          didChangeProgress;
     229    WKPageLoaderClientCallback                                          didFinishProgress;
     230
     231    // FIXME: These three functions should not be part of this client.
     232    WKPageLoaderClientCallback                                          processDidBecomeUnresponsive;
     233    WKPageLoaderClientCallback                                          processDidBecomeResponsive;
     234    WKPageLoaderClientCallback                                          processDidCrash;
     235    WKPageDidChangeBackForwardListCallback                              didChangeBackForwardList;
     236    WKPageShouldGoToBackForwardListItemCallback                         shouldGoToBackForwardListItem;
     237    WKPageDidFailToInitializePluginCallback_deprecatedForUseWithV0      didFailToInitializePlugin_deprecatedForUseWithV0;
     238
     239    // Version 1
     240    WKPageDidDetectXSSForFrameCallback                                  didDetectXSSForFrame;
     241
     242    void*                                                               didNewFirstVisuallyNonEmptyLayout_unavailable;
     243
     244    WKPageWillGoToBackForwardListItemCallback                           willGoToBackForwardListItem;
     245
     246    WKPageLoaderClientCallback                                          interactionOccurredWhileProcessUnresponsive;
     247    WKPagePluginDidFailCallback_deprecatedForUseWithV1                  pluginDidFail_deprecatedForUseWithV1;
     248
     249    // Version 2
     250    void                                                                (*didReceiveIntentForFrame_unavailable)(void);
     251    void                                                                (*registerIntentServiceForFrame_unavailable)(void);
     252
     253    WKPageDidLayoutCallback                                             didLayout;
     254    WKPagePluginLoadPolicyCallback_deprecatedForUseWithV2               pluginLoadPolicy_deprecatedForUseWithV2;
     255    WKPagePluginDidFailCallback                                         pluginDidFail;
    125256
    126257    // Version 3
    127258    WKPagePluginLoadPolicyCallback                                      pluginLoadPolicy;
    128 };
    129 typedef struct WKPageLoaderClient WKPageLoaderClient;
    130 
     259} WKPageLoaderClientV3;
     260
     261// FIXME: These should be deprecated.
    131262enum { kWKPageLoaderClientCurrentVersion = 3 };
    132 
     263typedef struct WKPageLoaderClient {
     264    int                                                                 version;
     265    const void *                                                        clientInfo;
     266    WKPageDidStartProvisionalLoadForFrameCallback                       didStartProvisionalLoadForFrame;
     267    WKPageDidReceiveServerRedirectForProvisionalLoadForFrameCallback    didReceiveServerRedirectForProvisionalLoadForFrame;
     268    WKPageDidFailProvisionalLoadWithErrorForFrameCallback               didFailProvisionalLoadWithErrorForFrame;
     269    WKPageDidCommitLoadForFrameCallback                                 didCommitLoadForFrame;
     270    WKPageDidFinishDocumentLoadForFrameCallback                         didFinishDocumentLoadForFrame;
     271    WKPageDidFinishLoadForFrameCallback                                 didFinishLoadForFrame;
     272    WKPageDidFailLoadWithErrorForFrameCallback                          didFailLoadWithErrorForFrame;
     273    WKPageDidSameDocumentNavigationForFrameCallback                     didSameDocumentNavigationForFrame;
     274    WKPageDidReceiveTitleForFrameCallback                               didReceiveTitleForFrame;
     275    WKPageDidFirstLayoutForFrameCallback                                didFirstLayoutForFrame;
     276    WKPageDidFirstVisuallyNonEmptyLayoutForFrameCallback                didFirstVisuallyNonEmptyLayoutForFrame;
     277    WKPageDidRemoveFrameFromHierarchyCallback                           didRemoveFrameFromHierarchy;
     278    WKPageDidDisplayInsecureContentForFrameCallback                     didDisplayInsecureContentForFrame;
     279    WKPageDidRunInsecureContentForFrameCallback                         didRunInsecureContentForFrame;
     280    WKPageCanAuthenticateAgainstProtectionSpaceInFrameCallback          canAuthenticateAgainstProtectionSpaceInFrame;
     281    WKPageDidReceiveAuthenticationChallengeInFrameCallback              didReceiveAuthenticationChallengeInFrame;
     282
     283    // FIXME: Move to progress client.
     284    WKPageLoaderClientCallback                                          didStartProgress;
     285    WKPageLoaderClientCallback                                          didChangeProgress;
     286    WKPageLoaderClientCallback                                          didFinishProgress;
     287
     288    // FIXME: These three functions should not be part of this client.
     289    WKPageLoaderClientCallback                                          processDidBecomeUnresponsive;
     290    WKPageLoaderClientCallback                                          processDidBecomeResponsive;
     291    WKPageLoaderClientCallback                                          processDidCrash;
     292    WKPageDidChangeBackForwardListCallback                              didChangeBackForwardList;
     293    WKPageShouldGoToBackForwardListItemCallback                         shouldGoToBackForwardListItem;
     294    WKPageDidFailToInitializePluginCallback_deprecatedForUseWithV0      didFailToInitializePlugin_deprecatedForUseWithV0;
     295
     296    // Version 1
     297    WKPageDidDetectXSSForFrameCallback                                  didDetectXSSForFrame;
     298
     299    void*                                                               didNewFirstVisuallyNonEmptyLayout_unavailable;
     300
     301    WKPageWillGoToBackForwardListItemCallback                           willGoToBackForwardListItem;
     302
     303    WKPageLoaderClientCallback                                          interactionOccurredWhileProcessUnresponsive;
     304    WKPagePluginDidFailCallback_deprecatedForUseWithV1                  pluginDidFail_deprecatedForUseWithV1;
     305
     306    // Version 2
     307    void                                                                (*didReceiveIntentForFrame_unavailable)(void);
     308    void                                                                (*registerIntentServiceForFrame_unavailable)(void);
     309
     310    WKPageDidLayoutCallback                                             didLayout;
     311    WKPagePluginLoadPolicyCallback_deprecatedForUseWithV2               pluginLoadPolicy_deprecatedForUseWithV2;
     312    WKPagePluginDidFailCallback                                         pluginDidFail;
     313
     314    // Version 3
     315    WKPagePluginLoadPolicyCallback                                      pluginLoadPolicy;
     316} WKPageLoaderClient;
    133317
    134318#ifdef __cplusplus
  • trunk/Source/WebKit2/UIProcess/API/Cocoa/WKBrowsingContextController.mm

    r159903 r159965  
    436436static void setUpPageLoaderClient(WKBrowsingContextController *browsingContext, WebPageProxy& page)
    437437{
    438     WKPageLoaderClient loaderClient;
     438    WKPageLoaderClientV3 loaderClient;
    439439    memset(&loaderClient, 0, sizeof(loaderClient));
    440440
    441     loaderClient.version = kWKPageLoaderClientCurrentVersion;
    442     loaderClient.clientInfo = browsingContext;
     441    loaderClient.base.version = 3;
     442    loaderClient.base.clientInfo = browsingContext;
    443443    loaderClient.didStartProvisionalLoadForFrame = didStartProvisionalLoadForFrame;
    444444    loaderClient.didReceiveServerRedirectForProvisionalLoadForFrame = didReceiveServerRedirectForProvisionalLoadForFrame;
     
    453453    loaderClient.didChangeBackForwardList = didChangeBackForwardList;
    454454
    455     page.initializeLoaderClient(&loaderClient);
     455    page.initializeLoaderClient(&loaderClient.base);
    456456}
    457457
  • trunk/Source/WebKit2/UIProcess/WebLoaderClient.cpp

    r159724 r159965  
    4444        return;
    4545
    46     m_client.didStartProvisionalLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     46    m_client.didStartProvisionalLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    4747}
    4848
     
    5252        return;
    5353
    54     m_client.didReceiveServerRedirectForProvisionalLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     54    m_client.didReceiveServerRedirectForProvisionalLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    5555}
    5656
     
    6060        return;
    6161
    62     m_client.didFailProvisionalLoadWithErrorForFrame(toAPI(page), toAPI(frame), toAPI(error), toAPI(userData), m_client.clientInfo);
     62    m_client.didFailProvisionalLoadWithErrorForFrame(toAPI(page), toAPI(frame), toAPI(error), toAPI(userData), m_client.base.clientInfo);
    6363}
    6464
     
    6868        return;
    6969
    70     m_client.didCommitLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     70    m_client.didCommitLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    7171}
    7272
     
    7676        return;
    7777
    78     m_client.didFinishDocumentLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     78    m_client.didFinishDocumentLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    7979}
    8080
     
    8484        return;
    8585
    86     m_client.didFinishLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     86    m_client.didFinishLoadForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    8787}
    8888
     
    9292        return;
    9393
    94     m_client.didFailLoadWithErrorForFrame(toAPI(page), toAPI(frame), toAPI(error), toAPI(userData), m_client.clientInfo);
     94    m_client.didFailLoadWithErrorForFrame(toAPI(page), toAPI(frame), toAPI(error), toAPI(userData), m_client.base.clientInfo);
    9595}
    9696
     
    100100        return;
    101101
    102     m_client.didSameDocumentNavigationForFrame(toAPI(page), toAPI(frame), toAPI(type), toAPI(userData), m_client.clientInfo);
     102    m_client.didSameDocumentNavigationForFrame(toAPI(page), toAPI(frame), toAPI(type), toAPI(userData), m_client.base.clientInfo);
    103103}
    104104
     
    108108        return;
    109109
    110     m_client.didReceiveTitleForFrame(toAPI(page), toAPI(title.impl()), toAPI(frame), toAPI(userData), m_client.clientInfo);
     110    m_client.didReceiveTitleForFrame(toAPI(page), toAPI(title.impl()), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    111111}
    112112
     
    116116        return;
    117117
    118     m_client.didFirstLayoutForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     118    m_client.didFirstLayoutForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    119119}
    120120
     
    124124        return;
    125125
    126     m_client.didFirstVisuallyNonEmptyLayoutForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     126    m_client.didFirstVisuallyNonEmptyLayoutForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    127127}
    128128
     
    132132        return;
    133133
    134     m_client.didLayout(toAPI(page), toWKLayoutMilestones(milestones), toAPI(userData), m_client.clientInfo);
     134    m_client.didLayout(toAPI(page), toWKLayoutMilestones(milestones), toAPI(userData), m_client.base.clientInfo);
    135135}
    136136
     
    140140        return;
    141141
    142     m_client.didRemoveFrameFromHierarchy(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     142    m_client.didRemoveFrameFromHierarchy(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    143143}
    144144
     
    148148        return;
    149149
    150     m_client.didDisplayInsecureContentForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     150    m_client.didDisplayInsecureContentForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    151151}
    152152
     
    156156        return;
    157157
    158     m_client.didRunInsecureContentForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     158    m_client.didRunInsecureContentForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    159159}
    160160
     
    164164        return;
    165165
    166     m_client.didDetectXSSForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.clientInfo);
     166    m_client.didDetectXSSForFrame(toAPI(page), toAPI(frame), toAPI(userData), m_client.base.clientInfo);
    167167}
    168168
     
    172172        return false;
    173173
    174     return m_client.canAuthenticateAgainstProtectionSpaceInFrame(toAPI(page), toAPI(frame), toAPI(protectionSpace), m_client.clientInfo);
     174    return m_client.canAuthenticateAgainstProtectionSpaceInFrame(toAPI(page), toAPI(frame), toAPI(protectionSpace), m_client.base.clientInfo);
    175175}
    176176
     
    180180        return;
    181181
    182     m_client.didReceiveAuthenticationChallengeInFrame(toAPI(page), toAPI(frame), toAPI(authenticationChallenge), m_client.clientInfo);
     182    m_client.didReceiveAuthenticationChallengeInFrame(toAPI(page), toAPI(frame), toAPI(authenticationChallenge), m_client.base.clientInfo);
    183183}
    184184
     
    188188        return;
    189189
    190     m_client.didStartProgress(toAPI(page), m_client.clientInfo);
     190    m_client.didStartProgress(toAPI(page), m_client.base.clientInfo);
    191191}
    192192
     
    196196        return;
    197197
    198     m_client.didChangeProgress(toAPI(page), m_client.clientInfo);
     198    m_client.didChangeProgress(toAPI(page), m_client.base.clientInfo);
    199199}
    200200
     
    204204        return;
    205205
    206     m_client.didFinishProgress(toAPI(page), m_client.clientInfo);
     206    m_client.didFinishProgress(toAPI(page), m_client.base.clientInfo);
    207207}
    208208
     
    212212        return;
    213213
    214     m_client.processDidBecomeUnresponsive(toAPI(page), m_client.clientInfo);
     214    m_client.processDidBecomeUnresponsive(toAPI(page), m_client.base.clientInfo);
    215215}
    216216
     
    220220        return;
    221221
    222     m_client.interactionOccurredWhileProcessUnresponsive(toAPI(page), m_client.clientInfo);
     222    m_client.interactionOccurredWhileProcessUnresponsive(toAPI(page), m_client.base.clientInfo);
    223223}
    224224
     
    228228        return;
    229229
    230     m_client.processDidBecomeResponsive(toAPI(page), m_client.clientInfo);
     230    m_client.processDidBecomeResponsive(toAPI(page), m_client.base.clientInfo);
    231231}
    232232
     
    236236        return;
    237237
    238     m_client.processDidCrash(toAPI(page), m_client.clientInfo);
     238    m_client.processDidCrash(toAPI(page), m_client.base.clientInfo);
    239239}
    240240
     
    248248        removedItemsArray = API::Array::create(std::move(*removedItems));
    249249
    250     m_client.didChangeBackForwardList(toAPI(page), toAPI(addedItem), toAPI(removedItemsArray.get()), m_client.clientInfo);
     250    m_client.didChangeBackForwardList(toAPI(page), toAPI(addedItem), toAPI(removedItemsArray.get()), m_client.base.clientInfo);
    251251}
    252252
     
    256256    // for version 0 clients. Later versioned clients should get willGoToBackForwardListItem() instead,
    257257    // but due to XPC race conditions this one might have been called instead.
    258     if (m_client.version > 0 || !m_client.shouldGoToBackForwardListItem)
     258    if (m_client.base.version > 0 || !m_client.shouldGoToBackForwardListItem)
    259259        return true;
    260260
    261     return m_client.shouldGoToBackForwardListItem(toAPI(page), toAPI(item), m_client.clientInfo);
     261    return m_client.shouldGoToBackForwardListItem(toAPI(page), toAPI(item), m_client.base.clientInfo);
    262262}
    263263
     
    265265{
    266266    if (m_client.willGoToBackForwardListItem)
    267         m_client.willGoToBackForwardListItem(toAPI(page), toAPI(item), toAPI(userData), m_client.clientInfo);
     267        m_client.willGoToBackForwardListItem(toAPI(page), toAPI(item), toAPI(userData), m_client.base.clientInfo);
    268268}
    269269
     
    276276            toAPI(page),
    277277            toAPI(pluginInformation->get<WebString>(pluginInformationMIMETypeKey())),
    278             m_client.clientInfo);
     278            m_client.base.clientInfo);
    279279
    280280    if (m_client.pluginDidFail_deprecatedForUseWithV1)
     
    285285            0,
    286286            0,
    287             m_client.clientInfo);
     287            m_client.base.clientInfo);
    288288
    289289    if (m_client.pluginDidFail)
     
    292292            kWKErrorCodeCannotLoadPlugIn,
    293293            toAPI(pluginInformation),
    294             m_client.clientInfo);
     294            m_client.base.clientInfo);
    295295}
    296296
     
    304304            toAPI(pluginInformation->get<WebString>(pluginInformationBundleIdentifierKey())),
    305305            toAPI(pluginInformation->get<WebString>(pluginInformationBundleVersionKey())),
    306             m_client.clientInfo);
     306            m_client.base.clientInfo);
    307307
    308308    if (m_client.pluginDidFail)
     
    311311            kWKErrorCodeInsecurePlugInVersion,
    312312            toAPI(pluginInformation),
    313             m_client.clientInfo);
     313            m_client.base.clientInfo);
    314314}
    315315
     
    320320
    321321    if (m_client.pluginLoadPolicy_deprecatedForUseWithV2)
    322         loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy_deprecatedForUseWithV2(toAPI(page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), m_client.clientInfo));
     322        loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy_deprecatedForUseWithV2(toAPI(page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), m_client.base.clientInfo));
    323323    else if (m_client.pluginLoadPolicy)
    324         loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy(toAPI(page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), &unavailabilityDescriptionOut, m_client.clientInfo));
     324        loadPolicy = toPluginModuleLoadPolicy(m_client.pluginLoadPolicy(toAPI(page), toWKPluginLoadPolicy(currentPluginLoadPolicy), toAPI(pluginInformation), &unavailabilityDescriptionOut, m_client.base.clientInfo));
    325325
    326326    if (unavailabilityDescriptionOut) {
  • trunk/Source/WebKit2/UIProcess/WebLoaderClient.h

    r159724 r159965  
    3838namespace API {
    3939class Object;
     40
     41template<> struct ClientTraits<WKPageLoaderClientBase> {
     42    typedef std::tuple<WKPageLoaderClientV0, WKPageLoaderClientV1, WKPageLoaderClientV2, WKPageLoaderClientV3> Versions;
     43};
     44
    4045}
    4146
     
    5459class WebProtectionSpace;
    5560
    56 class WebLoaderClient : public APIClient<WKPageLoaderClient, kWKPageLoaderClientCurrentVersion> {
     61class WebLoaderClient : public API::Client<WKPageLoaderClientBase> {
    5762public:
    5863    void didStartProvisionalLoadForFrame(WebPageProxy*, WebFrameProxy*, API::Object*);
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r159908 r159965  
    399399}
    400400
    401 void WebPageProxy::initializeLoaderClient(const WKPageLoaderClient* loadClient)
     401void WebPageProxy::initializeLoaderClient(const WKPageLoaderClientBase* loadClient)
    402402{
    403403    m_loaderClient.initialize(loadClient);
     
    410410    // for backwards compatibility.
    411411    WebCore::LayoutMilestones milestones = 0;
    412     if (loadClient->didFirstLayoutForFrame)
     412    if (m_loaderClient.client().didFirstLayoutForFrame)
    413413        milestones |= WebCore::DidFirstLayout;
    414     if (loadClient->didFirstVisuallyNonEmptyLayoutForFrame)
     414    if (m_loaderClient.client().didFirstVisuallyNonEmptyLayoutForFrame)
    415415        milestones |= WebCore::DidFirstVisuallyNonEmptyLayout;
    416416
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r159903 r159965  
    354354    void initializeFindMatchesClient(const WKPageFindMatchesClient*);
    355355    void initializeFormClient(const WKPageFormClient*);
    356     void initializeLoaderClient(const WKPageLoaderClient*);
     356    void initializeLoaderClient(const WKPageLoaderClientBase*);
    357357    void initializePolicyClient(const WKPagePolicyClient*);
    358358    void initializeUIClient(const WKPageUIClient*);
Note: See TracChangeset for help on using the changeset viewer.