Changeset 225615 in webkit


Ignore:
Timestamp:
Dec 6, 2017 7:30:08 PM (6 years ago)
Author:
commit-queue@webkit.org
Message:

[Web App Manifest] Add SPI for applying a manifest to a top-level browsing context
https://bugs.webkit.org/show_bug.cgi?id=180368
rdar://problem/34748067

Patch by David Quesada <david_quesada@apple.com> on 2017-12-06
Reviewed by Geoffrey Garen.

Source/WebCore:

Support applying a manifest to a top-level browsing context by adding a manifest
property on PageConfiguration to be stored on MainFrame instances created from the
configuration.

No new tests, no change in behavior.

  • page/MainFrame.cpp:

(WebCore::MainFrame::MainFrame):

  • page/MainFrame.h:
  • page/PageConfiguration.h:

Source/WebKit:

Add a new property WKWebViewConfiguration._applicationManifest to specify manifest
to apply to application contexts (aka. top-level browsing contexts, i.e. web views).
The manifest is ultimately stored on the MainFrame of the Pages created from the
web view configuration.

No new tests, no change in behavior.

  • Shared/WebPageCreationParameters.cpp:

(WebKit::WebPageCreationParameters::encode const):
(WebKit::WebPageCreationParameters::decode):

  • Shared/WebPageCreationParameters.h:
  • UIProcess/API/APIPageConfiguration.cpp:

(API::PageConfiguration::copy const):
(API::PageConfiguration::applicationManifest const):
(API::PageConfiguration::setApplicationManifest):

  • UIProcess/API/APIPageConfiguration.h:
  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _initializeWithConfiguration:]):

  • UIProcess/API/Cocoa/WKWebViewConfiguration.mm:

(-[WKWebViewConfiguration copyWithZone:]):
(-[WKWebViewConfiguration _applicationManifest]):
(-[WKWebViewConfiguration _setApplicationManifest:]):

  • UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
  • UIProcess/API/Cocoa/_WKApplicationManifestInternal.h:
  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::creationParameters):

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::m_cpuLimit):

Location:
trunk/Source
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r225613 r225615  
     12017-12-06  David Quesada  <david_quesada@apple.com>
     2
     3        [Web App Manifest] Add SPI for applying a manifest to a top-level browsing context
     4        https://bugs.webkit.org/show_bug.cgi?id=180368
     5        rdar://problem/34748067
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        Support applying a manifest to a top-level browsing context by adding a manifest
     10        property on PageConfiguration to be stored on MainFrame instances created from the
     11        configuration.
     12
     13        No new tests, no change in behavior.
     14
     15        * page/MainFrame.cpp:
     16        (WebCore::MainFrame::MainFrame):
     17        * page/MainFrame.h:
     18        * page/PageConfiguration.h:
     19
    1202017-12-06  Zalan Bujtas  <zalan@apple.com>
    221
  • trunk/Source/WebCore/page/MainFrame.cpp

    r223076 r225615  
    5151#if ENABLE(APPLE_PAY)
    5252    , m_paymentCoordinator(std::make_unique<PaymentCoordinator>(*configuration.paymentCoordinatorClient))
     53#endif
     54#if ENABLE(APPLICATION_MANIFEST)
     55    , m_applicationManifest(configuration.applicationManifest)
    5356#endif
    5457    , m_performanceLogging(std::make_unique<PerformanceLogging>(*this))
  • trunk/Source/WebCore/page/MainFrame.h

    r223076 r225615  
    2727
    2828#include "Frame.h"
     29#include <wtf/Optional.h>
    2930#include <wtf/Vector.h>
     31
     32#if ENABLE(APPLICATION_MANIFEST)
     33#include "ApplicationManifest.h"
     34#endif
    3035
    3136namespace WebCore {
     
    6873#endif
    6974
     75#if ENABLE(APPLICATION_MANIFEST)
     76    const std::optional<ApplicationManifest>& applicationManifest() const { return m_applicationManifest; }
     77#endif
     78
    7079    PerformanceLogging& performanceLogging() const { return *m_performanceLogging; }
    7180
     
    93102#endif
    94103
     104#if ENABLE(APPLICATION_MANIFEST)
     105    std::optional<ApplicationManifest> m_applicationManifest;
     106#endif
     107
    95108    std::unique_ptr<PerformanceLogging> m_performanceLogging;
    96109
  • trunk/Source/WebCore/page/PageConfiguration.h

    r220758 r225615  
    2727
    2828#include <wtf/Noncopyable.h>
     29#include <wtf/Optional.h>
    2930#include <wtf/RefPtr.h>
    3031#include <wtf/UniqueRef.h>
     32
     33#if ENABLE(APPLICATION_MANIFEST)
     34#include "ApplicationManifest.h"
     35#endif
    3136
    3237namespace WebCore {
     
    7681#endif
    7782
     83#if ENABLE(APPLICATION_MANIFEST)
     84    std::optional<ApplicationManifest> applicationManifest;
     85#endif
     86
    7887    UniqueRef<LibWebRTCProvider> libWebRTCProvider;
    7988
  • trunk/Source/WebKit/ChangeLog

    r225603 r225615  
     12017-12-06  David Quesada  <david_quesada@apple.com>
     2
     3        [Web App Manifest] Add SPI for applying a manifest to a top-level browsing context
     4        https://bugs.webkit.org/show_bug.cgi?id=180368
     5        rdar://problem/34748067
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        Add a new property WKWebViewConfiguration._applicationManifest to specify manifest
     10        to apply to application contexts (aka. top-level browsing contexts, i.e. web views).
     11        The manifest is ultimately stored on the MainFrame of the Pages created from the
     12        web view configuration.
     13
     14        No new tests, no change in behavior.
     15
     16        * Shared/WebPageCreationParameters.cpp:
     17        (WebKit::WebPageCreationParameters::encode const):
     18        (WebKit::WebPageCreationParameters::decode):
     19        * Shared/WebPageCreationParameters.h:
     20        * UIProcess/API/APIPageConfiguration.cpp:
     21        (API::PageConfiguration::copy const):
     22        (API::PageConfiguration::applicationManifest const):
     23        (API::PageConfiguration::setApplicationManifest):
     24        * UIProcess/API/APIPageConfiguration.h:
     25        * UIProcess/API/Cocoa/WKWebView.mm:
     26        (-[WKWebView _initializeWithConfiguration:]):
     27        * UIProcess/API/Cocoa/WKWebViewConfiguration.mm:
     28        (-[WKWebViewConfiguration copyWithZone:]):
     29        (-[WKWebViewConfiguration _applicationManifest]):
     30        (-[WKWebViewConfiguration _setApplicationManifest:]):
     31        * UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h:
     32        * UIProcess/API/Cocoa/_WKApplicationManifestInternal.h:
     33        * UIProcess/WebPageProxy.cpp:
     34        (WebKit::WebPageProxy::creationParameters):
     35        * WebProcess/WebPage/WebPage.cpp:
     36        (WebKit::m_cpuLimit):
     37
    1382017-12-06  Jeff Miller  <jeffm@apple.com>
    239
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp

    r224930 r225615  
    9797    encoder << cpuLimit;
    9898    encoder << urlSchemeHandlers;
     99#if ENABLE(APPLICATION_MANIFEST)
     100    encoder << applicationManifest;
     101#endif
    99102    encoder << iceCandidateFilteringEnabled;
    100103    encoder << enumeratingAllNetworkInterfacesEnabled;
     
    258261        return std::nullopt;
    259262
     263#if ENABLE(APPLICATION_MANIFEST)
     264    std::optional<std::optional<WebCore::ApplicationManifest>> applicationManifest;
     265    decoder >> applicationManifest;
     266    if (!applicationManifest)
     267        return std::nullopt;
     268    parameters.applicationManifest = WTFMove(*applicationManifest);
     269#endif
     270
    260271    if (!decoder.decode(parameters.iceCandidateFilteringEnabled))
    261272        return std::nullopt;
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.h

    r224930 r225615  
    4949#if PLATFORM(MAC)
    5050#include "ColorSpaceData.h"
     51#endif
     52
     53#if ENABLE(APPLICATION_MANIFEST)
     54#include <WebCore/ApplicationManifest.h>
    5155#endif
    5256
     
    153157    HashMap<String, uint64_t> urlSchemeHandlers;
    154158
     159#if ENABLE(APPLICATION_MANIFEST)
     160    std::optional<WebCore::ApplicationManifest> applicationManifest;
     161#endif
     162
    155163    // WebRTC members.
    156164    bool iceCandidateFilteringEnabled { true };
  • trunk/Source/WebKit/UIProcess/API/APIApplicationManifest.h

    r225598 r225615  
    2626#pragma once
    2727
     28#if ENABLE(APPLICATION_MANIFEST)
     29
    2830#include "APIObject.h"
    2931#include <WebCore/ApplicationManifest.h>
     
    3133namespace API {
    3234
    33 #if ENABLE(APPLICATION_MANIFEST)
    3435class ApplicationManifest final : public ObjectImpl<Object::Type::ApplicationManifest> {
    3536public:
     
    4950    WebCore::ApplicationManifest m_applicationManifest;
    5051};
    51 #endif
    5252
    5353} // namespace API
    5454
     55#endif // ENABLE(APPLICATION_MANIFEST)
  • trunk/Source/WebKit/UIProcess/API/APIPageConfiguration.cpp

    r220857 r225615  
    3333#include "WebProcessPool.h"
    3434#include "WebUserContentControllerProxy.h"
     35
     36#if ENABLE(APPLICATION_MANIFEST)
     37#include "APIApplicationManifest.h"
     38#endif
    3539
    3640using namespace WebCore;
     
    7377    copy->m_controlledByAutomation = this->m_controlledByAutomation;
    7478    copy->m_overrideContentSecurityPolicy = this->m_overrideContentSecurityPolicy;
     79#if ENABLE(APPLICATION_MANIFEST)
     80    copy->m_applicationManifest = this->m_applicationManifest;
     81#endif
    7582
    7683    return copy;
     
    166173}
    167174
     175#if ENABLE(APPLICATION_MANIFEST)
     176const ApplicationManifest* PageConfiguration::applicationManifest() const
     177{
     178    return m_applicationManifest.get();
     179}
     180
     181void PageConfiguration::setApplicationManifest(ApplicationManifest* applicationManifest)
     182{
     183    m_applicationManifest = applicationManifest;
     184}
     185#endif
     186
    168187} // namespace API
  • trunk/Source/WebKit/UIProcess/API/APIPageConfiguration.h

    r220887 r225615  
    4444namespace API {
    4545
     46class ApplicationManifest;
    4647class WebsiteDataStore;
    4748
     
    107108    void setOverrideContentSecurityPolicy(const WTF::String& overrideContentSecurityPolicy) { m_overrideContentSecurityPolicy = overrideContentSecurityPolicy; }
    108109
     110#if ENABLE(APPLICATION_MANIFEST)
     111    const ApplicationManifest* applicationManifest() const;
     112    void setApplicationManifest(ApplicationManifest*);
     113#endif
     114
    109115private:
    110116
     
    132138
    133139    WTF::String m_overrideContentSecurityPolicy;
     140
     141#if ENABLE(APPLICATION_MANIFEST)
     142    RefPtr<ApplicationManifest> m_applicationManifest;
     143#endif
    134144};
    135145
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r225598 r225615  
    537537    pageConfiguration->setWaitsForPaintAfterViewDidMoveToWindow([_configuration _waitsForPaintAfterViewDidMoveToWindow]);
    538538    pageConfiguration->setControlledByAutomation([_configuration _isControlledByAutomation]);
     539
     540#if ENABLE(APPLICATION_MANIFEST)
     541    pageConfiguration->setApplicationManifest([_configuration _applicationManifest] ? [configuration _applicationManifest]->_applicationManifest.get() : nullptr);
     542#endif
    539543
    540544#if PLATFORM(MAC)
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm

    r225603 r225615  
    147147    BOOL _controlledByAutomation;
    148148
     149#if ENABLE(APPLICATION_MANIFEST)
     150    RetainPtr<_WKApplicationManifest> _applicationManifest;
     151#endif
     152
    149153#if ENABLE(APPLE_PAY)
    150154    BOOL _applePayEnabled;
     
    354358    configuration->_applePayEnabled = self->_applePayEnabled;
    355359#endif
     360#if ENABLE(APPLICATION_MANIFEST)
     361    configuration->_applicationManifest = self->_applicationManifest;
     362#endif
    356363    configuration->_needsStorageAccessFromFileURLsQuirk = self->_needsStorageAccessFromFileURLsQuirk;
    357364    configuration->_overrideContentSecurityPolicy = adoptNS([self->_overrideContentSecurityPolicy copyWithZone:zone]);
     
    747754}
    748755
     756- (_WKApplicationManifest *)_applicationManifest
     757{
     758#if ENABLE(APPLICATION_MANIFEST)
     759    return _applicationManifest.get();
     760#else
     761    return nil;
     762#endif
     763}
     764
     765- (void)_setApplicationManifest:(_WKApplicationManifest *)applicationManifest
     766{
     767#if ENABLE(APPLICATION_MANIFEST)
     768    _applicationManifest = applicationManifest;
     769#endif
     770}
     771
    749772#if PLATFORM(MAC)
    750773- (BOOL)_showsURLsInToolTips
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfigurationPrivate.h

    r224930 r225615  
    3737
    3838@class WKWebView;
     39@class _WKApplicationManifest;
    3940@class _WKVisitedLinkStore;
    4041@class _WKWebsiteDataStore;
     
    6768@property (nonatomic, setter=_setWaitsForPaintAfterViewDidMoveToWindow:) BOOL _waitsForPaintAfterViewDidMoveToWindow WK_API_AVAILABLE(macosx(10.12.3), ios(10.3));
    6869@property (nonatomic, setter=_setControlledByAutomation:, getter=_isControlledByAutomation) BOOL _controlledByAutomation WK_API_AVAILABLE(macosx(10.12.3), ios(10.3));
     70@property (nonatomic, setter=_setApplicationManifest:) _WKApplicationManifest *_applicationManifest WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
    6971
    7072#if TARGET_OS_IPHONE
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifestInternal.h

    r225598 r225615  
    3434#import <WebCore/ApplicationManifest.h>
    3535
    36 namespace WebCore {
    37 struct ApplicationManifest;
    38 }
    39 
    4036#if ENABLE(APPLICATION_MANIFEST)
    4137namespace API {
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r225598 r225615  
    145145#include <wtf/text/StringView.h>
    146146
     147#if ENABLE(APPLICATION_MANIFEST)
     148#include "APIApplicationManifest.h"
     149#endif
     150
    147151#if ENABLE(ASYNC_SCROLLING)
    148152#include "RemoteScrollingCoordinatorProxy.h"
     
    58135817#endif
    58145818
     5819#if ENABLE(APPLICATION_MANIFEST)
     5820    parameters.applicationManifest = m_configuration->applicationManifest() ? std::optional<WebCore::ApplicationManifest>(m_configuration->applicationManifest()->applicationManifest()) : std::nullopt;
     5821#endif
     5822
    58155823    m_process->addWebUserContentControllerProxy(m_userContentController, parameters);
    58165824
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r225598 r225615  
    420420#endif
    421421
     422#if ENABLE(APPLICATION_MANIFEST)
     423    pageConfiguration.applicationManifest = parameters.applicationManifest;
     424#endif
     425
    422426    m_page = std::make_unique<Page>(WTFMove(pageConfiguration));
    423427    updatePreferences(parameters.store);
Note: See TracChangeset for help on using the changeset viewer.