⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 243798 in webkit


Ignore:
Timestamp:
Apr 3, 2019, 8:22:10 AM (7 years ago)
Author:
Wenson Hsieh
Message:

Introduce and add plumbing for a website policy for meta viewport tag handling
https://bugs.webkit.org/show_bug.cgi?id=196285

Reviewed by Tim Horton.

Source/WebCore:

Add MetaViewportPolicy to DocumentLoader. See WebKit ChangeLog for more detail.

  • loader/DocumentLoader.h:

(WebCore::DocumentLoader::metaViewportPolicy const):
(WebCore::DocumentLoader::setMetaViewportPolicy):

Source/WebKit:

Add WebsiteMetaViewportPolicy, a bit that can be used to determine whether to respect or ignore the meta
viewport tag and use native web page parameters instead of the default parameters.

  • Shared/WebsiteMetaViewportPolicy.h: Copied from Source/WebKit/Shared/WebsitePoliciesData.h.
  • Shared/WebsitePoliciesData.cpp:

(WebKit::WebsitePoliciesData::encode const):
(WebKit::WebsitePoliciesData::decode):
(WebKit::WebsitePoliciesData::applyToDocumentLoader):

Convert WebKit::WebsiteMetaViewportPolicy into WebCore::MetaViewportPolicy.

  • Shared/WebsitePoliciesData.h:
  • UIProcess/API/APIWebsitePolicies.cpp:

(API::WebsitePolicies::data):

  • UIProcess/API/APIWebsitePolicies.h:

Add additional plumbing for the policy flag.

  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/WebPage/ios/WebPageIOS.mm:

(WebKit::WebPage::resetViewportDefaultConfiguration):

Use native web page parameters if either "shouldIgnoreMetaViewport" is enabled, or the new policy is set.
Eventually, the policy should completely replace the former preference once no internal clients depend on it.

Location:
trunk/Source
Files:
9 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r243795 r243798  
     12019-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        Introduce and add plumbing for a website policy for meta viewport tag handling
     4        https://bugs.webkit.org/show_bug.cgi?id=196285
     5
     6        Reviewed by Tim Horton.
     7
     8        Add MetaViewportPolicy to DocumentLoader. See WebKit ChangeLog for more detail.
     9
     10        * loader/DocumentLoader.h:
     11        (WebCore::DocumentLoader::metaViewportPolicy const):
     12        (WebCore::DocumentLoader::setMetaViewportPolicy):
     13
    1142019-04-03  Joseph Pecoraro  <pecoraro@apple.com>
    215
  • trunk/Source/WebCore/loader/DocumentLoader.h

    r242960 r243798  
    113113};
    114114
     115enum class MetaViewportPolicy {
     116    Default,
     117    Respect,
     118    Ignore,
     119};
     120
    115121class DocumentLoader
    116122    : public RefCounted<DocumentLoader>
     
    284290    void setPopUpPolicy(PopUpPolicy popUpPolicy) { m_popUpPolicy = popUpPolicy; }
    285291
     292    MetaViewportPolicy metaViewportPolicy() const { return m_metaViewportPolicy; }
     293    void setMetaViewportPolicy(MetaViewportPolicy policy) { m_metaViewportPolicy = policy; }
     294
    286295    void addSubresourceLoader(ResourceLoader*);
    287296    void removeSubresourceLoader(LoadCompletionType, ResourceLoader*);
     
    557566    OptionSet<AutoplayQuirk> m_allowedAutoplayQuirks;
    558567    PopUpPolicy m_popUpPolicy { PopUpPolicy::Default };
     568    MetaViewportPolicy m_metaViewportPolicy { MetaViewportPolicy::Default };
    559569
    560570#if ENABLE(SERVICE_WORKER)
  • trunk/Source/WebKit/ChangeLog

    r243797 r243798  
     12019-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>
     2
     3        Introduce and add plumbing for a website policy for meta viewport tag handling
     4        https://bugs.webkit.org/show_bug.cgi?id=196285
     5
     6        Reviewed by Tim Horton.
     7
     8        Add WebsiteMetaViewportPolicy, a bit that can be used to determine whether to respect or ignore the meta
     9        viewport tag and use native web page parameters instead of the default parameters.
     10
     11        * Shared/WebsiteMetaViewportPolicy.h: Copied from Source/WebKit/Shared/WebsitePoliciesData.h.
     12        * Shared/WebsitePoliciesData.cpp:
     13        (WebKit::WebsitePoliciesData::encode const):
     14        (WebKit::WebsitePoliciesData::decode):
     15        (WebKit::WebsitePoliciesData::applyToDocumentLoader):
     16
     17        Convert WebKit::WebsiteMetaViewportPolicy into WebCore::MetaViewportPolicy.
     18
     19        * Shared/WebsitePoliciesData.h:
     20        * UIProcess/API/APIWebsitePolicies.cpp:
     21        (API::WebsitePolicies::data):
     22        * UIProcess/API/APIWebsitePolicies.h:
     23
     24        Add additional plumbing for the policy flag.
     25
     26        * WebKit.xcodeproj/project.pbxproj:
     27        * WebProcess/WebPage/ios/WebPageIOS.mm:
     28        (WebKit::WebPage::resetViewportDefaultConfiguration):
     29
     30        Use native web page parameters if either "shouldIgnoreMetaViewport" is enabled, or the new policy is set.
     31        Eventually, the policy should completely replace the former preference once no internal clients depend on it.
     32
    1332019-04-03  Wenson Hsieh  <wenson_hsieh@apple.com>
    234
  • trunk/Source/WebKit/Shared/WebsiteMetaViewportPolicy.h

    r243797 r243798  
    11/*
    2  * Copyright (C) 2016 Apple Inc. All rights reserved.
     2 * Copyright (C) 2019 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
    28 #include "WebsiteAutoplayPolicy.h"
    29 #include "WebsiteAutoplayQuirk.h"
    30 #include "WebsiteDataStoreParameters.h"
    31 #include "WebsitePopUpPolicy.h"
    32 #include <WebCore/HTTPHeaderField.h>
    33 #include <wtf/OptionSet.h>
    34 
    35 namespace IPC {
    36 class Decoder;
    37 class Encoder;
    38 }
    39 
    40 namespace WebCore {
    41 class DocumentLoader;
    42 }
     28#include <wtf/Forward.h>
    4329
    4430namespace WebKit {
    4531
    46 struct WebsitePoliciesData {
    47     static void applyToDocumentLoader(WebsitePoliciesData&&, WebCore::DocumentLoader&);
    48 
    49     bool contentBlockersEnabled { true };
    50     OptionSet<WebsiteAutoplayQuirk> allowedAutoplayQuirks;
    51     WebsiteAutoplayPolicy autoplayPolicy { WebsiteAutoplayPolicy::Default };
    52     Optional<bool> deviceOrientationAndMotionAccessState;
    53     Vector<WebCore::HTTPHeaderField> customHeaderFields;
    54     WebsitePopUpPolicy popUpPolicy { WebsitePopUpPolicy::Default };
    55     Optional<WebsiteDataStoreParameters> websiteDataStoreParameters;
    56     String customUserAgent;
    57     String customJavaScriptUserAgentAsSiteSpecificQuirks;
    58     String customNavigatorPlatform;
    59 
    60     void encode(IPC::Encoder&) const;
    61     static Optional<WebsitePoliciesData> decode(IPC::Decoder&);
     32enum class WebsiteMetaViewportPolicy {
     33    Default,
     34    Respect,
     35    Ignore,
    6236};
    6337
    64 } // namespace WebKit
     38}
     39
     40namespace WTF {
     41
     42template<> struct EnumTraits<WebKit::WebsiteMetaViewportPolicy> {
     43    using values = EnumValues<
     44        WebKit::WebsiteMetaViewportPolicy,
     45        WebKit::WebsiteMetaViewportPolicy::Default,
     46        WebKit::WebsiteMetaViewportPolicy::Respect,
     47        WebKit::WebsiteMetaViewportPolicy::Ignore
     48    >;
     49};
     50
     51} // namespace WTF
  • trunk/Source/WebKit/Shared/WebsitePoliciesData.cpp

    r242960 r243798  
    4747    encoder << customJavaScriptUserAgentAsSiteSpecificQuirks;
    4848    encoder << customNavigatorPlatform;
     49    encoder << metaViewportPolicy;
    4950}
    5051
     
    99100    decoder >> customNavigatorPlatform;
    100101    if (!customNavigatorPlatform)
     102        return WTF::nullopt;
     103
     104    Optional<WebsiteMetaViewportPolicy> metaViewportPolicy;
     105    decoder >> metaViewportPolicy;
     106    if (!metaViewportPolicy)
    101107        return WTF::nullopt;
    102108   
     
    112118        WTFMove(*customJavaScriptUserAgentAsSiteSpecificQuirks),
    113119        WTFMove(*customNavigatorPlatform),
     120        WTFMove(*metaViewportPolicy),
    114121    } };
    115122}
     
    171178    }
    172179
     180    switch (websitePolicies.metaViewportPolicy) {
     181    case WebsiteMetaViewportPolicy::Default:
     182        documentLoader.setMetaViewportPolicy(WebCore::MetaViewportPolicy::Default);
     183        break;
     184    case WebsiteMetaViewportPolicy::Respect:
     185        documentLoader.setMetaViewportPolicy(WebCore::MetaViewportPolicy::Respect);
     186        break;
     187    case WebsiteMetaViewportPolicy::Ignore:
     188        documentLoader.setMetaViewportPolicy(WebCore::MetaViewportPolicy::Ignore);
     189        break;
     190    }
     191
    173192    if (websitePolicies.websiteDataStoreParameters) {
    174193        if (auto* frame = documentLoader.frame()) {
  • trunk/Source/WebKit/Shared/WebsitePoliciesData.h

    r242960 r243798  
    2929#include "WebsiteAutoplayQuirk.h"
    3030#include "WebsiteDataStoreParameters.h"
     31#include "WebsiteMetaViewportPolicy.h"
    3132#include "WebsitePopUpPolicy.h"
    3233#include <WebCore/HTTPHeaderField.h>
     
    5758    String customJavaScriptUserAgentAsSiteSpecificQuirks;
    5859    String customNavigatorPlatform;
     60    WebsiteMetaViewportPolicy metaViewportPolicy { WebsiteMetaViewportPolicy::Default };
    5961
    6062    void encode(IPC::Encoder&) const;
  • trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.cpp

    r242960 r243798  
    5454WebKit::WebsitePoliciesData WebsitePolicies::data()
    5555{
    56     Optional<WebKit::WebsiteDataStoreParameters> parameters;
    57     if (m_websiteDataStore)
    58         parameters = m_websiteDataStore->websiteDataStore().parameters();
    59     return { contentBlockersEnabled(), allowedAutoplayQuirks(), autoplayPolicy(), deviceOrientationAndMotionAccessState(),
    60         customHeaderFields(), popUpPolicy(), WTFMove(parameters), m_customUserAgent, m_customJavaScriptUserAgentAsSiteSpecificQuirks, m_customNavigatorPlatform };
     56    return {
     57        contentBlockersEnabled(),
     58        allowedAutoplayQuirks(),
     59        autoplayPolicy(),
     60        deviceOrientationAndMotionAccessState(),
     61        customHeaderFields(),
     62        popUpPolicy(),
     63        m_websiteDataStore ? Optional<WebKit::WebsiteDataStoreParameters> { m_websiteDataStore->websiteDataStore().parameters() } : WTF::nullopt,
     64        m_customUserAgent,
     65        m_customJavaScriptUserAgentAsSiteSpecificQuirks,
     66        m_customNavigatorPlatform,
     67        m_metaViewportPolicy,
     68    };
    6169}
    6270
  • trunk/Source/WebKit/UIProcess/API/APIWebsitePolicies.h

    r243797 r243798  
    3030#include "WebsiteAutoplayPolicy.h"
    3131#include "WebsiteAutoplayQuirk.h"
     32#include "WebsiteMetaViewportPolicy.h"
    3233#include "WebsitePopUpPolicy.h"
    3334#include <WebCore/HTTPHeaderField.h>
     
    8586    void setPreferredCompatibilityMode(WebKit::WebCompatibilityMode mode) { m_preferredCompatibilityMode = mode; }
    8687
     88    WebKit::WebsiteMetaViewportPolicy metaViewportPolicy() const { return m_metaViewportPolicy; }
     89    void setMetaViewportPolicy(WebKit::WebsiteMetaViewportPolicy policy) { m_metaViewportPolicy = policy; }
     90
    8791private:
    8892    WebsitePolicies(bool contentBlockersEnabled, OptionSet<WebKit::WebsiteAutoplayQuirk>, WebKit::WebsiteAutoplayPolicy, Vector<WebCore::HTTPHeaderField>&&, WebKit::WebsitePopUpPolicy, RefPtr<WebsiteDataStore>&&);
     
    99103    WTF::String m_customNavigatorPlatform;
    100104    WebKit::WebCompatibilityMode m_preferredCompatibilityMode { WebKit::WebCompatibilityMode::Default };
     105    WebKit::WebsiteMetaViewportPolicy m_metaViewportPolicy { WebKit::WebsiteMetaViewportPolicy::Default };
    101106};
    102107
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r243797 r243798  
    16371637                ED82A7F2128C6FAF004477B3 /* WKBundlePageOverlay.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A22F0FF1289FCD90085E74F /* WKBundlePageOverlay.h */; settings = {ATTRIBUTES = (Private, ); }; };
    16381638                F409BA181E6E64BC009DA28E /* WKDragDestinationAction.h in Headers */ = {isa = PBXBuildFile; fileRef = F409BA171E6E64B3009DA28E /* WKDragDestinationAction.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1639                F430E9422247335F005FE053 /* WebsiteMetaViewportPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = F430E941224732A9005FE053 /* WebsiteMetaViewportPolicy.h */; };
    16391640                F430E94422473DFF005FE053 /* WebCompatibilityMode.h in Headers */ = {isa = PBXBuildFile; fileRef = F430E94322473DB8005FE053 /* WebCompatibilityMode.h */; };
    16401641                F438CD1C2241421400DE6DDA /* WKWebpagePreferences.h in Headers */ = {isa = PBXBuildFile; fileRef = F438CD1B224140A600DE6DDA /* WKWebpagePreferences.h */; settings = {ATTRIBUTES = (Public, ); }; };
     
    45734574                F40D1B68220BDC0F00B49A01 /* WebAutocorrectionContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WebAutocorrectionContext.h; path = ios/WebAutocorrectionContext.h; sourceTree = "<group>"; };
    45744575                F41056612130699A0092281D /* APIAttachmentCocoa.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = APIAttachmentCocoa.mm; sourceTree = "<group>"; };
     4576                F430E941224732A9005FE053 /* WebsiteMetaViewportPolicy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebsiteMetaViewportPolicy.h; sourceTree = "<group>"; };
    45754577                F430E94322473DB8005FE053 /* WebCompatibilityMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebCompatibilityMode.h; sourceTree = "<group>"; };
    45764578                F438CD1B224140A600DE6DDA /* WKWebpagePreferences.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WKWebpagePreferences.h; sourceTree = "<group>"; };
     
    52295231                                5C3AEA8E1FE1F1DF002318D3 /* WebsitePoliciesData.cpp */,
    52305232                                5C13024A1FE341A7000D9B31 /* WebsitePoliciesData.h */,
     5233                                F430E941224732A9005FE053 /* WebsiteMetaViewportPolicy.h */,
    52315234                                0EDE85022004E74900030560 /* WebsitePopUpPolicy.h */,
    52325235                                8360349D1ACB34D600626549 /* WebSQLiteDatabaseTracker.cpp */,
     
    98219824                                37A709A71E3EA0FD00CA5969 /* WKDataDetectorTypes.h in Headers */,
    98229825                                37A709A91E3EA40C00CA5969 /* WKDataDetectorTypesInternal.h in Headers */,
     9826                                F430E9422247335F005FE053 /* WebsiteMetaViewportPolicy.h in Headers */,
    98239827                                2E94FC1620351A6D00974BA0 /* WKDatePickerViewController.h in Headers */,
    98249828                                377EAD4517E2C51A002D193D /* WKDeclarationSpecifiers.h in Headers */,
  • trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm

    r243712 r243798  
    6464#import <WebCore/DiagnosticLoggingClient.h>
    6565#import <WebCore/DiagnosticLoggingKeys.h>
     66#import <WebCore/DocumentLoader.h>
    6667#import <WebCore/DragController.h>
    6768#import <WebCore/Editing.h>
     
    29662967
    29672968    auto parametersForStandardFrame = [&] {
     2969        bool shouldIgnoreMetaViewport = false;
     2970        if (auto* mainDocument = m_page->mainFrame().document()) {
     2971            auto* loader = mainDocument->loader();
     2972            shouldIgnoreMetaViewport = loader && loader->metaViewportPolicy() == WebCore::MetaViewportPolicy::Ignore;
     2973        }
     2974
    29682975        if (m_page->settings().shouldIgnoreMetaViewport())
    2969             return m_viewportConfiguration.nativeWebpageParameters();
    2970 
    2971         return ViewportConfiguration::webpageParameters();
     2976            shouldIgnoreMetaViewport = true;
     2977
     2978        return shouldIgnoreMetaViewport ? m_viewportConfiguration.nativeWebpageParameters() : ViewportConfiguration::webpageParameters();
    29722979    };
    29732980
Note: See TracChangeset for help on using the changeset viewer.