WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
198629
Web Inspector: longhand CSS properties overridden by shorthands miss strikethrough
https://bugs.webkit.org/show_bug.cgi?id=198629
Summary
Web Inspector: longhand CSS properties overridden by shorthands miss striketh...
Nikita Vasilyev
Reported
2019-06-06 16:21:50 PDT
Example: border-color: red; border: 1px solid green; The 1st property should be displayed as overridden and have a strikethrough. <
rdar://problem/45341525
>
Attachments
Patch
(12.67 KB, patch)
2019-06-06 16:38 PDT
,
Nikita Vasilyev
no flags
Details
Formatted Diff
Diff
Patch
(14.53 KB, patch)
2019-06-07 15:00 PDT
,
Nikita Vasilyev
hi
: review+
hi
: commit-queue-
Details
Formatted Diff
Diff
Patch
(15.74 KB, patch)
2019-06-07 15:37 PDT
,
Nikita Vasilyev
no flags
Details
Formatted Diff
Diff
Show Obsolete
(2)
View All
Add attachment
proposed patch, testcase, etc.
Radar WebKit Bug Importer
Comment 1
2019-06-06 16:22:02 PDT
<
rdar://problem/51504160
>
Nikita Vasilyev
Comment 2
2019-06-06 16:38:12 PDT
Created
attachment 371536
[details]
Patch Tip for reviewers: LayoutTests/inspector/css/overridden-property.html doubles as a reduction page. You can open it in an old Safari to see how it worked before, and in ToT WebKit with the patch applied to see what changed.
EWS Watchlist
Comment 3
2019-06-06 16:40:43 PDT
Attachment 371536
[details]
did not pass style-queue: ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312: Line contains single-quote character. [js/syntax] [5] Total errors found: 1 in 6 files If any of these errors are false positives, please file a bug against check-webkit-style.
Nikita Vasilyev
Comment 4
2019-06-06 16:43:25 PDT
(In reply to Build Bot from
comment #3
)
>
Attachment 371536
[details]
did not pass style-queue: > > > ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312: Line > contains single-quote character. [js/syntax] [5] > Total errors found: 1 in 6 files > > > If any of these errors are false positives, please file a bug against > check-webkit-style.
`Property "${this.formattedText}" can't override itself.` ^ It didn't like this single-quote :/
Devin Rousso
Comment 5
2019-06-06 17:18:39 PDT
Comment on
attachment 371536
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=371536&action=review
As a side note, I'd expect a shorthand property to be overridden if ALL of its shorthands are present and override this property, but that's probably going to be more work, so it may deserve its own followup.
> LayoutTests/inspector/css/overridden-property-expected.txt:13 > +border-top-color: red; overridden
These results really need a `PASS` somewhere, as otherwise it's really hard to tell if it's working as expected.
> LayoutTests/inspector/css/overridden-property.html:10 > + if (property.implicit)
Should this instead be an `InspectorTest.assert`? I'd expect that `matchedRule.style.enabledProperties` shouldn't contain any implicit properties.
> LayoutTests/inspector/css/overridden-property.html:47 > + if (rule.selectorText === selector) {
Why not use `WI.DOMNodeStyles.prototype.rulesForSelector`? Although, it doesn't appear to be used anywhere, so you could also just remove it :P
> LayoutTests/inspector/css/overridden-property.html:54 > + InspectorTest.log(`Couldn't find ${selector}`);
This should be an `InspectorTest.fail`.
> LayoutTests/inspector/css/overridden-property.html:113 > + name: "NotOverriddenByLonghandImportant",
We also have a `NotOverriddeenByLonghand` for more test coverage/completeness.
> LayoutTests/inspector/css/overridden-property.html:-71 > - <p>Test that CSSProperty.prototype.overridden is cleared when the overriding (effective) property is removed.</p>
There should always be a description in the test that explains overall what the test is for.
> LayoutTests/inspector/css/overridden-property.html:134 > + .shorthand-important {
These names aren't very clear. If anything i'd expect this to be `.shorthand-overridden-by-important-longhand`.
> LayoutTests/inspector/css/overridden-property.html:139 > + .longhand-important {
Ditto (>134), but with `.longhand-overridden-by-important-shorthand` instead.
> Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:302 > + console.assert(this !== effectiveProperty, `Property "${this.formattedText}" can't override itself.`);
NIT: I'd also log `this` as another argument so that if inspector2 is already open, we can do more investigation immediately.
> Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:862 > + else {
Style: no `else` when the `if` is an early-return.
> Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:907 > + if (isOverriddenBy(property, property.relatedShorthandProperty)) {
To prevent future foot-guns, I think we should rename this function to be `isOverriddenByRelatedShorthand` and have the logic for fetching `property.relatedShorthandProperty` be inside the function itself. The reason for this is that we don't want to mark a shorthand property as overridden if only one of it's longhands exists (see >overridden-property.html:140).
Devin Rousso
Comment 6
2019-06-06 17:19:27 PDT
(In reply to Nikita Vasilyev from
comment #4
)
> (In reply to Build Bot from
comment #3
) > >
Attachment 371536
[details]
did not pass style-queue: > > > > > > ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312: Line contains single-quote character. [js/syntax] [5] > > Total errors found: 1 in 6 files > > > > > > If any of these errors are false positives, please file a bug against check-webkit-style. > > `Property "${this.formattedText}" can't override itself.` > ^ > It didn't like this single-quote :/
This is definitely a bug :( Please file a bug against check-webkit-style.
Matt Baker
Comment 7
2019-06-06 19:40:54 PDT
(In reply to Devin Rousso from
comment #6
)
> (In reply to Nikita Vasilyev from
comment #4
) > > (In reply to Build Bot from
comment #3
) > > >
Attachment 371536
[details]
did not pass style-queue: > > > > > > > > > ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312: Line contains single-quote character. [js/syntax] [5] > > > Total errors found: 1 in 6 files > > > > > > > > > If any of these errors are false positives, please file a bug against check-webkit-style. > > > > `Property "${this.formattedText}" can't override itself.` > > ^ > > It didn't like this single-quote :/ > This is definitely a bug :( > > Please file a bug against check-webkit-style.
I filed a related style checker bug a while back: <
https://webkit.org/b/165453
> check-webkit-style: false positive caused by regex literal matching in SingleQuoteChecker
Nikita Vasilyev
Comment 8
2019-06-07 11:36:41 PDT
Comment on
attachment 371536
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=371536&action=review
Thanks for reviewing!
>> LayoutTests/inspector/css/overridden-property-expected.txt:13 >> +border-top-color: red; overridden > > These results really need a `PASS` somewhere, as otherwise it's really hard to tell if it's working as expected.
Where would you put a "PASS"? It seems to me that as long as the actual text matches the expected text, it's a pass. Having "PASS" logged and also having mismatched expected/actual text would only make it confusing.
>> LayoutTests/inspector/css/overridden-property.html:10 >> + if (property.implicit) > > Should this instead be an `InspectorTest.assert`? I'd expect that `matchedRule.style.enabledProperties` shouldn't contain any implicit properties.
No, matchedRule.style.enabledProperties does contain implicit properties. `visibleProperties` does NOT. I could use either, I don't have a preference.
Devin Rousso
Comment 9
2019-06-07 11:40:27 PDT
Comment on
attachment 371536
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=371536&action=review
>>> LayoutTests/inspector/css/overridden-property-expected.txt:13 >>> +border-top-color: red; overridden >> >> These results really need a `PASS` somewhere, as otherwise it's really hard to tell if it's working as expected. > > Where would you put a "PASS"? > > It seems to me that as long as the actual text matches the expected text, it's a pass. Having "PASS" logged and also having mismatched expected/actual text would only make it confusing.
I mean using the `InspectorText.expect*` functions. It would show as a PASS if they match, and a FAIL if not. I had to read the expected file a few times before I understood what it was trying to tell me. The point of the PASS is to make it clear to _other_ people what they should be looking for. Sometimes, dumping the raw text makes sense. I don't think that's the case here because it's not obvious what the "overridden" means since the rest of the text is real CSS.
Matt Baker
Comment 10
2019-06-07 12:55:37 PDT
(In reply to Devin Rousso from
comment #9
)
> Comment on
attachment 371536
[details]
> Patch > > View in context: >
https://bugs.webkit.org/attachment.cgi?id=371536&action=review
> > >>> LayoutTests/inspector/css/overridden-property-expected.txt:13 > >>> +border-top-color: red; overridden > >> > >> These results really need a `PASS` somewhere, as otherwise it's really hard to tell if it's working as expected. > > > > Where would you put a "PASS"? > > > > It seems to me that as long as the actual text matches the expected text, it's a pass. Having "PASS" logged and also having mismatched expected/actual text would only make it confusing. > > I mean using the `InspectorText.expect*` functions. It would show as a PASS > if they match, and a FAIL if not. I had to read the expected file a few > times before I understood what it was trying to tell me.
Some tests are less straightforward to express in the form "actual vs. expected". Many of our tests log stack traces or other state, and just compare it against future logs. In general these are more difficult to read and understand, and rely on the author ensuring the initial output is correct. Tests of the form "actual vs. expected" are a bit better in both regards, IMO.
> The point of the PASS is to make it clear to _other_ people what they should > be looking for. Sometimes, dumping the raw text makes sense. I don't think > that's the case here because it's not obvious what the "overridden" means > since the rest of the text is real CSS.
Matt Baker
Comment 11
2019-06-07 13:29:51 PDT
Comment on
attachment 371536
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=371536&action=review
>> LayoutTests/inspector/css/overridden-property.html:54 >> + InspectorTest.log(`Couldn't find ${selector}`); > > This should be an `InspectorTest.fail`.
Whatever you do, you should resolve/reject the promise or call InspectorTest.completeTest, so that the test doesn't time out.
Nikita Vasilyev
Comment 12
2019-06-07 15:00:55 PDT
Created
attachment 371613
[details]
Patch
EWS Watchlist
Comment 13
2019-06-07 15:04:18 PDT
Attachment 371613
[details]
did not pass style-queue: ERROR: Source/WebInspectorUI/UserInterface/Models/CSSProperty.js:312: Line contains single-quote character. [js/syntax] [5] Total errors found: 1 in 6 files If any of these errors are false positives, please file a bug against check-webkit-style.
Devin Rousso
Comment 14
2019-06-07 15:11:29 PDT
Comment on
attachment 371613
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=371613&action=review
r=me, with some final fixes before landing.
> LayoutTests/inspector/css/overridden-property-expected.txt:15 > +PASS: border-top-color is overridden.
Nice! This is MUCH easier to read/understand.
> LayoutTests/inspector/css/overridden-property.html:38 > + function getStyleDeclaration(selector, callback, resolve) {
Now that you're passing a `callback`, I'd replace the `resolve` with a `reject`, as we really should be throwing an error if we couldn't find the selector.
> LayoutTests/inspector/css/overridden-property.html:92 > + name: "OverriddenByShorthand",
Style: please prefix the test case name with the suite name, so "OverriddenProperty.OverriddenByShorthand".
> LayoutTests/inspector/css/overridden-property.html:95 > + InspectorTest.expectTrue(style.visibleProperties[0].overridden, "border-top-color is overridden.");
We should be using `propertyForName` instead of expecting that it's the first visible property. ``` const dontCreateIfMissing = true; let borderTopColorProperty = style.propertyForName("border-top-color", dontCreateIfMissing); ``` Alternatively, adding an `InspectorTest.assert(style.visibleProperties[0].name === "border-top-color");` would be fine too.
> LayoutTests/inspector/css/overridden-property.html:120 > + });
Shouldn't you also pass `reject` in here?
> LayoutTests/inspector/css/overridden-property.html:131 > + });
Ditto (>120).
> LayoutTests/inspector/css/overridden-property.html:146 > + .shorthand {
A better name could be used here, like `.longhand-overridden-by-shorthand`.
> LayoutTests/inspector/css/overridden-property.html:161 > + .shorthand-not-overridden-longhand {
NIT: this is missing a `-by-`, so `.shorthand-not-overridden-by-longhand`.
> LayoutTests/inspector/css/overridden-property.html:170 > + <div class="shorthand-overridden-by-important-longhand"></div> > + <div class="shorthand-overridden-by-important-longhand"></div>
Duplicate. Please remove (or explain why it's still needed).
Nikita Vasilyev
Comment 15
2019-06-07 15:37:04 PDT
Created
attachment 371618
[details]
Patch
WebKit Commit Bot
Comment 16
2019-06-07 16:18:46 PDT
Comment on
attachment 371618
[details]
Patch Clearing flags on attachment: 371618 Committed
r246223
: <
https://trac.webkit.org/changeset/246223
>
WebKit Commit Bot
Comment 17
2019-06-07 16:18:47 PDT
All reviewed patches have been landed. Closing bug.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug