Changeset 260381 in webkit


Ignore:
Timestamp:
Apr 20, 2020, 11:41:29 AM (5 years ago)
Author:
ddkilzer@apple.com
Message:

[IPC hardening] Use ObjectIdentifier<> for geolocationID
<https://webkit.org/b/210680>
<rdar://problem/58892340>

Reviewed by Chris Dumez.

Replace uses of uint64_t with GeolocationIdentifier.

  • Scripts/webkit/messages.py:
  • UIProcess/GeolocationIdentifier.h: Add.
  • UIProcess/GeolocationPermissionRequestManagerProxy.cpp:

(WebKit::GeolocationPermissionRequestManagerProxy::createRequest):
(WebKit::GeolocationPermissionRequestManagerProxy::didReceiveGeolocationPermissionDecision):

  • UIProcess/GeolocationPermissionRequestManagerProxy.h:
  • UIProcess/GeolocationPermissionRequestProxy.cpp:

(WebKit::GeolocationPermissionRequestProxy::GeolocationPermissionRequestProxy):

  • UIProcess/GeolocationPermissionRequestProxy.h:

(WebKit::GeolocationPermissionRequestProxy::create):

  • UIProcess/WebPageProxy.cpp:
  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:

(WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
(WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
(WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
(WebKit::generateGeolocationID): Delete.

  • Replace with GeolocationIdentifier::generate().
  • WebProcess/Geolocation/GeolocationPermissionRequestManager.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::didReceiveGeolocationPermissionDecision):

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:
Location:
trunk/Source/WebKit
Files:
15 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r260373 r260381  
     12020-04-20  David Kilzer  <ddkilzer@apple.com>
     2
     3        [IPC hardening] Use ObjectIdentifier<> for geolocationID
     4        <https://webkit.org/b/210680>
     5        <rdar://problem/58892340>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Replace uses of uint64_t with GeolocationIdentifier.
     10
     11        * Scripts/webkit/messages.py:
     12        * UIProcess/GeolocationIdentifier.h: Add.
     13        * UIProcess/GeolocationPermissionRequestManagerProxy.cpp:
     14        (WebKit::GeolocationPermissionRequestManagerProxy::createRequest):
     15        (WebKit::GeolocationPermissionRequestManagerProxy::didReceiveGeolocationPermissionDecision):
     16        * UIProcess/GeolocationPermissionRequestManagerProxy.h:
     17        * UIProcess/GeolocationPermissionRequestProxy.cpp:
     18        (WebKit::GeolocationPermissionRequestProxy::GeolocationPermissionRequestProxy):
     19        * UIProcess/GeolocationPermissionRequestProxy.h:
     20        (WebKit::GeolocationPermissionRequestProxy::create):
     21        * UIProcess/WebPageProxy.cpp:
     22        * UIProcess/WebPageProxy.h:
     23        * UIProcess/WebPageProxy.messages.in:
     24        * WebKit.xcodeproj/project.pbxproj:
     25        * WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp:
     26        (WebKit::GeolocationPermissionRequestManager::startRequestForGeolocation):
     27        (WebKit::GeolocationPermissionRequestManager::cancelRequestForGeolocation):
     28        (WebKit::GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision):
     29        (WebKit::generateGeolocationID): Delete.
     30        - Replace with GeolocationIdentifier::generate().
     31        * WebProcess/Geolocation/GeolocationPermissionRequestManager.h:
     32        * WebProcess/WebPage/WebPage.cpp:
     33        (WebKit::WebPage::didReceiveGeolocationPermissionDecision):
     34        * WebProcess/WebPage/WebPage.h:
     35        * WebProcess/WebPage/WebPage.messages.in:
     36
    1372020-04-20  Chris Dumez  <cdumez@apple.com>
    238
  • trunk/Source/WebKit/Scripts/webkit/messages.py

    r260191 r260381  
    1 # Copyright (C) 2010-2019 Apple Inc. All rights reserved.
     1# Copyright (C) 2010-2020 Apple Inc. All rights reserved.
    22#
    33# Redistribution and use in source and binary forms, with or without
     
    230230        'WebKit::AudioMediaStreamTrackRendererIdentifier',
    231231        'WebKit::ContentWorldIdentifier',
     232        'WebKit::GeolocationIdentifier',
    232233        'WebKit::ImageBufferBackendHandle',
    233234        'WebKit::ImageBufferFlushIdentifier',
  • trunk/Source/WebKit/UIProcess/GeolocationIdentifier.h

    r260380 r260381  
    11/*
    2  * Copyright (C) 2011 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
    28 #include <wtf/HashMap.h>
    29 #include <wtf/RefPtr.h>
    30 
    31 namespace WebCore {
    32 class Geolocation;
    33 }
     28#include <wtf/ObjectIdentifier.h>
    3429
    3530namespace WebKit {
    3631
    37 class WebPage;
     32enum GeolocationIdentifierType { };
     33using GeolocationIdentifier = ObjectIdentifier<GeolocationIdentifierType>;
    3834
    39 class GeolocationPermissionRequestManager {
    40     WTF_MAKE_FAST_ALLOCATED;
    41 public:
    42     explicit GeolocationPermissionRequestManager(WebPage&);
    43 
    44     void startRequestForGeolocation(WebCore::Geolocation&);
    45     void cancelRequestForGeolocation(WebCore::Geolocation&);
    46     void revokeAuthorizationToken(const String&);
    47 
    48     void didReceiveGeolocationPermissionDecision(uint64_t geolocationID, const String& authorizationToken);
    49 
    50 private:
    51     typedef HashMap<uint64_t, WebCore::Geolocation*> IDToGeolocationMap;
    52     typedef HashMap<WebCore::Geolocation*, uint64_t> GeolocationToIDMap;
    53     IDToGeolocationMap m_idToGeolocationMap;
    54     GeolocationToIDMap m_geolocationToIDMap;
    55 
    56     WebPage& m_page;
    57 };
    58 
    59 } // namespace WebKit
     35}
  • trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestManagerProxy.cpp

    r256075 r260381  
    11/*
    2  * Copyright (C) 2011 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    4747}
    4848
    49 Ref<GeolocationPermissionRequestProxy> GeolocationPermissionRequestManagerProxy::createRequest(uint64_t geolocationID)
     49Ref<GeolocationPermissionRequestProxy> GeolocationPermissionRequestManagerProxy::createRequest(GeolocationIdentifier geolocationID)
    5050{
    5151    auto request = GeolocationPermissionRequestProxy::create(this, geolocationID);
     
    5454}
    5555
    56 void GeolocationPermissionRequestManagerProxy::didReceiveGeolocationPermissionDecision(uint64_t geolocationID, bool allowed)
     56void GeolocationPermissionRequestManagerProxy::didReceiveGeolocationPermissionDecision(GeolocationIdentifier geolocationID, bool allowed)
    5757{
    5858    if (!m_page.hasRunningProcess())
  • trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestManagerProxy.h

    r256167 r260381  
    11/*
    2  * Copyright (C) 2011 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2727#define GeolocationPermissionRequestManagerProxy_h
    2828
     29#include "GeolocationIdentifier.h"
    2930#include "GeolocationPermissionRequestProxy.h"
    3031#include <wtf/HashMap.h>
     
    4344
    4445    // Create a request to be presented to the user.
    45     Ref<GeolocationPermissionRequestProxy> createRequest(uint64_t geolocationID);
     46    Ref<GeolocationPermissionRequestProxy> createRequest(GeolocationIdentifier);
    4647   
    4748    // Called by GeolocationPermissionRequestProxy when a decision is made by the user.
    48     void didReceiveGeolocationPermissionDecision(uint64_t, bool allow);
     49    void didReceiveGeolocationPermissionDecision(GeolocationIdentifier, bool allow);
    4950
    5051    bool isValidAuthorizationToken(const String&) const;
     
    5253
    5354private:
    54     HashMap<uint64_t, RefPtr<GeolocationPermissionRequestProxy>> m_pendingRequests;
     55    HashMap<GeolocationIdentifier, RefPtr<GeolocationPermissionRequestProxy>> m_pendingRequests;
    5556    HashSet<String> m_validAuthorizationTokens;
    5657    WebPageProxy& m_page;
  • trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.cpp

    r221764 r260381  
    11/*
    2  * Copyright (C) 2011 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3131namespace WebKit {
    3232
    33 GeolocationPermissionRequestProxy::GeolocationPermissionRequestProxy(GeolocationPermissionRequestManagerProxy* manager, uint64_t geolocationID)
     33GeolocationPermissionRequestProxy::GeolocationPermissionRequestProxy(GeolocationPermissionRequestManagerProxy* manager, GeolocationIdentifier geolocationID)
    3434    : m_manager(manager)
    3535    , m_geolocationID(geolocationID)
  • trunk/Source/WebKit/UIProcess/GeolocationPermissionRequestProxy.h

    r221764 r260381  
    11/*
    2  * Copyright (C) 2011 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2727
    2828#include "APIObject.h"
     29#include "GeolocationIdentifier.h"
    2930#include <wtf/Function.h>
    3031
     
    3536class GeolocationPermissionRequestProxy : public RefCounted<GeolocationPermissionRequestProxy> {
    3637public:
    37     static Ref<GeolocationPermissionRequestProxy> create(GeolocationPermissionRequestManagerProxy* manager, uint64_t geolocationID)
     38    static Ref<GeolocationPermissionRequestProxy> create(GeolocationPermissionRequestManagerProxy* manager, GeolocationIdentifier geolocationID)
    3839    {
    3940        return adoptRef(*new GeolocationPermissionRequestProxy(manager, geolocationID));
     
    4647
    4748private:
    48     GeolocationPermissionRequestProxy(GeolocationPermissionRequestManagerProxy*, uint64_t geolocationID);
     49    GeolocationPermissionRequestProxy(GeolocationPermissionRequestManagerProxy*, GeolocationIdentifier);
    4950
    5051    GeolocationPermissionRequestManagerProxy* m_manager;
    51     uint64_t m_geolocationID;
     52    GeolocationIdentifier m_geolocationID;
    5253};
    5354
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r260373 r260381  
    79837983}
    79847984
    7985 void WebPageProxy::requestGeolocationPermissionForFrame(uint64_t geolocationID, FrameInfoData&& frameInfo)
     7985void WebPageProxy::requestGeolocationPermissionForFrame(GeolocationIdentifier geolocationID, FrameInfoData&& frameInfo)
    79867986{
    79877987    MESSAGE_CHECK(m_process, frameInfo.frameID);
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r260303 r260381  
    3535#include "EditorState.h"
    3636#include "FocusedElementInformation.h"
     37#include "GeolocationIdentifier.h"
    3738#include "GeolocationPermissionRequestManagerProxy.h"
    3839#include "HiddenPageThrottlingAutoIncreasesCounter.h"
     
    18921893    void reachedApplicationCacheOriginQuota(const String& originIdentifier, uint64_t currentQuota, uint64_t totalBytesNeeded, Messages::WebPageProxy::ReachedApplicationCacheOriginQuotaDelayedReply&&);
    18931894
    1894     void requestGeolocationPermissionForFrame(uint64_t geolocationID, FrameInfoData&&);
     1895    void requestGeolocationPermissionForFrame(GeolocationIdentifier, FrameInfoData&&);
    18951896    void revokeGeolocationAuthorizationToken(const String& authorizationToken);
    18961897
  • trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in

    r260295 r260381  
    1 # Copyright (C) 2010-2019 Apple Inc. All rights reserved.
     1# Copyright (C) 2010-2020 Apple Inc. All rights reserved.
    22#
    33# Redistribution and use in source and binary forms, with or without
     
    281281
    282282    # Geolocation messages
    283     RequestGeolocationPermissionForFrame(uint64_t geolocationID, struct WebKit::FrameInfoData frameInfo)
     283    RequestGeolocationPermissionForFrame(WebKit::GeolocationIdentifier geolocationID, struct WebKit::FrameInfoData frameInfo)
    284284    RevokeGeolocationAuthorizationToken(String authorizationToken);
    285285
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r260350 r260381  
    14211421                9B5BEC2A240101580070C6EF /* RemoteAudioDestinationProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B5BEC28240101580070C6EF /* RemoteAudioDestinationProxy.h */; };
    14221422                9B5BEC31240102220070C6EF /* RemoteAudioBusData.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9B5BEC30240102220070C6EF /* RemoteAudioBusData.h */; };
     1423                9EC532A32447FBAD00215216 /* GeolocationIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EC532A22447FBAD00215216 /* GeolocationIdentifier.h */; };
    14231424                9FB5F395169E6A80002C25BF /* WKContextPrivateMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FB5F393169E6A80002C25BF /* WKContextPrivateMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
    14241425                A102A7081EC0EEE900D81D82 /* com.macromedia.Flash Player ESR.plugin.sb in Copy Plug-in Sandbox Profiles */ = {isa = PBXBuildFile; fileRef = 7A5E39491D5BD8A700B4B7CE /* com.macromedia.Flash Player ESR.plugin.sb */; };
     
    44864487                9BC59D6C1EFCCCB6001E8D09 /* CallbackID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallbackID.h; sourceTree = "<group>"; };
    44874488                9BC59D6D1EFCDC6D001E8D09 /* OptionalCallbackID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptionalCallbackID.h; sourceTree = "<group>"; };
     4489                9EC532A22447FBAD00215216 /* GeolocationIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeolocationIdentifier.h; sourceTree = "<group>"; };
    44884490                9F54F88E16488E87007DF81A /* AuxiliaryProcessMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AuxiliaryProcessMac.mm; sourceTree = "<group>"; };
    44894491                9F54F8941648AE0E007DF81A /* PluginProcessManagerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = PluginProcessManagerMac.mm; sourceTree = "<group>"; };
     
    89098911                                1AE00D5F1831792100087DD7 /* FrameLoadState.h */,
    89108912                                BC17753E118BABF0007D9E9A /* GenericCallback.h */,
     8913                                9EC532A22447FBAD00215216 /* GeolocationIdentifier.h */,
    89118914                                BC06F44912DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.cpp */,
    89128915                                BC06F44812DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.h */,
     
    1077610779                                515BE1B31D5902DD00DD7C68 /* GamepadData.h in Headers */,
    1077710780                                BC17753F118BABF0007D9E9A /* GenericCallback.h in Headers */,
     10781                                9EC532A32447FBAD00215216 /* GeolocationIdentifier.h in Headers */,
    1077810782                                BC06F42F12DBB9B6002D78DE /* GeolocationPermissionRequestManager.h in Headers */,
    1077910783                                BC06F44A12DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.h in Headers */,
  • trunk/Source/WebKit/WebProcess/Geolocation/GeolocationPermissionRequestManager.cpp

    r257872 r260381  
    11/*
    2  * Copyright (C) 2011 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3030
    3131#include "FrameInfoData.h"
     32#include "GeolocationIdentifier.h"
    3233#include "WebCoreArgumentCoders.h"
    3334#include "WebFrame.h"
     
    4344namespace WebKit {
    4445using namespace WebCore;
    45 
    46 static uint64_t generateGeolocationID()
    47 {
    48     static uint64_t uniqueGeolocationID = 1;
    49     return uniqueGeolocationID++;
    50 }
    5146
    5247GeolocationPermissionRequestManager::GeolocationPermissionRequestManager(WebPage& page)
     
    6560    }
    6661
    67     uint64_t geolocationID = generateGeolocationID();
     62    GeolocationIdentifier geolocationID = GeolocationIdentifier::generate();
    6863
    6964    m_geolocationToIDMap.set(&geolocation, geolocationID);
     
    8378void GeolocationPermissionRequestManager::cancelRequestForGeolocation(Geolocation& geolocation)
    8479{
    85     uint64_t geolocationID = m_geolocationToIDMap.take(&geolocation);
     80    GeolocationIdentifier geolocationID = m_geolocationToIDMap.take(&geolocation);
    8681    if (!geolocationID)
    8782        return;
     
    8984}
    9085
    91 void GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision(uint64_t geolocationID, const String& authorizationToken)
     86void GeolocationPermissionRequestManager::didReceiveGeolocationPermissionDecision(GeolocationIdentifier geolocationID, const String& authorizationToken)
    9287{
    9388    Geolocation* geolocation = m_idToGeolocationMap.take(geolocationID);
  • trunk/Source/WebKit/WebProcess/Geolocation/GeolocationPermissionRequestManager.h

    r256075 r260381  
    11/*
    2  * Copyright (C) 2011 Apple Inc. All rights reserved.
     2 * Copyright (C) 2011-2020 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
     28#include "GeolocationIdentifier.h"
    2829#include <wtf/HashMap.h>
    2930#include <wtf/RefPtr.h>
     
    4647    void revokeAuthorizationToken(const String&);
    4748
    48     void didReceiveGeolocationPermissionDecision(uint64_t geolocationID, const String& authorizationToken);
     49    void didReceiveGeolocationPermissionDecision(GeolocationIdentifier, const String& authorizationToken);
    4950
    5051private:
    51     typedef HashMap<uint64_t, WebCore::Geolocation*> IDToGeolocationMap;
    52     typedef HashMap<WebCore::Geolocation*, uint64_t> GeolocationToIDMap;
     52    typedef HashMap<GeolocationIdentifier, WebCore::Geolocation*> IDToGeolocationMap;
     53    typedef HashMap<WebCore::Geolocation*, GeolocationIdentifier> GeolocationToIDMap;
    5354    IDToGeolocationMap m_idToGeolocationMap;
    5455    GeolocationToIDMap m_geolocationToIDMap;
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r260317 r260381  
    42614261
    42624262#if ENABLE(GEOLOCATION)
    4263 void WebPage::didReceiveGeolocationPermissionDecision(uint64_t geolocationID, const String& authorizationToken)
     4263void WebPage::didReceiveGeolocationPermissionDecision(GeolocationIdentifier geolocationID, const String& authorizationToken)
    42644264{
    42654265    geolocationPermissionRequestManager().didReceiveGeolocationPermissionDecision(geolocationID, authorizationToken);
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r260303 r260381  
    3838#include "EditingRange.h"
    3939#include "FocusedElementInformation.h"
     40#include "GeolocationIdentifier.h"
    4041#include "InjectedBundlePageContextMenuClient.h"
    4142#include "InjectedBundlePageFullScreenClient.h"
     
    15941595#endif
    15951596
    1596     void didReceiveGeolocationPermissionDecision(uint64_t geolocationID, const String& authorizationToken);
     1597    void didReceiveGeolocationPermissionDecision(GeolocationIdentifier, const String& authorizationToken);
    15971598
    15981599    void didReceiveNotificationPermissionDecision(uint64_t notificationID, bool allowed);
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in

    r260303 r260381  
    1 # Copyright (C) 2010-2019 Apple Inc. All rights reserved.
     1# Copyright (C) 2010-2020 Apple Inc. All rights reserved.
    22#
    33# Redistribution and use in source and binary forms, with or without
     
    364364#if ENABLE(GEOLOCATION)
    365365    # Geolocation
    366     DidReceiveGeolocationPermissionDecision(uint64_t geolocationID, String authorizationToken)
     366    DidReceiveGeolocationPermissionDecision(WebKit::GeolocationIdentifier geolocationID, String authorizationToken)
    367367#endif
    368368
Note: See TracChangeset for help on using the changeset viewer.