Changeset 220049 in webkit


Ignore:
Timestamp:
Jul 30, 2017 10:36:26 AM (7 years ago)
Author:
beidson@apple.com
Message:

Add URLSchemeHandler API tests that verify the lack of URLSchemeTask object leaks.
https://bugs.webkit.org/show_bug.cgi?id=174958

Reviewed by Darin Adler.

Source/WebKit:

  • UIProcess/API/APIURLSchemeTask.h:
  • UIProcess/API/C/WKTestingSupport.cpp:

(WKGetAPIURLSchemeTaskInstanceCount):
(WKGetWebURLSchemeTaskInstanceCount):

  • UIProcess/API/C/WKTestingSupport.h:
  • UIProcess/WebURLSchemeTask.h:
  • WebKit.xcodeproj/project.pbxproj:

Source/WTF:

This patch adds a new template class "InstanceCounted<T>".

For each specialization, "InstanceCounted" will keep track of the total number of
instances in existence.

This makes explicate leak checking in API tests possible.

Since this adds some runtime and storage overhead the code that actually does anything
is only compiled in debug builds.

  • WTF.xcodeproj/project.pbxproj:
  • wtf/InstanceCounted.h: Added.

(WTF::InstanceCounted::InstanceCounted):
(WTF::InstanceCounted::instanceCount):
(WTF::InstanceCounted::~InstanceCounted):

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-leaks.mm: Added.

(-[LeakSchemeHandler webView:startURLSchemeTask:]):
(-[LeakSchemeHandler webView:stopURLSchemeTask:]):
(runUntilTasksInFlight):
(TEST):

Location:
trunk
Files:
2 added
8 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r219994 r220049  
     12017-07-30  Brady Eidson  <beidson@apple.com>
     2
     3        Add URLSchemeHandler API tests that verify the lack of URLSchemeTask object leaks.
     4        https://bugs.webkit.org/show_bug.cgi?id=174958
     5
     6        Reviewed by Darin Adler.
     7
     8        This patch adds a new template class "InstanceCounted<T>".
     9       
     10        For each specialization, "InstanceCounted" will keep track of the total number of
     11        instances in existence.
     12       
     13        This makes explicate leak checking in API tests possible.
     14       
     15        Since this adds some runtime and storage overhead the code that actually does anything
     16        is only compiled in debug builds.
     17       
     18        * WTF.xcodeproj/project.pbxproj:
     19        * wtf/InstanceCounted.h: Added.
     20        (WTF::InstanceCounted::InstanceCounted):
     21        (WTF::InstanceCounted::instanceCount):
     22        (WTF::InstanceCounted::~InstanceCounted):
     23
    1242017-07-27  Yusuke Suzuki  <utatane.tea@gmail.com>
    225
  • trunk/Source/WTF/WTF.xcodeproj/project.pbxproj

    r219898 r220049  
    298298                515F794D1CFC9F4A00CCED93 /* CrossThreadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossThreadTask.h; sourceTree = "<group>"; };
    299299                515F79551CFD3A6900CCED93 /* CrossThreadQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossThreadQueue.h; sourceTree = "<group>"; };
     300                5182C22C1F2BC7E60059BA7C /* InstanceCounted.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InstanceCounted.h; sourceTree = "<group>"; };
    300301                5311BD511EA71CAD00525281 /* Signals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Signals.cpp; sourceTree = "<group>"; };
    301302                5311BD551EA7E15A00525281 /* LocklessBag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LocklessBag.h; sourceTree = "<group>"; };
     
    824825                                A8A472BC151A825A004123FF /* InlineASM.h */,
    825826                                A70DA0821799F04D00529A9B /* Insertion.h */,
     827                                5182C22C1F2BC7E60059BA7C /* InstanceCounted.h */,
    826828                                7CDD7FF7186D291E007433CD /* IteratorAdaptors.h */,
    827829                                7CDD7FF9186D2A54007433CD /* IteratorRange.h */,
  • trunk/Source/WebKit/ChangeLog

    r220046 r220049  
     12017-07-30  Brady Eidson  <beidson@apple.com>
     2
     3        Add URLSchemeHandler API tests that verify the lack of URLSchemeTask object leaks.
     4        https://bugs.webkit.org/show_bug.cgi?id=174958
     5
     6        Reviewed by Darin Adler.
     7
     8        * UIProcess/API/APIURLSchemeTask.h:
     9
     10        * UIProcess/API/C/WKTestingSupport.cpp:
     11        (WKGetAPIURLSchemeTaskInstanceCount):
     12        (WKGetWebURLSchemeTaskInstanceCount):
     13        * UIProcess/API/C/WKTestingSupport.h:
     14
     15        * UIProcess/WebURLSchemeTask.h:
     16
     17        * WebKit.xcodeproj/project.pbxproj:
     18
    1192017-07-29  Yusuke Suzuki  <utatane.tea@gmail.com>
    220
  • trunk/Source/WebKit/UIProcess/API/APIURLSchemeTask.h

    r216037 r220049  
    2727
    2828#include "APIObject.h"
     29#include <wtf/InstanceCounted.h>
    2930
    3031namespace WebKit {
     
    3435namespace API {
    3536
    36 class URLSchemeTask final : public ObjectImpl<Object::Type::URLSchemeTask> {
     37class URLSchemeTask final : public ObjectImpl<Object::Type::URLSchemeTask>, public InstanceCounted<URLSchemeTask> {
    3738public:
    3839    static Ref<URLSchemeTask> create(WebKit::WebURLSchemeTask&);
  • trunk/Source/WebKit/UIProcess/API/C/WKTestingSupport.cpp

    r220048 r220049  
    2424 */
    2525
    26 #pragma once
     26#include "config.h"
     27#include "WKTestingSupport.h"
    2728
    28 #include "APIObject.h"
     29#include "APIURLSchemeTask.h"
     30#include "WebURLSchemeTask.h"
    2931
    30 namespace WebKit {
    31 class WebURLSchemeTask;
     32size_t WKGetAPIURLSchemeTaskInstanceCount()
     33{
     34    return API::URLSchemeTask::instanceCount();
    3235}
    3336
    34 namespace API {
    35 
    36 class URLSchemeTask final : public ObjectImpl<Object::Type::URLSchemeTask> {
    37 public:
    38     static Ref<URLSchemeTask> create(WebKit::WebURLSchemeTask&);
    39 
    40     WebKit::WebURLSchemeTask& task() { return m_webURLSchemeTask.get(); }
    41 
    42 private:
    43     URLSchemeTask(WebKit::WebURLSchemeTask&);
    44 
    45     Ref<WebKit::WebURLSchemeTask> m_webURLSchemeTask;
    46 };
    47 
     37size_t WKGetWebURLSchemeTaskInstanceCount()
     38{
     39    return WebKit::WebURLSchemeTask::instanceCount();
    4840}
  • trunk/Source/WebKit/UIProcess/API/C/WKTestingSupport.h

    r220048 r220049  
    2626#pragma once
    2727
    28 #include "APIObject.h"
     28#include <WebKit/WKBase.h>
    2929
    30 namespace WebKit {
    31 class WebURLSchemeTask;
     30#ifdef __cplusplus
     31extern "C" {
     32#endif
     33
     34WK_EXPORT size_t WKGetAPIURLSchemeTaskInstanceCount();
     35WK_EXPORT size_t WKGetWebURLSchemeTaskInstanceCount();
     36
     37#ifdef __cplusplus
    3238}
    33 
    34 namespace API {
    35 
    36 class URLSchemeTask final : public ObjectImpl<Object::Type::URLSchemeTask> {
    37 public:
    38     static Ref<URLSchemeTask> create(WebKit::WebURLSchemeTask&);
    39 
    40     WebKit::WebURLSchemeTask& task() { return m_webURLSchemeTask.get(); }
    41 
    42 private:
    43     URLSchemeTask(WebKit::WebURLSchemeTask&);
    44 
    45     Ref<WebKit::WebURLSchemeTask> m_webURLSchemeTask;
    46 };
    47 
    48 }
     39#endif
  • trunk/Source/WebKit/UIProcess/WebURLSchemeTask.h

    r220011 r220049  
    2727
    2828#include <WebCore/ResourceRequest.h>
     29#include <wtf/InstanceCounted.h>
    2930#include <wtf/RefCounted.h>
    3031#include <wtf/RefPtr.h>
     
    4142class WebPageProxy;
    4243
    43 class WebURLSchemeTask : public RefCounted<WebURLSchemeTask> {
     44class WebURLSchemeTask : public RefCounted<WebURLSchemeTask>, public InstanceCounted<WebURLSchemeTask> {
    4445    WTF_MAKE_NONCOPYABLE(WebURLSchemeTask);
    4546public:
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r220038 r220049  
    10971097                51F7DC43180CC93600212CA3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC3DE46815A91763008D26FC /* Foundation.framework */; };
    10981098                51F7DC44180CC93600212CA3 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* WebKit.framework */; };
     1099                51F886A51F2C227E00C193EF /* WKTestingSupport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51F886A31F2C214A00C193EF /* WKTestingSupport.cpp */; };
     1100                51F886A61F2C228100C193EF /* WKTestingSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 51F886A41F2C214A00C193EF /* WKTestingSupport.h */; settings = {ATTRIBUTES = (Private, ); }; };
    10991101                51FA2D7415212DF100C1BA0B /* InjectedBundleDOMWindowExtension.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51FA2D5C15211A5000C1BA0B /* InjectedBundleDOMWindowExtension.cpp */; };
    11001102                51FA2D7715212E2600C1BA0B /* WKBundleDOMWindowExtension.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51FA2D7515212E1E00C1BA0B /* WKBundleDOMWindowExtension.cpp */; };
     
    33573359                51F060DE1654317500F3281B /* WebResourceLoaderMessages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebResourceLoaderMessages.h; sourceTree = "<group>"; };
    33583360                51F7DC4A180CC93600212CA3 /* com.apple.WebKit.Databases.xpc */ = {isa = PBXFileReference; explicitFileType = "wrapper.xpc-service"; includeInIndex = 0; path = com.apple.WebKit.Databases.xpc; sourceTree = BUILT_PRODUCTS_DIR; };
     3361                51F886A31F2C214A00C193EF /* WKTestingSupport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKTestingSupport.cpp; sourceTree = "<group>"; };
     3362                51F886A41F2C214A00C193EF /* WKTestingSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKTestingSupport.h; sourceTree = "<group>"; };
    33593363                51FA2D541521118600C1BA0B /* WKBundleDOMWindowExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundleDOMWindowExtension.h; sourceTree = "<group>"; };
    33603364                51FA2D5A15211A1E00C1BA0B /* InjectedBundleDOMWindowExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedBundleDOMWindowExtension.h; sourceTree = "<group>"; };
     
    70317035                                1ADE46B01954EC61000F7985 /* WKSessionStateRef.cpp */,
    70327036                                1ADE46B11954EC61000F7985 /* WKSessionStateRef.h */,
     7037                                51F886A31F2C214A00C193EF /* WKTestingSupport.cpp */,
     7038                                51F886A41F2C214A00C193EF /* WKTestingSupport.h */,
    70337039                                314888FE1D91B11D00377042 /* WKTextChecker.cpp */,
    70347040                                314888FF1D91B11D00377042 /* WKTextChecker.h */,
     
    88978903                                1AF4592F19464B2000F9D4A2 /* WKError.h in Headers */,
    88988904                                BCFD548C132D82680055D816 /* WKErrorCF.h in Headers */,
     8905                                51F886A61F2C228100C193EF /* WKTestingSupport.h in Headers */,
    88998906                                37B5045219EEF31300CE2CF8 /* WKErrorPrivate.h in Headers */,
    89008907                                BC4075FC124FF0270068F20A /* WKErrorRef.h in Headers */,
     
    99879994                                51795567162876CB00FA43B6 /* NetworkProcessMac.mm in Sources */,
    99889995                                5163199416289A6000E22F00 /* NetworkProcessMessageReceiver.cpp in Sources */,
     9996                                51F886A51F2C227E00C193EF /* WKTestingSupport.cpp in Sources */,
    99899997                                E14A954916E016A40068DE82 /* NetworkProcessPlatformStrategies.cpp in Sources */,
    99909998                                5179556D162877B100FA43B6 /* NetworkProcessProxy.cpp in Sources */,
  • trunk/Tools/ChangeLog

    r220037 r220049  
     12017-07-30  Brady Eidson  <beidson@apple.com>
     2
     3        Add URLSchemeHandler API tests that verify the lack of URLSchemeTask object leaks.
     4        https://bugs.webkit.org/show_bug.cgi?id=174958
     5
     6        Reviewed by Darin Adler.
     7
     8        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     9        * TestWebKitAPI/Tests/WebKit2Cocoa/WKURLSchemeHandler-leaks.mm: Added.
     10        (-[LeakSchemeHandler webView:startURLSchemeTask:]):
     11        (-[LeakSchemeHandler webView:stopURLSchemeTask:]):
     12        (runUntilTasksInFlight):
     13        (TEST):
     14
    1152017-07-28  Commit Queue  <commit-queue@webkit.org>
    216
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r219904 r220049  
    164164                51714EB81CF8CA17004723C4 /* WebProcessKillIDBCleanup.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51714EB61CF8C7A4004723C4 /* WebProcessKillIDBCleanup.mm */; };
    165165                517E7E04151119C100D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 517E7E031511187500D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html */; };
     166                5182C22E1F2BCE540059BA7C /* WKURLSchemeHandler-leaks.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5182C22D1F2BCB410059BA7C /* WKURLSchemeHandler-leaks.mm */; };
    166167                5198A2401EA7E59F008910B7 /* InitialWarmedProcessUsed.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5198A23F1EA7E595008910B7 /* InitialWarmedProcessUsed.mm */; };
    167168                51A5877D1D1B49CD004BA9AF /* IndexedDBMultiProcess-3.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 51A5877C1D1B3D8D004BA9AF /* IndexedDBMultiProcess-3.html */; };
     
    12011202                517E7DFB15110EA600D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MemoryCachePruneWithinResourceLoadDelegate.mm; sourceTree = "<group>"; };
    12021203                517E7E031511187500D0B008 /* MemoryCachePruneWithinResourceLoadDelegate.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = MemoryCachePruneWithinResourceLoadDelegate.html; sourceTree = "<group>"; };
     1204                5182C22D1F2BCB410059BA7C /* WKURLSchemeHandler-leaks.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = "WKURLSchemeHandler-leaks.mm"; sourceTree = "<group>"; };
    12031205                5198A23F1EA7E595008910B7 /* InitialWarmedProcessUsed.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = InitialWarmedProcessUsed.mm; sourceTree = "<group>"; };
    12041206                51A5877C1D1B3D8D004BA9AF /* IndexedDBMultiProcess-3.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "IndexedDBMultiProcess-3.html"; sourceTree = "<group>"; };
     
    19231925                                5E4B1D2C1D404C6100053621 /* WKScrollViewDelegateCrash.mm */,
    19241926                                51C683DD1EA134DB00650183 /* WKURLSchemeHandler-1.mm */,
     1927                                5182C22D1F2BCB410059BA7C /* WKURLSchemeHandler-leaks.mm */,
    19251928                                5CE354D81E70D9C300BEFE3B /* WKContentExtensionStore.mm */,
    19261929                                2EFF06D61D8AF34A0004BB30 /* WKWebViewCandidateTests.mm */,
     
    32593262                                7CCE7EAB1A411A2400447C4C /* WebKitAgnosticTest.mm in Sources */,
    32603263                                51714EB81CF8CA17004723C4 /* WebProcessKillIDBCleanup.mm in Sources */,
     3264                                5182C22E1F2BCE540059BA7C /* WKURLSchemeHandler-leaks.mm in Sources */,
    32613265                                536770341CC8022800D425B1 /* WebScriptObjectDescription.mm in Sources */,
    32623266                                5120C83D1E6751290025B250 /* WebsiteDataStoreCustomPaths.mm in Sources */,
Note: See TracChangeset for help on using the changeset viewer.