Bug 148680 - Web Inspector: add explicit version checking for legacy backends
Summary: Web Inspector: add explicit version checking for legacy backends
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: Web Inspector (show other bugs)
Version: WebKit Nightly Build
Hardware: All All
: P2 Normal
Assignee: Nobody
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2015-09-01 09:41 PDT by BJ Burg
Modified: 2016-12-13 15:35 PST (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description BJ Burg 2015-09-01 09:41:19 PDT
In several places we do awkward things like the following since we can't directly test protocol version or supported features.

// COMPATIBILITY (iOS 9): Legacy backends don't support breakpoint ignore count. Since support
// can't be tested directly, check for CSS.getSupportedSystemFontFamilyNames.
if (CSSAgent.getSupportedSystemFontFamilyNames) {

In cases where we can't use Agent.command.supports(...), it would be better if we had checks against the shipped protocol version, like:

if (WebInspector.backendVersion.builtBefore(WebInspector.BackendVersions.iOS9))
if (WebInspector.backendVersion.equalTo(WebInspector.BackendVersions.iOS8))
if (WebInspector.backendVersion.builtAfter(WebInspector.BackendVersions.iOS6))

Feel free to suggest better comparison operator names, these are clunky. I believe WebKit uses "builtOnOrAfter(10, 10, 0)" or similar.
In the legacy protocol versions, we can embed a top-level "version" field and parse it in the frontend. And, going forward, we can use
a version string of iOS9+ once a legacy copy of iOS9 has been copied over.

We could also implement fine-grained feature checking, like WebInspector.backendVersion.supports("Debugger.BreakpointIgnoreCounts"), which will return false for old versions; once that specific feature support lands in trunk, we add the feature key "Debugger.BreakpointIgnoreCounts" in a file somewhere that feeds into backendVersion.supports(). Once the next legacy protocol version is created, we delete all the old feature key checks and replace them with backendVersion.equalOrLaterThan(new-version).
Comment 1 Radar WebKit Bug Importer 2015-09-01 09:41:32 PDT
<rdar://problem/22519698>
Comment 2 Timothy Hatcher 2015-09-01 10:01:07 PDT
iOS 9 was added to the Legacy folder last week.
Comment 3 Joseph Pecoraro 2015-09-01 11:49:50 PDT
I think we could just give the Inspector domain a version number. And bump it whenever we want/need to.

    {
        "domain": "Inspector",
        "constants": [
            { "name": "Version", "value": 1000 }
        ]
    }

Would generate:

    InspectorBackend.registerConstant("Inspector.Version", 1000);

We could retroactively add it to Legacy Inspector-iOS-*.json files. And add WebInspector.BackendVersions.iOS7-9 constants (700, 800, 900) to the frontend.

That said, I still think we should be feature checking the protocol when possible. This would only be used for when we can't easily do that (like new properties in types).